版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章,80C51系列单片机指令系统,本章要点,80C51指令的基本格式 80C51指令功能分类 指令系统中的常用符号 80C51指令系统的七种寻址方式 数据传送类指令 算术运算类指令 逻辑运算及移位指令 位操作类指令 控制转移类指令,3.1 指令系统基本概念,3.1.1 指令基本格式 标号: 操作码 操作数 ;注释,标号:指令的符号地址。 用于一段功能程序的识别标记或控制转移地址。 指令前的标号代表该指令的地址,是用符号表示的地址。 一般用英文字母和数字组成。 标号必须用冒号“ :”与操作码分隔。,操作码:表示指令的操作功能。 操作码用助记符表示,它代表了指令的操作功能。 操作码是指令的必需
2、部分,是指令的核心,不可缺少。,操作数:参加操作的数据或数据地址。 操作数可以是数据,也可以是数据的地址、 数据地址的地址或操作数的其他信息。 操作数可分为目的操作数和源操作数。 操作数可用二进制数、十进制数或十六进制数表示。 操作数的个数可以是03个。 操作数与操作码之间用空格分隔,操作数与操作数之间用逗号“,”分隔。,注释:指令功能说明。 注释属于非必需项,是为便于阅读,对指令功能作的说明和注解。 注释必须以“;”开始。,3.1.2 指令分类,80C51共有111条指令。 按指令长度分类: 可分为1字节、2字节和3字节指令。 按指令执行时间分类: 可分为1机周、2机周和4机周指令。 按指令
3、功能分类: 可分为数据传送类、算术运算类、逻辑运算类、位操作类和控制转移类等5大类指令。,3.1.3 指令系统中的常用符号,#:立即数符。 #data:8位立即数;#data16:16位立即数。 direct:8位直接地址 代表内RAM 00H7FH或SFR的80HFFH 。 :间接寻址符。 如Ri(i=0,1),DPTR,A+PC,A+DPTR。 addr11:11位目的地址。 用于ACALL、AJMP指令。 addr16:16位目的地址。 用于LCALL、LJMP指令。,rel:带符号的8位偏移地址。 用于转移指令,其范围是相对于下一条指令第1字节地址的-128+127个字节。 bit:位
4、地址。 代表片内RAM中的可寻址位00H7FH及SFR中的可寻址位。,/:位操作前缀,表示该位内容求反。 (X):表示以X为地址单元中的内容。,3.1.4 寻址方式,寻址就是寻找操作数的地址。 7种寻址方式立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。,立即寻址 立即寻址是直接给出操作数,操作数前有立即数符“ # ”。 MOV A,#30H ;将立即数30H传送至A中 ;30HA MOV DPTR,#5678H ;将立即数5678H传送至DPTR ;5678HDPTR,直接寻址 直接寻址是给出操作数的直接地址。直接寻址范围为内RAM 128B和特殊功能寄存器。 M
5、OV A,3AH;将内RAM 3AH单元中的数据传送至A中 ;(3AH)A MOV A,P0;将特殊功能寄存器P0口中的数据传送至A中;P0A,寄存器寻址 寄存器寻址的操作数在规定的寄存器中。 规定的寄存器有: 工作寄存器R0R7 累加器A 双字节AB 数据指针DPTR 位累加器Cy 这些被寻址寄存器中的内容就是操作数。 MOV A,R0 ;将R0中的数据传送至A中;R0A,寄存器间接寻址 间接寻址是根据操作数地址的地址寻找操作数,用间址符“”作为前缀。 MOV A,R0 ;将以R0中内容为地址的存储单元中的数据传送至A中 MOVX A,DPTR;将外RAM DPTR所指存储单元中的数据传送至
6、A中 PUSH PSW ;将PSW中数据传送至堆栈指针SP所指的存储单元中,变址寻址 在变址寻址中,操作数地址基址变址。用于读ROM数据操作。 基址存放在指定的基址寄存器(程序计数器PC或数据指针DPTR)中,变址存放在累加器A中,相加后形成操作数的地址。 MOVC A,A+DPTR ;将A的内容与DPTR内容相加,得到一个新地址,从该地址ROM中读取数据送入A中。,相对寻址 相对寻址一般用于相对转移指令, 转移目的地址当前PC值相对偏移量rel 位寻址 位寻址是对内RAM和特殊功能寄存器中的可寻址位进行操作的寻址方式。 MOV C,07H ;将位地址07H(字节地址20H中最高位)中的数据传
7、送至进位位Cy。,课堂练习:P89,3、7,3.2 指令系统,3.2.1 数据传送类指令 内RAM数据传送指令 以累加器A为目的字节的传送指令(4条) MOV A,Rn ;RnA ,n=07 MOV A,Ri ;(Ri)A,i=0、1 MOV A,direct ;(direct)A MOV A,#data ;dataA,例3-1,若R0=40H,(30H)=60H,(40H)=50H MOV A,R0 ;A=R0=40H MOV A,R0 ;A=(R0)=(40H)=50H MOV A,30H ;A=(30H)=60H MOV A,#30H ;A=30H,以工作寄存器Rn为目的字节的传送指令(
8、3条) MOV Rn,A ;ARn,n=07 MOV Rn,direct ;(direct)Rn,n=07 MOV Rn,#data ;dataRn,n=07,例3-2,若A=70H,(30H)=60H MOV R1,A ;R1=A=70H MOV R3,30H ;R3=(30H)=60H MOV R3,#30H ;R3=30H,注意事项:,工作寄存器之间没有直接传送的指令,若要传送,需要通过一个中间寄存器作缓冲。 例3-3 试将R1中的数据传送到R2 MOV A,R1 MOV R2,A,以直接地址为目的字节的传送指令(5条) MOV direct,A ;A(direct) MOV direc
9、t,Rn ;Rn(direct),n=07 MOV direct,Ri ;(Ri)(direct),i=0、1 MOV direct1,direct2 ;(direct2)(direct1) MOV direct,#data ;data(direct),例3-4,若A=70H,R1=30H,(30H)=60H,(4EH)=7FH MOV 4FH,A ;(4FH)=A=70H MOV 4FH,R1 ;(4FH)=R1=30H MOV 4FH,R1 ;(4FH)=(R1)=(30H)=60H MOV 4FH,4EH ;(4FH)=(4EH)=7FH MOV 4FH,#4EH ;(4FH)=4EH,
10、以寄存器间址为目的字节的传送指令(3条) MOV Ri,A ;A(Ri),i=0、1 MOV Ri,direct ;(direct)(Ri),i=0、1 MOV Ri,#data ;data(Ri),i=0、1,例3-5,若A=70H,R1=30H,(30H)=60H,(40H)=50H MOV R1,A ;(30H)=70H MOV R1,40H ;(30H)=(40H)=50H MOV R1,#40H ;(30H)=40H,例3-6,设内RAM(30H)=60H MOV 60H,#30H ;(60H)=30H MOV R0,#60H ;R0=60H MOV A,R0 ;A=(R0)=(60
11、H)=30H MOV R1,A ;R1=A=30H MOV 40H,R1 ; (40H)=(R1)=(30H)=60H MOV 60H,30H ;(60H)=(30H)=60H,例3-7,设内RAM(30H)=60H,(60H)=10H,P1口作为输入口,其输入的数据为CAH。 MOV R0,#30H ;R0=30H MOV A,R0 ;A=(R0)=(30H)=60H MOV R1,A ;R1=A=60H MOV B,R1 ;B=(R1)=(60H)=10H MOV R1,P1 ;(R1)=(60H)=P1=CAH MOV P2,R1 ;P2=(R1)=(60H)=CAH,课堂练习:P57,
12、1,2,16位数据传送指令 MOV DPTR,#data16 ;data16DPTR 将16位立即数送入DPTR,其中数据高8位送入DPH中,数据低8位送入DPL中。用MOVC指令,则一定是ROM地址,用MOVX指令,则一定是外RAM地址。 MOV DPTR,#1234H ;DPTR=1234H 该指令也可以用两条8位数据传送指令实现: MOV DPH,#12H ;DPH=12H MOV DPL,#34H ;DPL=34H,DPTR=1234H,外RAM传送指令(4条) MOVX A,Ri ;(Ri)A,i=0、1 MOVX A,DPTR ;(DPTR)A MOVX Ri,A ;A(Ri),i
13、=0、1 MOVX DATR,A ;A(DATR),说明:,MOVX指令用于80C51与片外RAM之间的数据传送;MOV指令用于80C51与片内RAM之间的数据传送。 对80C51片外RAM的访问必须采用间接寻址方式,8位间址寄存器R0、R1,16位间址寄存器DPTR。 对外部数据存储器的访问必须通过累加器A。 前两条指令为读外RAM指令,后两条指令位写外RAM指令。,例3-8,内RAM 10H单元数据送外RAM 10H单元 MOV A,10H MOV R0,#10H MOVX R0,A 外RAM 30H单元数据送内RAM 30H单元 MOV R0,#30H MOVX A,R0 MOV 30H
14、,A,外RAM 1000H单元数据送内RAM 20H单元 MOV DPTR,#1000H MOVX A,DPTR MOV 20H,A 外RAM 2010H单元数据送外RAM 2020H单元 MOV DPTR,#2010H MOVX A,DPTR MOV DPTR,#2020H MOVX DPTR,A,读ROM指令 程序中有时会涉及一些数据(或称为表格),放在ROM中,需要去读。 MOVC A,A+DPTR ;(A+DPTR)A MOVC A,A+PC ;PC+1PC,(A+PC)A,作业:P61,3,例3-9,ROM 2000H单元数据送内RAM 20H单元 MOV DPTR,#2000H M
15、OV A,#00H MOVC A,A+DPTR MOV 10H,A,ROM 2000H单元数据送外RAM 80H单元 MOV DPTR,#2000H MOV A,#00H MOVC A,A+DPTR MOV R0,#80H MOVX R0,A,ROM 2000H单元数据送外RAM 1000H单元 MOV DPTR,#2000H MOV A,#00H MOVC A,A+DPTR MOV DPTR,#1000H MOVX DPTR,A,堆栈操作指令(2条) PUSH direct ;SP+1SP,(direct)(SP) POP direct ;(SP)(direct),SP-1SP,说明:,PU
16、SH为入栈指令 例PUSH 30H;(30H)=2BH,具体操作是: 先将堆栈指针SP的内容(0FH)加1,指向堆栈顶的一个空单元,此时SP=10H; 然后将指令指定的直接寻址单元30H中的数据(2BH)送到该空单元中。,入栈操作:,POP为出栈指令 例 POP 40H; (40H)=4CH,具体操作是: 先将SP所指单元0FH(栈顶地址)中的数据(4CH)弹出,送到指定的内RAM单元40H,(40H)=4CH; 然后SP-1SP,SP=0EH,SP仍指向栈顶地址。,出栈操作:,例3-11,已知SP=60H MOV DPTR,#1234H ;DPTR=1234H PUSH DPH ;SP=SP
17、+1=61H,(61H)=DPH=12H PUSH DPL ;SP=SP+1=62H,(62H)=DPL=34H MOV DPTR,#5678H ;DPTR=5678H POP DPH ;SP=SP-1=61H,(DPH)=34H POP DPL ;SP=SP-1=60H,(DPL)=12H 执行结果:SP=60H,DPTR=3412H,交换指令(5条) 字节交换指令 XCH A,Rn ; ARn,n=07 XCH A,Ri ; A(Ri),i=0、1 XCH A,direct ; A(direct) 半字节交换指令 XCHD A,Ri ; A30(Ri)30,高4位不变。i=0、1 累加器高
18、低四位互换 SWAP A ; A74A30,例3-12,若A=12H,R0=40H,(40H)=56H,(30H)=60H XCH A,R0 ;A=40H,R0=12H XCH A,R0 ;A=56H,(40H)=12H XCH A,30H ;A=60H,(30H)=12H XCHD A,R0 ;A=16H,(40H)=52H SWAP A ;A=21H,3.2.2 算数运算类指令,加法指令 不带Cy加法指令(4条) ADD A,Rn ;A+RnA(n=07) 有进位,Cy=1;无进位,Cy=0 ADD A,Ri ;A+(Ri)A(i=0、1) 有进位,Cy=1;无进位,Cy=0 ADD A,
19、direct ;A+(direct)A 有进位,Cy=1;无进位,Cy=0 ADD A,#data ;A+dataA 有进位,Cy=1;无进位,Cy=0 一个加数总是在累加器A中!,带Cy加法指令(4条) ADDC A,Rn ;A+Rn+CyA(n=07) 有进位,Cy=1;无进位,Cy=0 ADDC A,Ri ;A+(Ri)+CyA(i=0、1) 有进位,Cy=1;无进位,Cy=0 ADDC A,direct ;A+(direct)+CyA 有进位,Cy=1;无进位,Cy=0 ADDC A,#data ;A+data+CyA 有进位,Cy=1;无进位,Cy=0 相加时再加上Cy!,减法指令(
20、4条) SUBB A,Rn ; A-Rn-CyA,(n=07), 有借位,Cy=1;无借位,Cy=0 SUBB A,Ri ; A-(Ri)-CyA,(n=01), 有借位,Cy=1;无借位,Cy=0 SUBB A,direct ; A-direct-CyA, 有借位,Cy=1;无借位,Cy=0 SUBB A,#data ; A-data-CyA, 有借位,Cy=1;无借位,Cy=0,说明:,在80C51指令系统中,减法必须带进位位。即没有不带进位位的减法指令。若要进行不带进位位的减法运算,可先将进位位Cy清0,再执行减法指令。 加减运算对PSW中的状态标志位影响:进位位Cy、辅助进位位AC、溢
21、出标志位OV、奇偶标志P。,加1减1指令 加1指令(5条) INC A ;A+1A INC Rn ;Rn+1Rn,n=07 INC Ri ;(Ri)+1(Ri), i=0、1 INC direct ;(direct)+1(direct) INC DPTR ;DPTR+1DPTR,减1指令(5条) DEC A ;A-1A DEC Rn ;Rn-1Rn, n=07 DEC Ri ;(Ri)-1(Ri), i=0、1 DEC direct ;(direct)-1(direct) 加1减1指令不影响进位标志Cy! 涉及A时,会影响P。,BCD码调整指令 DA A 功能:对加法运算结果进行BCD码调整。
22、,乘除法指令 乘法指令(1条) MUL AB ;ABBA 积低8位存于A中,高8位存于B中。 除法指令(1条) DIV AB ;(AB)商A,余数B Cy=0,OV=0,3.2.3 逻辑运算及移位指令,逻辑“与”运算指令(6条) ANL A,Rn ;ARnA ANL A,Ri ;A(Ri)A ANL A,#data ;AdataA ANL A,direct ;A(direct)A ANL direct,A ;(direct)Adirect ANL direct,#data ;(direct)datadirect,逻辑“或”运算指令(6条) ORL A,Rn ;ARnA ORL A,Ri ;A(
23、Ri)A ORL A,#data ;AdataA ORL A,direct ;A(direct)A ORL direct,A ;(direct)Adirect ORL direct,#data ;(direct)datadirect,逻辑“异或”运算指令(6条) XRL A,Rn ;A RnA XRL A,Ri ;A(Ri)A XRL A,#data ;A dataA XRL A,direct ;A(direct)A XRL direct,A ;(direct) Adirect XRL direct,#data ;(direct) datadirect,清零和取反指令 CLR A ;0A CP
24、L A ;/AA,循环移位指令(4条) 循环左移:RL A 带Cy循环左移:RLC A 循环右移:RR A 带Cy循环右移:RRC A,3.2.4 位操作类指令,位传送指令(2条) MOV C,bit ;(bit)Cy MOV bit,C ;Cybit bit与bit之间不能直接传送,必须通过C!,位修正指令(6条) 位清0指令: CLR C ;0C CLR bit ;0bit 位取反指令: CPL C ;CC CPL bit ;(bit)bit 位置1指令: SETB C ;1C SETB bit ;1bit,位逻辑运算指令(4条) 位逻辑“与”运算指令: ANL C,bit ;C(bit)
25、C ANL C,/bit ;C(/bit)C 位逻辑“或”运算指令: ORL C,bit ;C(bit)C ORL C,/bit ;C(/bit)C,3.2.5 控制转移类指令,无条件转移指令(3条) 长转移指令 LJMP addr16 ;addr150PC, 短转移指令 AJMP addr11 ;PC+2PC,addr100PC100, PC1511不变 在指令程序中,转移目标地址一般不用16进制数表达,而用转移目标的标号地址替代!,相对转移指令 SJMP rel ;PC+2PC,PC+relPC SJMP $ ;表示在原地踏步等待。 间接转移指令(散转指令) JMP A+DPTR ;A+D
26、PTRPC,LJMP、AJMP、SJMP的区别:,转移范围不一样。 LJMP转移范围是64KB; AJMP转移范围是与当前PC值同一2KB; SJMP转移范围是当前PC-128B+127B。 使用AJMP和SJMP指令应注意转移目标地址是否在转移范围内,若超出范围,程序将出错。 指令字节不一样。 LJMP是3字节指令; AJMP、SJMP是2字节指令。,条件转移指令(13条) 条件转移指令根据判断条件可分为: 判C转移 判bit转移 判A转移 减1非0转移 比较不相等转移指令 满足条件,则转移; 不满足条件,则程序顺序执行。,判C转移指令(2条) C=1转移指令: JC rel ;PC+2PC
27、, 若Cy=1,则PC+relPC,转移 若Cy=0,则程序顺序执行。 C=0转移指令: JNC rel ; PC+2PC, 若Cy=0,则PC+relPC,转移 若Cy=1,则程序顺序执行。,判bit转移指令(3条) (bit)=1转移指令: JB bit,rel ; PC+3PC, 若(bit)=1,则PC+relPC,转移 若(bit)=0,则程序顺序执行 (bit)=0转移指令: JNB bit,rel ; PC+3PC, 若(bit)=0,则PC+relPC,转移 若(bit)=1,则程序顺序执行,(bit)=1转移并清0指令: JBC bit,rel ; PC+3PC, 若(bit
28、)=1,则PC+relPC,转移,且0(bit) 若(bit)=0,则程序顺序执行,判A转移指令(2条) A=0转移指令: JZ rel ;PC+2PC, 若A=0,则PC+relPC,转移 若A0,则程序顺序执行 A0转移指令: JNZ rel ;PC+2PC, 若A0,则PC+relPC,转移 若A=0,则程序顺序执行,减1非0转移指令(2条) DJNZ Rn,rel ;PC+2PC,Rn-1Rn, 若Rn=0,则程序顺序执行 若Rn0,则PC+relPC,转移 DJNZ direct,rel;PC+3PC,(direct)-1direct 若(direct)=0,则程序顺序执行 若(direct)0,则PC+relPC,转移 DJNZ指令常用于循环程序中控制循环次数!,比较转移指令(4条) CJNE A,direct,rel;PC+3PC, 若A=(direct),则程序顺序执行 若A(direct),则PC+relPC,转移 且若A(direct),Cy=0;若A(direct),Cy=1 CJNE A,#data,rel ;PC+3PC, 若A=data,则程序顺序执行 若Adata,则PC+relPC,转移
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 腹痛腹泻课件
- 事业单位文秘岗2026强化训练全真模拟题库及解析
- 事业单位工程岗面试2026经典考题必练考题试卷及解析
- 农业科技研发项目成果绩效评估表
- 信息安全管理事件处理效率考核表
- 关于调整物流配送策略通知函7篇
- 物流链智能化整合入门指南
- 农业技术推广成效考评表
- 粉色育婴模板课件
- 航空业机务维护人员技术标准考核表
- 2026年昆明元朔建设发展有限公司收费员招聘(30人)笔试模拟试题及答案解析
- 2026年社会工作比赛模拟试题(含答案)
- 2026 年初中英语《音标》专项练习与答案 (100 题)
- 公路养护机具安全培训课件
- GB/T 10454-2025包装非危险货物用柔性中型散装容器
- 【新教材】统编版(2024)八年级上册道德与法治全册教案
- 牙克石市矿产资源开发环境承载力评价报告
- DZ/T 0075-1993地球化学勘查图图式、图例及用色标准
- 高考文言文考试单选题100道及答案
- 公共营养师基础知识
- 实验室内外部风险因素分析
评论
0/150
提交评论