单片机3学习教程.pptx
《单片机3学习教程.pptx》由会员分享,可在线阅读,更多相关《单片机3学习教程.pptx(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一一.汇编语言指令格式汇编语言指令格式 标号:操作码 操作数1 1,操作数22;注释 例:LOOPLOOP:MOV A MOV A,#40H#40H ;取参数1.1.标号:指令的符号地址。2.2.操作码:指明指令功能。3.3.操作数:指令操作对象。包括数据、地址、寄存器名及约定符号。4.4.注释行:说明指令在程序中的作用。操作码和操作数是指令主体。MOV_move传送XCH_exchange交换ANL_and logic与逻辑运算XRL_exclusive or异或运算MUL_Multiply乘法RR_rotate right右循环SJMP_short jump短跳转RET_return 子程
2、序返回3-1 3-1 指令格式第1页/共48页二二.机器语言指令格式机器语言指令格式操作码 操作数1 1 操作数22分为单字节、双字节和三字节指令。指令中操作码和操作数是指令主体,称为指令可执行部分,附录指令表中可查出对应指令代码。举例:汇编语言:机器语言:MOV AMOV A,R0R0E8HE8HMOV R6MOV R6,#32H#32H7E 32H7E 32HMOV 40HMOV 40H,#64H#64H75 40 64H75 40 64H111010000111111000110010011101010100000001100100第2页/共48页三三.指令描述符号介绍指令描述符号介绍在
3、介绍指令之前,先把描述指令的一些符号的意义作些介绍。Rn当前工作寄存器区中的8个寄存器R.0R7(n=07)。Ri当前工作寄存器区中的2个工作寄存器R.0、R1(i=0,1)。direct8位的内部数据存储器单元中的地址。#data包含在指令中的8位常数。#data16包含在指令中的16位常数。addr1616位目的地址。addr1111位目的地址。rel8位带符号的偏移字节,简称偏移量。DPTR数据指针,可用作16位地址寄存器。bit内部RAM或专用寄存器中的直接寻址位。A累加器。B专用寄存器,用于乘法和除法指令中。C进位标志或进位位,或布尔处理机中的累加器。间址寄存器或基址寄存器的前缀,如
4、Ri,DPTR。/位操作数的前缀,表示对该位操作数取反,如/bit。单元中的内容。()由寻址的单元中的内容。箭头左边的内容被箭头右边的内容所代替。第3页/共48页3-2 3-2 指令寻址方式3-2-13-2-13-2-13-2-1 寻址方式和操作数类寻址方式和操作数类型型3-2-2 3-2-2 3-2-2 3-2-2 寻址方式寻址方式一.立即寻址方式指令中给出实际操作数据(立即数)。举例:举例:8 8位立即数:MOV AMOV A,#40H#40H ;A A40H40H 16 16位立即数:MOV DPTRMOV DPTR,#2100H#2100H;DPTRDPTR2100H2100H一、寻址
5、方式一、寻址方式 是指指令中确定操作数的形式。是指指令中确定操作数的形式。二、操作数类型二、操作数类型位(b)b)位寻址区中的一位二进制数据字节(B)8B)8位二进制数据字(W)16W)16位双字节数据第4页/共48页二.直接寻址方式 指令中直接给出操作数地址的寻址方式,能直接寻址的存储空间为内部RAMRAM和特殊功能寄存器(SFRSFR)。例2 2:MOV MOV PSWPSW,#20H#20H;PSW PSW#20H#20H PSWPSW为直接寻址寄存器的符号地址。例1 1:MOV AMOV A,30H30H;A A(30H30H)思考题:直接寻址方式指令和立即寻址方式指令的形式有什么不同
6、?65H 31H 7FH30H 65HA 第5页/共48页三.寄存器寻址方式以通用寄存器的内容为操作数的寻址方式。例:MOV AMOV A,R0R0;A AR0R0设指令执行前 A=20HA=20H,R0=40HR0=40H,执行指令后,A=A=?,R0=R0=?四.寄存器间接寻址方式 以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。存放地址的寄存器称为间址寄存器或数据指针,包括R0R0,R1R1,DPTRDPTR,SPSP等。例:MOV AMOV A,R0R0;A A(R0)(R0)设指令执行前 A=20HA=20H,R0=40HR0=40H,地址为4040H H存储器单元内容如图。
7、执行指令后,A=A=?,R0=,R0=?,(40H)=,(40H)=?41H 67H 40H 30H30H40H30H40H40H0100 0000A0010 0000R00100 0000R04040H H第6页/共48页五.变址寻址方式由基址寄存器PCPC或DPTRDPTR中内容加上偏移量之和形成操作数的地址的寻址方式。偏移量由累加器A A提供。例:MOVC AMOVC A,A+DPTRA+DPTR;A A(A+DPTR)(A+DPTR)设指令执行前 A=09HA=09H,DPTR=2000HDPTR=2000H,存储器单元内容如图所示。执行指令后,A=A=?DPTR=DPTR=?12H2
8、000H 六.位寻址方式 对位地址中的内容作位操作的寻址方式。它其实是一种直接寻址方式。例:MOV MOV C C,40H40H;CyCy(位地址4040H)H)设指令执行前 Cy=1Cy=1,位地址4040H H存储器单元如上图,执行指令后,Cy=Cy=?02008H 89H2009H 12H28H 0110001029H 11010111位寻址区47H-40H位地址号4FH-48H第7页/共48页七、相对寻址 以当前程序计数器PCPC的内容为基础,加指令给出的一偏移量形成新的PCPC值的寻址方式。SJMPSJMP0606H H20002000H H20082008H HPCPC200020
9、002 2PCPC+20082008 例:SJMP 06HSJMP 06H;PC PC PC+2+06HPC+2+06H 假设该指令在程序存储器20002000H H(即PC=2000HPC=2000H),则执行指令后,PC=PC=?程序的执行过程如右图所示。即:程序转移到20082008H H处执行。20082008H H第8页/共48页3-33-33-33-3MCS-51MCS-51指令系统 指令按功能可分为如下几类:数据传送、算术运算类、逻辑运算、程序转移、子程序调用及返回、位操作指令。3-3-13-3-1 数据传送指令实现寄存器、存储器之间的数据传送。一.内部传送指令:片内数据存储器数
10、据传送。二.外部传送指令:片外数据存储器数据传送。三.交换指令:片内数据存储器数据传送。四.堆栈操作指令:片内数据存储器数据传送。五.查表指令:程序存储器数据传送。第9页/共48页一、内部传送指令:实现片内数据存储器中数据传送。指令格式:MOVMOV 目的操作数,源操作数 寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。指令机器码:E8E8EFEFE5E5 directdirectE6E6、E7E7 74 74 datadata F8F8FFFFA8A8AFAF direct direct 78787F7F data data MOV AMOV A,Rn Rn ;ARnARnMOV AM
11、OV A,directdirect;A(direct)A(direct)MOV AMOV A,Ri Ri;A(Ri)A(Ri)MOV AMOV A,#data#data ;AdataAdataMOV Rn,AMOV Rn,A;RnARnAMOV Rn,directMOV Rn,direct;Rn(direct)Rn(direct)MOV Rn,#dataMOV Rn,#data;RndataRndata MOV dirMOV dir,A A;(dir)A(dir)AMOV dirMOV dir,RnRn;(dir)Rn(dir)RnMOV dir1,dir2MOV dir1,dir2;(dir
12、1)(dir2)(dir1)(dir2)MOV dirMOV dir,#data#data;(dir)data(dir)dataMOV dir,RiMOV dir,Ri;(dir)(Ri)(dir)(Ri)MOV Ri,AMOV Ri,A;(Ri)A(Ri)AMOV Ri,dirMOV Ri,dir;(Ri)dir(Ri)dirMOV Ri,#dataMOV Ri,#data;(Ri)data(Ri)dataMOV DPTR,#data16MOV DPTR,#data16;DPTRdata16DPTRdata16指令机器码:F5 F5 dirdir88888F 8F dirdir85 85 d
13、ir2 dir1dir2 dir175 75 dir datadir data 868687 87 dirdirF6F6F7F7 dir dir A6A6A7A7 dir dir76767777 data data9090 data16 data16第10页/共48页例1 1:顺序执行下列指令序列,求每一步执行结果。MOV AMOV A,#30H#30HMOV 40HMOV 40H,A AMOV R0MOV R0,#20H#20HMOV R0MOV R0,40H40HMOV 30HMOV 30H,20H20H例2 2:用两种寻址方式实现,将片内RAM RAM 6060H H单元的数据传送给累加
14、器A A。;A=30HA=30H;(40H)=30H(40H)=30H;R0=20HR0=20H;(20H)=30H(20H)=30H;(30H)=30H(30H)=30H解2 2:MOV R0MOV R0,#60H#60H MOV AMOV A,R0R0解1 1:MOV A,60HMOV A,60H第11页/共48页说明:4.4.只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意创造发明指令。1.一条指令中不能同时出现两个工作寄存器:非法指令:MOV R1MOV R1,R2R2MOV R2MOV R2,R0R02.间址寄存器只能使用 R0R0、R1R1。非法指令:MOV A
15、MOV A,R2R23.SFRSFR区只能直接寻址,不能用寄存器间接寻址。非法指令:MOV R0MOV R0,#80H#80HMOV AMOV A,R0R0第12页/共48页二、外部传送指令实现片外数据存储器和累加器A A之间的数据传送。指令格式:MOVXMOVX 目的操作数,源操作数寻址方式:片外数据存储器用寄存器间址方式。1.1.DPTRDPTR作1616位数据指针,寻址6464KBKB片外RAMRAM空间MOVX AMOVX A,DPTRDPTR;A(DPTR)A(DPTR)MOVX DPTRMOVX DPTR,A A;(DPTR)A(DPTR)A2.2.RiRi作8 8位数据指针,寻址
16、256256B B片外RAMRAM空间MOVXMOVX A A,RiRi;A(P2Ri)A(P2Ri)MOVXMOVX RiRi,A A;(P2Ri)A(P2Ri)A指令机器码E2E2E3HE3HF2F2F3HF3HE0HE0HF0HF0H第13页/共48页例3 3:将片外数据存储器数据从20002000H H传送到21002100H H。MOV DPTRMOV DPTR,#2000H#2000HMOVX AMOVX A,DPTRDPTRMOV DPTRMOV DPTR,#2100H#2100HMOVX DPTRMOVX DPTR,A A习 题:将片外RAM 0000HRAM 0000H单元的
17、数据传送到片内RAMRAM地址为6060H H的单元。;DPTR=2000HDPTR=2000H;A=X A=X;DPTR=2100H DPTR=2100H;(2100H)=X(2100H)=X片外数据存储器不能直接寻址。下列为非法指令:MOVX AMOVX A,2000H 2000H MOVX 2100H MOVX 2100H,2000H2000H思考题:为什么对DPTRDPTR的数据传送使用内部传送指令?第14页/共48页三、交换指令 实现片内RAMRAM区的数据双向传送。1.1.字节交换指令XCH AXCH A,Rn Rn;A A Rn RnXCH AXCH A,RiRi;A A(Ri)
18、(Ri)XCH AXCH A,directdirect;A A(direct)(direct)习题:将片内RAMRAM6060H H单元与6161H H单元的数据交换。例4 4:设A=29HA=29H,(2AH)=38H,(2AH)=38H,执行指令 XCH AXCH A,2AH2AH后,A=A=?(2AH)=(2AH)=?38H29HXCH 60HXCH 60H,61H 61H 对吗?指令机器码:C8C8CFHCFHC6C6C7H C7H C5C5 dir dir 第15页/共48页2.2.半字节交换指令XCHD AXCHD A,Ri Ri;A A0 03 3 (Ri)(Ri)0 03 3
19、SWAP SWAP A A ;A A4 47 7 A A0 03 3例5 5:将片内2 2AHAH和2 2BHBH单元中的ASCIIASCII码转换成压缩式BCDBCD码存入2020H H单元。A0000000000H00001000100000001000010108H80H85HMOV A,#00HMOV R0,#2AHMOV R1,#2BHXCHD A,R0SWAP AXCHD A,R1MOV 20H,A0000000000H0000000000H85HR1R0习题:交换片内RAM RAM 4040H H单元和 41 41H H单元的低半字节。指令机器码:D6D6D7HD7HC4 C4
20、第16页/共48页四、堆栈操作指令入栈指令:PUSH dirPUSH dir;SPSPSP+1SP+1,(SP)(SP)(dir)(dir)出栈指令:POP dirPOP dir;(dir)(dir)(SP)(SP),SPSPSP-1SP-1例:设 A=02A=02,B=56HB=56H,执行下列指令后,SP=SP=?,A=A=?,B=?B=?SPSP SP 02 SP 56H 02 56H 02HSP SP 56H 02 SP 56H 02 56H SP 02 02HA56HSBRSBR:MOV SP MOV SP,#30H#30H;设栈底 PUSH APUSH A PUSH B PUSH
21、B MOV A MOV A,#00H#00H MOV MOV B B,#01H#01H POP POP B B POP A POP A机器码:C0 C0 dirdirD0D0 dir dir PCPCPCPCPCPCPCPCPCPCPCPCB00H01H56H02H第17页/共48页五、查表指令 实现从程序存储器读取数据到A A累加器,只能使用变址间接寻址方式。多用于查常数表程序,可直接求取常数表中的函数值。1 1DPTRDPTR为基址寄存器 MOVCMOVC A A,A+DPTR A+DPTR;A A(A+DPTR)(A+DPTR)查表范围为 64 64KB KB 程序存储器任意空间,称为远
22、程查表指令。2 2PCPC为基址寄存器MOVCMOVC A A,A+PCA+PC;A A(A+PC)(A+PC)常数表只能在查表指令后256256B B范围内。第18页/共48页例:查表法求Y=XY=X2 2。设X(0X15)X(0X15)在片内RAMRAM的2020H H单元中,要求将查表求Y Y,存入片内RAMRAM的2121H H单元。解法1 1:ORG 1000HORG 1000HSQU:SQU:MOV DPTRMOV DPTR,#TAB#TAB;确定表首地址(基地址)MOV AMOV A,20H20H;取X X(偏移量MOVC AMOVC A,A+DPTRA+DPTR;查表求Y=XY
23、=X2 2MOV 21HMOV 21H,A A;保存Y YRETRET;子程序结束;其它程序段ORG 2000HORG 2000H;常数表格首地址TAB:TAB:DB 00DB 00,0101,0404,0909,225225;平方表第19页/共48页解法2 2:指令地址 源程序 ORG 1000HORG 1000H ;程序起始地址 1000 1000H H SQU:SQU:MOV A MOV A,20H20H;取X X 1002H 1002H ADD A ADD A,#03H#03H ;修正偏移量 1004 1004H H MOVC AMOVC A,A+PCA+PC ;查表求Y=XY=X2
24、2 1005H 1005H MOV 21H MOV 21H,A A;存结果 1007 1007H H RET RET ;子程序结束 1008 1008H H TAB:TAB:DB 00 DB 00,0101,04 04;平方表 100 100BHBH DB DB 0909,225 225 思考题:当00X255X255时,如何用查表法编程求Y=XY=X2 2。第20页/共48页习题:找出指令错误并改正:1 1MOV AMOV A,#1000H#1000H;A1000HA1000H2 2MOVX AMOVX A,1000H1000H;A(1000H)A(1000H)片外RAM3 3MOVC AM
25、OVC A,1000H1000H;A(1000H)A(1000H)片外ROM4 4MOVX 60HMOVX 60H,A A;片外RAM(60H)ARAM(60H)A5 5MOV R0MOV R0,60H60H;片内RAMRAM:(61H)(60H)(61H)(60H)MOV 61H MOV 61H,R0R06.6.XCH R1 XCH R1,R2R2;R1R2R1R27.7.MOVX DPTR MOVX DPTR,#2000H#2000H;DPTR2000HDPTR2000H8.8.MOVX 60H MOVX 60H,DPTRDPTR;片内RAMRAM片外RAMRAM第21页/共48页3-3-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 学习 教程
限制150内