版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及应用451单片机指令集51单片机(汇编)指令集任何CPU的指令都使用“二进制”机器码!用数字(代码)表达需要CPU执行的功能显然是极不方便的!采用“助记符”表达“二进制机器码”,便于编写程序。“助记符”也称为“助记符指令”。用“助记符”编写的程序,称为“汇编语言程序”“助记符→二进制机器码”过程称为“汇编”“二进制机器码→助记符”过程称为“反汇编”常用的指令表达方式为:
[标号:]助记符
操作对象1(结果),操作对象2寻址方式Addressing地址(动名词),翻译为“寻址”一般意义:可以访问的所有地址空间的“地址表达式”指令中的意义:“地址”的表达形式:直接用“地址码”表达——称为“直接寻址”用“寄存器内容”表达——称为“寄存器间接寻址”寄存器作为访问对象——称为“寄存器寻址”直接使用常数(立即数)——称为“立即寻址”固定地址+偏移——称为“变址寻址”,也称:基址+变址当前程序地址±相对偏移——相对寻址操作数是位寄存器或者位变量——位寻址不同CPU还有其它表达方式(寻址方式)51单片机指令通用符号Rn代表R0,R1~R7中任意一个,即:n=0,1~7Ri代表R0或R1,即:i=0.1#data代表8位立即数(常数)#data16代表16位立即数(常数)Direct代表直接地址:8位地址码(变量名)或寄存器名:寄存器除A,Rn外)rel带符号的8位相对偏移地址Addr11addr1611位或者16位地址@Ri用Ri的内容表达地址(8位地址)@DPTR用DPTR的内容表达地址(16位地址)LABEL程序入口的名称BIT位变量、位寄存器,如:P1.0,C,ACC.7等51单片机寻址表达式1直接寻址:操作对象是地址、变量名、SFR中的寄存器名。例如:
MOV20H,AMOVSP,#30HPUSHACC(寄存器)间接寻址:通过寄存器指出访问地址,寄存器只能使用R0,R1或DPTR,在寄存器前面冠以符号@。例如:MOV@R1,AMOVX@DPTR,A此表达方法可以方便地用于循环程序51单片机寻址表达式2寄存器寻址:对寄存器操作。寄存器指:Rn和A,其余“寄存器”不算。例如:MOVR4,AINCR7立即寻址:操作数是常数(立即数)。常数前冠以符号#,例如:MOVA,#30MOV20H,#30H位寻址:操作数是位寄存器或者位变量,例如:MOVP1.0,CSETBP1.151单片机寻址表达式3变址寻址:基本地址+偏移量。基本地址用DPTR表达,偏移量用A表达,在寄存器前面冠以符号@。例如:MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR相对寻址:当前程序地址+(±相对偏移)即PC+rel,相对偏移是一个8位符号数rel,其范围-128~+127之间,表达为另一个程序入口的label,此label的距离不能太远,汇编器自动计算出相对偏移。主要用于“条件转移”指令,例如:DJNZR7,labelJNClabel51单片机指令-内部传送指令立即寻址MOVA,#DATAMOVRn,#DATAMOV@Ri,#DATAMOVDirect,#DATA直接寻址:MOVA,DirectMOVDirect,AMOVDirect,RnMOV@Ri,DirectMOVDirect1,Direct251单片机指令-内部传送指令间接寻址MOVA,@RiMOV@Ri,AMOVDirect1,@Ri寄存器寻址MOVA,RnMOVRn,AMOVDirect1,Rn51单片机指令-外部传送指令MOVX@DPTR,AMOVX@Ri,A页面由P2确定MOVXA,@DPTRMOVXA,@Ri页面由P2确定MOVCA,@A+DPTR查表指令MOVCA,@A+PC补充:MOVDPTR,#data16唯一16位传送注意:当使用Ri作外部访问时,只能访问256字节空间,我们称之为1页,页面地址可以送到P2口锁定,因此同样可以访问64K空间(256页)。许多增强内核的51单片机具有两个DPTR,功能改善很多。51单片机指令-堆栈操作指令PUSHDirect存储器内容存入堆栈POPDirect堆栈内容回存到存储器注意,累加器A出入栈时,写为:PUSHACC和POPACC堆栈指令只对“直接地址”有效!对A、Rn无效51单片机指令-数据交换指令XCHA,RnXCHA,directXCHA,@Rn半字节交换指令:XCHDA,@Ri只交换低四位
SWAPA累加器A的高4位和低4位交换,相当于字节循环移位4次字节拆分程序举例MOVMEM,#0MOVMEM+1,#0 ;对MEM的连续两个存储器清零MOVR0,#MEM ;用R0表达MEM地址MOVA,HEX ;读取待拆数据,假定为“0ABH”XCHDA,@R0 ;MEM中为“0BH”,A中为“A0H”INCR0SWAPA ;A中高低4位互换,“A0H”变“0AH”MOV@R0,A ;存“0AH”到MEM+1此程序常用作显示前的处理,一个数码管只能显示1个16进制数据,1字节数据要用2个数码管才能显示。51单片机指令-算术运算指令加法:带进位加法:ADDA,RnADDCA,RnADDA,directADDCA,directADDA,@RnADDCA,@RnADDA,#dataADDCA,#data后者吧“C”作为最低位连同数据一起进行相加,常用于16位加法的高8位相加。C是真正意义上的“进位”-低8位相加后的进位。51单片机指令-算术运算指令减法,必须带上“借位”SUBBA,RnSUBBA,directSUBBA,@RnSUBBA,#data一般使用时,先要使C=0即:CLRC,16位减法时,高8位运算不要清除C51单片机指令-加1减1指令INCADECAINCRnDECRnINCdirectDECdirectINC@RiDEC@Ri它们的操作不影响状态标志PSW,即:FFH+1=0或0-1=FFH,不会产生进位或者借位标志51单片机指令-乘除法指令等乘除法指令:MULABA*B=BA结果:高8位在B,低8位在ADIVABA/B=A……B结果:商在A,余数在B十进制调整指令DAABCD码加减之后,将结果又恢复成BCD码数据指针加1指令INCDPTR16位数据指针只能加1,不能减11字节16进制数转换成3字节BCD数举例设HEX中存放着一个16进制(2进制)数,如果要将它送到数码管进行显示,首先要将其转换成3字节的BCD数,每字节的值<09。假定转换结果存放到BUFF的连续3个单元中,依次为:百位;十位和个位。数据转换程序如下:CHDBCD: MOVR0,#BUFF MOVA,HEX MOVB,#100 DIVAB MOV@R0,A;存百位
INCR0 MOVA,B;余数再除 MOVB,#10 DIVAB MOV@R0,A;存十位 INCR0 MOV@R0,B;存个位 RET显然,BCD数(键盘输入的数)要转换成2进制或者16进制数,用乘法就可以了!只是这里举例的数都小于255。对“大于255”的数,需要用16位乘除法子程序处理。51单片机指令-逻辑运算指令与ANLA,RnANLA,directANLA,@RiANLA,#dataANLdirect,AANLdirect,#data或ORLA,RnORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data指令的最后一个字符“L”意义为“逻辑”51单片机指令-逻辑运算指令异或XRLA,RnXRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data异或:两者的对应8位,各位相同时,结果为0,不同为1。前面讨论的“与”、“或”、“异或”,都是字节中对应位进行运算。51单片机指令-累加器指令累加器清零CLRA其结果等于:MOVA,#00H累加器取反CPLA结果:A的各位变反,例如:MOVA,#01110000BCPLA结果:A=10001111B51单片机指令-移位指令只能对累加器A操作全部都是“旋转”而不是“移位”!(Rotate)因此指令全都带有“R”开头分为:不含“进位”和“带进位”两种操作方式;又分为向左和向右两种逻辑方式,共4条指令51单片机指令-移位指令RLARRARLCARRCASWAPAACC.7ACC.0ACC.7ACC.0ACC.7ACC.0CACC.7ACC.0C高低4位互换,等效于执行4次“RRA”或者执行4次“RLA”指令51单片机指令-无条件转移指令LJMPaddr16长转移,可转到64KB范围的任意地址。PC=addr16。3字节指令。AJMPaddr11绝对转移,当前PC地址保留高5位,其余11位被addr11替换。范围2KB,但不对称。2字节指令SJMPrel短转移,采用相对地址,范围相对当前PC值的-128~+127字节之间。单字节指令。以上addr16,addr11和rel在编程时使用“标号label”JMP@A+DPTR散转。DPTR内存放“散转表”起始地址,A是散转序号×表间隔。“散转表”是由若干转移指令组成的数据表。AJMP和ACALL指令
跳转和调用地址分析当前PC值16位中保留高5位不变,低11位地址被addr11替代。假定当前PC=0101100000000000H,则addr11所表达的地址必然在PC的后面,也就是说:只能向后跳。假定当前PC=01011FFFFFFFFFFFH,则addr11所表达的地址必然在PC的前面,也就是说:只能向前跳。因此,addr11虽然表达了2K空间,但不是对称于PC的。这两条指令的优越性在于只用2字节。但是有时编译过程中会出现“地址超出范围”错误,此时可以把一些程序模块整体移动一下秩序,使PC值发生变化就行了(程序存储顺序变化)。散转表举例间隔2字节举例:MOVDPTR,#JTAB1MOVA,FUNC_NOCLRCRLCA;乘间隔2JMP@A+DPTRJTAB1:AJMPFUNC0AJMPFUNC1AJMPFUNC2AJMPFUNC3……间隔4字节举例:MOVDPTR,#JTAB1MOVA,FUNC_NOCLRCRLCARLCA;乘间隔4JMP@A+DPTRJTAB1:NOPLJMPFUNC0NOPLJMPFUNC1NOPLJMPFUNC2……51单片机指令-
-条件转移指令要点条件转移指令全部使用相对转移,其转移的目的地不能太远(-128~+127之间)。当目的地较远时,可以设置两次跳转(加一个“跳板”)此处我们连同“位条件”一起作讲解符号“rel”表示相对寻址,编程时使用“label”51单片机指令-条件转移指令对累加器判零转移。指令中看不见“A”JZrel JNZrel两数比较,不相等转移。唯一使用两个逗号的指令CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel两数相减只改变标志,不保留结果,即:被减数不会变化。可以再判“借位C”从而判大小。51单片机指令-位条件转移指令对进位C判断 JCrel JNCrel对“位”状态判断 JBBIT,rel JNBBIT,rel指令里的“B”字表示BIT=“1”,NB表示BIT=“0”,下面意义相同JBCBIT,rel 当BIT=1时转移,并顺便将BIT清除使BIT=0判数据大小举例假定A中有一个数,不知道大小,当其>data时转到label1,当其<data转到label2,当其=data时转到label3,程序如下: CJNEA,#data,label0 LJMPlabel3Label0: JClabel2 LJMPlabel1循环转移指令DJNZRn,rel双字节DJNZdirect,rel3字节操作(PC=PC+2;Rn=Rn-1ifRn不等于零PC=PC+rel
循环延时程序举例查指令表,DJNZRn,rel指令执行时间为2个机器周期,如果使用12M频率的晶振,则执行一次“DINZ”指令需要2uS时间。如果此指令执行200次,可以延时0.4mS.可以设计延时30mS的程序,DJNZ应当执行:30000uS/2uS=15000=150*100次(或者250×60)。程序如下:DELAY30MS:MOVR7,#100(#60)DELAY:MOVR6,#150(#250)DINZR6,$DJNZR7,DELAYRET这里符号“$”表示转移到本行前。凑15000时,注意每个数不能超过255(1字节)通常内循环取较大的数,外循环取较小的数,这样延时误差可以减小些51单片机指令-调用和返回指令调用指令LCALLaddr16 子程序可在64KB中任意地址,PC=addr163字节执行过程:(PC)=(PC)+3
(SP)=(SP)+1((SP))=(PC0~7)(SP)=(SP)+1((SP))=(PC8~15)
(PC)=addr16调用和返回指令ACALLaddr11 绝对调用,当前PC地址保留高5位,其余11位被addr11替换。范围2KB,但不对称。2字节执行过程:(PC)=(PC)+2
(SP)=(SP)+1((SP))=(PC0~7)(SP)=(SP)+1((SP))=(PC8~15)
(PC11~15)=(PC11~15)(PC0~10)=addr11 调用和返回指令调用指令针对子程序,编程时使用子程序入口的标号(label)子程序结束时有“返回”指令,可以回到调用前的下一条指令处。(和直接跳转最大不同点)“当前PC值”指:读取调用指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026年天津市北师大版高中物理电磁学专项测试卷
- 2025-2026年四川省人教版初中物理第1单元力学基础综合测试卷
- 2026年广东省北师大版高中生物必修第二册单元测试卷
- 2025-2026年人教版高中数学概率统计模拟试卷
- 2026年江苏省部编版高中英语第4单元语法填空题库
- 2025年湖南省人教版高中物理必修第一册第10单元模拟试卷
- 2026年人教版高中物理选修3-16热学专项训练题库
- 2025-2026年辽宁省人教版初中物理实验操作模拟试题
- 从食品安全合规到风味保鲜的PU值控制投资策略范式转移
- ESG评级体系纳入对针刺提花地毯项目融资成本与退出路径的重塑
- 2026秋初中人教版数学八年级上册(新教材)教学计划
- 2026年乡镇综合执法队员题库
- 2026新教科版科学六年级上册全套分组演示实验报告(共28个实验可用下料填写实验报告单)
- 2026年秋季小学学校开学教师大会上的校长发言稿
- 2026年海南(中考)地生会考真题考试试题及答案
- 《热爱班集体》教学课件-2026-2027学年统编版(新教材)小学道德与法治四年级上册
- 2026年初中语文教研组教学计划方案
- 手术室护理质量持续改进
- 民革支部工作制度汇编
- 北京大兴新机场招聘笔试题库2026
- 初三化学下课件
评论
0/150
提交评论