1、单片机原理及应用电子教案本书主要内容本书主要内容l单片机基础知识l单片机的组成与结构分析lMCS-51 单片机的指令系统l单片机的程序设计lMCS-51单片机的中断系统l定时/计数器l单片机的串行通信及接口lMCS-51单片机的系统扩展第第1章章 单片机概述单片机概述 单片机简介单片机简介 单片机发展概述单片机发展概述 单片机应用领域单片机的发展趋势MCS-51系列系列单片机简介学习单片机技术的方法1.1 单片机简介单片机简介 运算器 控制器 主存储器 外存储器 输入设备 输出设备 操作系统 汇编程序 装配程序 调试程序 汇编语言 BASIC 语言 FORTRAN语言 C 语言 财务软件 教学
2、软件 管理软件 应用软件 程序设计语言 系统软件 外部设备 主机 硬件系统 软件系统 微型计算机系统 单片机是单片微型计算机的简称单片机是单片微型计算机的简称单片机可以认为是一种计算机集成芯片,采用超大规模集成技术,将中央处理器(CPU)、存储器(ROM、RAM)、输入、输出接口集成在一块芯片上,构成的计算机硬件系统。单片机的发展概况第一阶段(19711976)代表Zilog公司Z80 第二阶段(19761979)Intel公司MCS-48 第三阶段(19791982)Intel MCS-51,Motorola 6081/2Rokwell 6501/2第四阶段(19821990)MCS-96
3、16位第五阶段(1990至今)Microchip PICMotorola MC68HC等1.3 1.3 单片机的应用领域单片机的应用领域1.在工业测控中的应用2.在智能产品中的应用在计算机网络与通信技术中的应用在家用电器中的应用3.在医用设备领域中的应用l低功耗CMOS化l微型单片化l主流与多品种共存1.4 单片机的发展趋势单片机的发展趋势 MCS-51系列单片机简介系列单片机简介系列单片机产品1.6 学习单片机技术的方法学习单片机技术的方法1.学习单片机所需的准备工作 l硬件准备硬件准备 l软件准备软件准备l知识准备知识准备 l初学者推荐的软件硬件准备初学者推荐的软件硬件准备 2.学习过程与
4、考核方法 l主要课堂学习环节主要课堂学习环节 l教学形式与过程教学形式与过程 l学习要求与考核方法学习要求与考核方法 1.7 不同计数制之间的转换不同计数制之间的转换1.7.1 1.7.1 十进制数十进制数一个十进制数,它的数值是由数码0,1,2,8,9来表示的。数码所处的位置不同,代表数的大小也不同。例如:53478=5104+3103+4102+7101+8100,对应于:53478万 千 百 十 个十进制104103102101100 1.7.2 1.7.2 二进制数二进制数二进制是按“逢二进一”的原则进行计数的。二进制数的基为“2”,即其使用的数码为0、1,共两个。二进制数的权是以2为
5、底的幂。例如:10110100=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=18010111000二进制27 26252423222120 1.7.3 1.7.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
6、=4163+F162+8161+E160=20366,对应于:4EF8十六进制163162161160常用计数制表示数的方法比较常用计数制表示数的方法比较 1.7.4 1.7.4 不同进制数之间的转换不同进制数之间的转换1.十进制数转换成二进制数的方法就是用2去除该十进制数,得商和余数,此余数为二进制代码的最小有效位(LSB)或最低位的值;再用2除该商数,又可得商数和余数,则此余数为LSB左邻的二进制代码(次低位)。依此类推,从低位到高位逐次进行,直到商是0为止,就可得到该十进制数的二进制代码。除二取余法除二取余法 1.7.4 1.7.4 不同进制数之间的转换不同进制数之间的转换例如:将(67
7、)10转换成二进制数,过程如下:6722331022216184220012100余数余数余数余数余数余数余数低位高位即:(67)10=(1000011)2。1.7.4 1.7.4 不同进制数之间的转换不同进制数之间的转换1.十进制数转换成二进制数的方法将已知十进制的小数乘以2之后,可能有进位,使整数位为1(当该小数大于时),也可能没有进位,其整数位仍为零。该整数位的值为二进制小数的最高位。再将乘积的小数部分乘以2,所得整数位的值为二进制小数的次高位。依此类推,直到满足精度要求或乘2后的小数部分为0为止。乘二取整法乘二取整法 例如:将(0.625)10转换成二进制数,其过程如下:0.625 2
8、 1.250 0.250 2 0.500 0.500 2 1.000 整数部分为 1 就是二进制小数的第一位为 1 整数部分为 0 就是二进制小数的第二位为 0 整数部分为 1 就是二进制小数的第二位为 1 即:(0.625)10=(0.101)2 1.7.4 1.7.4 不同进制数之间的转换不同进制数之间的转换2.二进制数转换为十进制数的方法将二进制数转换成十进制数时,只要将二进制数各位的权乘以各位的数码(0或1)再相加即可。例如:将(1101.1001)2制转换成十进制数:(1101.1001)2123+122+021+120+12-1+02-2+02-3+12-48+4+0+1+0.5+
9、0+0+0.0625=(13.5625)101.7.4 1.7.4 不同进制数之间的转换不同进制数之间的转换3.二进制与十六进制数之间的转换方法二进制数转换成十六进制数例如:把(101101101.1100101)2转换成十六进制数。1 0 1 1 0110 1.11110001 0 1 1 0110 1.11110000 0 00二进制十六进制二进制16DCA.即:(101101101.1100101)2=(16D.CA)16。1.7.4 1.7.4 不同进制数之间的转换不同进制数之间的转换2)十六进制数转换成二进制数将十六进制数转换成二进制数时,只要将每1位十六进制数用4位相应的二进制数表
10、示即可完成转换。例如:将(ECA16)16转换成二进制数。101 100101011100 0二进制十六进制ECA161 1 00即:。1.7.5 BCD1.7.5 BCD码码1.7.6 ASCII1.7.6 ASCII码码ASCII码是一种8位代码,最高位一般用于奇偶校验,用其余的7位代码来对128个字符编码,其中32个是控制字符,96个是图形字符。1.8 思考练习题思考练习题(1)微型计算机由哪几部分组成?(2)什么是单片机?它与一般微型计算机在结构上有什么区别?(3)单片机主要应用在哪些方面?(4)将下面的一组十进制数转换成二进制数:567423198968(5)将下面的二进制数转换成十
11、进制数和十六进制数:1011001110100101111010011001111010000101第第2章章 单片机的组成与结构分析单片机的组成与结构分析 MCS-51单片机的内部结构单片机的内部结构 CPU的结构和功能的结构和功能存储器的组织结构存储器的组织结构MCS-51单片机的并行输入输出端口单片机的并行输入输出端口MCS-51 单片机的外部引脚及功能单片机的外部引脚及功能单片机指令时序单片机指令时序思考练习题思考练习题2.1 MCS-51单片机的内部结构单片机的内部结构 2.1 MCS-51单片机的内部结构单片机的内部结构 其基本特性如下:8位CPU,含片内振荡器;4KB的程序存储器
12、ROM;128B的数据存储器RAM;64KB的外部程序存储器寻址能力;64KB的外部数据存储器寻址能力;32根输入输出(I/O)线;2个16位定时/计数器;1个全双工异步串行口;21个特殊功能寄存器;5个中断源,2个优先级;具有位寻址功能。2.2 CPU的结构和功能的结构和功能 2.2.1 2.2.1 运算器运算器8051单片机的运算器由算术/逻辑运算单元ALU、累加器A、寄存器B、暂存器1、暂存器2以及程序状态字寄存器PSW组成。CYACRS0RS1FOOVP图2.2 PSW寄存器各位的标志符号表2.1 寄存器PSW各位的功能、标志符号与相应的位地址2.2.2 2.2.2 控制器控制器2.3
13、 存储器的组织结构存储器的组织结构存储器的功能是存储信息(即程序与数据)。存储器是组成计算机的主要部件,目前所使用的存储器以半导体存储器为主。从功能上来划分,半导体存储器可分为两大类:即只读存储器(ROM),和随机存储器(RAM)。8051单片机的控制器由指令寄存器、指令译码器、堆栈指针SP、程序计数器PC、数据指针DPTR、RAM地址寄存器以及16位地址缓冲器等组成。2.3.1 MCS-512.3.1 MCS-51单片机的存储器结构单片机的存储器结构0000HFFHFFFFH64KBRAM(I/O)数据存储器00H7FH80H内部RAM 专用寄存器片外片内0000H片内EA=10000H0F
14、FFH片外EA=00FFFHFFFFH64KBROM 4KBROM程序存储器图2.3 8051存储器配置图2.3.2 2.3.2 程序存储器程序存储器程序是控制计算机运行的一系列命令。计算机能够识别并执行的命令是由代码“0”和“1”组成的一组机器指令。2.3.3 2.3.3 数据存储器数据存储器单片机的数据存储器由可读可写的存储器RAM组成,最多可扩展到64KB,用于存储数据。2.3.4 MCS-512.3.4 MCS-51单片机的内部数据存储器单片机的内部数据存储器MCS-51单片机的内部数据存储器由地址00HFFH共有256个字节的地址空间组成,这256个字节的地址空间被分为两部分,其中内
15、部数据RAM地址为00H7FH(即0127)。00H1FH20H2FH30H7FH0组1组2组3组位地址为 00H7FH 只能按字节寻址的RAM区既可按位也可按字节寻址的16字节(128位)4组工作寄存器每组为R0R7(也可作按字节寻址的RAM用)32字节FFHB8HB0HA8HA0H98H90H88H80HF0HE0HD0HC8H专用寄存器中的可寻址位(93位)80H特殊功能 寄存器 128255内部数据 RAM 0127通用RAM区图2.4 内部数据存储器地址空间1.内部数据RAM单元内 部 数 据RAM分为工 作 寄 存器 区、位寻 址 区、通用RAM区 三 个 部分。7F7E7D7C7
16、B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201003区2区1区0区07H00H0FH08H17H10H1FH18H20H21H22H23H24H25H26H
17、27H28H29H2AH2BH2CH2DH2EH2FH7FHMSBLSB图2.5 RAM位地址(低128位在00H7FH)00H01H02H03H04H05H06H07H08H09H0AH00000111SP(07H)00H01H02H03H04H05H06H07H08H09H0AH00001000SP(08H)1010101100H01H02H03H04H05H06H07H08H09H0AH00000111SP(07H)压栈操作:PUSH A出栈操作:POP A系统复位(a)系统复位后,未改变SP初值时的堆栈操作(设(A)=0ABH)执行指令:MOV SP,#60H5FH60H61H62H6
18、3H64H01100000SP(60H)5FH60H61H62H63H64H01100001SP(61H)A15FH60H61H62H63H64H01100011SP(63H)A1A2压入数据A1相继压入数据A2、A35FH60H61H62H63H64H01100001SP(61H)A15FH60H61H62H63H64H01100010SP(62H)A1A2弹出数据A3A3弹出数据A2弹出数据A15FH60H61H62H63H64H01100000SP(60H)(b)系统复位后,改变SP初值为60H时的堆栈操作图2.6 堆栈操作示例2.特殊功能寄存器特殊功能寄存器SFR的地址空间是80HFF
19、H。表2.3 特殊功能寄存器的名称、符号与地址2.特殊功能寄存器2.特殊功能寄存器2.特殊功能寄存器2.4 MCS-51单片机的并行输入输出端口单片机的并行输入输出端口2.4.1 P02.4.1 P0口结构口结构1.P0用作通用I/O口2.P0用作地址/数据总线分时复用方式DCLQQ P0.X锁存器MUXP0.X引脚T1T2读引脚写锁存器内部总线读锁存器1234地址/数据控制CVCC2.4.2 P22.4.2 P2口结构口结构1.P2口用作地址总线2.P2口用作通用I/O口DCLQQ P2.X锁存器MUX读引脚写锁存器内部总线读锁存器12地址控制CP2.X引脚TVCCR32.4.3 P32.4
20、.3 P3口结构口结构2.4.4 P12.4.4 P1口结构口结构DCLQQ P3.X锁存器读引脚写锁存器内部总线读锁存器12P3.X引脚TVCCR第二输出功能第二输入功能34DCLQQ P1.X锁存器读引脚写锁存器内部总线读锁存器12P1.X引脚TVCCR2.5 MCS-51单片机的外部引脚及功能单片机的外部引脚及功能2.5.1 2.5.1 电源引脚电源引脚(b)双列直插式封装(a)方形封装2.5.2 2.5.2 外接晶振或外部时钟信号输入端外接晶振或外部时钟信号输入端 (a)内部振荡器方式 (b)外部振荡器方式图2.12 8051单片机的振荡器方式表2.4 按不同工艺制造的单片机芯片外接振
21、荡器时的接法2.5.3 2.5.3 输入输出引脚输入输出引脚:通道0是一个8位漏极开路的双向输入输出通道。在外接存储器或者扩展I/O接口时,P0口作为复用的低8位地址总线和双向数据总线。在不扩展存储器或者I/O接口时,作为准双向输入输出接口。:只有一种功能,即准双向I/O口。:可作为准双向I/O口使用;但在接有片外存储器或扩展I/O接口范围超过256B时,则该口一般只能作为高8位地址总线使用。:该口除了作为准双向口外,还具有第二功能。2.5.4 2.5.4 控制线控制线 1.ALE/2.PSEN3.EA/VPP 4.RST(a)上电复位 (b)电平开关复位图2.13 复位电路2.6 单片机指令
22、时序单片机指令时序S1P1 P2S2P1 P2S3P1 P2S4P1 P2S5P1 P2S6P1 P2S1P1 P2S2P1 P2S3P1 P2S4P1 P2S5P1 P2S6P1 P2P2P1S1OSCALES1S2S3S4S5S6读操作码读下一个操作码(丢弃)读下一个操作码A:单字节单周期指令 如:INC AS1S2S3S4S5S6读操作码读第2字节读下一个操作码B:双字节单周期指令 如:ADD A,#dataS1S2S3S4S5S6读操作码读下一个操作码C:单字节双周期指令 如:INC DPTRS1S2S3S4S5S6读操作码读下一个操作码D:单字节双周期指令 如:MOVX类指令读下一个
23、操作码(丢弃)S1S2S3S4S5S6S1S2S3S4S5S6读下一个操作码(丢弃)不取指无ALE信号不取指S1S1地址数据访问外部存储器2.7 思考练习题思考练习题(1)MCS-51单片机包含哪些主要逻辑功能部件?(2)程序状态字寄存器PSW包含哪几个标志位?各位的含义是什么?各有何作用?(3)什么叫单片机?(4)MCS-51单片机的存储结构有何特点?(5)单片机的EA端有何作用?在8031组成的单片机应用系统中,其EA端怎样处理?为什么?(6)单片机内部RAM分为哪几个部分?各有何作用?(7)MCS-51单片机的堆栈SP在操作中遵循什么原则?在开机复位时,其初值是多少?是否可以通过程序重新
24、设置?(8)怎样确定和改变单片机当前的工作寄存器组?(9)简要说明单片机的位地址分配。(10)试画出常用的单片机复位电路,并说明复位后各个寄存器的状态。第3章 MCS-51单片机的指令系统u 汇编语言的指令格式及符号简介汇编语言的指令格式及符号简介 u 寻址方式u 数据传送类指令u算术运算类指令u逻辑运算类指令u位操作类指令u控制转移类指令u思考练习题 3.1 汇编语言的指令格式及符号简介汇编语言的指令格式及符号简介3.1.1 指令格式指令格式标号:操作码助记符 第一操作数,第二操作数,第三操作数;注释例如:LOOP:MOV A,#50H;(A)50H DECR0;(R0)(R0)-1 DJN
25、Z R0,LOOP;(R0)-10,则程序转移到LOOP地址;否则顺序执行 END;结束3.1.2 本章中符号的定义本章中符号的定义3.2 寻寻 址址 方方 式式 MCS-51单片机有7种寻址方式,见表。表3.1 7种寻址方式的比较3.2.1 立即寻址立即寻址例如:MOV A,#23H ;(A)23H,即累加器A的内容被替换为立即数23H。0111010000100011PC操作码立即数ACCE0H图3.1 MOV A,#23H的执行示意图该指令的功能是将8位的立即数23H传送到累加器A中。如图所示。其中,目的操作数采用寄存器寻址,源操作数采用立即寻址。3.2.2 直接寻址直接寻址直接寻址是指
26、在指令中包含了操作数的地址,该地址直接给出了参加运算或传送的单元或位。直接寻址方式可访问三种地址空间:特殊功能寄存器SFR(该空间只能采用直接寻址)。内部数据RAM的低128个字节单元(该空间还可以采用寄存器间接寻址)。221个位地址空间。例如例如:MOV A,40H ;把40H单元的内容送到累加器中,即(A)(40H)。1110010101000000PC操作码直接地址ACCE0H40HROM内部RAM图3.2 MOV A,40H的执行示意图 3.2.3 寄存器寻址寄存器寻址 寄存器寻址是指定某一可寻址的寄存器的内容为操作数。例如:MOV A,R0 ;(A)(R0)该指令的功能是将R0中的数
27、据传送到累加器A中。源操作数与目的操作数都采用了寄存器寻址。在MCS-51单片机中,能够用来间接寻址的寄存器有:用户所选定的工作寄存器组的R0、R1,堆栈指针SP和16位的数据指针DPTR。内部数据RAM的寄存器间接寻址采用寄存器R0、R1;外部数据RAM的寄存器间接寻址有两种形式:一是采用R0、R1作间址寄存器,这时R0或R1提供低8位地址,而高8位地址则由P2端口提供;二是采用16位的DPTR作间址寄存器。3.2.4 寄存器间接寻址寄存器间接寻址例如:设R0的内容为60H,且(60H)=10H,即60H地址单元中的内容为10H,则语句MOV A,R0的执行过程如图所示。执行后,(A)=10
28、H,即累加器A的内容成为10H。01100000ACCR060H10H0001000000010000内部RAM图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作为偏移量寄存器,将一个基址寄存器的内容与偏移量寄存器的内容之和作为操作数地址。例如:MOVC A,A+DPTR设(A)=10H,(DPTR)=1000H,程序存储器的(
29、1010H)=45H,则上面程序语句的功能是将A的内容与DPTR的内容相加形成操作数地址(1010H),把该地址中的数据传送到累加器A。即(A)(A)+(DPTR)。结果:(A)=45H。00010000DPHROM00000000DPL00010000ACC00010000+00010000(DPTR)=1010HDPHDPL01000101ACC01000101图 3.4 MOVC A,A+DPTR的执行示意图 相对寻址相对寻址是把指令中给定的地址偏移量rel与程序计数器 PC的当前值(读出该双字节或三字节的跳转指令后,PC指向的下条指令的地址)相加,得到真正的程序转移地址。例如:JC 8
30、0H若C=0,则PC值不变,若C=1,则以当前PC值为基地址,加上80H得到新的PC值。设该转移指令存放在1005H单元,取出操作码后PC指向1006H单元,取出偏移量后PC指向1007H单元,所以计算偏移量时PC当前地址为1007H,已经为转移指令首地址加2,这里的偏移量以补码给出,所以80H代表着-80H,补码运算后,就形成跳转地址0F87H。其过程如图所示。3.2.6 相对寻址相对寻址3.2.6 相对寻址相对寻址01000000100000000F87H1005PCPCPC10061007ALU1007操作码偏移量PC图3.5 JC 80H的执行示意图3.2.7 位寻址位寻址MCS-51
31、单片机可对片内RAM的两个区域进行位寻址:一个是20H2FH单元的128位,另一个是特殊功能寄存器的93位。在寻址时,同一个位地址可以有多种标识方式,读者可参看后面节“位操作指令”的相关内容。3.3.1 通用传送指令通用传送指令格式:MOV 目的操作数,源操作数功能:把第二操作数指定的字节内容传送到第一操作数指定的单元中。不影响源操作数内容,不影响别的寄存器和标志。1.以累加器A为目的操作数的传送类指令3.3 数据传送类指令数据传送类指令指令助记符及功能说明如下:例例1 若(50H)=10H,则执行指令MOV A,50H之后,(A)=10H。例例2 若(R0)=20H,(20H)=39H,则执
32、行指令MOV A,R0后,(A)=39H。例例3 若(R5)=55H,则执行指令MOV A,R5后,(A)=55H。2.以Rn为目的操作数的传送类指令例例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
33、 若(R0)=50H,(50H)=20H,(A)=10H,则执行指令“MOV R0,A”后,50H单元的内容由原来的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中数据存
34、储到20FFH单元中去。可用以下程序实现:MOV R1,#0FFH ;(R1)0FFHMOVX R1,A ;(20FFH)(A)也可采用下述程序实现:MOV DPTR,#20FFH ;(DPTR)20FFHMOVX DPTR,A ;(DPTR)(A),即(20FFH)(A)指令助记符与功能说明如下:3.3.2 外部数据存储器外部数据存储器(或或I/O口口)与累加器与累加器A传送指令传送指令例例2 将外部数据存储器7FF0H单元中的数据取出,存放到外部数据存储器2000H单元中去。MOV DPTR,#7FF0HMOVX A,DPTRMOV DPTR,#2000HMOVX DPTR,A例例1 在外
35、部程序存储器2000H单元开始存放了数字09的共阴极数码管的16进制数的字形代码3FH、06H、6FH。要求根据A中的值(09)来查找该数字所对应的代码以便显示。若用PC作基址寄存器,则需要在MOVC A,A+PC指令前用一加法指令对地址进行调整:ADD A,#dataMOVC A,A+PC3.3.3 程序存储器向累加器程序存储器向累加器A传送数据指令传送数据指令指令助记符与功能说明如下:1.字节交换指令例例1 设(R1)=30H,(30H)=45H,(A)=7FH,则执行指令:XCH A,R1结果:(A)=45H,而(30H)=7FH,从而实现了累加器A与内部数据存储器RAM中30H单元的数
36、据交换。3.3.4 数据交换指令数据交换指令指令助记符与功能说明如下:2.半字节交换指令例例1 设(30H)=6FH,(R0)=30H,(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交换
37、了A中高、低半字节(30和74),结果不影响标志寄存器PSW。3.3.5 堆栈操作指令堆栈操作指令堆栈操作指令只有2条,即:压入(PUSH)和弹出(POP)。压入指令:PUSH direct ;SPSP+1,(SP)(direct)弹出指令:POP direct ;(SP)(direct),SPSP-1例1PUSH A ;保护A中数据 PUSH PSW ;保护标志寄存器中数据 ;执行服务程序 POP PSW ;恢复标志寄存器中数据 POP A ;恢复A中数据例2PUSH A PUSH PSW POP A POP PSW例3 PUSH DPH PUSH DPL POP DPL POP DPH3.
38、4.1 加减运算指令加减运算指令 1.加法指令 这类指令所完成的操作是把源操作数(立即数、直接地址单元内容、间接地址单元内容、工作寄存器内容)与累加器A的内容相加,将结果保存在累加器A中。3.4 算术运算类指令算术运算类指令指令助记符与功能说明如下:例例1 执行指令:MOV A,#0A9HADD A,#0B8H对程序状态寄存器的影响如图所示。运算结果:(A)=61H,CY=1,AC=1,OV=1,P=1,(PSW)=0C5H例例2 8位数加法程序片断1:MOVA,#23H ADDA,#5AH运算结果:(A)=7DH,CY=0,OV=0,AC=0,P=0,(PSW)=00H。0000000000
39、01111111111111 d7d0d4d3无进位AC=0 0=0,OV=0无进位CY=0P=00例例3 8位数加法程序片断2:MOVA,#0ABHADDA,#9AH运算结果:(A)=45H,CY=1,OV=1,AC=1,P=1,(PSW)=0C5H。000001000111000111101111 d7d0d4d3有进位AC=1 1=1,OV=1有进位CY=1P=110带进位加法指令与前述加法指令的区别仅为考虑进位位,其他与加法指令相同。2.带进位加法指令指令助记符与功能说明如下:例例3 利用ADDC指令可以进行多字节的加法运算。设有两个16位数相加,被加数的高8位放在41H,低8位放在4
40、0H,加数的高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)=21H,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位存入50HMOV
41、A,41H;(A)被加数高8位ADDC A,43H;被加数高8位与加数高8位以及低位来的进位相加MOV 51H,A;和的高8位存入51H单元MOV A,#00H;(A)00HADDC A,#00H;(A)(A)+00H+高8位来的进位MOV 52H,A;进位位C内容存入52H单元3.带借位减指令指令助记符与功能说明如下:例例1 设(40H)=0BAH,(41H)=98H,试编写40H内容减去41H内容后,结果再存入40H单元的程序。MOVA,40H;(A)(40H)CLRC;进位位C清0SUBBA,41H;(A)(A)-(41H)-(C)MOV40H,A;(40H)(A)执行以上程序后,(40
42、H)=22H,CY=0,OV=0。如果参与运算的两数为无符号数,则其溢出与否与OV状态无关,而是靠CY是否有借位来判断,OV仅仅表示带符号数运算时是否溢出。例例2 设有两个16位数相减,被减数的高8位放在41H,低8位放在40H,减数高8位放在43H,低8位放在42H,差的低8位存放在50H,高8位存放在51H,借位位存放在52H。可编程序如下:SHJIAN:MOV A,40H ;(A)被减数低8位CLR C ;C位清0SUBB A,42H ;减去减数低8位MOV 50H,A ;差的低8位存入50HMOV A,41H ;(A)被减数高8位SUBB A,43H ;被减数高8位减去减数高8位与借位
43、MOV 51H,A ;差的高8位存入51H单元MOV A,#00H ;(A)00HADDC A,#00H ;(A)高8位的借位位MOV 52H,A ;借位位C内容存入52H单元1.乘法指令例例1 设(A)=67H(103),(B)=0ADH(173),执行指令:MUL AB运算结果:乘积为459BH(17819),(A)=9BH,(B)=45H。另外:OV=1,CY=03.4.2 乘除运算指令乘除运算指令 MUL AB ;(A)乘积低8位,(B)乘积高8位例例2 设被乘数为16位无符号数,低8位存放在地址为K的单元,高8位存放在地址为K+1的单元。乘数为8位无符号数,存放在M单元。编程求出二者
44、乘积,并将乘积的07位存放在R1,815位存放在R2,1623位存放在R3中。分析:16位无符号数与8位无符号数相乘的步骤示意如下:程序编制如下:MOV R0,#K ;设置被乘数地址指针MOV A,R0 ;被乘数送A中MOV B,M ;乘数送B中MUL AB ;(K)(M)MOV R1,A ;乘积的07位存入R1MOV 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位存入R2MOV A,BADDC A,#00H ;
45、求得乘积的1623位MOV R3,A ;乘积的1623位存入R3 K+1 K M R1 R2 A B+R1 R2 R3 2.除法指令例例1 设(A)=9AH,(B)=23H,执行指令:DIV AB则(A)=04H,(B)=0EH,OV=00H,CY=00H3.4.2 乘除运算指令乘除运算指令 DIV AB ;(A)商,(B)余数3.4.3 增增1减减1指令指令1.增1指令INC A ;(A)(A)+1INC direct ;(direct)(direct)+1INC Ri ;(Ri)(Ri)+1INC Rn ;(Rn)(Rn)+1INC DPTR ;(DPTR)(DPTR)+1例例1 设(A)
46、=40H,(41H)=29H,则执行下列指令:INC A;(A)40H+1HINC 41H;(41H)29H+1H结果:(A)=41H,(41H)=2AH例例2 设(R0)=56H,片内RAM单元(56H)=0FFH,(57H)=50H,则执行下列指令:INC R0;(56H)00HINC R0;(R0)57HINC R0;(57H)51H结果:(56H)=00H,(R0)=57H,(57H)=51H例例3 执行下述指令序列:MOV DPTR,#2FFEH;(DPTR)2FFEHINC DPTR;(DPTR)2FFFHINC DPTR;(DPTR)3000HINC DPTR;(DPTR)300
47、1H则(DPTR)=3001H2.减1指令DEC A;(A)(A)-1DEC direct;(direct)(direct)-1DEC Ri;(Ri)(Ri)-1DEC Rn;(Rn)(Rn)-1例例1 设(R0)=4FH,片内RAM单元(4FH)=40H,(4EH)=00H,执行指令:DEC R0 ;(4FH)3FHDEC R0 ;(R0)4EHDEC R0 ;(4EH)0FFH结果:(R0)=4EH,(4EH)=0FFH,(4FH)=3FH3.4.4 二二/十进制调整指令十进制调整指令 DA A该指令的功能是对累加器A中的“二/十”进制(BCD码)加法结果进行调整。例例1 执行下面的指令:
48、MOVA,#86HADDA,#47H结果:(A)=0CDH,CY=0,AC=0所得结果并不是BCD码,若接着执行以下指令:DA A则结果:(A)=33H,CY=1,AC=11.累加器A清0指令格式:CLR A功能:将00H送入累加器A中。3.5 逻辑运算指令逻辑运算指令3.5.1 单操作数指令单操作数指令2.累加器A取反指令格式:CPL A功能:将累加器A中内容取反(将A中内容按位取反,即逻辑非运算)后再送回累加器A中。例例1 设(A)=98H,执行指令CLR A ;(A)0CPL A ;(A)0FFH结果:(A)=0FFH3.累加器A内容循环左移一位指令格式:RL A功能:将累加器A中的内容
49、循环左移一位。即A7A0例例1 设(A)=10001000,则执行指令“RL A”后,结果:(A)=0001000110000001A0A1A2A3A4A5A6A7执行RL A指令前10000001执行RL A指令后A0A1A2A3A4A5A6A74.累加器A内容带进位位CY循环左移一位指令格式:RLC A功能:将累加器A中的内容与进位标志位CY一起循环左移一位。即:A7A0CY例例1 设(A)=01010101,(CY)=1。则执行指令“RLC A”后,结果:(A)=10101011,(CY)=0。执行RLC A指令前执行RLC A指令后10100101A0A1A2A3A4A5A6A7CY1
50、101111000A0A1A2A3A4A5A6A7CY5.累加器A内容循环右移一位指令格式:RR A功能:将累加器A中的内容循环右移一位。即:A7A0例例1 设(A)=00010001,则执行指令“RR A”后,结果:(A)=1000100010000001A0A1A2A3A4A5A6A7执行RR A指令前10000001A0A1A2A3A4A5A6A7执行RR A指令后6.累加器A内容带进位位CY循环右移一位指令格式:RRC A功能:将累加器A中的内容与进位标志位CY一起循环右移一位。即:A7A0CY例例1 设(A)=10101011,(CY)=0。则执行指令“RRC A”后,结果:(A)=