单片机与嵌入式系统3_第1页
单片机与嵌入式系统3_第2页
单片机与嵌入式系统3_第3页
单片机与嵌入式系统3_第4页
单片机与嵌入式系统3_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 单片机指令系统3.1 寻址方式3.2 指令系统9/29/2022 在汇编语言中,用助记符代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。 使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。 汇编程序把汇编语言翻译成机器语言的过程称为汇编。9/29/2022指令执行过程程序是按要求实现的指令有序集合,是串行执行的。事情要一步一步做,所以需要时钟通过PC指向程序地址,完成取指放到指令寄存器中指令寄存器的译码,

2、知道要做什么按照要求完成任务PC指向下一条指令9/29/20229/29/2022 51单片机指令系统是一个具有255种代码的集合 一条汇编指令中最多包含4段: 标号:操作码操作数或操作数地址;注释9/29/2022标号: 给程序指令起个名字操作码 表明做什么操作数 源操作数,目的操作数;注释 说明程序作用,参数定义 入口参数,返回值所在, 格式9/29/2022 源操作数: “数”从哪里来 目的操作数: “数”放到哪里找数的方式就是寻址方式9/29/20223.1 寻址方式(共有7种)立即寻址 Immediate Constants直接寻址 Direct Addressing寄存器寻址 Re

3、gister Instructions寄存器间接寻址 Indirect Addressing基址变址间接寻址 Indexed Addressing相对寻址 Relative Offset Addressing位寻址 Bits Addresing9/29/2022例:MOV A,#40H MOV DPTR,#2345H ;立即寻址 MOV A,40H MOV B,P2 ;特殊功能寄存器只能用直接寻址访问 MOV A,R0 ;寄存器寻址:R0-R7、A、B、DPTR MOV A,R0 ;间接寻址只能用R0、R1或DPTR做地址指针 MOVX A,DPTR MOVC A,A+PC ;基址变址寻址 M

4、OVC A,A+DPTR ;适用于访问程序存储器中的数据表格 SJMP LOOP1 JC LOOP2 ;相对寻址只出现在相对转移指令中 CLR P1.1 ;位寻址针对20H2FH的位定义区和SFR位操作 SETB 10H ;内部SRAM 22H中的第0位9/29/2022MOV A,#40H ;A40HMOV A,40H ;A(40H)41H 78H40H 56HMOV A,R0 ;A(R0) MOV A,R0 ;A (R0)设指令执行前 A=20H,R0=40H,地址为40H存储器单元内容如图所示。执行指令后,A=? 41H 67H 40H 34HR0A20HR040H设指令执行前 A=20

5、H,R0=40H,执行指令后,A= ?9/29/2022例1 MOV A,#0 MOV DPTR, #TABLE MOVC A , A+DPTR TABLE: DB 3FH,06H,5BH,4FH ;7段共阴显示代码 例2 1000H MOV A,#10H1002H MOVC A,A+PC 1013H DB 3FH1014H DB 06H 基址变址寻址:指令给出的寄存器存放数据的基地址和偏移量。(只针对程序存储器)TABLE 3FH 06H9/29/2022位寻址范围: (1)内部RAM中的位寻址区:字节地址为20H2FH; (2)专用寄存器SFR的可寻址位:11个(83位)表示方法: (1)

6、直接使用位地址;如:PSW的第6位可表示为0D6H (2)位名称表示; 或AC (3)字节地址加位数表示; 或0D0H.6 (4)专用寄存器符号加位数表示。 或PSW.6 例: MOV C,40H;Cy(位地址40H) 设指令执行前 Cy=1,位地址40H存储器单元如图, 执行指令后,Cy= ?29H 0110001028H 11010110位寻址区9/29/2022寄存器名SFR地址位地址名位地址P080HP0.0P0.780H87HP190HP1.0P1.790H97HP2A0HP2.0P2.7A0HA7HP3B0HP3.0P3.7B0HB7HTCON88HTCON.0TCON.788H8

7、FHSCON98HSCON.0SCON.798H9FHIEA8HIE.0IE.7A8HAFHIPB8HIP.0IP.7B8HBFHPSWD0HPSW.0PSW.7D0HD7HACCE0HACC.0ACC.7E0HE7HBF0HB.0B.7F0HF7H可位寻址的SFR位地址9/29/2022 (1)对程序存储器(内、外):只能变址寻址 MOVC (2)对内部数据存储器:MOV (3)对外部数据存储器:只能寄存器间址 MOVX寄存器间接寻址方式高地址单元(65280个)低地址单元(256个)(0FFFFH0100H)(00FFH0000H)以R0或R1作间址寄存器以DPTR作间址寄存器9/29/2

8、0223.2 指令系统介绍(共5类)数据传送 Data Transfers 29条算术运算 Arithmetic Instructions 24条逻辑运算 Logical Instructions 24条位操作 Boolean Instructions 17条控制转移 Jump Instructions 17条 共111条9/29/2022回忆:51单片机的主要寄存器(1)累加器ACC,程序中有时可以简写为A (2)辅助寄存器B,乘除指令用到 (3)程序计数器PC,“不”能用程序直接访问 (4)数据指针DPTR,有的单片机有两个 (5)堆栈指针SP,复位时内容是07H,一定要记住。(6)程序状

9、态寄存器PSW 记住哪些指令影响标志位9/29/2022PSW地址 0D0H CY ACF0RS1RS0OVF1P位D7 D6D5D4D3D2D1D0复位时 00Cy(PSW.7)进位标志。有进位或借位时置1AC(PSW.6)辅助进位标志。低4位有进位或借位时F0(PSW.5)用户用位标志RS1(PSW.4)、RS0(PSW.3)选择通用寄存器组 R0R7 所在内部RAM中的位置OV(PSW.2)溢出标志。F1(PSW.1)保留。51未用,52为用户标志位P(PSW.0)奇偶标志。ACC中1的个数为奇数时置10D0H=208 PSW的地址9/29/2022影响标志位的指令(X表示有影响,o表示

10、清零,1表示置一)9/29/2022Rn 当前工作寄存器中的某一个,即R0R7; Ri R0或者R1Direct 单片机内部RAM低128字节(00h7fh)中的某个字节地 址,或者是某个专用寄存器的名字;#data 8位(1字节)立即数#data16 16位(2字节)的立即数Addr16 16位目的地址,在LJMP和LCALL的指令中采用Addr11 11位目的地址,只在AJMP和ACALL指令中采用Rel 相对转移指令中的偏移量。DPTR 数据指针(由DPH和DPL构成)Bit 内部RAM(包括专用寄存器)中可寻址位的地址或名字A 累加器ACCB B寄存器 间接寻址标志 / 加在位地址前,

11、表示对该位状态取反(X) 某寄存器或某单元的内容(X) 由X间接寻址的单元中的内容指令中符号的意义说明9/29/2022一、数据传送类指令 格式: MOV 目的, 源 传送到A累加器的指令 MOV A, Rn ;n=0,1,.7 MOV A,direct ; direct是地址 MOV A,Ri ;i=0,1 MOV A,#data ; #data是立即数 MOV A,B ; 9/29/2022 传送到Rn的指令 MOV Rn, A MOV Rn,direct MOV Rn,#data 传送到内部RAM或特殊功能寄存器 MOV direct, A MOV direct,Rn MOV direc

12、t, direct ;地址到地址 MOV direct, Ri MOV direct, #data (高128只能用间接寻址)9/29/2022传送到Ri指定的单元 MOV Ri , direct MOV Ri, A传送到DPTR寄存器 MOV DPTR,#data16传送到外部RAM中(配合WR,RD) MOVX A,DPTR(16位指针可寻址64KB外部RAM) MOVX DPTR,A MOVX A,Ri (8位指针可寻址256B外部RAM) MOVX Ri,A 9/29/2022 说 明: 只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意创造发明指令。1. 一条指令中

13、不能同时出现两个工作寄存器:非法指令:MOV R1,R2MOV R2,R02. 间址寄存器只能使用 R0、R1。 非法指令: MOV A,R23. SFR区只能直接寻址,不能用寄存器间接寻址。非法指令: MOV R0,#80H MOV A,R0 ;(52系列的,认为是高128B的间接寻址)4.片外数据存储器不能直接寻址,且只能通过A累加器传递数据。 非法指令: MOVX A,2000H MOVX 2100H,2000H9/29/2022例1:MOV A,#30HMOV 4FH,AMOV R0,#20HMOV R0,4FHMOV 21H,20H例2:用两种寻址方式实现,将片内RAM 60H单元的

14、数据传送给累加器A。解: MOV A,#60H()MOV R0,#60H () MOV A,R0;A= 30H;(4FH)= 30H;R0= 20H;(20H)= 30H;(21H)= 30HMOV R0,60H MOV A,R0 () 解: MOV A,60H () 结果A=32H顺序执行下列指令序列,求每一步执行结果。9/29/2022堆栈操作指令 MOV SP,#data ;设堆栈 PUSH direct ; POP direct ; PUSH A ; POP A ; PUSH PSW (ACALL、LCALL、中断要硬件执行PC入栈, 先低8位,后高8位。) 错 !PUSH ACCPO

15、P ACCSPSP+1;(SP) (direct)(SP) (direct);SP SP-1MCS -51 提供一个向上升的堆栈, 因此SP设置初值时要充分考虑堆栈的深度, 要留出适当的单元空间, 满足堆栈的使用。 9/29/2022练习:说明程序执行过程中,SP的内容及堆栈中内容的改变过程。 MOV SP,#30H MOV A,#20H MOV B,#30H PUSH ACC PUSH B MOV A,#30H MOV B,#20H POP B POP ACC;SP=30H;A=20H;B=30H;SP=31H (31H)=20H ;SP=32H (32H)=30H ;A=30H;B=20H

16、 ; B=30H SP=30H;A=20H SP=31H 9/29/2022 代码区(程序区)操作指令(查表用) MOVC A,A+DPTR MOVC A,A+PC 实现从程序存储器读取数据到A累加器,1DPTR为基址寄存器:查表范围为 64KB 程序存储器任意空间,称为远程查表指令。2PC为基址寄存器:只能在查表指令后256B范围内,称为近程查表指令。9/29/2022例:程序1: ORG 1000H SQU: MOV DPTR,#3000H ;确定表首地址(基地址) MOV A,20H ;取 X(变量:偏移量) MOVC A,A+DPTR ;查表求Y=X2 MOV 21H,A ;保存Y(结

17、果) RET ;子程序结束 ;其它程序段 ORG 3000H ;常数表格首地址 TAB: DB 00,01,04,09, ,225;平方表 END查表法求Y=X2。设X(0X15)在片内RAM的20H单元中,要求查表求Y,存入片内RAM 21H单元。9/29/2022例:程序2:指令地址 源程序 ORG 1000H ;程序起始地址1000H SQU: MOV A,20H ;取X1002H ADD A,#3 ;修正偏移量1004H MOVC A,A+PC ;查表求Y=X2 (PC=1005H)1005H MOV 21H,A ;存结果1007H RET ;子程序结束1008HTAB: DB 00,

18、01,04 ;平方表100BH DB 09, ,225 查表法求Y=X2。设X(0X15)在片内RAM的20H单元中,要求查表求Y,存入片内RAM 21H单元。思考:当0X255时,如何用查表法编程求Y=X2。9/29/2022 字节交换指令 XCH A,Rn ;A Rn XCH A,Ri ;A (Ri) XCH A,direct ;A (direct) (全字节交换) SWAP A ;半字节交换(高4位与低4位交换)9/29/2022习题:找出指令错误并改正1MOV A,#1000H 2MOVX A,1000H3MOVC A,1000H4MOVX 60H,A 5MOV R0,60H MOV

19、61H,R0 6. XCH R1,R27. MOVX DPTR,#2000H 8. MOVX 60H,DPTR9/29/2022影响标志位的指令(X表示有影响,o表示清零,1表示置一)二、 算术运算指令9/29/2022 (一) 加法指令 不带进位加指令 ADD A,Rn ;A=A+Rn ADD A,direct ;A=A+(direct) ADD A,Ri ;A=A+(Ri) ADD A,#data ;A=A+data 带进位加指令 ADDC A,Rn ;A=A+Rn+Cy ADDC A,direct ;A=A+(direct)+Cy ADDC A,Ri ;A=A+(Ri)+Cy ADDC

20、A,#data ;A=A+data+Cy算术运算指令主要完成片内RAM和A中数据的加减乘除运算。9/29/2022 增量(增1)指令 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 十进制调整指令 DA A (在BCD码运算中,要进行调整) 9/29/2022教材P77例3-15:试编写十进制数2345H加5678H的程序段,结果存于40H(低位)、41H(高位)中。 9/29/2022 (二) 减法指令 带借位减法指

21、令 没有不带借位的减法指令 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 (对BCD码无调整指令) 减1指令 DEC A ;A=A-1 DEC Rn ;Rn=Rn-1 DEC direct ;(direct)=(direct)-1 DEC Ri ;(Ri)=(Ri)-19/29/2022 (三) 乘法指令 MUL AB ;A X B (高位在B中,低位在A中 clear Cy 结果小于等于255 OV=0,大于则置1) (四) 除法指令 D

22、IV AB ;A/B(整数在A中,余数在B中,clear Cy &OV=0) 如果B(除数)=0,OV=19/29/2022三、 逻辑运算指令 简单的逻辑运算指令 CLR A ;A=0,清零 CPL A ;将A中的数按位取反 RL A ;A中的数左循环移一位(不带Cy) RR A ;A中的数右循环移一位(不带Cy) (小循环) RLC A ; A中的数带Cy左循环移一位 RRC A ; A中的数带Cy右循环移一位 (大循环) 9/29/2022例:把30H和31H两单元存放的16位二进制数扩大二倍。(P68) CLR C MOV A,30H RLC A MOV 30H,A MOV A,31H

23、RLC A MOV 31H,A9/29/2022 逻辑与指令(按位与) 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 9/29/2022 逻辑或指令(按位或) ORL A,Rn ;A=A或Rn ORL A,direct ;A=A或(direct) ORL A,Ri ;A=A或Ri ORL A,#data ;A=A或data O

24、RL direct,A ;(direct) =direct或A ORL direct,#data ;(direct)=(direct)或data9/29/2022 逻辑异或指令(按位异或) 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 ;(diect)=(direct)异或A XRL direct,#data ;(diect)=(direct)异或data9/29/2022P77课后题3-14:设A=83H,R0=17H,(17H)=34H,

25、执行下面程序后,A为何值?。 ANL A,#27H ORL 17H,A XRL A,R0 CPL A9/29/2022四、控制转移指令 (一) 无条件转移 SJMP rel ;在-128+127内跳转 SJMP $ ;原地转圈 AJMP addr11 ;在 2K地址内跳转 LJMP addr16 ;在 64K地址内跳转 JMP A+DPTR ;间接转移(多分支转移)9/29/2022JMP A+DPTR 多分支转移应用:处理功能键KEY: MOV DPTR,#KTAB MOV A,40H ADD A,A JMP A+DPTRKTAB: LJMP FUNC0 LJMP FUNC1 FUNC0:

26、FUNC1: 要求不同功能键执行不同程序段,设每个功能键对应一个键值X(0X0FH)。假设X已存入片内RAM的40H单元中。若X=0,则执行程序段FUNC0;若X=1,则执行程序段FUNC1; 9/29/2022 JZ rel ; 在 -128+127内跳转 (A=0,跳转) JNZ rel ; 在 -128+127内跳转 (A!=0,跳转) (二) 有条件转移 对累加器A的判零转移9/29/2022 比较不相等转移 CJNE A,direct,rel; CJNE A,#data,rel; CJNE Rn,#data,rel; CJNE Ri,#data,rel; (跳转范围-128+127,

27、相对寻址) 减1不为0跳转(循环转移) DJNZ Rn,rel; DJNZ direct,rel; (跳转范围-128+127,相对寻址) 9/29/2022(三)调用子程序 ACALL rel(addr11) ;在2K内 LCALL rel(addr16) ;在64K内9/29/2022(四)调用子程序返回指令 RET ;一般调用返回(子程序) RETI ;硬件中断返回(中断程序) (五)空操作指令 NOP ;不做任何操作,延时一个机器周期9/29/2022注意:常用格式:MAIN: MOV SP,#30H ;设置栈顶 ;主程序LCALL SUBR;调用SUBRSUBR:;子程序首地址RET

28、;子程序返回1、子程序起始指令要使用标号,用作子程序名。2、执行返回指令RET之前,保证栈顶内容为主程序返回地址,以便正确返回主程序。9/29/2022五、 位操作指令9/29/2022 片内RAM中的位寻址区9/29/2022特殊功能寄存器位地址表9/29/2022位地址表达形式举 例1)直接地址方式0A9H2)点操作符方式IE.13)位名称方式ET04)用户定义方式用伪指令BIT定义的位 T0ZD BIT ET0允许用T0ZD代替ET09/29/2022 位传送指令 MOV C, bit ; C是进位位(Cy) MOV bit,C ; C是进位位(Cy) (bit可以是I/O口,也可以是bit变量) 位变量修改指令 CLR C ; Cy=0 CLR bit ; bit=0 CPL C ;C取反 CPL bit ;bit取反 SETB C ;C=1; SETB bit ;bit=1;

温馨提示

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

评论

0/150

提交评论