单片机原理及接口技术-第三章课件.ppt

上传人:牧羊曲112 文档编号:3676015 上传时间:2023-03-14 格式:PPT 页数:84 大小:770.50KB
返回 下载 相关 举报
单片机原理及接口技术-第三章课件.ppt_第1页
第1页 / 共84页
单片机原理及接口技术-第三章课件.ppt_第2页
第2页 / 共84页
单片机原理及接口技术-第三章课件.ppt_第3页
第3页 / 共84页
单片机原理及接口技术-第三章课件.ppt_第4页
第4页 / 共84页
单片机原理及接口技术-第三章课件.ppt_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《单片机原理及接口技术-第三章课件.ppt》由会员分享,可在线阅读,更多相关《单片机原理及接口技术-第三章课件.ppt(84页珍藏版)》请在三一办公上搜索。

1、3.1 MCS-51单片机指令系统简介,MCS-51单片机能够识别并执行的指令共有111条。这111条指令,构成了MCS-51单片机的指令系统。3.1.1 MCS-51单片机指令系统的分类 1、MCS-51单片机指令系统按指令所占的字节数可分为以下三类:(1)单字节指令(49条)(2)双字节指令(46条)(3)三字节指令(16条),2、按指令的执行时间可分为以下三类:(1)单周期指令(65条)(2)双周期指令(44条)(3)四周期指令(2条)3、按指令的功能可分为以下五类:(1)数据传送类指令(29条)(2)算术运算类指令(24条)(3)逻辑运算类指令(24条)(4)控制转移类指令(17条)(

2、5)位操作类指令(17条),3.1.2 指令格式MCS-51单片机汇编语言指令由操作码和操作数两部分组成。指令格式为:操作码 操作数,3.1.3 指令中的常用符号Rn:表示当前工作寄存器R0R7中的一个。Ri:表示寄存器间接寻址,常常作间接寻址的地址指针。其中Ri代表R0和R1寄存器中的一个。Direct:表示内部数据存贮器单元的地址及特殊功能寄存器SFR的地址,对SFR而言,既可使用它的物理地址,也可直接使用它的名字。#date:表示8位立即数,即8位常数,取值范围为#00H#0FFH,#date16:表示16位立即数,即16位常数,取值范围为#0000H#0FFFFHaddr16:表示16

3、位地址 addr11:表示11位地址rel:用补码形式表示的地址偏移量,取值范围为-128+127。Bit:表示内部RAM和SFR中的具有位寻址功能的位地址。SFR中的位地址可以直接出现在指令中,为了阅读方便,往往也可用SFR的名字和所在的数位表示。如:表示PSW中奇偶校验位,可写成D0H,也可写成PSW.0的形式出现在指令中。:表示间接寻址寄存器或基址寄存器的前缀符号。$:表示当前指令的地址。,3.1.4 寻址方式1、立即寻址立即寻址是将操作数直接存放在指令中,作为指令的一部分存放在代码段里。立即寻址中的数,称为立即数。例如指令:MOV A,#30H2、直接寻址直接寻址是将操作数的地址直接存

4、放在指令中。这种寻址方式的操作数只能存放在内部数据存贮器和特殊功能寄存器中。例如:MOV A,30H,3、寄存器寻址寄存器寻址是指操作数存放在以上所说的寄存器中,并且寻址时的寄存器已隐含在指令的操作码中。例如:MOV A,R04、寄存器间址寄存器间址是指操作数存放在以寄存器内容为地址的单元中例如:MOV A,R0,5、变址寻址变址寻址是指操作数存放在变址寄存器和基址寄存器的内容相加形成的数为地址的单元中。其中累加器A作变址寄存器、程序计数器PC或寄存器DPTR作基址寄存器。例如:MOVC A,A+DPTR6、相对寻址相对寻址是将程序计数器PC的当前值与指令第二字节给出的偏移量相加,从而形成转移

5、的目标地址。例如:JZ 61H,7、位寻址位寻址,是指对片内RAM中20H2FH中的128个位地址,以及SFR中的11个可进行位寻址的寄存器中的位地址寻址。例如:位寻址指令MOV C,20H,此指令是将RAM中位寻址区20H位地址中的内容,送给位累加器C。字节地址寻址指令:MOV A,20H,此指令是将内部RAM中20H单元中的内容送给累加器A。,3.2 MCS-51单片机指令系统,3.2.1 数据传送类指令1、内部传送指令(16条)(1)将数据传送到累加器A的指令(4条),(2)将数据传送到工作寄存器Rn的指令(3条),(3)将8位数据直接传送到直接地址(内部RAM单元或SFR寄存器)指令(

6、5条),(4)将8位数据传送到以间接寄存器寻址的RAM单元的指令(3条)。,(5)16位数据传送指令(1条),3.3 汇编语言程序设计,3.3.1 汇编语言及其语句格式1、汇编语言这里介绍MCS-51单片机的汇编语言。2、汇编语言的语句格式一条汇编语言的语句包括四部分内容:标号、操作码、操作数和注释。其格式为:标号:操作码操作数;注释 例如:LOOP:MOV A,#20H;(A)20H,3.3.2 伪指令1、定位伪指令格式:ORG n2、定义字节伪指令格式:标号:DB X1,X2,Xn此伪指令的功能是把Xi存入从标号开始连续的单元中。3、定义双字节伪指令格式:标号:DW X1,X2,Xn此伪指

7、令的功能是把Xi存入从标号开始的连续单元中。,4、预留存贮区伪指令格式:DS nDS n从标号指定单元开始,预留n个单元的存贮区。5、赋值伪指令格式:字符名称x EQU n此指令的功能是将数据或地址n赋给字符名称。6、结束汇编指令格式:ENDEND指示源程序到结束,常将其放在汇编语言源程序的末尾。,3.3.3 汇编语言程序设计过程1、分析任务,确定算法或解题思路2、根据算法和解决思路画出程序流程图流程图是由一些框图和流程线组合而成:置的框图连接在一起,位于不同框图的圈内,应标注相同的字母。,3、根据流程图编写程序4、上机调试程序3.3.4 顺序结构程序设计按照程序编写的顺序,依次执行。任何复杂

8、的程序,都含有较大成份的顺序结构程序。【例3-8】将两位压缩BCD码转换成二进制数编程思路:(a1a0)BCD=a110+a0编程说明:待转换的两位压缩BCD码存放于R2,转换结果存回R2。程序流程图如图3-1所示。,编程如下:START:MOV A,R2 ANL A,#0F0H;取高位BCD码 SWAP A MOV B,#0AH MVL AB MOV R3,A MOV A,R2 ANL A,#0FH;取低位BCD码 ADD A,R3 MOV R2,A END,3.3.5 分支程序设计,【例3-9】求符号函数的值 1 当X0Y=0 当X=0 的值。-1 当X0 编程说明:设变量X存放在40H单

9、元中,函数Y存放在41H单元中。此程序为三分支程序。程序流程图如图3-3所示。,编程如下:START:MOV A,40H JZ COMP JNB ACC.7,POST MOV A,#81H;表示-1 SJMP COMP POSI:MOV A,#01H;表示+1COMP:MOV 41H,A END,【例3-10】求单字节有符号二进制数的补码。,编程如下:CMPT:MOV A,30H JNB ACC.7,NCH;(A)0,不需要转换MOV C,ACC.7;保存符号MOV 10H,CCPL AADD A,#1MOV C,10HMOV ACC.7,C;恢复符号NCH:END,图3-5中,K的最大值一般

10、为128。【例3-1】用单片机作四则运算。编程说明:在单片机系统中,设置+、四个运算键,这四个运算键的键值分别为0、1、2、3(键值存放在寄存器(2中),当其中一个按键按下时,进行相应的运算。P1口输入被加数、被减数、被乘数或被除数,以及运算结果的低8位或商。P3口输入加数、减数、乘数或除数,,以及结果的高8位或余数。键号存放在累加器A中。程序流程图如图3-6所示。,参考程序如下:START:MOV P1,#0FFH MOV P3,#0FFH MOV DPTR,#TABLE CLR C MOV A,R2 SUBB A,#04H JNC ERROR ADD A,#0-4H,CLR C RL A;

11、正确的散转偏移号,键号2 JMP A+DPTR TABLE:AJMP PRG0 AJMP PRG1 AJMP PRG2 AJMP PRG3 ERROR:(错误处理)PRG0:MOV A,P1,ADD A,P3 MOV P1,A CLR A ADDC A,#00H;进位位放入A中 MOV P3,A RET PRG1:MOV A,P1 CLR C SUBB A,P3 MOV P1,A,CLR A RLC A;借位放入A中 MOV P3,A RET PRG2:MOV A,P1 MOV B,P3 MUL AB MOV P1,A MOV P3,B RET,PRG3:MOV A,P1 MOV B,P3 D

12、IV AB MOV P1,A MOV P3,B RET,【例3-12】已知内存单元有16个二进制无符号数,分别存放在30H3FH中,试求它们的累加和,并将其和数存放在R4、R5中。编程说明:存放16个二进制无符号数的首地址为30H,此循环程序的循环次数为16次,和数放在R4、R5中。程序流程如图3-8。,参考程序如下:START:MOV R0,#30H MOV R2,#10H MOV R4,#00H MOV R5,#00H,LOOP:MOV A,R5 ADD A,R0 MOV R5,A MOV A,#00H ADDC A,R4 MOV R4,A INC R0 DJNZ R2,LOOP END,

13、【例3-13】将内部数据存贮器30H4FH单元中的内容传送至外部数据存贮器2000H开始的单元中。解:编程说明:内部数据区首址:R030H 外部数据区首址:DPTR2000H循环次数:R232H 程序流程如图3-9所示。,参考程序如下:START:MOV R0,#30H MOV DPTR,#2000H MOV R2,#32H LOOP:MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R2,LOOP END,【例3-14】试将内部数据存储器中连续存放的N个数据由小到大进行排列。设:数据区首地址存于寄存器R0中,数据个数N存于寄存器R6中。程序流程如图3-10所

14、示。参考程序如下:MOV 30H,R0,L1:DEC R6MOV A,R6MOV R3,AMOV R2,A MOV A,R0 MOV R1,AINC R1,L2:MOV A,R0 CLR CSUBB A,R1JC L3MOV A,R0XCH A,R1MOV R0,AL3:INC R1DJNZ R2,L2INC R0DJNZ R3,L1MOV R0,30HEND,3.3.8 查表程序设计【例3-15】利用查表的方法编写Y=X2(X=0,1,29)的程序。编程说明:设变量X的值存放在内存30H单元中,变量Y的值存入内存31H单元。先用远查表指令MOVC A,A+DPTR 编写程序(参考程序1);再

15、用近查表指令MOVC A,A+PC 编写程序(见参考程序2)。,参考程序1:ORG 1000HSTART:MOV A,30HMOV DPTR,#TABLEMOVC A,A+DPTRMOV 31H,ATABLE:DB 0,1,4,9,16DB 25,36,49,64,81END,参考程序2:ORG 1000HSTART:MOV A,30HADD A,02HMOVC A,A+PCMOV 31H,ADB 0,1,4,9,16 DB 25,36,49,64,81END,【例3-16】将1位十六进制数,转换成相应ASC码。用计算求解和查表求解,进行比较。(1)计算求解:编程说明:设待转换的一位十六进制数

16、存放在40H 单元中,转换后的ASC码仍存放在40H 中。编程思路:十六进制数09 的ASC为41H46H.,当待转换的数9时,加30H,既是其对应的ASC码;当待转换的数9时,加37H。程序流程如图3-11所示。,参考程序如下:ORG 0100 H MOV A,40 H ANL A,#0F H CLR C SUBB A,#0AH,JC NEXTADD A,#0AH ADD A,#37HSJMP SAVENEXT:ADD A,#0AH ADD A,#30HSAVE:MOV 40H,A END,(2)查表求解:ORG 0100HMOV A,40HANL A,#0FH ADD A,02H MOVC

17、 A,A+PC MOV 40H,A DB 0,1,2,3,4,5 DB 6,7,8,9,A,B DB C,D,E,F END,3.3.9 子程序设计1、子程序的调用与返回MCS-51单片机有两条子程序调用指令:ACALL addr11、LCALL addr16;一条子程序返回指令RET。2、保存与恢复寄存器内容例如:SUB1:PUSH PSW PUSH A PUSH R6(此处省略了子程序的内容)POP R6 POP A PUSH PSW,3、子程序的参数传递主程序在调用子程序时,经常需要传送一些参数,子程序运行完后也经常将一些参数回送给主程序,这叫参数传递。【例3-17】编程计算c=a2+b

18、2。编程说明:这个问题中,计算某数的平方可以用子程序来实现,两次调用该子程序,并求和便得到所需结果。设a、b 分别存于内部RAM 的30H、31H单元,结果C存于内部RAM的40H单元。,参数传递:主程序中,将某数存放到累加器A中,作为子程序的入口参数;子程序中,将所求数的平方值存放在累加器A中,作为出口参数(即主程序的返回值)。子程序的入口参数:A中存放某数的值。子程序的出口参数:A中存放所求数的平方。子程序如下:SQR:INC A MOVC A,A+PC;查平方表 RETTABLE:DB 0,1,4,9,16 DB 25,36,49,64,81主程序流程图如图3-12 所示。,主程序如下:START:MOV A,30H ACALL SQR;调查表子程序 MOV R1,A;a2暂存R1中 MOV A,31H ACALL SQR;调查表子程序 ADD A,R1 MOV 40H,A END,4、子程序的嵌套,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号