经典单片机原理及应用课件.ppt
第1章 单片机概述1整体概述THEFIRSTPARTOFTHEOVERALLOVERVIEW,P L E A S E S U M M A R I Z E T H E C O N T E N T第一部分2v单片机又称为微控制器(MicroControllerUnit,MCU),是微型计算机的一个非常重要的分支。自从20世纪70年代问世以来,就以其体积小、功能全、可靠性高、控制功能强、性价比高等特点在智能仪表、机电一体化、实时控制、家用电器、信息和通信产品等各个领域得到了广泛的应用,对各行各业的改造和产品的更新换代起着非常重要的推动作用,对人们的生活产生了深刻的影响。3v本章首先介绍了单片机的基本结构与特点、单片机与嵌入式系统和单片机应用的特点,然后简述了单片机的发展趋势,为了让读者对MCS-51系列单片机有一个较全面的了解,还介绍了MCS51系列单片机的基本概况和MCS51系列的最新发展。411单片机与嵌入式系统v单片机是将中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM或EPROM)、中断系统、定时器/计数器和一些输入/输出接口等微型计算机的部件都集成在一个芯片上的微控制器(Microcontroller)。v中央处理器包括运算器、控制器和寄存器3个主要部分,它是单片机的核心。5111单片机的基本结构与特点80C51单片机的基本结构与特点:v程序存储器和数据存储器分开vI/O端口多功能分时复用v片内特殊功能寄存器和工作寄存器组v片内有全双工串行通信接口v独立的位处理器6112单片机与嵌入式系统v1嵌入式系统的主要特点嵌入式系统的主要特点体现在两个方面:(1)目的性和针对性。(2)实时性。72典型应用v嵌入式系统的典型应用主要有以下几个方面:(1)过程控制。(2)网络通信。例如,在程控交换机、路由器、桥接器、集线器、Modem以及手机等设备和部件上的应用。(3)智能仪器。例如,在示波器、医疗仪器上的应用。(4)消费电子。例如,在掌上电脑、数字电视、游戏机、洗衣机等家用电器上。(5)计算机外部设备。例如在打印机、扫描仪、磁盘驱动器以及终端等设备上。(6)军事电子。例如,在雷达、电子对抗、坦克、战机以及战舰等方面的应用。8113 单片机应用的特点v单机应用的领域主要有:(1)智能产品(2)智能仪表(3)测控系统(4)数控系统(5)智能接口9多机应用v单片机的多机应用系统可分为功能弥散系统、并行多处理机系统以及局部网络系统。(1)功能弥散系统(2)并行多机处理系统(3)局部网络系统1012单片机的发展趋势v单片机的发展推动了应用系统的发展,应用系统的发展又反过来对单片机提出了更高的要求,从而促进单片机的发展。目前,单片机正朝着功能更强、速度更快、功耗更低的方向发展。11121CPU的发展v采用双CPU结构,以提高处理能力。v增加数据总线的宽度,单片机内部采用16位数据总线,其数据处理能力明显优于8位单片机。v采用流水线结构,指令以队列形式出现在CPU中,且有很快的处理速度。v采用串行数据总线结构。12122存储器的发展v存储器的发展主要体现在以下三个方面:1存储容量加大2片内使用EEPROM或Flash3程序保密化13123I/O端口多功能化v随着集成度的不断提高,把众多的外围功能器件集成在片内已经具备了充分的条件。这也是单片机以后发展的重要趋势。v单片机除了集成有一般必须具有的ROM、RAM、定时器/计数器、中断系统外,随着单片机挡次的提高,以适应检测、控制功能更高的要求,片内集成的器件通常还有A/D、D/A、LED/LCD显示驱动器、DMA控制、PWM(脉宽调制器)、PLC(锁相环控制)、PCA(可编程计数阵列)、WDT(看门狗)等。14124低功耗和宽电压范围vCOMS电路为实现低电压、低功耗提供了条件。在8位单片机中已有二分之一的产品实现了COMS化,并设有空闲和掉电两种工作方式。v采用CHMOS制作工艺使单片机集HMOS的高速、高集成度和CMOS的低功耗技术为一体,使单片机的功耗进一步降低,适应的电压范围更宽。15125采用RISC体系结构v采用RISC(精简指令系统计算机)的体系结构,可以使指令系统中的绝大部分指令成为单周期指令。提高指令的运行速度.v目前,在一些采用RISC体系结构的单片机中已达到了在一个时钟周期内执行一条指令的运行速度。16126总线串行化v采用串行接口虽然较之并行接口在数据传输速度上有所减缓,但由于串行传输速度的不断提高,加之单片机面对对象的有限速度要求,使得单片机应用系统中的串行扩展技术仍然获得很大的发展。v随着外围电路串行接口技术的发展,以及单片机串行扩展接口设置的普遍化、高速化,以及由于在片FlashMemory使可以免去外部扩展EPROM等因素,从而导致单片机的并行接口技术日趋衰退。目前许多原来带有并行总线的单片机系列,都推出了不少删去了并行总线的非总线单片机。1713MCS-51系列及其部分兼容机简介v目前已投放市场的主要单片机产品多达70多个系列,500多个品种。这还不包括那些系统或整机商定制的专用单片机以及针对专门业务、专门市场的单片机品种。18131目前较有影响的单片机种类v市场上较有影响的单片机有如下一些系列:1.Intel公司生产的MCS-51和MCS-96系列。2.Motorola公司生产的68HCXX系列。3.Microchip公司生产的16C5X/6X/7X/8X系列。4.Texas公司生产的MSP430FXX系列。19132MCS51系列及其部分兼容单片机vMCS-51系列单片机是国内引进最早从而最为普及的单片机系列,具有种类多、应用广和可替换性强的特点。201Intel公司的MCS-51系列vIntel公司于1980年推出的MCS-51奠定了嵌入式应用单片微型计算机的经典CISC体系结构。MCS-51系列的主要产品按照功能可以划分为如下类型,(1)基本型(2)增强型(3)低功耗型(4)高级语言型(5)A/D型(6)DMA型(7)多并行接口型212ATMEL公司的AT89系列vATMEL公司率先将独特的Flash存储技术注入MCS-51单片机中,其推出的AT89系列单片机,在世界电子行业中引起了极大的反响,在国内也受到广大用户的欢迎。Flash存储器的使用加速了单片机技术的发展,基于Flash存储器的ISP/IAP(在系统可编程/在现场可编程)技术极大地改变了单片机应用系统的结构模式以及开发和运行条件,是8051单片机技术发展的一次重大飞跃。22AT89系列单片机的特点(1)内部含电可擦写闪速只读存储器Flash(2)与80C51引脚兼容(3)可反复重新编程(4)可反复进行系统实验23v本章结束!v谢谢!24第2章MCS-51单片机的结构和时序2521关于MCS-51系列MCS-51系列单片机是Intel公司开发的一种应用非常广泛的一种单片机,它集成有强大的片内功能和强大的指令系统,得到了广大用户的好评。MCS-51系列单片机有多种不同型号,常见的型号有:8031、8051、8751、80C31、80C51等,它们都是8位机单片机,它们的内部结构可能有一些不同,但它们的指令系统完全兼容。下表是几种常见MCS-51系列单片机的型号及它们的异同。2621关于MCS-51系列表2-1几种常见MCS-51系列单片机的型号器件型号制造技术常见封装形式片内程序存储器片内数据存储器8031AHHMOSDIP40无128B8051AHHMOSDIP404KB-ROM128B8751HHMOSDIP404KB-EPROM128B80C51CHMOSDIP404KB-ROM128B80C31CHMOSDIP40无128B8052AHCHMOSDIP408KB-ROM256B8032AHCHMOSDIP40无256B27MCS-51系列单片机的主要特点:v采用单V供电,个引脚能够兼容(只是号引脚略有区别);v位字长即数据总线宽度位,为位机;v片内集成了振荡器和时钟电路(用户一般只须增加很少的外围电路);v具有KB的外部数据存储器与外部程序存储器的寻址空间(最大可达位地址线);v具有条双向I/O线;v具有个位定时器计数器(8052/8032具有个);v具有全双工串行口,可同时收发数据;v具有个位寻址单元;2822MCS-51单片机结构及原理v2.2.1MCS-51单片机的基本结构v2.2.2MCS-51单片机的基本原理292.2.1MCS-51单片机的基本组成MCS-51系列单片机都包括以下几个部分:v中央处理器CPUv内部数据存储器RAMv内部程序存储器ROM(个别型号不带)v输入输出接口v电源等30中央处理器CPUCPU 中央处理器是单片机的核心,包括运算器和控制器两大部分。v运算器主要是用来完成算术逻辑运算等功能。它由算术逻辑单元(ALU)、位处理器、累加器ACC、寄存器B、暂存器等部分组成。v控制器由定时和控制逻辑、内部振荡电路OSC、指令寄存器及其译码器、程序计数器PC、程序和数据寄存器、程序状态字寄存器PSW、RAM地址寄存器、数据指针DPTR和堆栈指针SP等部分组成。31内部数据存储器RAMv存储器是单片计算机中用来存放程序或数据的部件。v在单片机中,存储器类型按功能可以分为只读和随机存取存储器两大类。32MCS-51系列单片机内存储器的组织MCS-51系列单片机的存储器采用了三段彼此独立的地址空间来组织。v256B片内数据存储器地址空间;v64KB片外数据存储器地址空间;v64KB储蓄存储器地址空间(片内和片外地址空间有部分重叠);33程序存储器地址空间v在8051单片机中,程序存储器的地址范围为:0000HFFFFH.v因为它有4KB的片内ROM,所以片内ROM和片外ROM有4KB的地址是重叠的。其重叠地址范围为:0000H0FFFH,当EA为高电平时,CPU的先从片内ROM中取指令,直到超出它的地址范围(0000H0FFFH),再从外部ROM中取指令。当EA为低电平时,CPU只从外部ROM中取指令。348051单片机内几个特殊的地址单元及作用地址作用0000H0000H程序入口,系统复位时PCPC指向此处0003H0003H外部中断0 0入口000BH000BHT0T0溢出中断入口0013H0013H外中断1 1入口001BH001BHT1T1溢出中断入口0023H0023H串口中断入口35数据存储器的地址空间 在8051单片机中,其数据存储器分为两个独立的部分:片内RAM和片外RAM。v片内RAM的地址范围为:00HFFHv片外RAM的地址范围为:0000HFFFFHv在MCS-51系列单片机内部RAM中,存储器分为四个区域,即工作寄存器区,位寻址区,用户RAM和堆栈区,特殊功能寄存器区(SFR)。368051单片机存储器的组织结构图 60KB外部ROM4KB内部EA=14KB外部EA=0FFFFH1000H0FFFH0000H0000H0FFFH64KB外部RAMFFFFH0000H特殊功能寄存器SFR00H7FH80HFFH1FH20H2FH30HRAM位寻址区工作寄存器区37MCS-51工作寄存器区v工作寄存器区共32B,地址范围为:00H1FH;位寻址区共16B,地址范围为:20H2FH;用户RAM和堆栈区的地址空间有80B,地址范围为:30H7FH;其他128B为特殊功能寄存器区,其地址范围为:80HFFH。v另外,32B工作寄存器区分为四组,如表所示。其中的每个组都包含个字节,即个寄存器(R0R7)。用户在使用时,只能同时使用其中的一组。38工作寄存器的分组及选择控制 名称RS0RS1地址范围R000H07HR108H0FHR210H17HR318H1FH注:RS0RS0和RS1RS1为程序状态字(PSWPSW)的D3D3和D4D4位 39位寻址区位地址分配位寻址区字节地址位地址D7D6D5D4D3D2D1D02FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H0FH0EH0DH0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00H408051单片机的特殊功能寄存器41特殊功能寄存器 1)ACC:累加器(位),通常用A表示。实际上它就是一个寄存器,因为常用于加法运算,所以称它为加法器。累加器是单片机中最重要的也使用最频繁的寄存器之一,大部分的运算类指令都要用到它。2)B:乘法寄存器(位)。主要用于乘、除法运算,用于存放乘数或除数。在不做乘除法时,也可以做普通寄存器使用。3)PSW:程序状态字(位)。这是一个很重要的寄存器,用于存放CPU工作状态,通过PSW,我们可以了解CPU的当前工作(执行程序)状态,并据此作出相应的处理。42特殊功能寄存器4)DPTR(DPH、DPL):数据指针(16位)。通常用它来访问外部数据存储器中的任一单元。有时也可以用作通用寄存器。5)P0、P1、P2、P3:是四个并行输入/输出口的寄存器。6)SP:堆栈指针(8位),是一个8位的专用寄存器。在单片机中,可以在RAM中构造这样一个特殊区域,用来存放数据,这个区域存放数据的规则就是“先进后出,后进先出”,我们称之为“堆栈”。43堆栈举例v在使用堆栈时,当入栈操作时,SP先加1,然后执行数据存储操作。v例如:开始时SP=34H,在单片机执行PUSH A 指令后,SP=35H,此时,存储器地址34H中存放的就是累加器A的值(A=20H)。图23 堆栈指针的示意图SPSPSPSP执行指令后20H20H36H36H35H35H34H34H32H32H33H33H37H37H36H36H35H35H34H34H32H32H33H33H37H37H执行指令前4423 MCS-51单片机的引脚及其片外总线结构v231 MCS-51引脚功能v232 片外三总线结构v233 MCS-51单片机并行口结构45231 MCS-51引脚功能P1.7P1.0P1.1P1.2P1.4P1.6P1.3P1.5RST/VPDP3.0P3.1P3.2P3.4P3.6P3.3P3.5P3.7XTAL2XTAL1VSS805181235746910111214161315171819203340393836343735323130292725282624232221P0.7P0.0P0.1P0.2P0.4P0.6P0.3P0.5P2.0P2.7P2.6P2.5P2.3P2.1P2.4P2.2EA/VPPALE/PROGPSENRD,WR,T1,T0,INT1,INT0,RXD,TXD,VCCMCS-51单片机引脚功能分布图 46单片机的时钟电路 8051XTAL1XTAL2C1C2(a)内部外部振荡方式8051XTAL1XTAL2外部振荡信号带上拉电阻的TTL门(c)CHMOS型芯片外部振荡方式8051XTAL2XTAL1外部振荡信号TTL门Vcc(b)HMOS型芯片外部振荡方式47232 片外三总线结构 单片机的管脚可以构成三总线结构:v地址总线v数据总线v控制总线48地址总线(AB)v地址总线主要是在单片机扩展时,用于地址信号的传输。可以通过地址选通访问外部存储器或设备的内容。MCS-51单片机地址总线宽度为16位,因此其能访问的外部存储器的地址范围是0000HFFFFH,即可达64KB。v在单片机中,由P0口经地址锁存器提供16位地址总线的低8位地址(A7-A0),由P2口直接提供16位地址总线的高8位地址(A15A8)49数据总线vMCS-51单片机是8位单片机,其数据总线的宽度位8位,由P0口提供。50控制总线在MCS-51单片机中,控制信号主要有:RST,EA,WR,RD,ALE及PSEN等。这些信号在单片机扩展时非常重要,统称为控制总线。51单片机的三总线8051PSENALEEAP2.7P2.0A15A88P0.7P0.0A7A0地址锁存器D7D088地址总线RDWR数据总线控制总线52233 MCS-51单片机并行口结构53P0口结构P0.X锁存器DCLP0口引脚图2-7 P0口1位结构QQ写锁存器内部总线Vcc读锁存器读引脚MUX控制地址/数据54P0口的特点P0口的特点:1)P0口可作通用I/O口使用,又可作地址/数据总线口;2)作地址/数据总线时,P0是一真正双向口,而作通用I/O口时,只是一个准双向口;3)P0口可作为地址/数据总线使用;4)P0既可按字节寻址,又可按位寻址;5)可带8个TTL输入,驱动NMOS时,需接上拉电阻。55P1口结构P1.X锁存器DCLP1口引脚图2-8P1口1位结构QQ写锁存器内部总线Vcc读锁存器读引脚56P1口的特点P1口的特点:1)只能作I/O口使用,且也是一个准双向口;2)内部已有上拉电阻,不是开漏输出口;3)可按字节寻址,也可按位寻址。57P2P2口结构P2.X锁存器DCLP2口引脚图29 P2口1位结构QQ写锁存器内部总线Vcc读锁存器读引脚MUX地址控制58P2口的特点P2口的特点:1)当P2口作为通用I/O时,是一准双向口。2)从P2口输入数据时,先向锁存器写“1”。3)可位寻址,也可按字节寻址4)做地址总线时,输出地址高8位。59P3口结构P3.X锁存器DCLP3口引脚图210 P3口1位结构QQ写锁存器内部总线读锁存器读引脚Vcc控制第二输入功能第二输入功能60P3口的第二功能I/O引脚字节地址注释P3.0RXD串行数据接受端P3.1TXD串行数据发送端P3.2外部中断0请求端P3.3外部中断1请求端P3.4T0定时/计数器0外部输入端P3.5T1定时/计数器1外部输入端P3.6外部数据存储器写选通P3.7外部数据存储器读选通61P3口特点P3口特点:1)作通用I/O时,“第二输入功能”应保持高电平,此时它是一个准双向口;2)工作于第二功能时,该位的锁存器应置16224 MCS-51单片机的工作方式单片机系统可以有多种工作方式.包括:v复位方式、v程序执行方式、v单步执行方式、v掉电和节电工作方式vEPROM编程和校验方式63241 复位方式RST/VPD复位电路RAMVCCVSSD1D2图2-118051复位电路的结构64241 复位方式PC=0000HACC=00HPSW=00HSP=07HDPTR=0000HP0P3=FFHIP=000000BIE=0000000BRAM内容不受影响TMOD=OOHTCON=00HTL0=00H TH0=00HTL1=00HTH1=00HSCON=00HSBUF=BPCON=00000B系统复位后,内部各寄存器进入下列特定的状态(为不定数)65各种复位电路RST/VPDVCCVSSVCC22F1kRST/VPDVCCVSSVCC22F1k1kRESET22FRST/VPDVCCVSSVCC22F1kRESET22F(a)上电复位电路(b)手动复位电路(c)手动复位电路66242 程序执行方式程序执行方式是单片机的基本工作方式。所执行的程序可以放在内部ROM、外部ROM,或同时放在内部ROM和外部ROM中。由于复位后PC=0000H,所以程序的执行总是从0000H单元开始的,但是,用户的程序一般不可能从0000H单元开始存放。因此,需要从0000H单元开始存放一条长转移指令,以使执行转移到用户程序的入口地址。例如:ORG0000HLJMPMAIN;MAIN为用户程序入口ORG0100HMAIN:;用户程序67243 单步执行方式v单步执行是指单片机系统在外界脉冲的控制下,每次只执行一条指令后就暂停下来的执行方式。因此v它是调试程序、跟踪程序执行,以了解程序执行流程的一种有效手段。v实现单步执行方式,要借助于MCS-51的中断控制系统。68244 掉电和节电方式(1)8051的掉电方式具体作法:v信息转存,v启用备用电源维持供电。因此是一种低功耗节电方式。69244 掉电和节电方式(2)80C51的节电方式v节电方式也是一种能减少单片机功耗的工作方式,通常可以分为待机(等待)方式和掉电(停机)方式两种.v只有CHMOS型器件才有这种工作方式v待机方式和掉电方式由专用寄存器PCON(电源控制寄存器)的有关位来控制的。70PCON寄存器格式PCOND7D6D5D4D3D2D1D0SMODGF1GF0PDIDL87H通用标志位通用标志位掉电方式位波特率加倍位图2-14 PCON寄存器格式71待机与掉电方式控制电路振荡器时钟发生器中断、串行口、定时器等模块CPU图2-15待机与掉电方式控制电路XTAL1XTAL272245 编程和校验方式v编程是指利用特殊手段对单片机内EPROM进行写人的过程.v校验则是对刚刚写人的程序代码进行读出验的过程。例如:8751H片内EPROM有编程、校验和保密位编程三种工作方式73表2-88751HEPROM操作方式ALE/方式RSTP2.7P2.6P2.5P2.4编程10VPP010禁止10110校验101100保密位编程10VPP011注:表中表示任意电平,0表示低电平,1表示高电平。VPP为210.5V,的编程脉冲为50ms负脉冲。74(1)EPROM编程方式P1RST/VPDXTAL2XTAL1VSS8751HP0P2.4P2.5P2.6P2.3-P2.0P2.7EA/VPPALE/PROGPSENVCCA7-A0A11-A8编程代码VPP1图2-16 8751H编程时的各引脚连接图0 01 1+5V50ms75(2)EPROM程序校验v如果程序的保险位未设置,则无论是在编程期间或编程之后,都可以将片上程序存储器的内容读出来进行校验。v程序的校验时,需要用到微型计算机控制,微型计算机把12位地址送入被校验的8751H的P2和P1口,以读出选中的EPROM存储单元中的代码,经P0口送给微型计算机。微型计算机将读出的代码与编程时写入的编程代码进行比较,若两者相同,则该EPROM单元编程正确,否则编程不正确。7625 MCS-51单片机的时序ALEP1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2S1S2S3S4S5S6S1S2S3S4S5S6P1P2P1P2P1P2S1S2S3S4S5S6读操作码读第二字节读下一指令S1S2S3S4S5S6S1S2S3S4S5S6读操作码读操作码(无效)S1S2S3S4S5S6读操作码(无效)读操作码(无效)读操作码读操作码(无效)S1S2S3S4S5S6读下一指令S1S2S3S4S5S6单字节两周期指令两字节一周期指令单字节一周期指令图2-17 MCS-51指令系统的取指/执行时序77访问外部ROM和RAM的时序P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2S1S2S3S4S5S6S1S2S3指令ALEPSENP0P2A15A8A15A8A7A0指令A7A0图2-18读外部程序ROM时序78读外部数据RAM时序指令输入P0PCH输出P2A8PCL输出数据输入地址输出P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2S1S2S3S4S5S6S1S2S3S4S5S6P1P2P1P2P1P2ALEPSENRDPCH输出PDH输出/P2输出PCH输出P2指令输入PCL输出79谢谢!80第4 4章 单片机汇编语言程序设计 81第4 4章 单片机汇编语言程序设计v41概述v42伪指令v43汇编语言程序设计方法v44汇编语言程序设计举例8241 概述v单片机汇编语言程序实际上就是单片机的所支持的能完成指定功能的指令系列。构成汇编语言程序的是汇编语句。v在MCS-51系列单片机汇编语言中汇编语句一般分为两种:1.指令性语句(即汇编指令)2.指示性语句(即伪指令)v指令性语句在汇编后成为单片机执行的指令码,而指示性语句并不能产生可执行的指令码,它只是在汇编时通知汇编程序如何工作。83411 汇编的概念v在单片机中,汇编是将单片机的汇编语言助记符指令(汇编程序)翻译成单片机能识别执行的二进制机器指令(目标程序)。v目前汇编一般有两种方法:1.手工汇编2.机器汇编v手工汇编是用人工查表的方式进行汇编程序的翻译为目标程序。v汇编程序是一种翻译程序,利用汇编指令与机器码指令的一一对应的关系。将源程序翻译成目标程序84汇编过程源程序(汇编指令程序)汇编目标程序(机器码指令程序)图4-1 汇编过程 85412 汇编程序v汇编语言程序转换成机器语言的过程称为汇编过程。能实现汇编语言到机器语言的转换的程序称为汇编程序。v汇编时汇编过程可以由汇编程序完成,也可以由人工完成。v因此,汇编可以分为:1.手工汇编2.机器汇编86(1)手工汇编v手工汇编就是根据指令表,将源程序由汇编指令逐条翻译成机器指令,并把这些机器指令代码以字节为单元从起始地址依次排列成目标程序的过程。手工汇编一般分两步进行(即两次汇编过程):v第一步:确定各条指令(第一字节)的地址并翻译出各条指令的机器码。v第二步:将第一步未处理的标号进行代替,求出标号所代表的具体地址或地址偏移量,从而形成最终机器代码。87手工汇编举例源程序地址目标程序第一次汇编第二次汇编ORG1000HSTART:MOVR0,BUFFER1000A830A830MOVR2,#00H10027A007A00MOVA,R01004E6E6MOVR3,A1005FBFBINCR310060B0BSJMPNEXT100780NEXT8005LOOP:INCR010090808CJNER0,#44H,NEXT100AB644NEXTB64402INCR2100D0A0ANEXT:DJNZR3,LOOP100EDBLOOPDBF9MOVRESULT,R210108A2A8A2ASJMP$101280FE80FEBUFFERDATA30HRESULTDATA2AHEND88(2)机器汇编v机器汇编是由计算机的汇编软件将汇编语言源程序自动生成机器语言程序,称汇编软件为汇编程序。v机器汇编可在单片机开发系统(如仿真器)上汇编软件实现,称驻留汇编;v在其它计算机(如PC机)上进行,称交叉汇编。8942 伪指令v伪指令是单片机中的指示性指令,它主要是汇编时告诉汇编程序,如何汇编源程序的指令。v说明:伪指令不能被汇编成机器代码,也不能被机器执行完成某种操作,因此称为伪指令 90(1)、起始地址伪指令ORG指令格式:ORGaddr16指令功能:用于规定目标程序段或数据块的在程序存储器中的起始地址,需放置在被设置在程序段或数据块的开始处。例如:ORG3000HSTART:MOVA,#30H91(2)、汇编结束伪指令END指令格式:END或END标号指令功能:汇编时通知汇编程序,对源程序的汇编到此结束。一个程序中只出现一次,在程序的最后出现。92(3)赋值伪指令EQU指令格式:标识符EQU数值或汇编符号v指令功能:汇编时告诉汇编程序,将汇编语句操作数的值赋予本语句的标识符。v“标识符”在源程序中可以作数值使用,也可以作数据地址、位地址使用。要使用此标识符必须先定义后使用,且放在程序开头。v注意:标识符后没有冒号,只须一个空格分隔。例如:DATAEQU29HMOVA,DATA93(4)、定义字节伪指令DBv指令格式:标号:DB字节数据或字节数据表v指令功能:汇编时告诉汇编程序从指定的地址单元开始,定义若干字节存储单元,并将指定的数据或数据表赋予作为初值。注意:数据表中各字节数据用逗号分隔,如果是字符数据还需要用“”引起来,数据可以是二进制、十六进制和ASCII码;DB指令在汇编语言程序中可以多次使用。例如:ORG1000HADDR:DB20HDATA:DB0AFH,“A”,00100001B汇编结果是将20H存放于ADDR即1000H地址单元中,将0AFH存放于ADDR+1地址单元,将“A”存放于ADDR+2地址单元;将00100001B存放于ADDR+3地址单元。94(5)、定义字伪指令DWv指令格式:标号:DW字数据或字数据表v指令功能:汇编时告诉汇编程序从指定的地址单元开始,定义若干个字存储单元,并将指定的数据或数据表赋予作为初值。其中数据高八位存入低地址;低八位存入高地址。例如:ORG1000HDATA1:DW7654H,40H、12、AB95(6)、数据地址赋值伪指令DATAv指令格式:字符名称DATA表达式v指令功能:将表达式指定的数据地址赋予规定的字符名称。v注意:该指令与EQU指令相似,只是可先使用后定义,放于程序开头、结尾均可。96(7)、定义空间伪指令DSv指令格式:标号:DS数值v指令功能:从标号所指示的地址单元开始,保留指定的若干字节空间作为备用空间。例如:ORG2000HDS0FHDB55H,11H,0F1H;从100BH开始存放55H、11H、0F1H。v注:DB、DW、DS只能用于程序存储器;而不能用于数据存储器。97(8)、位地址赋值伪指令BITv指令格式:标识符BIT位地址v指令功能:将位地址赋予规定的标识符。例如:X1BITP1.0相当于X1EQU90H9843汇编语言程序设计方法v单片机软件开发过程是单片机设计的主要任务之一,它的开发过程一般包括以下四个阶段:(1)编写汇编语言源程序;(2)汇编;(3)调试;(4)固化等。9943汇编语言程序设计方法图4-1单片机软件开发过程汇编固化调试ROM汇编语言源程序机器代码文本编辑器编辑10043汇编语言程序设计方法v为了编写高质量的单片机程序,编写单片机汇编语言程序时需要做到以下几点:1)程序占用存储空间尽量少;2)运行时间短;3)程序的编制、调试及排错所需时间短;4)结构清晰,可读性好、易于移植。10143汇编语言程序设计方法v汇编语言程序设计一般步骤:1 1)分析问题,明确任务2 2)建立数学模型,确定算法3 3)绘制程序流程图4 4)编写源程序 5 5)汇编、调试 102三种基本程序结构v三种基本程序结构:1.顺序结构2.分支结构3.循环结构等如下图所示:103图(a)顺序结构图(b)分支结构BAC入口出口分支1 1分支2 2入口出口YN条件满足否?104图(c)循环结构(1)图(d)循环结构(2)修改条件处理条件满足否?入口出口NY修改条件处理条件满足否?入口出口NY105431顺序程序v例4-1设在外RAM的50H单元存有1个字节数据,要求将其分解成两个4位数据,并将其高4位存入原单元的低4位,其低4位存入51H单元的低4位,而这两个单元的高4位均为0,试编写实现此任务的汇编语言程序。v解:分析:本题可考虑用ANL 指令屏蔽低4位来获取高4位数据,然后用SWAP A指令将50H单元的数据高低4位互换。这样就得到了第一个4位数据。第二个4位数据只需将原数据屏蔽掉高4位即可。参考程序如下:106ORL1000HMOVR0,#50H;外存地址MOVXA,R0;读取原数据MOVB,A;保存原数据ANLA,#0F0H;屏蔽低4位SWAPA;高低4位互换MOVXR0,A;保存第一个4位数ANLB,#0FH;屏蔽高4位,得到第二个4位数MOVA,BINCR0;修改地址MOVXR0,A;保存第二个4位数END107432 分支程序v分支结构程序是根据不同的条件,选择不同的分支以进行相应的处理。通常可用条件转移指令形成简单分支结构。如:判断(A)=0(或非0),程序转移判断(CY)=1(或0),程序转移判断(bit)=1(或0),程序转移以下是二个分支程序设计的例子。例4-2、设a存放在累加器A中,b存放在寄存器B中,要求按下式计算Y值,并将结果Y存于累加器A中,试编写程序。a-b(a0)Y=a+b(aN时,将内部RAM的42H单元清0;否则,将该单元置成全1,试编程。解法I:因为无16位数的比较指令,所以,只能用8位数的比较指令(42)=00H(42)=FFH开始结束YNM高8位=N高8位?CY=1?M低8位=N低8位?NYNY110ORG2000HCMP:MOVA,50HCJNEA,40H,CMP1MOVA,51HCJNEA,41H,CMP1SJMPNHIGHE;跳过一些其它分支CMP1:JCHIGHENHIGHE:MOV42H,#0FFHSJMPDONEHIGHE:MOV42H,#00HDONE:SJMPEND111解法II:先假设MN,再来判断是否NANBORG3000HCMP2:MOVR0,#00HMOVA,50HCJNEA,40H,CMP3MOVA,51HCJNEA,41H,CMP3SJMPNHIGHECMP3:JCHIGHENHIGHE:MOVR0,#0FFH;不大于标志HIGHE:MOV42H,R0SJMPEND112433循环程序v循环程序是指在一定条件下,程序中的一些代码重复执行的情况。典型循环结构程序一般包括四部分:1.初始化部分2.循环处理部分3.循环控制部分4.循环结束部分113例4-4将首址为DATA的100个外部RAM单元清零。解:该例为已知循环次数的循环程序将循环次数存放在R0中。程序如下:MOVR0,#64H;设置循环计数器MOVDPTR,#DATA;设置地址指针CLRALOOP:MOVXDPTR,A;清0INCDPTRDJNZR0,LOOP;判0结束循114例4-5设某以“$”为结束标志的字符中共不超过256个,存放在内部RAM以STA为首址的连续单元里,设统计此字符中长度并存放到内部RAM的LEN单元中。解法I:程序如下:ORG1000HMOVR2,#STA;设地址指针MOVB,#00H;设计数器LOOP:MOVA,R2CJNEA,“$”,NEXT;判断是否结束MOVLEN,B;存数据结果SJMPDONENEXT:INCB;修改计数器INCR2;修改地址指针,准备下一次循环SJMPLOOPDONE:END115解法II程序如下:ORG1000HMOVR2,#STA-1;设地址指针MOVB,#0FFH;设计数器LOOP:INCR2;修改地址指针,准备下一次循环INCB;修改计数器MOVA,R2;取数CJNEA,“$”,LOOP;判断循环是否结束MOVLEN,B;存数据END116例4-6、设用户用键盘输入长度不超过100字节的字符串放在8031单片机外部RAM以20H为首地址的连续单元,该字符串用回车符CR(CR=0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中。解:从首单元开始取数,每取一数判断其是否为CR,是则结束。ORG1000HSTADADATA20HSLANGDATA1FHCMCR2:MOVR0,#STADA-1MOVB,#0FFHCRLOP:INCR0INCBMOVXA,R0CJNEA,#0DH,CRLOPMOVSLANG,BSJMPEND117例4-7、单片机片内RAM中,DATA1位置起的20H个RAM单元,试统计每个单元1的位数,并存入以DATA2起的20H个单元内。解:分析:这是一个两重循环,循环次数都是已知,内循环为求8位数1的位数,循环次数为8,外循环的次数为20H。程序如下:ORG2000HMOVR0,DATA1;置地址指针MOVR1,DADA2MOVR7,20H;外循环计数器CON:MOVR6,#08H;内循环计数器MOVA,R0;取数MOVR5,#0:从第0位开始判断CONBIT:RLCA;内循环,统计每字节1的个数JNCNEXTBINCR5;计数NEXTB:DJNER6,CONBITMOVA,R5MOVR1