2-4控制转移类指令与位操作指令(1)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令
④JMP @A+DPTR ;间接转移指令 类似于查表指令"MOVC A,@A+DPTR",指令将由"基址"(DPTR的内容)加 类似于查表指令"MOVC A,@A+DPTR",指令将由"基址"(DPTR的内容) "(DPTR的内容 偏移量"(A的内容)后的地址作为程序转移的地址。 "(A的内容 上"偏移量"(A的内容)后的地址作为程序转移的地址。 例如: ;传递表头(基址,或者说第一条分支地址) 例如:MOV DPTR,#TAB ;将要执行分支的序号传递给A MOV A,R0 MOV B,#2 ;因为AJMP为双字节指令,因此偏移量必须是2的倍数 MUL AB ;转移 JMP A,@A+DPTR ;分支0 TAB: AJMP S0 ;分支1 AJMP S1 ;分支2 AJMP S2 … 思考:如果分支0、1、2…所用的指令改为LJMP,则“MOV B,#2”应 B,#2”
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令
例如: 例如:MOV A,#0 A,#0,LAB1 CJNE A,#0,LAB1 MOV R0,#0 AJMP LAB2 LAB1: MOV R0,#0FFH LAB2: AJMP $ 其余三条指令类似,不再举例。 其余三条指令类似,不再举例。 ③循环转移指令 ;(Rn)←(Rn)(Rn)≠0则转移, ≠0则转移 DJNZ Rn,rel ;(Rn)←(Rn)-1,若(Rn)≠0则转移,否则顺序执行 DJNZ direct,rel ;(direct)←(direct)-1,若(Rn)≠0则转移,否 ;(direct)←(direct)(Rn)≠0则转移, ≠0则转移 则 ;顺序执行
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令
③例如:;主程序 例如: MOV P1,#0 ACALL DELAY MOV P1,#0FFH AJMP $ 子程序, ;子程序,实现延时功能 DELAY: MOV R0,#0FFH LOOP1: MOV R1,#0FFH DJNZ R1,$ DJNZ R0,LOOP1 RET
2011-11-12
任务2 任务2-4 控制转移类指令与位操来自百度文库指令
3、任务解析 与上次课流水灯实现方式不同, 与上次课流水灯实现方式不同, 流水灯反复运行, 流水灯反复运行,因此只需使 用无条件转移指令"AJMP 用无条件转移指令" address11"指令即可 指令即可; address11"指令即可;但本次 任务, 任务,对反复执行的次数有了 限定, 限定,因此这里必须使用相对 较复杂的条件转移指令"DJNZ 较复杂的条件转移指令"DJNZ direct(或者Rn),rel"。 direct(或者Rn),rel"。 或者Rn),rel" (1)硬件电路
任务2-4 控制转移类指令与位操作指令(1)
任务2 任务2-4 控制转移类指令与位操作指令
子任务2 单灯闪烁5 子任务2-4-1 单灯闪烁5次 1、任务要求:用单片机控制一个LED灯的亮灭,反复五次后保持常 任务要求:用单片机控制一个LED灯的亮灭, LED灯的亮灭 亮状态。 亮状态。 相关知识: 2、相关知识: 1)转移类指令 1)转移类指令 到上一次课为止,我们所学的单片机指令都是顺序执行指令, 到上一次课为止,我们所学的单片机指令都是顺序执行指令,也就是 说,之前我们编制的所有单片机汇编程序都是按照先后顺序一条一条 地逐行执行的。今天我们要给大家介绍转移类指令,有了转移类指令, 地逐行执行的。今天我们要给大家介绍转移类指令,有了转移类指令, 单片机执行程序时,就可以在该类指令的作用下, 单片机执行程序时,就可以在该类指令的作用下,根据我们的需要使 程序执行到某一行指令时跳至其他行。 程序执行到某一行指令时跳至其他行。 (1)无条件转移类指令 该类指令肯定会使单片机发生跳转, 该类指令肯定会使单片机发生跳转,不需要任何条件 ①AJMP addr11 ;短转移类指令 ②LJMP addr16 ;长转移类指令 ③SJMP rel ;相对转移类指令
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令 ;延时子程序 DELAY:MOV R1,#0FFH LOOP1:MOV R2,#0FFH DJNZ R2,$ DJNZ R1,LOOP1 RET ;结束 END
(2)软件程序 ORG 0000H ;主程序 MOV 30H,#5 LOOP:MOV P2,#01H ACALL DELAY MOV P2,#0 ACALL DELAY DJNZ 30H,LOOP MOV P2,#01H AJMP $
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令 (3)调用与返回指令 (3)调用与返回指令 回忆C语言编写程序时,对于反复使用的模块,为了让程序更简洁, 回忆C语言编写程序时,对于反复使用的模块,为了让程序更简洁, 我们往往将其编制为函数,在需要使用的时候进行调用。 我们往往将其编制为函数,在需要使用的时候进行调用。汇编语言中 也有类似功能,对于反复使用的模块,我们可以将其编制为子程序, 也有类似功能,对于反复使用的模块,我们可以将其编制为子程序, 在需要使用的时候进行调用。 在需要使用的时候进行调用。 ①调用指令 LCALL ;长调用指令 ACALL ;短调用指令 ②返回指令 RET ;返回指令
思考:若要求将上次课我们 实现的单向流水灯改为双向 流水灯(即来回跑动),该 如何修改程序?
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令
作业: 作业: 设初始(30H)=FEH 执行下面程序段后, (30H)=FEH, (1)设初始(30H)=FEH,执行下面程序段后,(30H)=? MOV 30H,#0FEH MOV 31H,#5H MOV A,30H LOOP:RR A DJNZ 31H,LOOP MOV 30H,A 设初始(A)=37D (30H)=23D,执行下面程序段后, (A)=37D, (2)设初始(A)=37D,(30H)=23D,执行下面程序段后,(A)=? LOOP:DEC A INC 30H CJNE A,30H,LOOP MOV R0,A
2011-11-12
结束! 结束!
该如何修改?
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令 (2)条件转移类指令 判断A内容是否为0 ①判断A内容是否为0转移指令 (A)=0,则转移,否则顺序执行; JZ rel ;若(A)=0,则转移,否则顺序执行; JNZ rel ;若(A)≠0,则转移,否则顺序执行; (A)≠ 则转移,否则顺序执行; 例如: 例如:MOV A,#0 MOV R0,#0 JZ LAB2 LAB1: MOV R0,#0FFH LAB2: AJMP $ JNZ类似 不再举例。 类似, JNZ类似,不再举例。 比较转移指令(会影响到C 在此不作展开) ②比较转移指令(会影响到C位,在此不作展开) (A)=data,则顺序执行, CJNE A,#data,rel ;若(A)=data,则顺序执行,否则转移 (A)=(direct),则顺序执行, CJNE A,direct,rel ;若(A)=(direct),则顺序执行,否则转移 CJNE Rn,#data,rel ;若(Rn)=data,则顺序执行,否则转移 (Rn)=data,则顺序执行, ((Ri))=data,,则顺序执行, ,,则顺序执行 CJNE @Ri,#data,rel ;若((Ri))=data,,则顺序执行,否则转移
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令
区别: 区别: ①AJMP指令能转移的范围只能在2KB范围之内(0000H~07FFH、0800H~0FFFH…),双 AJMP指令能转移的范围只能在2KB范围之内(0000H~07FFH、0800H~0FFFH…),双 指令能转移的范围只能在2KB范围之内 字节指令; 字节指令; LJMP指令能转移的范围能达到64KB(0000H~FFFFH) 即整个程序存储器寻址空间, 指令能转移的范围能达到64KB(0000H~FFFFH), ②LJMP指令能转移的范围能达到64KB(0000H~FFFFH),即整个程序存储器寻址空间, 三字节指令; 三字节指令; SJMP指令能转移的范围只有256B(以当前地址为基点, 128~+127),双字节指令。 指令能转移的范围只有256B ),双字节指令 ③SJMP指令能转移的范围只有256B(以当前地址为基点,-128~+127),双字节指令。 例如: 例如: ① AJMP LAB MOV P2,#01H LAB:MOV P2,#03H ② LJMP LAB MOV P2,#01H LAB:MOV P2,#03H ③ SJMP LAB MOV P2,#01H LAB:MOV P2,#03H
任务2 任务2-4 控制转移类指令与位操作指令
④JMP @A+DPTR ;间接转移指令 类似于查表指令"MOVC A,@A+DPTR",指令将由"基址"(DPTR的内容)加 类似于查表指令"MOVC A,@A+DPTR",指令将由"基址"(DPTR的内容) "(DPTR的内容 偏移量"(A的内容)后的地址作为程序转移的地址。 "(A的内容 上"偏移量"(A的内容)后的地址作为程序转移的地址。 例如: ;传递表头(基址,或者说第一条分支地址) 例如:MOV DPTR,#TAB ;将要执行分支的序号传递给A MOV A,R0 MOV B,#2 ;因为AJMP为双字节指令,因此偏移量必须是2的倍数 MUL AB ;转移 JMP A,@A+DPTR ;分支0 TAB: AJMP S0 ;分支1 AJMP S1 ;分支2 AJMP S2 … 思考:如果分支0、1、2…所用的指令改为LJMP,则“MOV B,#2”应 B,#2”
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令
例如: 例如:MOV A,#0 A,#0,LAB1 CJNE A,#0,LAB1 MOV R0,#0 AJMP LAB2 LAB1: MOV R0,#0FFH LAB2: AJMP $ 其余三条指令类似,不再举例。 其余三条指令类似,不再举例。 ③循环转移指令 ;(Rn)←(Rn)(Rn)≠0则转移, ≠0则转移 DJNZ Rn,rel ;(Rn)←(Rn)-1,若(Rn)≠0则转移,否则顺序执行 DJNZ direct,rel ;(direct)←(direct)-1,若(Rn)≠0则转移,否 ;(direct)←(direct)(Rn)≠0则转移, ≠0则转移 则 ;顺序执行
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令
③例如:;主程序 例如: MOV P1,#0 ACALL DELAY MOV P1,#0FFH AJMP $ 子程序, ;子程序,实现延时功能 DELAY: MOV R0,#0FFH LOOP1: MOV R1,#0FFH DJNZ R1,$ DJNZ R0,LOOP1 RET
2011-11-12
任务2 任务2-4 控制转移类指令与位操来自百度文库指令
3、任务解析 与上次课流水灯实现方式不同, 与上次课流水灯实现方式不同, 流水灯反复运行, 流水灯反复运行,因此只需使 用无条件转移指令"AJMP 用无条件转移指令" address11"指令即可 指令即可; address11"指令即可;但本次 任务, 任务,对反复执行的次数有了 限定, 限定,因此这里必须使用相对 较复杂的条件转移指令"DJNZ 较复杂的条件转移指令"DJNZ direct(或者Rn),rel"。 direct(或者Rn),rel"。 或者Rn),rel" (1)硬件电路
任务2-4 控制转移类指令与位操作指令(1)
任务2 任务2-4 控制转移类指令与位操作指令
子任务2 单灯闪烁5 子任务2-4-1 单灯闪烁5次 1、任务要求:用单片机控制一个LED灯的亮灭,反复五次后保持常 任务要求:用单片机控制一个LED灯的亮灭, LED灯的亮灭 亮状态。 亮状态。 相关知识: 2、相关知识: 1)转移类指令 1)转移类指令 到上一次课为止,我们所学的单片机指令都是顺序执行指令, 到上一次课为止,我们所学的单片机指令都是顺序执行指令,也就是 说,之前我们编制的所有单片机汇编程序都是按照先后顺序一条一条 地逐行执行的。今天我们要给大家介绍转移类指令,有了转移类指令, 地逐行执行的。今天我们要给大家介绍转移类指令,有了转移类指令, 单片机执行程序时,就可以在该类指令的作用下, 单片机执行程序时,就可以在该类指令的作用下,根据我们的需要使 程序执行到某一行指令时跳至其他行。 程序执行到某一行指令时跳至其他行。 (1)无条件转移类指令 该类指令肯定会使单片机发生跳转, 该类指令肯定会使单片机发生跳转,不需要任何条件 ①AJMP addr11 ;短转移类指令 ②LJMP addr16 ;长转移类指令 ③SJMP rel ;相对转移类指令
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令 ;延时子程序 DELAY:MOV R1,#0FFH LOOP1:MOV R2,#0FFH DJNZ R2,$ DJNZ R1,LOOP1 RET ;结束 END
(2)软件程序 ORG 0000H ;主程序 MOV 30H,#5 LOOP:MOV P2,#01H ACALL DELAY MOV P2,#0 ACALL DELAY DJNZ 30H,LOOP MOV P2,#01H AJMP $
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令 (3)调用与返回指令 (3)调用与返回指令 回忆C语言编写程序时,对于反复使用的模块,为了让程序更简洁, 回忆C语言编写程序时,对于反复使用的模块,为了让程序更简洁, 我们往往将其编制为函数,在需要使用的时候进行调用。 我们往往将其编制为函数,在需要使用的时候进行调用。汇编语言中 也有类似功能,对于反复使用的模块,我们可以将其编制为子程序, 也有类似功能,对于反复使用的模块,我们可以将其编制为子程序, 在需要使用的时候进行调用。 在需要使用的时候进行调用。 ①调用指令 LCALL ;长调用指令 ACALL ;短调用指令 ②返回指令 RET ;返回指令
思考:若要求将上次课我们 实现的单向流水灯改为双向 流水灯(即来回跑动),该 如何修改程序?
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令
作业: 作业: 设初始(30H)=FEH 执行下面程序段后, (30H)=FEH, (1)设初始(30H)=FEH,执行下面程序段后,(30H)=? MOV 30H,#0FEH MOV 31H,#5H MOV A,30H LOOP:RR A DJNZ 31H,LOOP MOV 30H,A 设初始(A)=37D (30H)=23D,执行下面程序段后, (A)=37D, (2)设初始(A)=37D,(30H)=23D,执行下面程序段后,(A)=? LOOP:DEC A INC 30H CJNE A,30H,LOOP MOV R0,A
2011-11-12
结束! 结束!
该如何修改?
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令 (2)条件转移类指令 判断A内容是否为0 ①判断A内容是否为0转移指令 (A)=0,则转移,否则顺序执行; JZ rel ;若(A)=0,则转移,否则顺序执行; JNZ rel ;若(A)≠0,则转移,否则顺序执行; (A)≠ 则转移,否则顺序执行; 例如: 例如:MOV A,#0 MOV R0,#0 JZ LAB2 LAB1: MOV R0,#0FFH LAB2: AJMP $ JNZ类似 不再举例。 类似, JNZ类似,不再举例。 比较转移指令(会影响到C 在此不作展开) ②比较转移指令(会影响到C位,在此不作展开) (A)=data,则顺序执行, CJNE A,#data,rel ;若(A)=data,则顺序执行,否则转移 (A)=(direct),则顺序执行, CJNE A,direct,rel ;若(A)=(direct),则顺序执行,否则转移 CJNE Rn,#data,rel ;若(Rn)=data,则顺序执行,否则转移 (Rn)=data,则顺序执行, ((Ri))=data,,则顺序执行, ,,则顺序执行 CJNE @Ri,#data,rel ;若((Ri))=data,,则顺序执行,否则转移
2011-11-12
任务2 任务2-4 控制转移类指令与位操作指令
区别: 区别: ①AJMP指令能转移的范围只能在2KB范围之内(0000H~07FFH、0800H~0FFFH…),双 AJMP指令能转移的范围只能在2KB范围之内(0000H~07FFH、0800H~0FFFH…),双 指令能转移的范围只能在2KB范围之内 字节指令; 字节指令; LJMP指令能转移的范围能达到64KB(0000H~FFFFH) 即整个程序存储器寻址空间, 指令能转移的范围能达到64KB(0000H~FFFFH), ②LJMP指令能转移的范围能达到64KB(0000H~FFFFH),即整个程序存储器寻址空间, 三字节指令; 三字节指令; SJMP指令能转移的范围只有256B(以当前地址为基点, 128~+127),双字节指令。 指令能转移的范围只有256B ),双字节指令 ③SJMP指令能转移的范围只有256B(以当前地址为基点,-128~+127),双字节指令。 例如: 例如: ① AJMP LAB MOV P2,#01H LAB:MOV P2,#03H ② LJMP LAB MOV P2,#01H LAB:MOV P2,#03H ③ SJMP LAB MOV P2,#01H LAB:MOV P2,#03H