版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及接口技术第三章第1页,共86页,2023年,2月20日,星期一3.1MCS-51单片机指令系统简介 MCS-51单片机能够识别并执行的指令共有111条。这111条指令,构成了MCS-51单片机的指令系统。 3.1.1MCS-51单片机指令系统的分类 1、MCS-51单片机指令系统按指令所占的字节数可分为以下三类: (1)单字节指令(49条) (2)双字节指令(46条) (3)三字节指令(16条)第2页,共86页,2023年,2月20日,星期一 2、按指令的执行时间可分为以下三类:(1)单周期指令(65条)(2)双周期指令(44条)(3)四周期指令(2条)3、按指令的功能可分为以下五类:(1)数据传送类指令(29条)(2)算术运算类指令(24条)(3)逻辑运算类指令(24条)(4)控制转移类指令(17条)(5)位操作类指令(17条)第3页,共86页,2023年,2月20日,星期一
3.1.2指令格式 MCS-51单片机汇编语言指令由操作码和操作数两部分组成。 指令格式为:操作码[操作数]第4页,共86页,2023年,2月20日,星期一 3.1.3指令中的常用符号· Rn:表示当前工作寄存器R0~R7中的一个。· @Ri:表示寄存器间接寻址,常常作间接寻址的地址指针。其中Ri代表R0和R1寄存器中的一个。· Direct:表示内部数据存贮器单元的地址及特殊功能寄存器SFR的地址,对SFR而言,既可使用它的物理地址,也可直接使用它的名字。· #date:表示8位立即数,即8位常数,取值范围为#00H~#0FFH第5页,共86页,2023年,2月20日,星期一 ·#date16:表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFH· addr16:表示16位地址· addr11:表示11位地址· rel:用补码形式表示的地址偏移量,取值范围为-128~+127。· Bit:表示内部RAM和SFR中的具有位寻址功能的位地址。SFR中的位地址可以直接出现在指令中,为了阅读方便,往往也可用SFR的名字和所在的数位表示。如:表示PSW中奇偶校验位,可写成D0H,也可写成PSW.0的形式出现在指令中。· @:表示间接寻址寄存器或基址寄存器的前缀符号。· $:表示当前指令的地址。第6页,共86页,2023年,2月20日,星期一 3.1.4寻址方式 1、立即寻址 立即寻址是将操作数直接存放在指令中,作为指令的一部分存放在代码段里。立即寻址中的数,称为立即数。 例如指令:MOVA,#30H 2、直接寻址 直接寻址是将操作数的地址直接存放在指令中。这种寻址方式的操作数只能存放在内部数据存贮器和特殊功能寄存器中。 例如:MOVA,30H第7页,共86页,2023年,2月20日,星期一 3、寄存器寻址 寄存器寻址是指操作数存放在以上所说的寄存器中,并且寻址时的寄存器已隐含在指令的操作码中。 例如:MOVA,R0 4、寄存器间址 寄存器间址是指操作数存放在以寄存器内容为地址的单元中 例如:MOVA,@R0第8页,共86页,2023年,2月20日,星期一 5、变址寻址 变址寻址是指操作数存放在变址寄存器和基址寄存器的内容相加形成的数为地址的单元中。其中累加器A作变址寄存器、程序计数器PC或寄存器DPTR作基址寄存器。 例如:MOVCA,@A+DPTR 6、相对寻址 相对寻址是将程序计数器PC的当前值与指令第二字节给出的偏移量相加,从而形成转移的目标地址。 例如:JZ61H第9页,共86页,2023年,2月20日,星期一 7、位寻址 位寻址,是指对片内RAM中20H~2FH中的128个位地址,以及SFR中的11个可进行位寻址的寄存器中的位地址寻址。 例如:位寻址指令MOVC,20H,此指令是将RAM中位寻址区20H位地址中的内容,送给位累加器C。字节地址寻址指令:MOVA,20H,此指令是将内部RAM中20H单元中的内容送给累加器A。第10页,共86页,2023年,2月20日,星期一3.2MCS-51单片机指令系统3.2.1数据传送类指令1、内部传送指令(16条)(1)将数据传送到累加器A的指令(4条)第11页,共86页,2023年,2月20日,星期一第12页,共86页,2023年,2月20日,星期一(2)将数据传送到工作寄存器Rn的指令(3条)第13页,共86页,2023年,2月20日,星期一 (3)将8位数据直接传送到直接地址(内部RAM单元或SFR寄存器)指令(5条)第14页,共86页,2023年,2月20日,星期一 (4)将8位数据传送到以间接寄存器寻址的RAM单元的指令(3条)。第15页,共86页,2023年,2月20日,星期一(5)16位数据传送指令(1条)第16页,共86页,2023年,2月20日,星期一第17页,共86页,2023年,2月20日,星期一第18页,共86页,2023年,2月20日,星期一第19页,共86页,2023年,2月20日,星期一第20页,共86页,2023年,2月20日,星期一第21页,共86页,2023年,2月20日,星期一第22页,共86页,2023年,2月20日,星期一第23页,共86页,2023年,2月20日,星期一第24页,共86页,2023年,2月20日,星期一第25页,共86页,2023年,2月20日,星期一第26页,共86页,2023年,2月20日,星期一第27页,共86页,2023年,2月20日,星期一第28页,共86页,2023年,2月20日,星期一第29页,共86页,2023年,2月20日,星期一第30页,共86页,2023年,2月20日,星期一第31页,共86页,2023年,2月20日,星期一第32页,共86页,2023年,2月20日,星期一第33页,共86页,2023年,2月20日,星期一第34页,共86页,2023年,2月20日,星期一第35页,共86页,2023年,2月20日,星期一第36页,共86页,2023年,2月20日,星期一第37页,共86页,2023年,2月20日,星期一3.3汇编语言程序设计 3.3.1汇编语言及其语句格式 1、汇编语言 这里介绍MCS-51单片机的汇编语言。 2、汇编语言的语句格式 一条汇编语言的语句包括四部分内容:标号、操作码、操作数和注释。其格式为: 标号:操作码操作数;注释 例如:LOOP:MOVA,#20H;(A)←20H第38页,共86页,2023年,2月20日,星期一3.3.2伪指令1、定位伪指令格式:ORGn2、定义字节伪指令格式:标号:DBX1,X2,……Xn此伪指令的功能是把Xi存入从标号开始连续的单元中。3、定义双字节伪指令格式:标号:DWX1,X2,……Xn此伪指令的功能是把Xi存入从标号开始的连续单元中。第39页,共86页,2023年,2月20日,星期一 4、预留存贮区伪指令 格式:DSn DSn从标号指定单元开始,预留n个单元的存贮区。 5、赋值伪指令 格式:字符名称xEQUn 此指令的功能是将数据或地址n赋给字符名称。 6、结束汇编指令 格式:END END指示源程序到结束,常将其放在汇编语言源程序的末尾。第40页,共86页,2023年,2月20日,星期一 3.3.3汇编语言程序设计过程 1、分析任务,确定算法或解题思路 2、根据算法和解决思路画出程序流程图 流程图是由一些框图和流程线组合而成:
` 置的框图连接在一起,位于不同框图的圈内,应标注相同的字母。第41页,共86页,2023年,2月20日,星期一 3、根据流程图编写程序 4、上机调试程序 3.3.4顺序结构程序设计 按照程序编写的顺序,依次执行。任何复杂的程序,都含有较大成份的顺序结构程序。 【例3-8】将两位压缩BCD码转换成二进制数 编程思路:(a1a0)BCD=a1×10+a0 编程说明:待转换的两位压缩BCD码存放于R2,转换结果存回R2。 程序流程图如图3-1所示。第42页,共86页,2023年,2月20日,星期一第43页,共86页,2023年,2月20日,星期一编程如下:START:MOVA,R2ANLA,#0F0H;取高位BCD码SWAPAMOVB,#0AHMVLABMOVR3,AMOVA,R2ANLA,#0FH;取低位BCD码ADDA,R3MOVR2,AEND第44页,共86页,2023年,2月20日,星期一3.3.5分支程序设计第45页,共86页,2023年,2月20日,星期一 【例3-9】求符号函数的值 1当X>0 Y= 0当X=0的值。 -1当X<0 编程说明:设变量X存放在40H单元中,函数Y存放在41H单元中。此程序为三分支程序。 程序流程图如图3-3所示。第46页,共86页,2023年,2月20日,星期一第47页,共86页,2023年,2月20日,星期一编程如下:START:MOVA,40HJZCOMPJNBACC.7,POSTMOVA,#81H;表示-1SJMPCOMPPOSI:MOVA,#01H;表示+1COMP:MOV41H,AEND第48页,共86页,2023年,2月20日,星期一【例3-10】求单字节有符号二进制数的补码。第49页,共86页,2023年,2月20日,星期一编程如下:CMPT: MOVA,30H JNBACC.7,NCH ;(A)≥0,不需要转换 MOVC,ACC.7 ;保存符号 MOV10H,C CPLA ADDA,#1 MOVC,10H MOVACC.7,C ;恢复符号NCH: END第50页,共86页,2023年,2月20日,星期一第51页,共86页,2023年,2月20日,星期一 图3-5中,K的最大值一般为128。 【例3-1】用单片机作四则运算。 编程说明:在单片机系统中,设置+、-、×、÷四个运算键,这四个运算键的键值分别为0、1、2、3(键值存放在寄存器(2中),当其中一个按键按下时,进行相应的运算。 P1口输入被加数、被减数、被乘数或被除数,以及运算结果的低8位或商。 P3口输入加数、减数、乘数或除数,,以及结果的高8位或余数。 键号存放在累加器A中。 程序流程图如图3-6所示。第52页,共86页,2023年,2月20日,星期一第53页,共86页,2023年,2月20日,星期一参考程序如下:START:MOVP1,#0FFHMOVP3,#0FFHMOVDPTR,#TABLECLRCMOVA,R2SUBBA,#04HJNCERRORADDA,#0-4H第54页,共86页,2023年,2月20日,星期一CLRCRLA;正确的散转偏移号,键号×2JMP@A+DPTRTABLE:AJMPPRG0AJMPPRG1AJMPPRG2AJMPPRG3ERROR:(错误处理)PRG0:MOVA,P1第55页,共86页,2023年,2月20日,星期一ADDA,P3MOVP1,ACLRAADDCA,#00H ;进位位放入A中MOVP3,ARETPRG1:MOVA,P1CLRCSUBBA,P3MOVP1,A第56页,共86页,2023年,2月20日,星期一CLRARLCA ;借位放入A中MOVP3,ARETPRG2:MOVA,P1MOVB,P3MULABMOVP1,AMOVP3,BRET第57页,共86页,2023年,2月20日,星期一PRG3:MOVA,P1MOVB,P3DIVABMOVP1,AMOVP3,BRET第58页,共86页,2023年,2月20日,星期一第59页,共86页,2023年,2月20日,星期一 【例3-12】已知内存单元有16个二进制无符号数,分别存放在30H~3FH中,试求它们的累加和,并将其和数存放在R4、R5中。 编程说明:存放16个二进制无符号数的首地址为30H,此循环程序的循环次数为16次,和数放在R4、R5中。程序流程如图3-8。第60页,共86页,2023年,2月20日,星期一第61页,共86页,2023年,2月20日,星期一参考程序如下:START:MOVR0,#30HMOVR2,#10HMOVR4,#00HMOVR5,#00H第62页,共86页,2023年,2月20日,星期一LOOP:MOVA,R5ADDA,@R0MOVR5,AMOVA,#00HADDCA,R4MOVR4,AINCR0DJNZR2,LOOPEND第63页,共86页,2023年,2月20日,星期一
【例3-13】将内部数据存贮器30H~4FH单元中的内容传送至外部数据存贮器2000H开始的单元中。 解:编程说明: 内部数据区首址:R0←30H 外部数据区首址:DPTR←2000H 循环次数:R2←32H 程序流程如图3-9所示。第64页,共86页,2023年,2月20日,星期一第65页,共86页,2023年,2月20日,星期一参考程序如下:START: MOVR0,#30H MOVDPTR,#2000H MOVR2,#32HLOOP: MOVA,@R0 MOVX@DPTR,A INCR0 INCDPTR DJNZR2,LOOP END第66页,共86页,2023年,2月20日,星期一 【例3-14】试将内部数据存储器中连续存放的N个数据由小到大进行排列。 设:数据区首地址存于寄存器R0中,数据个数N存于寄存器R6中。程序流程如图3-10所示。 参考程序如下: MOV30H,R0第67页,共86页,2023年,2月20日,星期一L1: DECR6 MOVA,R6 MOVR3,A MOVR2,AMOVA,R0MOVR1,A INCR1第68页,共86页,2023年,2月20日,星期一L2: MOVA,@R0 CLRC SUBBA,@R1 JCL3 MOVA,@R0 XCHA,@R1 MOV@R0,AL3: INCR1 DJNZR2,L2 INCR0 DJNZR3,L1 MOVR0,30H END第69页,共86页,2023年,2月20日,星期一第70页,共86页,2023年,2月20日,星期一第71页,共86页,2023年,2月20日,星期一 3.3.8查表程序设计 【例3-15】利用查表的方法编写Y=X2(X=0,1,2…9)的程序。 编程说明:设变量X的值存放在内存30H单元中,变量Y的值存入内存31H单元。先用远查表指令MOVCA,@A+DPTR编写程序(参考程序1);再用近查表指令MOVCA,@A+PC编写程序(见参考程序2)。第72页,共86页,2023年,2月20日,星期一参考程序1: ORG1000HSTART: MOVA,30H MOVDPTR,#TABLE MOVCA,@A+DPTR MOV31H,ATABLE: DB0,1,4,9,16 DB25,36,49,64,81 END第73页,共86页,2023年,2月20日,星期一参考程序2: ORG1000HSTART: MOVA,30H ADDA,02H MOVCA,@A+PC MOV31H,A DB0,1,4,9,16DB25,36,49,64,81END第74页,共86页,2023年,2月20日,星期一 【例3-16】将1位十六进制数,转换成相应ASCⅡ码。用计算求解和查表求解,进行比较。 (1)
计算求解: 编程说明:设待转换的一位十六进制数存放在40H单元中,转换后的ASCⅡ码仍存放在40H中。 编程思路:十六进制数0~9的ASCⅡ为41H~46H.,当待转换的数≤9时,加30H,既是其对应的ASCⅡ码;当待转换的数>9时,加37H。程序流程如图3-11所示。第75页,共86页,2023年,2月20日,星期一第76页,共86页,2023年,2月20日,星期一参考程序如下:ORG0100HMOVA,40HANLA,#0FH CLRC SUBBA,#0AH第77页,共86页,2023年,2月20日,星期一JCNEXTADDA,#0AH ADDA,#37HSJMPSAVENEXT: ADDA,#0AHADDA,#30HSAVE: MOV40H,A END第78页,共86页,2023年,2月20日,星期一(2)查表求解: ORG0100HMOVA,40HANLA,#0FH ADDA,02H MOVCA,@A+PC MOV40H,A DB‘0’,‘1’,‘2’,‘3’,‘4’,‘5’ DB‘6’,‘7’,‘8’,‘9’,‘A’,‘B’ DB‘C’,‘D’,‘E’,‘F’ END第79页,共86页,2023年,2月20日,星期一 3.3.9
子程序设计 1、子程序的调用与返回 MCS-51单片机有两条子程序调用指令:ACALLaddr11、LCALLaddr16;一条子程序返回指令RET。 2、保存与恢复寄存器内容例如:SUB1:PUSHPSWPUSHAPUSHR6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湘教版福建省莆田市五校联盟2023-2024学年高二上学期期中数学试题
- 2024年上海市中考语文真题卷及答案解析
- 华支睾吸虫课件
- 幼儿园小班音乐《表情歌》课件
- 福建省尤溪一中 2024-2025学年高三上学年半期考地理试卷及答案
- 西京学院《大数据技术原理及应用》2022-2023学年期末试卷
- 简爱课件 图片
- 西华师范大学《外贸函电》2023-2024学年期末试卷
- 西华师范大学《数据库原理及应用》2022-2023学年期末试卷
- 职业技术学院移动商务学情分析报告
- 销售大户监管办法
- 小型装配式冷库设计(全套图纸)
- 西师版小学数学二年级上册半期考试
- 八六版高中英语课文全集
- 审计工作手册
- 胰腺癌一病一品知识分享
- 【原创】《基于地理实践力培养的校本课程开发研究》中期报告
- 公司下属厂部推行5S管理通知
- (最新)13《金税三期工程运维架构设计方案》V10
- 青岛版4年级上册相遇问题说课
- 机械加工企业安全生产事故应急预案(完整版)
评论
0/150
提交评论