
授课日期 班次 授课时数2 课题: 任务五:按键控制灯 教学目的:掌握MCS-51的控制转移指令 掌握控制转移指令的应用 重点: 控制转移指令的格式 难点: 控制转移指令的格式与应用 教具: 多媒体、实验开发板 作业: 3.243.29(3) 自用参考书:《单片机应用技术》】 耿长清主编、《单片机应用技术》刘守义主编 教学过程: 一、复习提问 1.MCS-51有哪些逻辑运算指令? 2.算术逻辑运算结果的状态如何确定? 二、新授 由任务五:脉冲计数器引入本次课内容 1.硬件电路与工作原理 2.程序设计 包括计数、显示、软件延时、查表 3.相关知识 1)MCS-51有哪些控制转移指令? 2)控制转移指令应用举例 4课堂小结 课后小结:
授课日期 班次 授课时数 2 课题: 任务五:按键控制灯 教学目的:掌握MCS-51的控制转移指令 掌握控制转移指令的应用 重点: 控制转移指令的格式 难点: 控制转移指令的格式与应用 教具: 多媒体、实验开发板 作业: 3.24 3.29(3) 自用参考书:《单片机应用技术》耿长清主编、《单片机应用技术》刘守义主编 教学过程: 一、复习提问 1. MCS-51有哪些逻辑运算指令? 2.算术逻辑运算结果的状态如何确定? 二、新授 由任务五:脉冲计数器引入本次课内容 1. 硬件电路与工作原理 2. 程序设计 包括计数、显示、软件延时、查表 3. 相关知识 1) MCS-51有哪些控制转移指令? 2)控制转移指令应用举例 4.课堂小结 课后小结:

3.4任务五 按键控制灯 任务描述:用$1~S4组成的键盘分别控制P,口发光二极管发光,按住S1 键红色发光二极管(假定为P1.0)亮,按住S2键黄色发光二极(P1.1) 管亮,按住S3键绿色发光二极管(假定为P1.2)亮。S4用于控制三组灯 之间的切换。 3.4,1硬件电路与工作原理 P10 U3 P00 D RI R2 D P17 吧 D3 92 D4 R4 0 S4 15 Q S3 T31 国P D6 R6 XAL 11.0592M 19 1 是 9 R四T RXD 17 16 D PSEN 29
3.4 任务五 按键控制灯 3.4.1 硬件电路与工作原理 任务描述:用S1~S4组成的键盘分别控制P1口发光二极管发光,按住S1 键红色发光二极管(假定为P1.0)亮,按住S2键黄色发光二极(P1.1) 管亮,按住S3键绿色发光二极管(假定为P1.2)亮。S4 用于控制三组灯 之间的切换

3.4任务五按键控制内 3.4.2控制程序 ORG 0000H PDO: LCALL DELAY LJMP MAIN DJNZ R1,PDO ORG 0030H MOV A,P3 MAIN:ORL P3,#3CH CJNE A,RO,DODO MOV A,P3 K_S1:JB P3.2,KS2 ANL A,#3CH LJMP KEY 1 MOV RO,A K_S2:JB P3.3,KS3 CJNE A,#3CH,MAIN1 LJMP KEY 2 SJMP MAIN K_S3:JB P3.4,KS4 MAIN1:MOV R1,#10 LJMP KEY_3
3.4 任务五 按键控制灯 3.4.2 控制程序 ORG 0000H LJMP MAIN ORG 0030H MAIN:ORL P3,#3CH MOV A,P3 ANL A,#3CH MOV R0,A CJNE A,#3CH,MAIN1 SJMP MAIN MAIN1:MOV R1,#10 PDO: LCALL DELAY DJNZ R1,PDO MOV A,P3 CJNE A,R0,DODO K_S1: JB P3.2,K_S2 LJMP KEY_1 K_S2: JB P3.3,K_S3 LJMP KEY_2 K_S3: JB P3.4,K_S4 LJMP KEY_3

3.4任务五按键控制内 3.4.2控制程序 K S4: JB P3.5,D0D0 SPK2: M0VR2,#50H LJMP KEY 4 SPK1: CPL P3.2 D0D0: SJMP MAIN LCALL DELAY DJNZ R2,SPK1 KEY 1: MOV P1,#OFDH DJNZ R1,SPK2 SJMP MAIN SJMP MAIN KEY 2: MOV P1,#0FBH DELAY:MOV R3,#10 SJMP MAIN DEL: M0VR4,#50 KEY 3:MOV P1,#OFEH DJNZ R4, SJMP MAIN DJNZ R3,DEL KEY 4:MOV R1,#10 END
3.4 任务五 按键控制灯 3.4.2 控制程序 SPK2: MOV R2,#50H SPK1: CPL P3.2 LCALL DELAY DJNZ R2,SPK1 DJNZ R1,SPK2 SJMP MAIN DELAY: MOV R3,#10 DEL: MOV R4,#50 DJNZ R4,$ DJNZ R3,DEL END K_S4: JB P3.5,DODO LJMP KEY_4 DODO: SJMP MAIN KEY_1: MOV P1,#0FDH SJMP MAIN KEY_2: MOV P1,#0FBH SJMP MAIN KEY_3: MOV P1,#0FEH SJMP MAIN KEY_4: MOV R1,#10

3.4任务五 按键控制灯 34.3源程序的编辑、编译、下载 打开“伟福”模拟仿真软件进行程序的编辑、编译。 1、正确选择单片机类型8751或8031 2、正确选择编译器一伟福编译器 3、选择模拟仿真功能 4、打开或新建文件进行编辑 5、编译 打开“ISP下载软件”将目标文件下载到ISP-4实验开发板上的 AT89S51单片机芯片,观察程序运行结果。 1、编译成功后打开下载软件 2、选择好单片机89S51并测试 3、打开伟福6000编译生成的.BN或.HEX文件 4、选择自动写完成擦除、写、读、校验过程 5、观看运行结果
3.4 任务五 按键控制灯 3.4.3 源程序的编辑、编译、下载 打开“伟福”模拟仿真软件进行程序的编辑、编译。 1、正确选择单片机类型8751或8031 2、正确选择编译器-伟福编译器 3、选择模拟仿真功能 4、打开或新建文件进行编辑 5、编译 打开“ISP下载软件”将目标文件下载到ISP-4实验开发板上的 AT89S51单片机芯片,观察程序运行结果。 1、编译成功后打开下载软件 2、选择好单片机89S51并测试 3、打开伟福6000编译生成的.BIN或.HEX文件 4、选择自动写完成擦除、写、读、校验过程 5、观看运行结果

3.4任务五按键控制灯 3.4.4相关知识 1、MCS-51有哪些控制转移指令? 控制转移指令用于控制程序的流向,所控制的范围即为程序存储 器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程 序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进 行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及 其它无条件转移指令,这些指令的执行一般都不会对标志位有影响 >无条件转移指令(4条) 这组指令执行完后,程序就会无条件转移到指令所指向的地址上 去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令 访问的程序存储器空间为11位地址2kB空间
3.4 任务五 按键控制灯 3.4.4 相关知识 1、MCS-51有哪些控制转移指令? 控制转移指令用于控制程序的流向,所控制的范围即为程序存储 器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程 序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进 行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及 其它无条件转移指令,这些指令的执行一般都不会对标志位有影响 ➢无条件转移指令(4条) 这组指令执行完后,程序就会无条件转移到指令所指向的地址上 去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令 访问的程序存储器空间为11位地址2kB空间

3.4任务五 按键控制灯 3.4.4相关知识 LJMP addr16 ;addr166→(PC),给程序计数器赋予新 值(16位地址) AJMP addrl1 ;(PC)+2→(PC),addr11→(PC10-0) 程序计数器赋予新值(11位地址),(PC15-11)不改变 SJMP rel ;(PC)+2+rel→ (PC)当前程序计 数器先加上2再加上偏移量给程序计数器赋予新值 JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向 地址单元的值加上数据指针的值给程序计数器赋予新值
3.4 任务五 按键控制灯 3.4.4 相关知识 LJMP addr16 ;addr16→(PC),给程序计数器赋予新 值(16位地址) AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0) 程序计数器赋予新值(11位地址),(PC15-11)不改变 SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计 数器先加上2再加上偏移量给程序计数器赋予新值 JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向 地址单元的值加上数据指针的值给程序计数器赋予新值

3.4任务五 按键控制灯 3.4.4相关知识 >条件转移指令(8条) 程序可利用这组丰富的指令根据当前的条件进行判断,看是否满足 某种特定的条件,从而控制程序的转向。 JZ rel ;A=0,(PC)+2+rel→(PC),累加器中的内容为0, 则转移到偏移量所指向的地址,否则程序往下执行 JNZ rel ;A0,(PC)+2+rel→(PC),累加器中的内容不 为0,则转移到偏移量所指向的地址,否则程序往下执行 CJNE A,data,rel ;A≠(data),(PC)+3+rel→(PC),累加器 中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址, 否则程序往下执行 CJNE A,#data,rel;A≠#data,(PC)+3+rel→(PC),累加器中 的内容不等于立即数,则转移到偏移量所指向的地址,否则侧程序往下 执行
3.4 任务五 按键控制灯 3.4.4 相关知识 ➢条件转移指令(8条) 程序可利用这组丰富的指令根据当前的条件进行判断,看是否满足 某种特定的条件,从而控制程序的转向。 JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0, 则转移到偏移量所指向的地址,否则程序往下执行 JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不 为0,则转移到偏移量所指向的地址,否则程序往下执行 CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器 中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址, 否则程序往下执行 CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中 的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下 执行

3.4任务五 按键控制灯 3.4.4相关知识 >条件转移指令(8条) CJNE Rn,#data,rel;A≠#data,(PC)+3+rel→(PC),工作寄存 器R中的内容不等于立即数,则转移到偏移量所指向的地址,否则程 序往下执行 CNE@Ri,#data,rel;A≠#data,(PC)+3+rel→(PC),工作寄存 器R指向地址单元中的内容不等于立即数,则转移到偏移量所指向的 地址,否则程序往下执行 DJNZ Rn,rel;(Rn)-1->(Rn),(Rn)0,(PC)+2+rel-(PC) 工作寄存器R减1不等于0,则转移到偏移量所指向的地址,否则程序 往下执行 DJNZ data,rel;(Rn)-l→(Rn),(Rn)≠0,(PC)+2+rel→(PC) 直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址, 否则程序往下执行
3.4 任务五 按键控制灯 3.4.4 相关知识 ➢条件转移指令(8条) CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存 器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程 序往下执行 CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存 器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的 地址,否则程序往下执行 DJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC) 工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序 往下执行 DJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC) 直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址, 否则程序往下执行

3.4任务五 按键控制灯 3.4.4相关知识 >子程序调用指令(4条) 子程序是为了便于程序编写,需要反复执行的一些程序,我们在编 程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命 令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指 令。 LCALL addr16;长调用指令,可在64kB空间调用子程序。此时 (PC)+3→(PC),(SP)+1→(SP), (PC7-0)→(SP) (SP)+1→(SP),(PC15-8)→(SP),addr16→(PC), 即分别 从堆栈中弹出调用子程序时压入的返回地址 ACALL addr11;绝对调用指令,可在2kB空间调用子程序,此时 (PC)+2→(PC),(SP)+1→(SP),(PC7-0)→(SP) (SP)+1→(SP),(PC15-8)→(SP),addr11→(PC10-0) RET;子程序返回指令。此时(SP)→(PC15-8),(SP)-1 (SP),(SP)→(PC7-0),(SP)-1→(SP) RETI;中断返回指令,除具有RET功能外,还具有恢复中断逻辑 的功能,需注意的是,RETI指令不能用RET代替
3.4 任务五 按键控制灯 3.4.4 相关知识 ➢子程序调用指令(4条) 子程序是为了便于程序编写,需要反复执行的一些程序,我们在编 程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命 令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指 令。 LCALL addr16 ; 长调用指令,可在64kB空间调用子程序。此时 (PC)+ 3→(PC),(SP)+ 1→(SP),(PC7-0)→(SP), (SP)+ 1→(SP),(PC15-8)→(SP),addr16→(PC),即分别 从堆栈中弹出调用子程序时压入的返回地址 ACALL addr11 ; 绝对调用指令,可在2kB空间调用子程序,此时 (PC)+ 2→(PC),(SP)+ 1→(SP),(PC7-0)→(SP), (SP)+ 1→(SP),(PC15-8)→(SP),addr11→(PC10-0) RET ; 子程序返回指令。此时(SP)→(PC15-8),(SP)-1→ (SP),(SP)→(PC7-0),(SP)- 1→(SP) RETI ; 中断返回指令,除具有RET功能外,还具有恢复中断逻辑 的功能,需注意的是,RETI指令不能用RET代替