_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/7d732e7d-54fb-4e52-a92c-2517744422fe/7d732e7d-54fb-4e52-a92c-2517744422fe1.gif)
_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/7d732e7d-54fb-4e52-a92c-2517744422fe/7d732e7d-54fb-4e52-a92c-2517744422fe2.gif)
_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/7d732e7d-54fb-4e52-a92c-2517744422fe/7d732e7d-54fb-4e52-a92c-2517744422fe3.gif)
_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/7d732e7d-54fb-4e52-a92c-2517744422fe/7d732e7d-54fb-4e52-a92c-2517744422fe4.gif)
_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/7d732e7d-54fb-4e52-a92c-2517744422fe/7d732e7d-54fb-4e52-a92c-2517744422fe5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、包括以下类型:包括以下类型:无条件转移和条件转移无条件转移和条件转移相对转移和绝对转移相对转移和绝对转移长转移和短转移长转移和短转移调用与返回指令调用与返回指令重点、难点:重点、难点:“JMP、CJNE、DJNZ”指令。指令。1.无条件转移指令无条件转移指令 短转移类指令:短转移类指令: AJMP addr11 AJMP addr11 程序转移范围:程序转移范围:2 2KBKB的程序存储器地址空间的程序存储器地址空间。 2 2字节指令字节指令 可用标号表示可用标号表示例:例: AJMP LOOP AJMP LOOP LOOPLOOP:MOV AMOV A,R2R2 但是:但是: “LOOP”
2、“LOOP”不是不是“addr11(11“addr11(11位地址位地址) )值值”!l指令:指令:”AJMP addr11AJMP addr11“是是2 2字节指令字节指令 。l例:例:1030H:AJMP 0010000 0000B 问:转移的地址是多少?问:转移的地址是多少?解:解: addr11 = 001 00 00 0000 B 先先(PC)+2=1030H+2=1032H= 0001 0 000 0011 0010 B 后:后: ( PC1511 )不变,不变,PC100= 0001 0 001 00 00 0000 B=1100H 即执行该指令后,将转至地址为:即执行该指令后,
3、将转至地址为:1100H处。处。长转移指令长转移指令 LJMP addr16LJMP addr16 ;addr16addr16PCPC。 3字节指令字节指令 指令中:第二字节装入指令中:第二字节装入PCPC的高的高8 8位,第三字节装入位,第三字节装入PCPC的低的低8 8位。位。程序转移范围:程序转移范围:6464KBKB的程序存储器地址空间。的程序存储器地址空间。例:例: 1023 1023H H: LJMP 212AH LJMP 212AH(PCHPCH)=21H=21H,(,(PCLPCL)=2AH=2AH。机器码为:机器码为:02 21 202 21 2AHAH。可用标号表示可用标号
4、表示相对转移指令相对转移指令 SJMP rel SJMP rel ;先(先(PCPC)+2PC+2PC,后(后(PCPC)+rel PC+rel PC ;2字节指令字节指令 程序转移范围程序转移范围:256B。手工编程时,需计算偏移量手工编程时,需计算偏移量rel:rel机器码的相对偏移量,为机器码的相对偏移量,为8位补码。位补码。 转移范围:转移范围:-128+127字节。字节。即:即:rel为正数时,为正数时,rel的范围为:的范围为:0+127 (00H7FH)。)。 称为称为“正向跳转正向跳转”,即往,即往ROM中地址大的方向跳转。中地址大的方向跳转。 rel为负数时,为负数时,rel
5、的范围为:的范围为:-128-1(80HFFH)。)。 称为称为“反向跳转反向跳转”,即往,即往ROM中地址小的方向跳转。中地址小的方向跳转。可用标号表示可用标号表示相对转移指令相对转移指令“SJMP relSJMP rel”例如:例如: 0100H:SJMP rel设转移的地址为设转移的地址为0157H,则:则:rel=0157H-0100H-2=55H。故该指令可写成:。故该指令可写成: 0100H:SJMP 55H 其机器码为:其机器码为: 80H 55H正向跳转时:正向跳转时:rel目的地址源地址目的地址源地址-2 =地址差地址差-2。0157H反向跳转时:反向跳转时:rel目的地址源
6、地址目的地址源地址-2补补 = -2补补-|地址差地址差| =FEH-|地址差地址差|例如例如: 0100H:SJMP rel设程序转移的地址为:设程序转移的地址为:00F8H,则地址偏移量则地址偏移量rel为:为:rel=FEH - | 0100H-00F8H| =FEH-0008H =F6H。故该指令可写成:故该指令可写成: 0100H:SJMP F6H 其机器码为:其机器码为: 80H F6H00F8Hl编程时,可用编程时,可用标号标号代替转移目的地址,代替转移目的地址, rel 交给编译程序计交给编译程序计算。算。l例如:例如: SJMP NEXT NEXT: 原地踏步指令的指令原地踏
7、步指令的指令:HERE: SJMP HERE常写成:常写成: SJMP $l总结总结短转移类指令:短转移类指令:AJMP addr11AJMP addr11 长转移类指令:长转移类指令:LJMP addr16LJMP addr16 相对转移指令:相对转移指令:SJMP relSJMP rel这三条指令,可理解成:这三条指令,可理解成:PCPC值改变,即跳转到一个标号处。值改变,即跳转到一个标号处。 它们的区别:它们的区别:v跳转的范围不同(跳转的范围不同(2 2KBKB;64KB 64KB ;-128-128+127+127 )。)。v指令构成不同。指令构成不同。 AJMPAJMP、LJMPL
8、JMP后跟的是后跟的是绝对地址绝对地址, 而而SJMPSJMP后跟的是后跟的是相对地址相对地址。v指令长度不同(指令长度不同(2 2字节;字节;3 3字节;字节;2 2字节)。字节)。v 原则上,所有用原则上,所有用SJMPSJMP或或AJMPAJMP的地方都可以用的地方都可以用LJMPLJMP来替代。来替代。均可用标号表示均可用标号表示间接转移指令(散转指令)间接转移指令(散转指令)JMP A+DPTR JMP A+DPTR ;(;(A A)+ +(DPTRDPTR)PCPC。 1字节指令字节指令 使用该指令前,应先给使用该指令前,应先给DPTRDPTR赋值,赋值,A A中的内容为无符号数。
9、中的内容为无符号数。转移范围转移范围:256B.:256B.该指令多用于多分支程序结构中。该指令多用于多分支程序结构中。 P72. P72.例例3-113-11 根据累加器根据累加器A A中命令键的键值,设计命令健操作中命令键的键值,设计命令健操作程序入口跳转表。程序入口跳转表。例如:当(例如:当(A A)=2=2时,程序跳转到标号为时,程序跳转到标号为“XX2”2”的程序中。的程序中。l程序计数器程序计数器PCPC是是16位的寄存器。位的寄存器。PC变化的轨迹(即其地址的改变)变化的轨迹(即其地址的改变)决定程序的流向,决定程序的流向,PC的宽度(即地址值的位数)决定了程序存储器的宽度(即地
10、址值的位数)决定了程序存储器可以寻址的范围。可以寻址的范围。lPCPC的基本工作方式有:的基本工作方式有:1、PC自动加自动加1。这是最基本的工作方式,也就是这个专用寄存器被称为。这是最基本的工作方式,也就是这个专用寄存器被称为计数器的原因;计数器的原因;2、执行条件或无条件指令(第、执行条件或无条件指令(第3章章P72-P77,P83)时,)时,PC将被置入新将被置入新的数值(地址),程序的流向发生变化。变化的方式有:的数值(地址),程序的流向发生变化。变化的方式有:1)带符号的相对转移指令)带符号的相对转移指令“SJMP”;2)短跳转指令)短跳转指令“AJMP”,长跳转指令,长跳转指令 “
11、LJMP”;3)散转指令)散转指令“JMP A+DPTR”;3、在执行调用指令(第、在执行调用指令(第3章章P79)或响应中断(第)或响应中断(第5章章P113)时:)时: 硬件自动将硬件自动将PC的当前值,即下一条将要执行的指令的地址被送入的当前值,即下一条将要执行的指令的地址被送入堆堆栈栈,加以保护;同时将子程序的入口地址或者中断入口矢量地址送给,加以保护;同时将子程序的入口地址或者中断入口矢量地址送给PC,程序流向发生改变,程序转向去执行子程序或者中断服务程序。,程序流向发生改变,程序转向去执行子程序或者中断服务程序。当子程当子程 序或中断服务程序执行完毕,遇到子程序中的最后一条返回序或
12、中断服务程序执行完毕,遇到子程序中的最后一条返回指令指令“RET”或中断服务程序的最后一条指令或中断服务程序的最后一条指令“RETI”时,硬件自动时,硬件自动将保护在将保护在堆栈中堆栈中的内容(地址)送到的内容(地址)送到PC中,程序又返回到原来的地中,程序又返回到原来的地方继续执行。方继续执行。2. 空操作空操作 NOP ;(;(PC)+1PC。 1字节指令字节指令 3. 条件转移类指令条件转移类指令条件转移指令是指在满足一定条件转移指令是指在满足一定条件条件时进行时进行相对转移相对转移,否则程序,否则程序继续执行继续执行本指令的本指令的下一条指令。下一条指令。判判A A内容是否为内容是否为
13、0 0转移指令转移指令 JZ relJZ rel ;(PCPC)+2+2PCPC。若若A=0A=0,则转移到(则转移到(PCPC)= =(PCPC)+rel+rel; ; 否则顺序执行。否则顺序执行。 JNZ relJNZ rel ;(;(PCPC)+2PC+2PC。若若A0A0,则转移到(则转移到(PCPC)= =(PCPC)+rel+rel ; ;否则顺序执行。;否则顺序执行。在编写汇编语言源程序时,在编写汇编语言源程序时,relrel用用“标号标号”来代替。来代替。如:如: JZ JZ LD12354 LD12354以上两条指令均为:2字节指令字节指令 均可用标号表示均可用标号表示l例:
14、例: MOV AMOV A,R0R0 JZ L1JZ L1 MOV R1MOV R1,#00H#00H AJMPAJMP L2L2 L1:L1: MOV R1MOV R1,#0FFH#0FFH L2:L2: SJMPSJMP L2L2 问:如果执行程序前(问:如果执行程序前(R0R0)=0=0,执行上述程序后,(执行上述程序后,(R1R1)= =?;?;若执行若执行程序前(程序前(R0R0) 0 0,则(则(R1R1)= =?。?。解:解:如果如果(R0R0)=0=0,结果结果(R1R1)=0FFH=0FFH; 而若而若(R0R0) 0 0,则结果是则结果是(R1R1)=00H=00H。 比较
15、比较(不相等)(不相等)转移指令转移指令 CJNE CJNE (目的字节),(源字节),目的字节),(源字节),rel rel ;3 3字节指令字节指令 CJNE ACJNE A,#data#data,rel rel CJNE ACJNE A,directdirect,relrel CJNE RnCJNE Rn,#data#data,relrel CJNE RiCJNE Ri,#data#data,relrel同样地,使用时,可以将同样地,使用时,可以将relrel用用“标号标号”代替,即:代替,即:CJNE ACJNE A,#data#data, LOOPLOOPCJNE ACJNE A,d
16、irectdirect,LQ123LQ123CJNE RnCJNE Rn,#data#data,D168D168CJNE RiCJNE Ri,#data#data,RT_101RT_101 CJNE ACJNE A,#data#data,relrel ;先(先(PCPC)+3+3PCPC 若若( (A)#data,A)#data,则则( (PC)+relPC)+relPC,PC,且且0 0CYCY; 若若( (A)#data,A)(direct),A)(direct),则则( (PC)+relPC)+relPC,PC,且且0 0CYCY; 若若( (A)(direct),A) #data,Rn
17、) #data,则则( (PC)+relPC)+relPC,PC,且且0 0CYCY; 若若( (Rn) #data,Rn) #data,(Ri) #data,则则( (PC)+relPC)+relPC,PC,且且0 0CYCY; 若若( (Ri) #data,(Ri) #data,则则( (PC)+relPC)+relPC,PC,且且1 1CYCY; 若若( (Ri)= #data,(Ri)= #data,则顺序执行则顺序执行, ,且且0 0CYCY。不能写成:不能写成:CJNE A,Rn,LOOP 利用这些指令,可以判断两数是否利用这些指令,可以判断两数是否相等。相等。 但有时还想得知两数
18、比较之后但有时还想得知两数比较之后哪个大,哪个小,哪个大,哪个小,本条指令也本条指令也具有这样的功能:具有这样的功能: 如果两数不相等,则如果两数不相等,则CPUCPU还会用还会用CYCY(进位位)来反映哪个数进位位)来反映哪个数大,哪个数小。如果前面的数大,则大,哪个数小。如果前面的数大,则CY=0CY=0,否则否则CY=1CY=1。因此在程序转移后再次利用因此在程序转移后再次利用CYCY就可判断出哪个数大就可判断出哪个数大( (JCJC或或JNCJNC指指令令P83P83) ),哪个数小了。,哪个数小了。 DJNZ RnDJNZ Rn,relrel ;先先( (PC)+2PC)+2PC,(
19、Rn)-1RnPC,(Rn)-1Rn, 若若( (Rn) Rn) 0 0,则则( (PC)+relPC)+relPCPC, 若若( (Rn)=0Rn)=0,则结束循环,程序往下执行。则结束循环,程序往下执行。 DJNZ direct DJNZ direct,relrel ;先先( (PC)+3PC)+3PC,(direct)-1 direct PC,(direct)-1 direct ; 若若( (directdirect) ) 0 0,则则( (PC)+relPC)+relPCPC; 若若( (directdirect)=0)=0,则结束循环,程序往下执行。则结束循环,程序往下执行。 rel
20、rel可用可用“标号标号”代替。代替。不能写成:不能写成:DJNZ ADJNZ A,LOOPLOOP例:例: MOV 23H,#0AHMOV 23H,#0AH CLR A CLR ALOOP: ADD A,23HLOOP: ADD A,23H DJNZ 23H,LOOP DJNZ 23H,LOOP SJMP $ SJMP $问:上述程序段的执行过程是怎样的?问:上述程序段的执行过程是怎样的?执行过程是:执行过程是:将将2323H H单元中的数连续相加,保存至单元中的数连续相加,保存至A A中,中,每加一次,每加一次,2323H H单元中的数值单元中的数值减减1 1,直至减,直至减到到0 0,共
21、加,共加0 0AHAH次。次。在在“上机实验指导书上机实验指导书”的实验一,也使用了的实验一,也使用了“DJNZDJNZ”指指令,请同学仔细阅读。令,请同学仔细阅读。利用利用“DJNZDJNZ”指令,可进行软件延时。见教指令,可进行软件延时。见教材材P94P94【例例4-84-8】。主程序主程序A第第1次调用次调用RET子程序ADM1B返回返回1第第2次调用次调用返回返回2CD主程序调用子程序返回过程示意图主程序调用子程序返回过程示意图断点(调用指令的下一条指令的地址)断点(调用指令的下一条指令的地址)调用指令调用指令“ACALL”或或“LCALL”(第(第1次)次)调用指令调用指令“ACAL
22、L”或或“LCALL”(第(第2次)次)子程序返回指令子程序返回指令断点(地址值)由硬件自动压入堆栈保存。断点(地址值)由硬件自动压入堆栈保存。当主程序执行到当主程序执行到A A调用指令时,调用指令时,硬件自动把硬件自动把B B指令的地址(称为指令的地址(称为断点地址)压入堆栈保存,然断点地址)压入堆栈保存,然后把子程序的地址交给后把子程序的地址交给PCPC,从,从而去执行子程序。当执行到子而去执行子程序。当执行到子程序的程序的“RETRET”指令后,硬件又指令后,硬件又自动将堆栈的断点地址(即自动将堆栈的断点地址(即B B地地址值)弹给址值)弹给PCPC,则,则CPUCPU又回到主又回到主程
23、序去执行指令。程序去执行指令。执行子程序的执行子程序的“RET”指令后,硬件自动将指令后,硬件自动将堆栈的断点值弹出给堆栈的断点值弹出给PC。短调用指令短调用指令 ACALL addr11 ACALL addr11 ; 2 2字节指令字节指令 操作:操作: 先:先:( (PC)+2PC)+2PC,(SP)+1 SPPC,(SP)+1 SP 后:后:(PCPC7 70) (SPSP) (SPSP)+1 SP+1 SP (PCPC15158) (SPSP) addr addr 10100 (PCPC10100) (PCPC151511)不变不变 断点值断点值压入堆栈压入堆栈编程时,可用编程时,可用
24、标号代替转移目标号代替转移目的地址的地址,addr11,addr16交给交给编译程序计算。编译程序计算。长调用指令长调用指令 LCALL addr16 LCALL addr16 ;3字节指令字节指令 操作:操作: 先:先:( (PC)+3PC)+3PC,(SP)+1 SPPC,(SP)+1 SP 后:后:(PCPC7 70) (SPSP) (SPSP)+1 SP+1 SP (PCPC15158) (SPSP) addr addr 15150 (PCPC)断点值断点值压入堆栈压入堆栈目的地址目的地址目的地址目的地址 进栈:进栈:先压入低先压入低8 8位地址,位地址,后压入高后压入高8 8位地址位
25、地址。子程序返回指令子程序返回指令 RET RET ;1字节指令字节指令 操作:操作: 先:先: (SPSP) PCPC15158 ,弹出断点的高弹出断点的高8 8位。位。 后:后: (SPSP)-1 SP-1 SP (SPSP) PCPC7 70 ,弹出断点的低弹出断点的低8 8位。位。 (SPSP)-1 SP-1 SP。 出栈:出栈:先弹出高先弹出高8 8位地址,位地址,后弹出低后弹出低8 8位地址位地址。中断返回指令中断返回指令 RETI RETI ;1字节指令字节指令 操作:操作: 先:先: (SPSP) PCPC15158 ,弹出断点的高弹出断点的高8 8位。位。 后:后: (SPS
26、P)-1 SP-1 SP (SPSP) PCPC7 70 ,弹出断点的低弹出断点的低8 8位。位。 (SPSP)-1 SP-1 SP。RETIRETI指令除了具有指令除了具有RETRET指令的功能实现程序返回外,还有对中断优先级状态触发器的指令的功能实现程序返回外,还有对中断优先级状态触发器的清零。清零。执行返回指令(执行返回指令(RET/RETI),),退出子(或中断服务)程序,退出子(或中断服务)程序,则其返回的地址来自则其返回的地址来自堆栈区堆栈区 l程序计数器程序计数器PCPC是是16位的寄存器。位的寄存器。PC变化的轨迹(即其地址的改变)变化的轨迹(即其地址的改变)决定程序的流向,决
27、定程序的流向,PC的宽度(即地址值的位数)决定了程序存储器的宽度(即地址值的位数)决定了程序存储器可以寻址的范围。可以寻址的范围。lPCPC的基本工作方式有:的基本工作方式有:1、PC自动加自动加1。这是最基本的工作方式,也就是这个专用寄存器被称为。这是最基本的工作方式,也就是这个专用寄存器被称为计数器的原因;计数器的原因;2、执行条件或无条件指令(第、执行条件或无条件指令(第3章章P72-P77,P83)时,)时,PC将被置入新将被置入新的数值(地址),程序的流向发生变化。变化的方式有:的数值(地址),程序的流向发生变化。变化的方式有:1)带符号的相对转移指令)带符号的相对转移指令“SJMP
28、”;2)短跳转指令)短跳转指令“AJMP”,长跳转指令,长跳转指令 “LJMP”;3)散转指令)散转指令“JMP A+DPTR”;3、在执行调用指令(第、在执行调用指令(第3章章P79)或响应中断(第)或响应中断(第5章章P113)时:)时: 硬件自动将硬件自动将PC的当前值,即下一条将要执行的指令的地址被送入的当前值,即下一条将要执行的指令的地址被送入堆堆栈栈,加以保护;同时将子程序的入口地址或者中断入口矢量地址送给,加以保护;同时将子程序的入口地址或者中断入口矢量地址送给PC,程序流向发生改变,程序转向去执行子程序或者中断服务程序。,程序流向发生改变,程序转向去执行子程序或者中断服务程序。
29、当子程当子程 序或中断服务程序执行完毕,遇到子程序中的最后一条返回序或中断服务程序执行完毕,遇到子程序中的最后一条返回指令指令“RET”或中断服务程序的最后一条指令或中断服务程序的最后一条指令“RETI”时,硬件自动时,硬件自动将保护在将保护在堆栈中堆栈中的内容(地址)送到的内容(地址)送到PC中,程序又返回到原来的地中,程序又返回到原来的地方继续执行。方继续执行。l设(设(SP)=40H,符号地址符号地址“SUBRTN”指向指向ROM的的5678H,执行指令:执行指令:0123H: LCALL SUBRTNS 执行完指令后执行完指令后(PC)+3=0123H+3=0126H。将该将该PC的内
30、容压入堆栈:的内容压入堆栈:向(向(SP)+1=40H+1=41H中压入中压入26H,向(向(SP)+1=41H+1=42H压入压入01H,此时(此时(SP)=42H。而地址而地址SUBRTN=5678H送入送入PC,程序转去执行以程序转去执行以5678H为首地址的子程序。为首地址的子程序。l例:例:如右图所示,使如右图所示,使LED亮亮10ms,灭,灭10ms,如此反复。试编如此反复。试编写程序。写程序。软件延时时间的计算请软件延时时间的计算请参阅教材参阅教材P94请同学们回去再做请同学们回去再做“上机实验指导书上机实验指导书”实验二的实例。在实验二的实例。在KELLKELL或或伟福上执行伟
31、福上执行“单步跟踪单步跟踪”操作,仔细观察当执行到操作,仔细观察当执行到“ACALLACALL”和和“RETRET”指令时光标是如何变化的!指令时光标是如何变化的!ABCD程序的流向:当主程序执行到程序的流向:当主程序执行到A A指令时,硬件自动将指令时,硬件自动将B B指令的地址压入堆栈,指令的地址压入堆栈,然后然后CPUCPU去执行标号为去执行标号为“DELY_10MSDELY_10MS”的子程序,当执行到的子程序,当执行到RETRET指令时,硬件将指令时,硬件将堆栈的断点地址值交给堆栈的断点地址值交给PCPC,则,则CPUCPU回到主程序的回到主程序的B B指令,再执行指令,再执行C C
32、指令。指令。C C指令指令又是一条调用指令,则又是一条调用指令,则CPUCPU把把D D指令的地址压入堆栈,去执行子程序,执行到指令的地址压入堆栈,去执行子程序,执行到子程序的子程序的RETRET指令后指令后CPUCPU又回到主程序去执行又回到主程序去执行D D指令。指令。l请思考:请思考:如右图所示。若执行下列程序,如右图所示。若执行下列程序,LED1LED8如何如何变化?变化? L1:MOV A,#55H MOV P1,A ACALL DELAY_50MS ;50ms延时延时 CPL A ;A中的内容取反后送回中的内容取反后送回A中中 MOV P1,A ACALL DELAY_50MS A
33、JMP L1DELAY_50MS: RETMCS-51MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套有一套位变量位变量处理的指令集,包括处理的指令集,包括位变量传送、逻辑运算、控制程序转位变量传送、逻辑运算、控制程序转移移等指令。等指令。在进行位处理时,在进行位处理时, CYCY用作用作“位累加器位累加器”。在在MCS-51 MCS-51 中,有一部份中,有一部份RAMRAM和一部份和一部份SFRSFR是具有位寻址功能的。是具有位寻址功能的。v位操作区位操作区:内部:内部RAMRAM的的2020H-2FHH-2
34、FH这这1616个字节单元,即个字节单元,即128128个位单元个位单元( (位位地址空间位地址空间位00007 7FH)FH);v可以位寻址的特殊功能寄存器可以位寻址的特殊功能寄存器:8989C51C51中有一些中有一些SFRSFR是是可以进行位寻可以进行位寻址址的,这些的,这些SFRSFR的特点是其的特点是其字节地址均可被字节地址均可被8 8整除整除, 如如A A累加器,累加器,B B寄存器、寄存器、PSWPSW、IPIP(中断优先级控制寄存器)、中断优先级控制寄存器)、 IEIE(中断允许控制中断允许控制寄存器)、寄存器)、SCONSCON(串行口控制寄存器)、串行口控制寄存器)、TCO
35、NTCON(定时器定时器/ /计数器控计数器控制寄存器)、制寄存器)、P0P3(I/OI/O端口锁存器)。端口锁存器)。以以PSWPSW中中位位4 4( RS1 RS1 )为例为例。直接直接( (位位) )地址方式:地址方式:如如 D4HD4H;点操作符号方式:点操作符号方式:如如 PSW.4PSW.4,D0H.4D0H.4;位名称方式:位名称方式:如如 RS1RS1;用户定义名方式:用户定义名方式:如用伪指令如用伪指令 bitbitSUB.REG bit RS1SUB.REG bit RS1定义后,可用定义后,可用SUB.REGSUB.REG代替代替RS1RS1。 MOV C MOV C,b
36、itbit;(bit) C(bit) C。 2字节指令字节指令 MOV bitMOV bit,C C;(C) bit(C) bit。 2字节指令字节指令 例:例:MOV CMOV C,P1.0P1.0;将将P1.0P1.0的状态送给的状态送给C C。 MOV P2.0 MOV P2.0,C C ;将将C C中的状态送到中的状态送到P2.0,P2.0,引脚上去。引脚上去。 位清位清0 0指令指令 CLR CLR C C ;使使CY=0CY=0。 1字节指令字节指令 CLR bitCLR bit ;0 0bitbit。 2字节指令字节指令 例:CLR P1.0 CLR P1.0 ;即使即使P1.0
37、P1.0变为变为0 0位置位置1 1指令指令 SETB CSETB C ; 1 1 CY CY。 1字节指令字节指令 SETB bitSETB bit ;1 1bit bit 。 2字节指令字节指令 (3)位取反指令)位取反指令 CPL CCPL C ;( (C)C)C, C, 1字节指令字节指令 CPL bitCPL bit ;( (bit) bit) bit bit。 2字节指令字节指令 3. 位逻辑运算指令位逻辑运算指令位逻辑位逻辑“与与”指令指令 ANL C, bitANL C, bit ;(;(C C) (bitbit)C C。 2字节指令字节指令 ANL C, /bitANL C,
38、 /bit ;(;(C C) (bitbit) C C。 2字节指令字节指令 注意注意: :指定的位地址中的值本指定的位地址中的值本身并不发生变化。身并不发生变化。例:例:ANL C,/P1.0位逻辑位逻辑“或或”指令指令 ORL C, bitORL C, bit ;(;(C C) (bitbit)CC。 2字节指令字节指令 ORL C, /bitORL C, /bit ;(;(C C) (bitbit)CC。 2字节指令字节指令 4.位条件转移类指令位条件转移类指令判判CyCy转移指令转移指令 JC rel ;先(先(PC)+2PC;后:若后:若(CYCY)=1,=1,则转移。否则顺序执行则
39、转移。否则顺序执行 JNC rel ;先(先(PC)+2PC;后:若后:若(CYCY)=0,=0,则转移。否则顺序执行则转移。否则顺序执行 rel用用“标号标号”来代替来代替(PC)+relPC(PC)+relPC上面两条指令均为:上面两条指令均为:2字节指令。字节指令。判位变量转移指令判位变量转移指令 JB bitJB bit,relrel ;(PCPC)+3PC+3PC; 若(若(bitbit)=1=1,则(则(PCPC)+rel PC+rel PC;否则顺序执行。否则顺序执行。 JNB bitJNB bit,relrel ; (PCPC)+3PC+3PC; 若(若(bitbit)=0=0
40、,则(则(PCPC)+rel PC+rel PC;否则顺序执行。否则顺序执行。 JBC bitJBC bit,relrel ; (PCPC)+3PC+3PC; 若(若(bitbit)=1=1,则(则(PCPC)+rel PC+rel PC,且且0 0bitbit; 否则顺序执行。否则顺序执行。 rel用用“标号标号”来代替。上面三条指令均为:来代替。上面三条指令均为:3字节指令。字节指令。在在“上机实验指导书上机实验指导书”的实验二,也需要用到的实验二,也需要用到“JBJB”或或“JNBJNB”指令。查询指令。查询I/OI/O口中的按钮(或开关)是否按下了,口中的按钮(或开关)是否按下了,这种
41、方法我们称为这种方法我们称为“查询方式查询方式”。P92【例例4-6 】片内片内RAM 40HRAM 40H和和41H41H两个单元中存有两个无符号数,将这两个数两个单元中存有两个无符号数,将这两个数数中的小者存入数中的小者存入30H30H单元中。单元中。解:程序如下:解:程序如下: MOV A,40H ;40HMOV A,40H ;40H单元的数送单元的数送A A CJNECJNE A,41H,BIG ; A,41H,BIG ;比较大小比较大小, ,两个数不相等转两个数不相等转BIGBIG SJMP STORE ; SJMP STORE ;相等,相等,40H40H单元的数作为小者单元的数作为
42、小者 BIG: BIG:JC JC STORE ; STORE ;有借位有借位, ,则则40H40H单元的数小单元的数小 MOV A,41H ; MOV A,41H ;无借位无借位, ,则则41H41H单元的数小单元的数小STORE:MOV 30H,A ;STORE:MOV 30H,A ;小者存入小者存入30H30H单元中单元中 ORG 0000H AJMP MAIN ORG 0050H MAIN:MOV DPTR,#TAB ;字型表的首地址DPTR LOOP: MOV R0,#9 ;R0作为计数器 LOOP1:MOV A,R0 MOVC A,A+DPTR ;查字型表, MOV P2,A ;字
43、型送P2口显示,共阳7LED LCALL DELAY ;调用延时程序 DEC R0 CJNE R0,#0FFH,LOOP1 ;比较大小,当R00FFH时则转LOOP1,若R0=0FFH则顺序执行 ACALL LOOPDELAY:MOV R1,#40 ;延时子程序 DL1:MOV R2,#40 DL2:MOV R3,#0FFH DJNZ R3,$ DJNZ R2,DL2 DJNZ R1,DL1 RET TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳7LED字型表0,1,2F END修改程序,使它显示09“DB”为伪指令。P96数据表
44、格表格首地址l复习:复习:【思考题思考题】请编程:请编程:1 1)片内)片内RAM 40HRAM 40H和和4AH4AH两个单元中存有两个无符号数,将这两个单元中存有两个无符号数,将这两个数中的两个数中的小者小者存入片外存入片外RAMRAM的的1000H1000H单元中。单元中。2 2)有两个无符号数分别存放在片外)有两个无符号数分别存放在片外RAMRAM的的1000H1000H单元和单元和1200H1200H单元,将这两个数中的单元,将这两个数中的大者大者存入片内存入片内RAMRAM的的30H30H单元中。单元中。l某同学编写的程序:某同学编写的程序:解:解: MOVX R0,2000H M
45、OVX A,2001H CJNE A,R0,LOOP1 MOV 60H,ALOOP1:JC LOOP2 MOV 60H,A AJMP LASTLOOP2:MOV 60H,R0 LAST:ENDl例例1:片外片外RAM 2000H、2001H单元中分别存有两个无符号单元中分别存有两个无符号数,请编程将这两个数中的大者存入片内数,请编程将这两个数中的大者存入片内RAM的的60H单元单元中(若这两个数相等,亦存入中(若这两个数相等,亦存入60H单元中)。单元中)。l例例2:两个两个8位补码数位补码数DATA1与与DATA2相加。若溢出,则累相加。若溢出,则累加器加器A清清0,同时,同时LED亮表示亮
46、表示“溢出溢出”;若无溢出,则;若无溢出,则“和和”存放在存放在R7中,同时中,同时LED灭表示无灭表示无“溢出溢出”。硬件电路如图。硬件电路如图所示(所示(LED的初始态为灭)。试编写程序并在的初始态为灭)。试编写程序并在Proteus ISIS中进行硬件仿真。中进行硬件仿真。PSW有位地址,也可用它的位名称有位地址,也可用它的位名称,即:即:JB OV,LOOP1l完善上例:完善上例:黄黄LED亮表示亮表示“溢出溢出”,绿,绿LED亮表示亮表示“无溢无溢出出”。并将计算结果(。并将计算结果(16进制)由进制)由7段段LED数码管显示(请数码管显示(请参阅教材参阅教材P209的内容)出来。的
47、内容)出来。l注意观察:注意观察:P1.6和和P1.7引脚的引脚的“标色标色”是是“灰灰色色”,即电平状态不确,即电平状态不确定。所选的七段定。所选的七段LED数码管是共阳极的,应数码管是共阳极的,应该是高电平才对。这是该是高电平才对。这是由于驱动功率不够造成由于驱动功率不够造成的。的。l要解决此问题可各接一要解决此问题可各接一三极管。三极管。 ORG 0000H AJMP MAIN ORG 0050HMAIN:SETB P1.1 SETB P1.5 MOV A,#DATA1 ADD A,#DATA2 MOV 20H,A ;结果存入结果存入20H单元中单元中 JB OV,L1 ;有溢出转有溢出
48、转l1 CLR P1.5 ;无溢出,绿灯亮无溢出,绿灯亮 AJMP L2 L1:CLR P1.1 ;点亮溢出灯点亮溢出灯 ;以下为拆字以下为拆字 MOV R0,#21H MOV A,20H ANL A,#0FH ;屏蔽高屏蔽高4位,取低位,取低4位位 MOV R0,A ;低低4位存入位存入21H单元中单元中 INC R0 MOV A,20H SWAP A ;高、低高、低4位互换位互换 ANL A,#0FH MOV R0,A ;高高4位存入位存入22H单元中单元中 ;以下为查表显示数字以下为查表显示数字 MOV DPTR,#TAB MOV A,22H MOVC A,A+DPTR MOV P2,A
49、 ;显示十位显示十位 SETB P1.6 MOV A,21H MOVC A,A+DPTR MOV P3,A ;显示个位显示个位 SETB P1.7 L2: SJMP $ TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;共阳共阳7段段LED显示显示0F字型编码表字型编码表 DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FFH ENDl该程序中该程序中DATA1和和DATA2为具体的为具体的16进进制数。如果无溢出,只制数。如果无溢出,只是绿色是绿色LED亮,而不亮,而不显示计算结果。显示计算结果。l请同学们想一想,
50、如何请同学们想一想,如何修改该程序使其有无溢修改该程序使其有无溢出都能将计算结果显示出都能将计算结果显示出来!出来!教材教材P89例例4-2。拆字。拆字教材教材P209-213。如图所示:如图所示:P3.2P3.2和和P3.3P3.3上各接有一只按键,要求它们分别按上各接有一只按键,要求它们分别按下时下时( (P3.2=0P3.2=0或或P3.3=0),P3.3=0),分别使分别使P1P1口为口为0 0或或FFHFFH。试编写程序。试编写程序。这叫做这叫做“查查询方式询方式”如图所示,开关如图所示,开关K1K1和和K2K2未按下未按下时,两只发光二极管均不亮。当时,两只发光二极管均不亮。当按下
51、按下K1K1时,使发光二极管时,使发光二极管LED1LED1亮亮,而发光二极管,而发光二极管LED2LED2不亮;当不亮;当按下按下K2K2时,时,LED2LED2亮亮而而LED1LED1不亮。不亮。试编写程序实现上述功能。试编写程序实现上述功能。如图所示,上电时,如图所示,上电时,LED不亮。每当开关不亮。每当开关K1合上时,合上时,LED亮,而当开关亮,而当开关K1打开时,则打开时,则LED熄灭。请编写其控制程序。熄灭。请编写其控制程序。 分析:分析:1、开关、开关K1的闭合的闭合/断开状态是从断开状态是从P1.0端端口输入信号的(口输入信号的(P1.0作为输入端使作为输入端使用),而输入的信号只有用),而输入的信号只有“高高/低电平低电平”两种状态。两种状态。K1打开,即输入高电平打开,即输入高电平“1”,K1合上时,即输入低电平合上时,即输入低电平“0”。2、LED接在接在P1.1上,即上,即P1.1作输出端口作输出端口使用。当使用。当P1.1输出高电平输出高电平“1”时,时,LED不亮;当不亮;当P1.1输出低电平输出低电平“0”时,时,则则LED亮。亮。故,可用故,可用“判位变量转移指令判位变量转移指令” (JB bit,relJB bit,rel)来判断开关)来判断开关K1K1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师聘用合同是协议书
- 中国氮磷肥项目商业计划书
- 智能养老商业策划书3
- 中国淋浴房塑料配件项目投资计划书
- 摄影工作室创业计划书怎么做
- 金融科技行业的未来五年发展规划
- 解除主播合同协议书
- 心碎乌托邦创业计划书
- 豆制品项目工程管理实施计划(模板)
- 呼吸系统的临床检查
- 最新安全生产管理教材电子版
- (完整版)马克思主义基本原理概论知识点
- 地表水水质自动监测站运行维护技术规范
- 健康证申请证明(通用)
- GB∕T 10054.1-2021 货用施工升降机 第1部分:运载装置可进人的升降机
- 天然气管线施工无损检测方案
- 生物安全委员会及组织架构
- 设计学概论设计批评课件
- 员工领用劳保用品表格
- 中油即时通信安装手册(二厂)
- 电厂kks编码1
评论
0/150
提交评论