8单片机第八讲

上传人:无*** 文档编号:157930411 上传时间:2022-10-02 格式:PPT 页数:40 大小:282KB
收藏 版权申诉 举报 下载
8单片机第八讲_第1页
第1页 / 共40页
8单片机第八讲_第2页
第2页 / 共40页
8单片机第八讲_第3页
第3页 / 共40页
资源描述:

《8单片机第八讲》由会员分享,可在线阅读,更多相关《8单片机第八讲(40页珍藏版)》请在装配图网上搜索。

1、单片机原理及应用自动化专业适用5.5 算逻运算和移位指令(49条)此指令大多数要用到累加器A来存放一个源操作数,另一个源操作数可以存放在任何一个工作寄存器Rn中或片内的RAM中;也可以是指令码中的一个操作数。算术运算分为:逻辑运算 环移指令 算术运算指令(24)逻辑运算指令(20)位移指令 (5)5.5 算逻运算和移位指令(49条)此指令大多数要用到累加器A来存放一个源操作数,另一个源操作数可以存放在任何一个工作寄存器Rn中或片内的RAM中,也可以是指令码中的一个操作数,一、算术运算指令(24)加法、减法、十进制调整、乘除法。1.加法指令(13)不带CY加法指令(4)ADD A,Rn ;A A

2、+Rn ADD A,direct ;A A+(direct)ADD A,Ri ;A A+(Ri)ADD A,#data ;A A+data 使用时注意以下三点:1)参加运算的两个操作数必须是8位二进制数,并且对PSW中的所有标志位都产生影响;2)用户可以根据编成需要把参加的两个操作数看成是无符号数(0255),也可以看成是带符号的数。若看成是带符号的数,则通常采用补码的形式(-128+127);例如:无符号 11010011 十进制 211 有符号 11010011 十进制 -45 3)无论看成是有符号的还是无符号的操作数,计算机总是按照带符号的法则运算并产生PSW中标志位。举例:试分析在执行

3、下列指令后,累加器A和PSW中各标志位的变化情况。MOV A,#19H ADD A,#66H 解:2 5 A=0 0 0 1 1 0 0 1 B +)1 0 2 data=0 1 1 0 0 1 1 0 B _ 1 2 7 0 0 1 1 1 1 1 1 1 B 0 0 CP CS CP-最高位进位位,CS-次高位的进位位。OV=CPCS=00=0 举例:试分析在执行下列指令后,累加器A和PSW中各标志位的变化情况。MOV A,#5AH ADD A,#6BH 解:9 0 A=0 1 0 1 1 0 1 0 B +)1 0 7 data=0 1 1 0 1 0 1 1 B _ 1 9 7 0 1

4、 1 0 0 0 1 0 1 B 0 1 CP CS CP-最高位进位位,CS-次高位的进位位。OV=CPCS=01=1 带CY的加法指令(4)ADDC A,Rn ;A A+Rn+Cy ADDC A,direct ;A A+(direct)+Cy ADDC A,#data ;A A+data+Cy ADDC A,Ri ;A A+(Ri)+Cy 主要用于多字节的加法运算中。加1指令(5)INC A ;A A+1 INC Rn ;Rn Rn+1 INC direct ;direct (direct)+1 INC Ri ;(Ri)(Ri)+1 INC DPTR ;DPTR DPTR+1 只有第1条指

5、令对奇偶标志位有影响,其余没有。举例:已知M1和M2单元中存放有两个16位的无符号数X1和X2(低8位在前,高8位在后)试编写出X1+X2并把结果放在M1和M+1单元(低8位在M1单元,高8位在M2单元)的程序,假设两数之和不会超过16位。解:ORG 0500H MOV R0,#M1;X1的起始地址送R0 MOV R1,#M2 ;X2的起始地址送R1 MOV A,R0 ;A X1低8位 ADD A,R1 ;A X1的低8位+X2的低8位,形成Cy MOV R0,A ;和的低8位存M1 INC R0 ;修改地址指针R0 INC R1 ;修改地址指针R1 MOV A,R0 ;A X1的高8位 AD

6、DC A,R1 ;A X1的高8位+X2的高8位+Cy MOV R0,A ;和的高8位存M1+1 SJMP$;停机 END 2.减法指令(8)带Cy的减法指令 SUBB A,Rn ;A A-Rn-Cy SUBB A,direct ;A A-(direct)-Cy SUBB A,Ri ;A A-(Ri)-Cy SUBB A,#data ;A A-data-Cy 使用时应注意以下几点:1)单片机在内部采用加补码的方法进行;2)无论相减的两数是无符号还是带符号,减法的操作 总是按带符号的二进制数进行,对PSW 产生影响;3)减法指令没有不带的Cy 减法指令;4)在实际编程中,一般先用一条清零指令。C

7、LR C ;Cy 0 举例:在执行下列程序后,累加器A和PSW中的各标志位的状态。CLR C MOV A,#52H SUBB A,#0B4H 解:8 2 A=0 1 0 1 0 0 1 0 B -)-7 6 data=1 0 1 1 0 1 0 0 B 1 5 8 1 1 0 0 1 1 1 1 0 B 1 0 CP CS Cy AC F0 RS1 RS0 OV -P 1 1 0 0 0 1 0 1 减1指令 DEC A ;A A-1 DEC Rn ;Rn Rn-1 DEC direct ;direct (direct)-1 DEC Ri ;(Ri)(Ri)-1 第一条指令影响奇偶校验标志位。

8、举例:已知:A=DFH R1=40H R7=19H (30H)=00H (40)=FFH 试分析执行下列程序后累加器A和PSW中各 个标志位的状态如何?DEC A DEC R7 DEC 30H DEC R1 解:A=DEH,P=0 R7=18H,PSW不变 (30H)=FFH,PSW不变 (40H)=FEH,PSW不变 3.十进制调整指令 用于实现BCD运算,指令的格式为:DA A ;若AC=1或A(3-0)9,则A A+06H ;若Cy=1或A(7-4)9,则A A+60H 这条指令在使用时,通常紧跟在加法指令之后,用于对加法执行后在累加器A中的操作结果进行十进制调整。1)BCD加法 两个B

9、CD数相加的结果也是BCD数,但必须通过这条十进制调整指令才能调整为BCD数。2)BCD减法 BCD减法运算必须采用BCD补码运算,变被减数减减数为被减数加减数的补码,然后再对其和进行十进制的加法调整。(1)求BCD 减法的补码,用 9AH-减数;(2)BCD被减数加BCD减数的补数;(3)进行十进制的调整,得到正确的结果。举例:试写出完成85+59的BCD加法程序。解:相应的加法程序为 ORG 1000H MOV A,#85H ;A 85H ADD A,#59H ;A 85+59=DEH DA A ;A 44H,Cy=1 SJMP$;停机 END 其过程:8 5 A=1 0 0 0 0 1

10、0 1 B +)5 9 data=0 1 0 1 1 0 0 1 B_ 1 4 4 0 1 1 0 1 1 1 1 0 B 1 1 0 B-低4位9,加06H _ 1 1 1 0 0 1 0 0 B 1 1 0 -高4位9,加60H _ 1 0 1 0 0 0 1 0 0 B 举例:已知在M1和M2中分别存有被减数91和减数 36,试编程求差并存入M3中。解:ORG 1000H CLR C ;MOV A,#9AH ;BUBB A,M2 ;ADD A,M1 ;DA A ;MOV M3,A ;CLR C ;SJMP$;END 验证过程:1 0 0 1 1 0 1 0 B-两位BCD数的模100 -

11、0 0 1 1 0 1 1 0 B-BCD的减数 _ 0 1 1 0 0 1 0 0 B-减数的补数 +1 0 0 1 0 0 0 1 B-BCD被减数 _ 1 1 1 1 0 1 0 1 B 1 1 0 -加60H进行调整 _ 1 0 1 0 1 0 1 0 1 B 4.乘法和除法指令 乘法和除法指令均为单字节四周期指令,相当于执行4加法指令的时间,指令的格式为 MUL AB ;AB=BA,形成标志 DIV AB ;AB=A-B形成标志 举例:已知两个无符号的乘数分别在30H和31H的单元中,是编出他们相乘并把他们的乘积低8位放在32H单元,高8位放在33H单元中的程序。解:ORG 0100

12、H MOV R0,#30H MOV A,R0 INC R0 MOV B,R0 MUL AB INC R0 MOV R0,A INC R0 MOV R0,B SJMP$END 举例:试编写一个双字节(16位8位)的乘法的子程序。解:被乘数放在(R3)(R4)中,乘数放在(R2)中,结果放在(R7)(R6)(R5)中,编成的根据是:253=(210+5)3=2310+53 MOV A,R2 MOV B,R3 MUL AB MOV R5,A MOV R6,B MOV A,R2 MOV B,R4 MUL AB ADD A,R6 MOV R6,A MOV A,B ADDC A,#00H MOV R7,A

13、 RET 二、逻辑运算指令(20条)包括:逻辑与、逻辑或、逻辑异或、累加器清零与取反。1.逻辑与运算指令(6)ANL A,Rn ;A A Rn ANL A,direct ;A A (direct)ANL A,Ri ;A A (Ri)ANL A,#data ;A A data ANL direct,A ;direct (direct)A ANL direct,#data ;direct (direct)data 举例:已知 R0=30H (30H)=AAH,执行下列程序后,累加器A和 30H单元的内容是什么?MOV A,#0FFH MOV A,0FH ANL A,R0 ANL A,30H MOV

14、 A,#0F0H MOV A,#80H ANL A,R0 ANL 30H,A 2.逻辑或指令(6)ORL A,Rn ;A A Rn ORL A,direct ;A A (direct)ORL A,Ri ;A A (Ri)ORL A,#data ;A A data ORL direct,A ;direct (direct)A ORL direct,#data ;direct (direct)data 举例:已知 A=AAH P1=FFH ,试编程把累加器中的低4位送P1口 的低4位,P1口的高4为不变。解:ORG 0100H MOV R0,A ANL A,#0FH ANL P1,#0F0H OR

15、L P1,A MOV A,R0 SJMP$END 3.逻辑异或指令(6)逻辑异或指令可以用来对某个存储单元或累加器A中的数据进行交换,是其中的某些位变反,而其余位不变。指令格式:XRL A,Rn ;A A Rn XRL A,direct ;A A (direct)XRL A,Ri ;A A (Ri)XRL A,#data ;A A data XRL direct,A ;direct (direct)A XRL direct,#data ;direct (direct)data 举例:已知在外部RAM存储器中的30H单元中,有一数为AAH,让高4位不变,低4位取反,试编程。解:ORG 0100H

16、 MOV R0,#30H MOVX A,R0 XRL A,#0FH MOVX R0,A SJMP$END 4.累加器清零和取反指令 这类指令是单字节单周期的指令,数据传送指令或逻辑与或指令也可以实现清零和取反,但是他们至少需要两个字节。CLR A ;A 0 _ CPL A ;A A举例:已知在30H单元中有一正数X,写出求-X补码的程序。解:ORG 1000H MOV A,30H CPL A INC A MOV 30H,A SJMP$END 举例:若X、Y、和Z的三个输入信号放在X、Y、和Z的单元中,试编出可以模拟下面的电路的程序,输出信号放在F单元中。X Y +F Z 解:用FFH代表逻辑“

17、1”、00H代表逻辑“0”。ORG 1000H MOV A,X ANL A,Y MOV R1,A MOV A,Y XRL A,Z CPL A ORL A,R1 MOV F,A SJMP$END 三、移位指令(5条)移位指令只能对累加器A进行操作。指令格式:A RL A ;A7 A0 A RR A ;A7 A0 A RLC A ;Cy A7 A0 A RRC A ;Cy A7 A0 A SWAP A ;A7A4 A3 A0 举例:已知在M1、M1+1单元中有一个16位的二进制数,M1存低8位,该数要扩大两倍(小于65536)。解:ORG 1000H CLR C MOV R1,#M1 MOV A,

18、R1 RLC A ;低8位操作数左移,低位补0 MOV R1,A ;送回M1单元,Cy中为最高位 INC R1 MOV A,R1 RLC A,MOV R1,A ;送回M1+1单元 SJMP$END 举例:求片外RAM3000H、3001H单元数据的平均值,并传送到3002H的单元。解:ORG 1000H MOVX DPTR,#3000H MOV A,DPTR MOV R0,A INC DPTR MOVX A,DPTR ADD A,R0 RRC A ;带进位Cy右移一位相当 ;于除以2 INC DPTR MOVX DPTR,A SJMP$END5.6控制转移和位操作指令 控制转移指令(17)位操

19、作指令(17)无条件转移(4)有条件转移(13)位传送(2)位置位和复位(4)位运算(6)位控制转移(5)共34条 5.6控制转移和位操作指令 此类指令共34条,主要改变程序计数器PC中的内容为目标,以控制程序执行流向;位操作指令不是以字节为单位对操作数进行操作,而是以字节中的某位为对象进行操作。一、控制转移指令(17)无条件转移指令、条件转移指令、子程序调用和返回指令、空操作指令等。1.无条件转移指令(4)LJMP addr16 ;PC addr16 AJMP addr11 ;PC PC+2,PC10PC0 addr11 SJMP rel ;PC PC+2,PC PC+rel JMP A+D

20、PTR ;PC A+DPTR 第一条指令-长转移指令 第二条指令-绝对转移指令 第三条指令-短转移指令 第四条指令-变址转移寻址指令 (1)长转移指令(64KB范围内转移指令)LJMP addr16 ;PC addr16 长转移指令的功能是把指令码中的addr16送入程序计数器PC中,使单片机在执行下一条指令时无条件转移到addr16处执行程序。可在64KB范围内转移。在编程时,addr16常用符号地址表示:如LOOP、LOOP1、LOOP2等表示。举例:已知单片机的监控程序始址为A0B0H,试问用什么方法使单片机在开机时自动执行监控程序。解:单片机开机时程序计数器总是复位成0000H,在00

21、00H处可放一条长转移指令 LJMP 0A0A0H ;PC A0B0 也就是:(0000H)=02H (0001H)=A0H (0002H)=B0H (2)绝对转移指令(2KB范围内转移指令)AJMP addr11 ;PC PC+2,PC10PC0 addr11 长转移指令为三字节双周期指令,绝对转移指令为双字节双周期指令,11位地址addr11(a10a0)在指令中的分布是:a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0其中:00001B是操作码。在程序设计中,11位地址也可用符号表示,但在上机执行前必须按照上述格式加以代真。绝对转移指令在执行时分两步

22、走:第一步是取指令操作,程序计数器PC中的内容被加1两次;第二步把PC加1两次后的高5位地址PC15PC11和指令码中低11位地址构成目标转移地址:PC15PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0其中:a10a0地址范围是 全“0”和全“1”是一个带符号的二进制,绝对转移可在2kB范围内向前或先后转移。如果把单片机64KB 寻址区域划分为32页(每页2KB),则:PC15PC11(00000B11111B)成为页面地址。举例:已知如下绝对转移指令,是分析执行该指令后程序转移到何处?3100H AJMP add11 解:设 addr11=10110100101

23、B,指令码为:a10 a9 a8 操作码 a7 a6 a5 a4 a3 a2 a1 a0 1 0 1 0 0 0 0 1 1 0 1 0 0 1 0 1即:A1A5H,该指令执行后:PC15PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0PC=0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 =35A5H 程序转到 35A5H处执行。(3)短转移指令(-126+129范围内转移指令)短转移指令为双字节双周期指令,短转移指令在执行时分两步走:第一步是取指令操作,程序计数器PC中的内容被加1两次,然后把加1两次后的地址和rel相加作为目标转移地址。也是相对

24、转移指令。SJMP rel ;PC PC+2,PC PC+rel 举例:试分析下列程序,请计算SJMP START指令码中的rel,并分析目标地址的转移范围。ORG 1000H 1000H 7401H START:MOV A,#01H 1002H F8H MOV R0,A 1003H 90CF01H LOOP:MOV DPTR,#0CF01H -1017H 80rel SJMP START -END 解:目标转移地址=源地址+2+rel rel=目标转移地址 源地址 2=1000H -1017H-2 =-25=-25 补=E7H 转移地址的范围:转移地址范围通常以SJMP 指令的始址为参考点(

25、1017H),但实际的参考点是对PC+2而言(1019H),因此,短转移的范围为 -126+129 rel的取值范围为:-128+127(4)变址转移指令 这是一条单字节双周期指令。在指令执行前,先预先把目标转移地址的基址送DPTR,目标转移地址对基地址的偏移量放在累加器A中。JMP A+DPTR ;PC A+DPTR 使用无条件转移指令时,应注意以下两个问题:1)使用转移指令时,指令中的地质和地址偏移量均可采用标号;在汇编成机器码时,必须翻译成二进制或十六进制的代码;2)短转移指令在256个存储单元转移 绝对转移指令在2KB范围内转移 长转移指令在64KB范围内转移。常用的是前两个 2.条件

26、转移指令(8条)指令要判断某种条件是否满足而决定要不要转移的指令,满足是就转移,不满足就继续执行原程序。累加器A判零转移指令 比较条件转移指令 减1条件转移指令 (1)累加器A判零转移指令 JZ rel ;若A=0,则 PC PC+2+rel 若A0,则 PC PC+2 JNZ rel ;若A0,则 PC PC+2+rel 若A=0,则 PC PC+2(2)比较条件转移指令 CJNE A,#data,rel ;若A=data,则 PC PC+3 Adata,则 PC PC+3+rel 形成Cy标志 CJNE A,direct,rel ;若A=(direct),则 PC PC+3 A(direc

27、t),则 PC PC+3+rel 形成Cy标志 CJNE Rn,#data,rel ;若Rn=data,则 PC PC+3 Rndata,则 PC PC+3+rel 形成Cy标志 CJNE Ri,#data,rel ;若(Ri)=data,则 PC PC+3 (Ri)data,则 PC PC+3+rel 形成Cy标志 CJNE A,#data,rel ;若A=data,则 PC PC+3 Adata,则 PC PC+3+rel 形成Cy标志 执行指令时,单片机先把累加器A与立即数data进行比较,若相等,不转移,继续执行原程序,Cy标志也为零;若不相等,则机器自动根据累加器A和立即数data的大小形成Cy标志位;然后程序发生转移。形成Cy标志位的方法是:A data Cy=0 A data Cy=1

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!