收藏 分享(赏)

MCS-51_单片机原理及应用教程.ppt

上传人:暖洋洋 文档编号:1605250 上传时间:2018-08-10 格式:PPT 页数:251 大小:2.42MB
下载 相关 举报
MCS-51_单片机原理及应用教程.ppt_第1页
第1页 / 共251页
MCS-51_单片机原理及应用教程.ppt_第2页
第2页 / 共251页
MCS-51_单片机原理及应用教程.ppt_第3页
第3页 / 共251页
MCS-51_单片机原理及应用教程.ppt_第4页
第4页 / 共251页
MCS-51_单片机原理及应用教程.ppt_第5页
第5页 / 共251页
点击查看更多>>
资源描述

1、MCS-51 单片机原理及应用教程,清华大学出版社 刘迎春 主编,本书主要内容,单片机基础知识 单片机的组成与结构分析 MCS-51 单片机的指令系统 单片机的程序设计 MCS-51单片机的中断系统 定时/计数器 单片机的串行通信及接口 MCS-51单片机的系统扩展 接口技术 MCS-51兼容机及串行总线扩展,第1章 单片机的基础知识,微型计算机的系统组成 单片机概述 不同计数制之间的转换 数的表示方法 思考练习题,1.1 微型计算机的系统集成,1.1 微型计算机的系统组成,1.1.1 主机,主机一般由运算器、控制器和主存储器组成。,1. 运算器,运算器是进行算术和逻辑运算的部件,它由完成加法

2、运算的加法器、存放操作数和运算结果的寄存器和累加器等组成。,2. 控制器 它是整个计算机硬件系统的指挥中心,根据不同的指令产生不同的动作,指挥整个机器有条不紊地自动地进行工作。,3. 主存储器 主存储器又称为内存储器,它由大量的存储单元组成,用以存储大量的数据及程序。,1.1.2 外部设备,1. 输入设备,目前常用的有键盘、软驱、磁带机、光驱等,2. 输出设备,常用的有显示器、打印机、绘图仪等,3.外存储器,常用的外存有磁带、磁盘、光盘,其中磁盘又可分为硬盘及软盘。,1.2 单片机概述,1.2.1 单片机的发展概况,第一阶段(19711976),第二阶段(19761979),第三阶段(1979

3、1982),第四阶段(19821990),第五阶段(1990至今),1.2.2 单片机的应用,1. 在工业测控中的应用 2. 在智能产品中的应用 3. 在计算机网络与通信技术中的应用,1.2.3 单片机的发展趋势,1.3 不同计数制之间的转换,1.3.1 十进制数,一个十进制数,它的数值是由数码0,1,2,8,9来表示的。数码所处的位置不同,代表数的大小也不同。,例如:53478=5104+3103+4102+7101+8100,对应于:,1.3.2 二进制数,二进制是按“逢二进一”的原则进行计数的。二进制数的基为“2”,即其使用的数码为0、1,共两个。二进制数的权是以2为底的幂。,例如:10

4、110100=127+026+125+124+023+122+021+020, 对应于:,其各位的权为1,2,4,8,即以2为底的0次幂、1次幂、2次幂等。 (10110100)2127+026+125+124+023+122+021+020=180,1.3.3 十六进制数,十六进制数的基为16,即基数码共有l6个:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A,B,C,D,E,F分别代表值为十进制数中的10,11,12,13,14,15。十六进制的权为以16为底的幂。,例如:4F8E=4163+F162+8161+E160=20366,对应于:,常用计数制表示数的方法

5、比较,1.3.4 不同进制数之间的转换,1. 十进制数转换成二进制数的方法,就是用2去除该十进制数,得商和余数,此余数为二进制代码的最小有效位(LSB)或最低位的值;再用2除该商数,又可得商数和余数,则此余数为LSB左邻的二进制代码(次低位)。依此类推,从低位到高位逐次进行,直到商是0为止,就可得到该十进制数的二进制代码。,除二取余法,1.3.4 不同进制数之间的转换,例如:将(67)10转换成二进制数,过程如下:,即:(67)10=(1000011)2。,1.3.4 不同进制数之间的转换,1. 十进制数转换成二进制数的方法,将已知十进制的小数乘以2之后,可能有进位,使整数位为1(当该小数大于

6、0.5时),也可能没有进位,其整数位仍为零。该整数位的值为二进制小数的最高位。再将乘积的小数部分乘以2,所得整数位的值为二进制小数的次高位。依此类推,直到满足精度要求或乘2后的小数部分为0为止。,乘二取整法,例如:将(0.625)10转换成二进制数,其过程如下:,即:(0.625)10=(0.101)2,1.3.4 不同进制数之间的转换,2. 二进制数转换为十进制数的方法,将二进制数转换成十进制数时,只要将二进制数各位的权乘以各位的数码(0或1)再相加即可。 例如:将(1101.1001)2制转换成十进制数: (1101.1001)2123+122+021+120+12-1+02-2+02-3

7、+12-48+4+0+1+0.5+0+0+0.0625=(13.5625)10,1.3.4 不同进制数之间的转换,3. 二进制与十六进制数之间的转换方法,二进制数转换成十六进制数 例如:把(101101101.1100101)2转换成十六进制数。,即:(101101101.1100101)2=(16D.CA)16。,1.3.4 不同进制数之间的转换,2)十六进制数转换成二进制数 将十六进制数转换成二进制数时,只要将每1位十六进制数用4位相应的二进制数表示即可完成转换。 例如:将(ECA16)16转换成二进制数。,即:(ECA16)16=(11101100101000010110)2。,1.3.

8、5 二进制数的算术运算规则,1. 二进制加法基本规则,0+0=0 0+1=1+0=1 1+1=0 向邻近高位有进位 1+1+1=1 向邻近高位有进位,2. 二进制减法基本规则,0-0=0 1-1=0 1-0=1 0-1=1 向邻近高位有借位,3. 二进制乘法基本规则,00=0 01=10=0 11=1,4. 二进制除法基本规则,1/1=1 0/1=0,1. 逻辑与运算基本规则,00=0 10=01=0 11=1,2. 逻辑或运算基本规则,00=0 10=01=1 11=1,1.3.6 逻辑运算,3. 逻辑非运算基本规则,/0=1 /1=0,4. 逻辑异或运算基本规则,00=11=0 10=01

9、=1,1.4.1 真值与机器数,单片机用来表示数的形式称为机器数,也称为机器码。而把对应于该机器数的算术值称为真值。,设: N1=+1010101N2=-1010101 这两个数在机器中表示为: N1:01010101 N2:11010101,1.4 数的表示方法,在计算机中还有一种数的表示方法,即机器中的全部有效位均用来表示数的大小,此时无符号位,这种表示方法称为无符号数的表示方法。,1.4.2 原码、反码、补码,1. 原码表示法,原码表示法是最简单的一种机器数表示法,只要把真值的符号部分用0或1表示即可。 例如:真值为+34与-34的原码形式为: +34原=00100010 -34原=10

10、100010 0的原码有两种形式: +0原=00000000 -0原=10000000,1.4 数的表示方法,8位二进制数原码的表示范围为:1111111101111111,对应于-127+127。,2. 反码表示法,反码是二进制数的另一种表示形式,正数的反码与原码相同;负数的反码是将其原码除符号位外按位求反。即原来为1变为0,原来为0变为1。 例如: +34反=+34原=00100010 -34原=10100010,-34反=11011101 0的反码也有两种形式: +0反=00000000 -0反=111111118位二进制数反码的表示范围为:1000000001111111,对应于-12

11、7+127。,1.4 数的表示方法,3. 补码表示法,1.4 数的表示方法,正数的补码表示方法与原码相同,负数的补码表示方法为它的反码加1。 例如:-21原=10010101 -21反=11101010 -21补=11101011 0的补码只有一种表示方法,即+0补=-0补=00000000。 8位二进制数的补码所能表示的范围为1000000101111111,对应于-128+127。,1.4.3 BCD码,1.4.4 ASCII码,ASCII码是一种8位代码,最高位一般用于奇偶校验,用其余的7位代码来对128个字符编码,其中32个是控制字符,96个是图形字符。,1.5 思考练习题,(1)微型

12、计算机由哪几部分组成? (2)什么是单片机?它与一般微型计算机在结构上有什么区别? (3)单片机主要应用在哪些方面? (4)将下面的一组十进制数转换成二进制数: 56 74 23 19 89 68 142 76.87 0.375 9.325 83.625 134.0625 (5)将下面的二进制数转换成十进制数和十六进制数: 10110011 10100101 11101001 10011110 10000101 11000101 11101110 10001100 11011.11 101.01101 (6)原码已经在下面列出,试写出各数的反码与补码: 10001101 10101100 11

13、101011 10001001 11111111 01100001 01110001 11111001,第2章 单片机的组成与结构分析, MCS-51单片机的内部结构 CPU的结构和功能 存储器的组织结构 MCS-51单片机的并行输入输出端口 MCS-51 单片机的外部引脚及功能 单片机指令时序 思考练习题,2.1 MCS-51单片机的内部结构,2.1 MCS-51单片机的内部结构,其基本特性如下: 8位CPU,含片内振荡器; 4KB的程序存储器ROM; 128B的数据存储器RAM; 64KB的外部程序存储器寻址能力; 64KB的外部数据存储器寻址能力; 32根输入输出(I/O)线; 2个16

14、位定时/计数器; 1个全双工异步串行口; 21个特殊功能寄存器; 5个中断源,2个优先级; 具有位寻址功能。,2.2 CPU的结构和功能,2.2.1 运算器,8051单片机的运算器由算术/逻辑运算单元ALU、累加器A、寄存器B、暂存器1、暂存器2以及程序状态字寄存器PSW组成。,图2.2 PSW寄存器各位的标志符号,表2.1 寄存器PSW各位的功能、标志符号与相应的位地址,2.2.2 控制器,2.3 存储器的组织结构,存储器的功能是存储信息(即程序与数据)。存储器是组成计算机的主要部件,目前所使用的存储器以半导体存储器为主。从功能上来划分,半导体存储器可分为两大类:即只读存储器(ROM),和随

15、机存储器(RAM)。,8051单片机的控制器由指令寄存器、指令译码器、堆栈指针SP、程序计数器PC、数据指针DPTR、RAM地址寄存器以及16位地址缓冲器等组成。,2.3.1 MCS-51单片机的存储器结构,图2.3 8051存储器配置图,2.3.2 程序存储器,程序是控制计算机运行的一系列命令。计算机能够识别并执行的命令是由代码“0”和“1”组成的一组机器指令。,2.3.3 数据存储器,单片机的数据存储器由可读可写的存储器RAM组成,最多可扩展到64KB,用于存储数据。,2.3.4 MCS-51单片机的内部数据存储器,MCS-51单片机的内部数据存储器由地址00HFFH共有256个字节的地址

16、空间组成,这256个字节的地址空间被分为两部分,其中内部数据RAM地址为00H7FH(即0127)。,图2.4 内部数据存储器地址空间,1. 内部数据RAM单元,内部数据RAM分为工作寄存器区、位寻址区、通用RAM区三个部分。,图2.5 RAM位地址(低128位在00H7FH),(a)系统复位后,未改变SP初值时的堆栈操作(设(A)=0ABH),(b)系统复位后,改变SP初值为60H时的堆栈操作 图2.6 堆栈操作示例,2. 特殊功能寄存器,特殊功能寄存器SFR的地址空间是80HFFH。,表2.3 特殊功能寄存器的名称、符号与地址,2. 特殊功能寄存器,2. 特殊功能寄存器,2. 特殊功能寄存

17、器,2.4 MCS-51单片机的并行输入输出端口,2.4.1 P0口结构,1. P0用作通用I/O口,2. P0用作地址/数据总线分时复用方式,2.4.2 P2口结构,2. P2口用作通用I/O口,2.4.3 P3口结构,2.4.4 P1口结构,2.5 MCS-51单片机的外部引脚及功能,2.5.1 电源引脚,(b)双列直插式封装,(a)方形封装,2.5.2 外接晶振或外部时钟信号输入端,(a)内部振荡器方式 (b)外部振荡器方式 图2.12 8051单片机的振荡器方式,表2.4 按不同工艺制造的单片机芯片外接振荡器时的接法,2.5.3 输入输出引脚,P0.0P0.7:通道0是一个8位漏极开路

18、的双向输入输出通道。在外接存储器或者扩展I/O接口时,P0口作为复用的低8位地址总线和双向数据总线。在不扩展存储器或者I/O接口时,作为准双向输入输出接口。P1.0P1.7:只有一种功能,即准双向I/O口。P2.0P2.7:可作为准双向I/O口使用;但在接有片外存储器或扩展I/O接口范围超过256B时,则该口一般只能作为高8位地址总线使用。P3.0P3.7:该口除了作为准双向口外,还具有第二功能。,2.5.4 控制线,1. ALE/,2.,3.,/VPP,4. RST,(a)上电复位 (b)电平开关复位图2.13 复位电路,2.6 单片机指令时序,2.7 思考练习题,(1)MCS-51单片机包

19、含哪些主要逻辑功能部件? (2)程序状态字寄存器PSW包含哪几个标志位?各位的含义是什么?各有何作用? (3)什么叫单片机? (4)MCS-51单片机的存储结构有何特点? (5)单片机的端有何作用?在8031组成的单片机应用系统中,其端怎样处理?为什么? (6)单片机内部RAM分为哪几个部分?各有何作用? (7)MCS-51单片机的堆栈SP在操作中遵循什么原则?在开机复位时,其初值是多少?是否可以通过程序重新设置? (8)怎样确定和改变单片机当前的工作寄存器组? (9)简要说明单片机的位地址分配。 (10)试画出常用的单片机复位电路,并说明复位后各个寄存器的状态。,第3章 MCS-51单片机的

20、指令系统,汇编语言的指令格式及符号简介 寻址方式数据传送类指令 算术运算类指令 逻辑运算类指令 位操作类指令 控制转移类指令 思考练习题,3.1 汇编语言的指令格式及符号简介,3.1.1 指令格式,标号: 操作码助记符 第一操作数 ,第二操作数 ,第三操作数 ;注释,例如: LOOP: MOV A, #50H ;(A)50HDEC R0 ;(R0)(R0)-1DJNZ R0, LOOP ;(R0)-10,则程序转移到LOOP地址;否则顺序执行END ;结束,3.1.2 本章中符号的定义,3.2 寻 址 方 式,MCS-51单片机有7种寻址方式,见表3.1。,表3.1 7种寻址方式的比较,3.2

21、.1 立即寻址,例如:MOV A, #23H ; (A)23H,即累加器A的内容被替换为立即数23H。,图3.1 MOV A,#23H的执行示意图,该指令的功能是将8位的立即数23H传送到累加器A中。如图3.1所示。其中,目的操作数采用寄存器寻址,源操作数采用立即寻址。,3.2.2 直接寻址,直接寻址是指在指令中包含了操作数的地址,该地址直接给出了参加运算或传送的单元或位。直接寻址方式可访问三种地址空间: 特殊功能寄存器SFR(该空间只能采用直接寻址)。 内部数据RAM的低128个字节单元(该空间还可以采用寄存器间接寻址)。 221个位地址空间。,例如:MOV A, 40H ;把40H单元的内

22、容送到累加器中,即(A)(40H)。,图3.2 MOV A,40H的执行示意图,3.2.3 寄存器寻址,寄存器寻址是指定某一可寻址的寄存器的内容为操作数。,例如:MOV A, R0 ;(A)(R0) 该指令的功能是将R0中的数据传送到累加器A中。源操作数与目的操作数都采用了寄存器寻址。,在MCS-51单片机中,能够用来间接寻址的寄存器有:用户所选定的工作寄存器组的R0、R1,堆栈指针SP和16位的数据指针DPTR。内部数据RAM的寄存器间接寻址采用寄存器R0、R1;外部数据RAM的寄存器间接寻址有两种形式:一是采用R0、R1作间址寄存器,这时R0或R1提供低8位地址,而高8位地址则由P2端口提

23、供;二是采用16位的DPTR作间址寄存器。,3.2.4 寄存器间接寻址,例如:设R0的内容为60H,且(60H)=10H,即60H地址单元中的内容为10H,则语句MOV A, R0的执行过程如图3.3所示。执行后,(A)=10H,即累加器A的内容成为10H。,图3.3 MOV A,R0的执行示意图,又如:MOVX A, R0 ;(A)(R0),用R0间接寻址的单元中的内容替换A的 ;内容。 MOVX A, DPTR ;(A)(DPTR),用DPTR间接寻址的单元中的内容替换 ;A的内容。,3.2.5 变址寻址,这种寻址方式是以数据指针DPTR或程序计数器PC作为基址寄存器,以累加器A作为偏移量

24、寄存器,将一个基址寄存器的内容与偏移量寄存器的内容之和作为操作数地址。,例如:MOVC A, A+DPTR 设(A)=10H,(DPTR)=1000H,程序存储器的(1010H)=45H,则上面程序语句的功能是将A的内容与DPTR的内容相加形成操作数地址(1010H),把该地址中的数据传送到累加器A。即(A)(A)+(DPTR)。结果: (A)=45H。,图 3.4 MOVC A,A+DPTR的执行示意图,相对寻址是把指令中给定的地址偏移量rel与程序计数器 PC的当前值(读出该双字节或三字节的跳转指令后,PC指向的下条指令的地址)相加,得到真正的程序转移地址。,例如:JC 80H 若C=0,

25、则PC值不变,若C=1,则以当前PC值为基地址,加上80H得到新的PC值。设该转移指令存放在1005H单元,取出操作码后PC指向1006H单元,取出偏移量后PC指向1007H单元,所以计算偏移量时PC当前地址为1007H,已经为转移指令首地址加2,这里的偏移量以补码给出,所以80H代表着-80H,补码运算后,就形成跳转地址0F87H。其过程如图3.5所示。,3.2.6 相对寻址,3.2.6 相对寻址,图3.5 JC 80H的执行示意图,3.2.7 位寻址,MCS-51单片机可对片内RAM的两个区域进行位寻址:一个是20H2FH单元的128位,另一个是特殊功能寄存器的93位。在寻址时,同一个位地

26、址可以有多种标识方式,读者可参看后面3.6节“位操作指令”的相关内容。,3.3.1 通用传送指令,格式:MOV 目的操作数,源操作数 功能:把第二操作数指定的字节内容传送到第一操作数指定的单元中。不影响源操作数内容,不影响别的寄存器和标志。,1. 以累加器A为目的操作数的传送类指令,3.3 数据传送类指令,指令助记符及功能说明如下:,例1 若(50H)=10H,则执行指令MOV A, 50H之后,(A)=10H。例2 若(R0)=20H,(20H)=39H,则执行指令MOV A, R0后,(A)=39H。例3 若(R5)=55H,则执行指令MOV A, R5后,(A)=55H。,2. 以Rn为

27、目的操作数的传送类指令,例1 若(A)=20H,则执行指令MOV R3, A后,(R3)=20H。例2 若(30H)=01H,则执行指令MOV R7, 30H后,(R7)=01H。,指令助记符及功能说明如下:,例1 若(30H)=20H,(R0)=30H,则执行指令MOV 90H, R0的结果为(90H)=20H。例2 若例1中的条件不变,而执行指令MOV P1, R0,则(P1)=20H。,3. 以直接地址directX为目的操作数的传送类指令,指令助记符及功能说明如下:,例1 若(R0)=50H,(50H)=20H,(A)=10H,则执行指令“MOV R0, A”后,50H单元的内容由原来

28、的20H变为10H。,4. 以寄存器间接地址Ri为目的操作数的传送类指令,指令助记符及功能说明如下:,5. 16位目标地址传送指令,这条指令的功能是:把16位立即数送入DPTR中。而16位的数据指针DPTR由DPH与DPL组成,该指令执行后,16位立即数的高8位送入DPH中,低8位送入DPL中。该指令的执行,不影响程序状态寄存器PSW。,指令助记符及功能说明如下:,3.3.2 外部数据存储器(或I/O口)与累加器A传送指令,例1 设(P2)=20H,现将A中数据存储到20FFH单元中去。 可用以下程序实现: MOV R1, #0FFH ;(R1)0FFH MOVX R1, A ;(20FFH)

29、(A) 也可采用下述程序实现: MOV DPTR, #20FFH ;(DPTR)20FFH MOVX DPTR, A ;(DPTR)(A),即(20FFH)(A),指令助记符与功能说明如下:,3.3.2 外部数据存储器(或I/O口)与累加器A传送指令,例2 将外部数据存储器7FF0H单元中的数据取出,存放到外部数据存储器2000H单元中去。MOV DPTR, #7FF0H MOVX A, DPTR MOV DPTR, #2000H MOVX DPTR, A,例1 在外部程序存储器2000H单元开始存放了数字09的共阴极数码管的16进制数的字形代码3FH、06H、6FH。要求根据A中的值(09)

30、来查找该数字所对应的代码以便显示。 若用PC作基址寄存器,则需要在MOVC A, A+PC指令前用一加法指令对地址进行调整: ADD A, #data MOVC A, A+PC,3.3.3 程序存储器向累加器A传送数据指令,指令助记符与功能说明如下:,1. 字节交换指令,例1 设(R1)=30H,(30H)=45H,(A)=7FH,则执行指令: XCH A, R1 结果:(A)=45H,而(30H)=7FH,从而实现了累加器A与内部数据存储器RAM中30H单元的数据交换。,3.3.4 数据交换指令,指令助记符与功能说明如下:,2. 半字节交换指令,例1 设(30H)=6FH,(R0)=30H,

31、(A)=0F6H,则执行指令: XCHD A, Ri 结果:(A)=0FFH,(30H)=66H,数据交换指令除了影响始终跟踪A中数据奇偶性的P标志外,对PSW中其他标志位均无影响。,指令助记符与功能说明如下:,3. 累加器A中高四位与低四位交换指令,SWAP A 该指令所执行的操作是累加器A中的高4位与低4位的内容互换,其结果仍存放在累加器A中。,例1 设(A)=0A5H(10100101B),则执行指令: SWAP A 结果:(A)=5AH(01011010B) 指令SWAP交换了A中高、低半字节(30和74),结果不影响标志寄存器PSW。,3.3.5 堆栈操作指令,堆栈操作指令只有2条,

32、即:压入(PUSH)和弹出(POP)。 压入指令:PUSH direct ;SPSP+1,(SP)(direct) 弹出指令:POP direct ;(SP)(direct),SPSP-1,例1 PUSH A ;保护A中数据PUSH PSW ;保护标志寄存器中数据 ;执行服务程序POP PSW ;恢复标志寄存器中数据POP A ;恢复A中数据,例2 PUSH APUSH PSWPOP APOP PSW,例3 PUSH DPHPUSH DPLPOP DPLPOP DPH,3.4.1 加减运算指令,1. 加法指令,这类指令所完成的操作是把源操作数(立即数、直接地址单元内容、间接地址单元内容、工作寄

33、存器内容)与累加器A的内容相加,将结果保存在累加器A中。,3.4 算术运算类指令,指令助记符与功能说明如下:,例1 执行指令: MOV A, #0A9H ADD A, #0B8H 对程序状态寄存器的影响如图3.6所示。,运算结果:(A)=61H,CY=1,AC=1,OV=1,P=1,(PSW)=0C5H,例2 8位数加法程序片断1: MOV A, #23H ADD A, #5AH ,运算结果:(A)=7DH,CY=0,OV=0,AC=0,P=0,(PSW)=00H。,例3 8位数加法程序片断2: MOV A, #0ABH ADD A, #9AH ,运算结果:(A)=45H,CY=1,OV=1,

34、AC=1,P=1,(PSW)=0C5H。,带进位加法指令与前述加法指令的区别仅为考虑进位位,其他与加法指令相同。,2. 带进位加法指令,指令助记符与功能说明如下:,例3 利用ADDC指令可以进行多字节的加法运算。 设有两个16位数相加,被加数的高8位放在41H,低8位放在40H,加数的高8位放在43H,低8位放在42H,和的低8位存放在50H,高8位存放在51H,进位位存放在52H。可编程序如下:,例1 设(A)=0AAH,(R0)=55H,C=1,则执行指令: ADDC A, R0 运算结果:(A)=00000000B,AC=1,CY=1,OV=1。,例2 设(A)=35H,(40H)=21

35、H,C=0,则执行指令: ADDC A, 40H 运算结果:(A)=56H,AC=0,CY=0,OV=0。 这与执行指令“ADD A, 40H”的结果是一样的。,SHJ: MOV A, 40H ;(A)被加数低8位 ADD A, 42H ;与加数低8位相加 MOV 50H, A ;和的低8位存入50H MOV A, 41H ;(A)被加数高8位 ADDC A, 43H ;被加数高8位与加数高8位以及低位来的进位相加 MOV 51H, A ;和的高8位存入51H单元 MOV A, #00H ;(A)00H ADDC A, #00H ;(A)(A) +00H+高8位来的进位 MOV 52H, A

36、;进位位C内容存入52H单元 ,3. 带借位减指令,指令助记符与功能说明如下:,例1 设(40H)=0BAH,(41H)=98H,试编写40H内容减去41H内容后,结果再存入40H单元的程序。 MOV A, 40H ;(A)(40H) CLR C ;进位位C清0 SUBB A, 41H ;(A)(A)-(41H) -(C) MOV 40H, A ;(40H)(A) 执行以上程序后,(40H)=22H,CY=0,OV=0。,如果参与运算的两数为无符号数,则其溢出与否与OV状态无关,而是靠CY是否有借位来判断,OV仅仅表示带符号数运算时是否溢出。,例2 设有两个16位数相减,被减数的高8位放在41

37、H,低8位放在40H,减数高8位放在43H,低8位放在42H,差的低8位存放在50H,高8位存放在51H,借位位存放在52H。,可编程序如下: SHJIAN: MOV A, 40H ;(A)被减数低8位 CLR C ;C位清0 SUBB A, 42H ;减去减数低8位 MOV 50H, A ;差的低8位存入50H MOV A, 41H ;(A)被减数高8位 SUBB A, 43H ;被减数高8位减去减数高8位与借位 MOV 51H, A ;差的高8位存入51H单元 MOV A, #00H ;(A)00H ADDC A, #00H ;(A)高8位的借位位 MOV 52H, A ;借位位C内容存入

38、52H单元,1. 乘法指令,例1 设(A)=67H(103),(B)=0ADH(173),执行指令: MUL AB 运算结果:乘积为459BH(17819),(A)=9BH,(B)=45H。另外:OV=1,CY=0,3.4.2 乘除运算指令,MUL AB ;(A)乘积低8位,(B)乘积高8位,例2 设被乘数为16位无符号数,低8位存放在地址为K的单元,高8位存放在地址为K+1的单元。乘数为8位无符号数,存放在M单元。编程求出二者乘积,并将乘积的07位存放在R1,815位存放在R2,1623位存放在R3中。,分析:16位无符号数与8位无符号数相乘的步骤示意如下:,程序编制如下: MOV R0,

39、#K ;设置被乘数地址指针 MOV A, R0 ;被乘数送A中 MOV B, M ;乘数送B中 MUL AB ;(K)(M) MOV R1, A ;乘积的07位存入R1 MOV R2, B ;暂存积的815位 INC R0 ;指向被乘数高8位地址 MOV A, R0 ;取被乘数高8位 MOV B, M ;乘数送B中 MUL AB ;(K+1)(M) ADD A, R2 ;求得乘积的815位 MOV R2, A ;乘积的815位存入R2 MOV A, B ADDC A, #00H ;求得乘积的1623位 MOV R3, A ;乘积的1623位存入R3,2. 除法指令,例1 设(A)=9AH,(B

40、)=23H,执行指令: DIV AB 则(A)=04H,(B)=0EH,OV=00H,CY=00H,3.4.2 乘除运算指令,DIV AB ;(A)商,(B)余数,3.4.3 增1减1指令,1. 增1指令,INC A ;(A)(A)+1 INC direct ;(direct)(direct)+1 INC Ri ;(Ri)(Ri)+1 INC Rn ;(Rn)(Rn)+1 INC DPTR ;(DPTR)(DPTR)+1,例1 设(A)=40H,(41H)=29H,则执行下列指令: INC A ;(A)40H+1H INC 41H ;(41H)29H+1H 结果:(A)=41H,(41H)=2

41、AH,例2 设(R0)=56H,片内RAM单元(56H)=0FFH,(57H)=50H,则执行下列指令: INC R0 ;(56H)00H INC R0 ;(R0)57H INC R0 ;(57H)51H 结果:(56H)=00H,(R0)=57H,(57H)=51H,例3 执行下述指令序列: MOV DPTR,#2FFEH ;(DPTR)2FFEH INC DPTR ;(DPTR)2FFFH INC DPTR ;(DPTR)3000H INC DPTR ;(DPTR)3001H 则(DPTR)=3001H,2. 减1指令,DEC A ;(A)(A)-1 DEC direct ;(direct

42、)(direct)-1 DEC Ri ;(Ri)(Ri)-1 DEC Rn ;(Rn)(Rn)-1,例1 设(R0)=4FH,片内RAM单元(4FH)=40H,(4EH)=00H,执行指令: DEC R0 ;(4FH)3FH DEC R0 ;(R0)4EH DEC R0 ;(4EH)0FFH 结果:(R0)=4EH,(4EH)=0FFH,(4FH)=3FH,3.4.4 二/十进制调整指令,DA A 该指令的功能是对累加器A中的“二/十”进制(BCD码)加法结果进行调整。,例1 执行下面的指令: MOV A, #86H ADD A, #47H 结果:(A)=0CDH,CY=0,AC=0 所得结果

43、并不是BCD码,若接着执行以下指令: DA A 则结果:(A)=33H,CY=1,AC=1,1. 累加器A清0指令格式: CLR A 功能:将00H送入累加器A中。,3.5 逻辑运算指令,3.5.1 单操作数指令,2. 累加器A取反指令格式: CPL A 功能:将累加器A中内容取反(将A中内容按位取反,即逻辑非运算)后再送回累加器A中。,例1 设(A)=98H,执行指令 CLR A ;(A)0 CPL A ;(A)0FFH 结果:(A)=0FFH,3. 累加器A内容循环左移一位 指令格式: RL A 功能:将累加器A中的内容循环左移一位。即,例1 设(A)=10001000,则执行指令“RL

44、A”后,结果:(A)=00010001,4. 累加器A内容带进位位CY循环左移一位,指令格式: RLC A 功能:将累加器A中的内容与进位标志位CY一起循环左移一位。即:,例1 设(A)=01010101,(CY)=1。则执行指令“RLC A”后,结果:(A)=10101011,(CY)=0。,5. 累加器A内容循环右移一位,指令格式: RR A 功能:将累加器A中的内容循环右移一位。即:,例1 设(A)=00010001,则执行指令“RR A”后,结果:(A)=10001000,6. 累加器A内容带进位位CY循环右移一位,指令格式: RRC A 功能:将累加器A中的内容与进位标志位CY一起循

45、环右移一位。即:,例1 设(A)=10101011,(CY)=0。则执行指令“RRC A”后,结果:(A)=01010101,(CY)=1。,3.5.2 双操作数指令,1. 逻辑与指令,逻辑与的规则定义为:(其中表示逻辑与) 00=0 01=10=0 11=1,例1 设(A)=0C3H,(R3)=0ADH,执行指令“ANL A, R3”。 结果:(A)=81H(10000001B)。 指令执行过程如下:,2. 逻辑或指令,逻辑或的规则定义为:(其中表示逻辑或) 00=0 00=10=1 11=1,例1 设(A)=0C3H,(R3)=0ADH,执行指令“ORL A, R3”。 结果:(A)=0E

46、FH(11101111B)。 指令执行过程如下:,3. 逻辑异或指令,逻辑异或的规则定义为(其中表示逻辑异或): 00=11=0 10=01=1,例1 设(A)=0C3H,(R3)=0ADH,执行指令“XRL A, R3”。 结果:(A)=6EH(01101110B)。 指令执行过程如下:,例2 试把分别保存在30H、31H单元中用ASCII码表示的两位数,转换成两位BCD码,并以压缩BCD码形式存入30H单元中。,程序如下: ANL 30H, #0FH ;30H单元的ASCII码转换成BCD码 MOV A, 31H ;取31H单元的ASCII码 ANL A, #0FH ;31H单元的ASCI

47、I码变成BCD码 RL A RL A RL A RL A ORL 30H, A ;结果存入30H单元,例1 要将20H位的内容传送给23H位,不能直接用“MOV 20H, 23H”,因为该指令执行的实际是字节传送,若要将20H位的内容传送给23H位,可用下述程序实现: MOV C, 20H ;(C)(20H) MOV 23H, C ;(23H)(C),3.6 位操作类指令,3.6.1 位数据传送指令,指令助记符与功能说明如下: 目的操作数 源操作数 功能说明,MOV C, bit ;(C)(bit) MOV bit, C ;(C)(bit),指令格式如下: CLR C ;(C)(0) CLR

48、bit ;( bit)(0) 以上指令可使直接寻址位(bit)或位累加器C清0,不影响其他标志。例1 片内RAM单元26H的内容为0FFH,执行指令: CLR 32H 结果:(26H)=0FBH(11111011B),其中,32H为26H单元第二位的位地址。,3.6.2 位状态控制指令,1. 位清0指令,指令格式如下: CPL C ;(C)(/C) CPL bit ;(bit)(/bit) 以上指令把位累加器C或者直接寻址位(bit)内容取反,不影响其他标志位。例1 执行下面的指令序列: MOV P1,#2FH ;(P1)(2FH即00101111B) CPL P1.0 ;P1.0位求反 CPL P1.2 ;P1.2位求反 结果:(P1)=2AH(00101010B)。,

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

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报