《最新微控制器与嵌入式系统PPT课件》由会员分享,可在线阅读,更多相关《最新微控制器与嵌入式系统PPT课件(135页珍藏版)》请在金锄头文库上搜索。
1、微控制器与嵌入式系统微控制器与嵌入式系统21单片机概述2单片机芯片的硬件结构3MCS-51单片机指令系统4MCS-51汇编语言程序设计5单片机存储器扩展6单片机的中断与定时系统7单片机I/O扩展及应用8单片机串行数据通信9单片机与数/模及模/数转换器接口10MCS-51单片机应用及开发技术单片机基础91.80C51与与8051的比较的比较2.(1)MCS-51系列芯片采用HMOS工艺,而80C51芯片则采用CHMOS工艺。CHMOS工艺是COMS和HMOS的结合。3.(2)80C51芯片具有COMS低功耗的特点。例如8051芯片的功耗为630mW,而80C51的功耗只有120mW。4.(3)8
2、0C51在功能增加了待机和掉电保护两种工作方式,以保证单片机在掉电情况下能以最低的消耗电流维持。5.(4)此外,在80C51系列芯片中,内部程序存储器除了ROM型和EPROM型外,还有E2PROM型,例如89C51就有4KBE2PROM。并且随着集成技术的提高,80C51系列片内程序存储器的容量也越来越大,目前已有64KB的芯片了。另外,许多80C51芯片还具有程序存储器保密机制,以防止应用程序泄密或被复制。1单片机概述10uMCS-96系列单片机系列单片机MCS-96系列单片机是Intel公司在1983年推出的16位单片机,它与8位机相比,具有集成度高、运算速度快等特点。它的内部除了有常规的
3、I/O接口、定时器计数器、全双工串行口外,还有高速I/O部件、多路AD转换和脉宽调制输出(PWM)等电路,其指令系统比MCS-51更加丰富。uATMEL公司单片机公司单片机ATMEL公司于1992年推出了全球第一个3V超低压F1ash存储器,并于1994年以E2PROM技术与Intel公司的80C31内核进行技术交换,从此拥有了80C31内核的使用权,并将ATMEL特有的Flash技术与80C31内核结合在一起,生产出AT89C51系列单片机。1单片机概述111.3.1单片机应用的特点1.3.2单片机的应用领域1单片机概述121.单片机应用系统的结构单片机应用系统的结构2.单片机应用系统的结构
4、通常分为以下三个层次。3.(1)单片机:通常指应用系统主处理机,即所选择的单片机器件。4.(2)单片机系统:指按照单片机的技术要求和嵌入对象的资源要求而构成的基本系统。时钟电路、复位电路和扩展存储器等与单片机共同构成了单片机系统。5.(3)单片机应用系统:指能满足嵌入对象要求的全部电路系统。在单片机系统的基础上加上面向对象的接口电路,如前向通道(传感器通道接口)、后向通道(伺服驱动、控制通道接口)、人机交互通道(键盘、显示器、打印机等)和串行通信口(RS232)以及应用程序等。1单片机概述131单片机概述u 单片机应用系统三个层次的关系单片机应用系统三个层次的关系后向通道单片机单片机系统单片机
5、应用系统人机交互通道前向通道应用程序串行通信口14u 单片机系统的开发过程单片机系统的开发过程通常开发一个单片机系统可按以下6个步骤进行。(1)明确系统设计任务,完成单片机及其外围电路的选型工作。(2)设计系统原理图和PCB板,经仔细检查PCB板后送工厂制作。(3)完成器件的安装焊接。(4)根据硬件设计和系统要求编写应用程序。(5)在线调试软硬件。(6)使用编程器烧写单片机应用程序,独立运行单片机系统。1单片机概述15u单片机的应用单片机的应用1.单片机在机、电、仪一体化等智能产品中的应用日常生活中含单片机的电器产品智能化的仪器仪表2.单片机在工业测控中的应用3.单片机在通信技术中的应用1单片
6、机概述162.1MCS-51单片机的逻辑结构及信号引脚2.2MCS-51单片机的内部存储器2.3MCS-51单片机并行输入/输出口电路2.4MCS-51单片机时钟电路与时序2.5MCS-51单片机工作方式2单片机芯片的硬件结构172.1.1MCS-51单片机结构框图图2.1MCS-51单片机系统结构框图2单片机芯片的硬件结构18u由图2.1可以看出,单片机内部主要包含下列几个部件:n一个8位CPU;n一个时钟电路;n4KByte程序存储器;n128Byte数据存储器;n两个16位定时/计数器;n64KByte扩展总线控制电路;n四个8-bit并行I/O端口;n一个可编程串行接口;n五个中断源,
7、其中包括两个优先级嵌套中断。2单片机芯片的硬件结构192.1.2MCS-51单片机芯片内部逻辑结构图2.2MCS-51单片机芯片内部逻辑结构图2单片机芯片的硬件结构端口0驱动器端口2驱动器RAM(1288)端口0锁存器端口2锁存器ROM(4K8)程序地址寄存器缓冲器PC加1寄存器程序计数器PC数据指针DPTR堆栈指示器SPPCON中断、串行口和定时器RAM地址寄存器ACCB寄存器ALU状态寄存器暂存寄存器2暂存寄存器1定时与控制端口1锁存器端口3锁存器端口1驱动器端口3驱动器XTAL1P1.0P1.7ALERSTPSENEAVcc(+5V)Vss指令译码器指令寄存器P2.0P2.7P0.0P0
8、.7P3.0P3.7XTAL2SCON TMOD TCONTH0IESBUF(TX)TL0TH1TL1SBUF(RX)202单片机芯片的硬件结构211.CPUCPU即中央处理器的简称,是单片机的核心部件,它完成各种运算和控制操作,CPU由运算器和控制器两部分电路组成。(1)运算器电路运算器电路包括ALU(算术逻辑单元)、ACC(累加器)、B寄存器、状态寄存器、暂存器1和暂存器2等部件,运算器的功能是进行算术运算和逻辑运算。(2)控制器电路控制器电路包括程序计数器PC、PC加1寄存器、指令寄存器、指令译码器、数据指针DPTR、堆栈指针SP、缓冲器以及定时与控制电路等。控制电路完成指挥控制工作,协
9、调单片机各部分正常工作。2单片机芯片的硬件结构222.存储器MCS51系列单片机的存储器包括数据存储器和程序存储器,其主要特点是程序存储器和数据存储器的寻址空间是相互独立的,物理结构也不相同。3.定时器/计数器MCS51单片机片内有两个16位的定时/计数器,即定时器0和定时器1。它们可以用于定时控制、延时以及对外部事件的计数和检测等。4.并行I/O口MCS51单片机共有4个8位的I/O口(P0、P1、P2和P3),每一条I/O线都能独立地用作输入或输出。P0口为三态双向口,能带8个TTL门电路,P1、P2和P3口为准双向口,负载能力为4个TTL门电路。2单片机芯片的硬件结构235.串行I/O口
10、MCS51单片机具有一个采用通用异步工作方式的全双工串行通信接口,可以同时发送和接收数据。6.中断控制系统8051共有5个中断源,即外中断2个,定时/计数中断2个,串行中断1个。7.时钟电路MCS51芯片内部有时钟电路,但晶体振荡器和微调电容必须外接。时钟电路为单片机产生时钟脉冲序列,振荡器的频率范围为1.2MHz12MHz,典型取值为6MHz。8.总线以上所有组成部分都是通过总线连接起来,从而构成一个完整的单片机。系统的地址信号、数据信号和控制信号都是通过总线传送的,总线结构减少了单片机的连线和引脚,提高了集成度和可靠性。2单片机芯片的硬件结构242.1.3MCS-51的信号引脚图2.3MC
11、S-51系列单片机引脚图及逻辑符号2单片机芯片的硬件结构25n电源引脚Vcc和VssVcc:电源端,接5V。Vss:接地端。n时钟电路引脚XTAL1和XTAL2XTAL1:接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,若使用外部TTL时钟时,该引脚必须接地。XTAL2:接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出,若使用外部TTL时钟时,该引脚为外部时钟的输入端。n地址锁存允许ALE系统扩展时,ALE用于控制地址锁存器锁存P0口输出的低8位地址,从而实现数据与低位地址的复用。2单片机芯片的硬件结构26n外部程序存储器读选通信号/PSENPSENProgramS
12、toreEnable是读外部程序存储器的选通信号,低电平有效。n程序存储器地址允许输入端/EAEAExternalAccessEnable当为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FFFH时,将自动转向执行片外程序存储器指令。当为低电平时,CPU只执行片外程序存储器指令。n复位信号RST该信号高电平有效,在输入端保持两个机器周期的高电平后,就可以完成复位操作。2单片机芯片的硬件结构27n输入/输出口引脚P0、P1、P2和P3P0口(P0.0P0.7):该端口为漏极开路的8位双向口,负载能力为8个LSTTL负载,它是8位地址线和8位数据线的复用端口。P1口(P1.0P1.7
13、):它是一个内部带上拉电阻的8位准双向I/O口,P1口的驱动能力为4个LSTTL负载。P2口(P2.0P2.7):它为一个内部带上拉电阻的8位准双向I/O口,P2口的驱动能力也为4个LSTTL负载。在访问外部程序存储器时,它作存储器的高8位地址线。P3口(P3.0P3.7):P3口同样是内部带上拉电阻的8位准双向I/O口,P3口除了作为一般的I/O口使用之外,还具有其它特殊功能。2单片机芯片的硬件结构282.2MCS-51单片机的内部存储器2单片机芯片的硬件结构外部FFFFH1000H内部(EA=1)0FFFH0000H0FFFH0000H专用寄存器FFH80H7FH00HFFFFH0000H
14、程序存储器内部数据存储器外部数据存储器内部RAM外部(EA=0)29u内部数据存储器2单片机芯片的硬件结构用户区位寻址区(位地址007F)工作寄存器区3(R0R7)工作寄存器区2(R0R7)工作寄存器区1(R0R7)工作寄存器区0(R0R7)7FH30H2FH20H1FH00H.302.2.1内部数据存储器低128单元在低128字节存储单元中,前32个单元(00H1FH)作为工作寄存器使用,这32个寄存器分作4组,每组由8个通用寄存器(R0R7)组成,组号依次为0、1、2和3。通过对程序状态字中RS1和RS0的设置,可以决定选用哪一组工作寄存器,通常没有选中的单元也可作为一般的数据缓存使用。系
15、统上电复位时,默认选中第0组寄存器。在工作寄存器后的16个数据单元(20H2FH),它们既可以作为一般的数据单元使用,由可以按位对每个单元进行操作,因此这16个数据单元又称作位寻址区。位寻址区共计128位,其位地址为00H0FH。在内部RAM的低128个单元中,剩余的80个数据单元即30H7FH为真正的用户RAM区,对于这些区域,用户只能以存储单元的形式来使用,通常在应用中也把堆栈开辟在这段区域。2单片机芯片的硬件结构312.2.2内部数据存储器高128单元内部数据存储器的高128个单元是为专用寄存器提供的,因此该区也称作特殊功能寄存器区(SFR),它们主要用于存放控制命令、状态或数据。除去程
16、序计数器PC外,还有21个特殊功能寄存器,其地址空间为80HFFH。这21个寄存器中有11个特殊功能寄存器具有位寻址能力,它们的字节地址刚好能被8整除。下面将对部分专用寄存器作简要介绍。u 累加器累加器ACC累加器为8位寄存器,是程序中最常用的专用寄存器,在指令系统中累加器的助记符为A。大部分单操作数指令的操作取自累加器,很多双操作数指令的一个操作数也取自累加器。加、减乘和除等算术运算指令的运算结果都存放在累加器A或AB寄存器中,在变址寻址方式中累加器被作为变址寄存器使用。在MCS51中由于只有一个累加器,而单片机中的大部分数据操作都是通过累加器进行的,故累加器的使用是十分频繁的。2单片机芯片
17、的硬件结构32u B寄存器寄存器B寄存器为8位寄存器,主要用于乘除指令中。乘法指令的两个操作数分别取自累加器A和寄存器B,其中B为乘数,乘法结果的高8位存放于寄存器B中。除法指令中,被除数取自A,除数取自B,除法的结果商数存放于A,余数存放于B中。在其它指令中,B寄存器也可作为一般的数据单元来使用。u 程序状态字程序状态字PSW程序状态字是一个8位寄存器,它包含程序的状态信息。在状态字中,有些位状态是根据指令执行结果,由硬件自动完成设置的,而有些状态位则必须通过软件方法设定。PSW中的每个状态位都可由软件读出,PSW的各位定义如下表。2单片机芯片的硬件结构位序PSW.7PSW.6PSW.5PS
18、W.4PSW.3PSW.2PSW.1PSW.0位标志CYACF0RS1RS0OV/P33nCY:进位标志位在执行某些算术和逻辑指令时,可以被硬件或软件置位或清零。在算术运算中它可作为进位标志,在位运算中,它作累加器使用,在位传送、位与和位或等位操作中,都要使用进位标志位。nAC:辅助进位标志进行加法或减法操作时,当发生低四位向高四位进位或借位时,AC由硬件置位,否则AC位被清零。在进行十进制调整指令时,将借助AC状态进行判断。nF0:用户标志位该位为用户定义的状态标记,用户根据需要用软件对其置位或清零,也可以用软件测试F0来控制程序的跳转。nRS1和RS0:寄存器区选择控制位该两位通过软件置“
19、0”或“1”来选择当前工作寄存器区。2单片机芯片的硬件结构34nOV:溢出标志位当执行算术指令时,由硬件置位或清零来指示溢出状态。在带符号的加减运算中,OV1表示加减运算结果超出了累加器A所能表示的符号数有效范围(128127),即运算结果是错误的,反之,OV0表示运算正确,即无溢出产生。无符号数乘法指令MUL的执行结果也会影响溢出标志,若置于累加器A和寄存器B的两个数的乘积超过了255,则OV1,反之OV0。由于乘积的高8位存放于B中,低8位存放于A中,OV0则意味着只要从A中取得乘积即可,否则要从BA寄存器对中取得乘积结果。在除法运算中,DIV指令也会影响溢出标志,当除数为0时,OV1,否
20、则OV0。nP:奇偶标志位每个指令周期由硬件来置位或清零用以表示累加器A中1的个数的奇偶性,若累加器中1的个数为奇数则P1,否则P0。2单片机芯片的硬件结构35u 数据指针数据指针DPTR数据指针DPTR为一个16位的专用寄存器,其高位用DPH表示,其低位用DPL表示,它即既可以作为一个16位的寄存器来使用,也可作为两个8位的的寄存器DPH和DPL使用。DPTR在访问外部数据存储器时可用来存放16位地址,作地址指针使用。如:MOVXDPTR,AMOVXA,DPTR2单片机芯片的硬件结构36u 外部数据存储器外部数据存储器在MCS-51中,其片外数据存储器和I/O口与片内数据存储器空间0000H
21、007FH是重叠的。在8051单片机中采用MOV和MOVX两种指令来区分片内外RAM空间,其中片内RAM使用MOV指令,片外RAM和I/O口使用MOVX指令。2单片机芯片的硬件结构372.2.3MCS-51的堆栈操作n系统复位后SP=07Hn向上生长型2.2.4内部程序存储器在MCS-51系列中,程序存储器被用来存放程序、常数或表格等。在8051中,其片内有4K字节的ROM存储单元,地址为0000H0FFFH。8751有4K字节的EPROM,而8052和8752则有8K字节的片内存储器。8031和8032无片内程序存储器,所以片内程序存储器的有无是区分芯片的主要标志。2单片机芯片的硬件结构38
22、在程序存储器中,以下6个单元具有特殊含义:n0000H:单片机复位后,PC=0000H,程序从0000H开始执行指令。n0003H:外部中断0入口地址。n000BH:定时器0中断入口地址。n0013H:外部中断1入口地址。n001BH:定时器1中断入口地址。n0023H:串行口中断入口地址。在系统中断响应之后,将自动转各中断入口地址处执行程序,而中断服务程序一般无法存放于8个单元之内,因此在中断入口地址处往往存放一条无条件转移指令进行跳转,以便执行中断服务程序。2.2.5MCS-51单片机系统的存储器的结构特点2单片机芯片的硬件结构392单片机芯片的硬件结构2.3MCS-51单片机并行输入/输
23、出口电路2.3.1P0口下图给出了P0口的逻辑结构,它由一个锁存器、两个三态输入缓冲器、一个多路复用开关以及控制电路和驱动电路等组成。P0口可以作为输入输出口,在实际应用中它通常作为地址/数据复用总线。在访问外部存储器时,P0口为真正的双向口。CP402单片机芯片的硬件结构2.3.2P1口P1口是一个准双向口,通常作为I/O口使用,其位结构图如下图所示。由于在其输出端接有上拉电阻,故可以直接输出而无需外接上拉电阻。CP412单片机芯片的硬件结构2.3.3P2口P2口位结构图如下图所示。P2通用为一个准双向口,其位结构与P0口相似。对于8031单片机来说,P2口通常用作地址信号输出。CP读锁存器
24、内部总线读引脚422单片机芯片的硬件结构2.3.4P3口P3口的位结构图如下图所示。P3口为双功能口,当P3口作为通用I/O口使用时,它为准双向口,且每位都可定义为输入或输出口,其工作原理同P1口类似。CP432单片机芯片的硬件结构P3口还具有第二功能,其引脚描述如下表口线特殊功能信号名称P3.0RXD串行输入口P3.1TXD串行输出口P3.2/INT0外部中断0输入口P3.3/INT1外部中断1输入口P3.4T0定时器0外部输入口P3.5T1定时器1外部输入口P3.6/WR写选通输出口P3.7/RD读选通输出口442单片机芯片的硬件结构2.4MCS-51单片机时钟电路与时序2.4.1时钟电路
25、根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式,如下图所示。452单片机芯片的硬件结构2.4.2时序定时单位1.振荡周期振荡周期指为单片机提供定时信号的振荡源的周期或外部输入时钟的周期。2.时钟周期时钟周期又称作状态周期或状态时间S,它是振荡周期的两倍,它分为P1节拍和P2节拍,通常在P1节拍完成算术逻辑操作,在P2节拍完成内部寄存器之间的传送操作。3.机器周期一个机器周期由6个状态组成,如果把一条指令的执行过程分作几个基本操作,则将完成一个基本操作所需的时间称作机器周期。单片机的单周期指令执行时间就为一个机器周期。4.指令周期指令周期即执行一条指令所需要的时间,通常
26、为14个机器周期。462单片机芯片的硬件结构2.4.3典型指令时序下图中给出了MCS-51单片机的典型取指、执行时序。S1S2S6S3S5S4S1S2S6S3S5S4S1S2S6S3S5S4S1S2S6S3S5S4S1S2S3S4S5S6S1S2S3S4S5S6S1P1 P2P1 P2P1 P2P1 P2P1 P2P1 P2P1 P2P1 P2P1 P2P1 P2P1 P2P1 P2振荡器ALE读下一个操作码S1S2S6S3S5S4S1S2S6S3S5S4(a)单字节单周期指令,如INC读操作码读操作码读第二字节读下一个操作码(b)双字节单周期指令,如ADDA,#DATA读操作码读下一个操作码
27、(丢弃)(c)单字节双周期指令,如INCDPTR读操作码读下一个操作码(丢弃)无取指,无ALE无取指读下一个操作码读下一个操作码访问外部存储器地址数据(d)单字节双周期指令,如MOVX读下一个操作码(丢弃)472单片机芯片的硬件结构2.5MCS-51单片机工作方式2.5.1复位方式和复位电路在MCS-51中,最常见的复位电路为下图所示的上电与按钮复位电路,它能有效的实现上电复位和手动复位。RST引脚是复位信号输入端,复位信号为高电平有效,其有效时间应持续24个振荡周期以上才能完成复位操作,若使用6MHz晶振,则需持续4S以上才能完成复位操作。图中,在通电瞬间,由于RC的充电过程,在RST端出现
28、一定宽度的正脉冲,只要该正脉冲保持10ms以上,就能使单片机自动复位,在6MHz时钟时,通常CR取22F,R1取200,R2取1K,这时能可靠的上电复位和手动复位。482单片机芯片的硬件结构上电与按钮复位电路492单片机芯片的硬件结构CPU在第二个机器周期内执行内部复位操作,以后每个机器周期重复一次,直至RST端电平变低。在单片机复位期间,ALE和PSEN信号都不产生。复位操作将对部分专用寄存器产生影响。寄存器初始值寄存器初始值寄存器初始值PC0000HIPxx000000BTL100HACC00HIE0x000000BTH100HPSW00HTMOD00HSCON00HSP07HTCON00
29、HSBUF不定DPTR0000HTL000HPCON0xxx0000BP0P30FFHTH000H502.5.2程序执行方式2.5.3掉电保护方式2单片机芯片的硬件结构512.5.480C51的低功耗方式对于MCS-51系列机型来说,它们有待机方式和掉电保护方式两种低功耗方式。通过设置电源控制寄存器PCON(PowerControlRegister)的相关位可以确定当前的低功耗方式。PCON寄存器格式如下:其中SMOD:波特率倍增位GF0,GF1:通用标志位PD:掉电方式位,PD1为掉电方式IDL:待机方式位,IDL1为待机方式2单片机芯片的硬件结构位序B7B6B5B4B3B2B1B0位符号
30、SMOD/GF1GF0PDIDL521.待机方式将PCON寄存器的IDL位置“1”,单片机则进入待机方式。通常在待机方式下,单片机的中断仍然可以使用,这样可以通过中断触发方式退出待机模式。2.掉电保护方式将PCON寄存器的PD位置“1”,单片机则进入掉电保护方式。如果单片机检测到电源电压过低,此时除进行信息保护外,还需将PD位被置“1”,使单片机进入掉电保护方式。2单片机芯片的硬件结构533.1MCS-51单片机指令格式和寻址方式3.2MCS-51单片机指令分类介绍3.3MCS-51单片机指令汇总3MCS-51单片机指令系统543.1MCS-51单片机指令格式和寻址方式3.1.1指令系统概述3
31、.1.2MCS-51单片机指令格式一条汇编语言指令中最多包含4个区段,如下所示:n标号:操作码目的操作数,源操作数;注释n标号与操作码之间“:”隔开;n操作码与操作数之间用“空格”隔开;n目的操作数和源源操作数之间用“,”分隔;n操作数与注释之间用“;”隔开。3MCS-51单片机指令系统553.1.3MCS-51单片机寻址方式所谓寻址方式,通常是指某一个CPU指令系统中规定的寻找操作数所在地址的方式,或者说通过什么的方式找到操作数。寻址方式的方便与快捷是衡量CPU性能的一个重要方面,MCS-51单片机有七种寻找方式。1.寄存器寻址由指令指出某一个寄存器中的内容作为操作数,这种寻址方式称为寄存器
32、寻址。寄存器一般指累加器A和工作寄存器R0R7。例如:MOVA,Rn;A(Rn),n=07MOVRn,A;Rn(A)MOVB,A;B(A)3MCS-51单片机指令系统562.直接寻址在指令中含有操作数的直接地址,该地址指出了参与操作的数据所在的字节地址或位地址。例如: MOVA,3AH;把片内RAM字节地址3AH单元的内容传送给AMOV3AH,A;把A的内容传送到片内RAM的3AH单元中MOV50H,60H;把片内RAM地址60H单元的内容送到50H单元中MOVIE,#40H;把立即数40H送到中断允许寄存器IE。;IE为专用功能寄存器,其字节地址为0A8H。;该指令等价于MOV0A8H,#4
33、0H。INC60H;将地址60H单元中的内容自加13MCS-51单片机指令系统573.寄存器间接寻址由指令指出某一个寄存器的内容作为操作数地址,这种寻址方式称为寄存器间接寻址。寄存器间接寻址只能使用寄存器R0或R1作为地址指针,来寻址内部RAM(00HFFH)中的数据。寄存器间接寻址也适用于访问外部RAM,可使用R0,R1或DPTR作为地址指针。寄存器间接寻址用符号“”表示。例如: MOVR0,#60H;R060HMOVA,R0;A(R0)MOVA,R1;A(R1)例如: MOVDPTR,#3456H;DPTR3456HMOVXA,DPTR;A(DPTR)是把DPTR寄存器所指的那个外部数据存
34、储器(RAM)的内容传送给A,假设(3456H)=99H,指令运行后(A)=99H。3MCS-51单片机指令系统584.立即寻址立即寻址方式是操作数包括在指令字节中,指令操作码后面字节的内容就是操作数本身,其数值由程序员在编制程序时指定,以指令字节的形式存放在程序存储器中。立即数只能作为源操作数,不能当作目的操作数。例如:MOVA,#52H;A52HMOVDPTR,#5678H;DPTR5678H5.变址寻址这种寻址方式用于访问程序存储器中的数据表格,它以基址寄存器(DPTR或PC)的内容为基本地址,加上变址寄存器A的内容形成16位的地址,访问程序存储器中的数据表格。变址寻址的指令只有下列3条
35、:MOVCA,A+DPTRMOVCA,A+PCJMPA+DPTR3MCS-51单片机指令系统596.位寻址MCS-51单片机中设有独立的位处理器。位操作指令能对内部RAM中的位寻址区(20H2FH)和11个(寻址位83位)有位地址的特殊功能寄存器进行位操作。SETBTR0;TR01CLR00H;(00H)0MOVC,57H;将57H位地址的内容传送到位累加器C中ANLC,5FH;将5FH位状态与进位位C相与,结果在C中7.相对寻址相对寻址以程序计数器PC的当前值作为基地址,与指令中给出的相对偏移量rel进行相加,把所得之和作为程序的转移地址。例如:JZLOOPDJNER0,DISPLAY3MC
36、S-51单片机指令系统603.2MCS-51单片机指令分类介绍MCS-51指令系统有42种助记符,代表了33种功能,指令助记符与各种可能的寻址方式相结合,共构成111条指令。按指令的功能,MCS-51指令系统可分为下列5类:(1)数据传送类指令(29条)(2)算术运算类指令(24条)(3)逻辑运算及移位类指令(24条)(4)控制转移类指令(17条)(5)位操作类指令(17条)3MCS-51单片机指令系统613.2.1指令格式中符号意义说明在分类介绍指令前,先把描述指令的一些符号的意义作一简单介绍。Rn当前选定的寄存器区中的8个工作寄存器R0R7,即n=07。Ri当前选定的寄存器区中的2个寄存器
37、R0、R1,i=0,1。Direct8位内部RAM单元的地址,它可以是一个内部数据区RAM单元(00H7FH)或特殊功能寄存器地址(I/O端口、控制寄存器、状态寄存器80H0FFH)。#data指令中的8位立即数。#data16指令中的16位立即数。addr1616位的目的地址,用于LJMP、LCALL,可指向64KB程序存储器的地址空间。addr1111位的目的地址,用于AJMP、ACALL指令。目的地址必须与下一条指令的第一个字节在同一个2KB程序存储器地址空间之内。3MCS-51单片机指令系统62rel8位带符号的偏移量字节,用于SJMP和所有条件转移指令中。偏移量相对于下一条指令的第一
38、个字节计算,在-128+127范围内取值。bit内部数据RAM或特殊功能寄存器中的可直接寻址位。DPTR数据指针,可用作16位的地址寄存器。A累加器。ACC直接寻址方式的累加器。B寄存器,用于MUL和DIV指令中。C进位标志或进位位。间接寄存器或基址寄存器的前缀,如Ri,DPTR。/位操作的前缀,表示对该位取反。(X)X中的内容。(X)由X寻址的单元中的内容。箭头左边的内容被箭头右边的内容所替代。3MCS-51单片机指令系统633.2.2数据传送类指令1.概述数据传送类指令一般的操作是把源操作数传送到指令所指定的目标地址。指令执行后,源操作数保持不变,目的操作数为原操作数所替代。数据传送类指令
39、用到的助记符有:MOV,MOVX,MOVC,XCH,XCHD,PUSH,POP,SWAP。格式:MOV,功能:目的操作数(源操作数中的数据)源操作数可以是:A、Rn、direct、Ri、#data目的操作数可以是:A、Rn、direct、Ri数据传送指令一般不影响标志,只有一种堆栈操作可以直接修改程序状态字PSW,可能使某些标志位发生变化。3MCS-51单片机指令系统642.内部RAM数据传送指令组(1)立即数传送指令(8位4条,16位1条)MOVA,#data;AdataMOVdirect,#data;directdataMOVRn,#data;RndataMOVRi,#data;(Ri)d
40、ataMOVDPTR,#data16;DPTRdata16(2)内部RAM单元之间的数据传送指令(共5条)MOVdirect2,direct1;direct2(direct1)MOVdirect,Rn;direct(Rn)MOVRn,direct;Rn(direct)MOVdirect,Ri;direct(Ri)MOVRi,direct;(Ri)(direct)3MCS-51单片机指令系统65例:MOVP2,R2MOV0A0H,R2;0A0H是P2口的地址MOV0D0H,R1;0D0H是PSW的地址MOVR5,70H(3)通过累加器的数据传送指令(共6条)MOVA,Rn;A(Rn)MOVRn,
41、A;Rn(A)MOVA,direct;A(direct)MOVdirect,A;direct(A)MOVA,Ri;A(Ri)MOVRi,A;(Ri)(A)3MCS-51单片机指令系统663.外部RAM数据传送指令组(1)使用DPTR进行间接寻址MOVXA,DPTR;A(DPTR)MOVXDPTR,A;(DPTR)(A)(2)使用Ri进行间接寻址MOVXA,Ri;A(Ri)MOVXRi,A;(Ri)(A)4.程序存储器数据传送指令组MOVCA,A+DPTR;A(A)+(DPTR)MOVCA,A+PC;A(A)+(PC)3MCS-51单片机指令系统67例3.1用查表方法将累加器中的十六进制数转换为
42、ASCII码,并送回累加器中。org0mova,#0lcallhbasjmp$org2000hhba:incamovca,a+pcretdb30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,41h,42h,43h,44h,45h,46hend3MCS-51单片机指令系统685.数据交换指令组(1)整字节交换指令(共3条)XCHA,Rn;(A)(Rn)XCHA,direct;(A)(direct)XCHA,Ri;(A)(Ri)(2)半字节交换指令(共1条)XCHDA,Ri;(A)30(Ri)30(3)累加器高低半字节交换指令(共1条)SWAPA;(A)30(A)74
43、6.堆栈操作指令组PUSHdirect;SP(SP)+1,(SP)(direct)POPdirect;direct(SP),SP(SP)-13MCS-51单片机指令系统693.2.3算术运算类指令1.加法指令组(共4条)ADDA,Rn;A(A)+(Rn)ADDA,direct;A(A)+(direct)ADDA,Ri;A(A)+(Ri)ADDA,#data;A(A)+data例:若(A)=0C2H,(R0)=0A9H执行指令:ADDA,R0运算结果:(A)=6BH,(AC)=0,(CY)=1,(OV)=1org0mova,#0c2hmovr0,#0a9hadda,r0sjmp$end3MCS-
44、51单片机指令系统70例3.2两个8位无符号数相加的和仍是8位。内部RAM中40H和41H单元分别存放两个加数,相加结果存放于42H单元中。org0movr0,#40hmova,r0incr0adda,r0incr0movr0,asjmp$end3MCS-51单片机指令系统712.带进位加法指令组(共4条)ADDCA,Rn;A(A)+(Rn)+(CY)ADDCA,direct;A(A)+(direct)+(CY)ADDCA,Ri;A(A)+(Ri)+(CY)ADDCA,#data;A(A)+data+(CY)例3.3带进位加法指令常有用于多字节数的加法运算。如:三字节无符号数相加,被加数放在内
45、部RAM20H22H单元(低位在前),加数放在内部RAM2AH2CH单元(低位在前),和放在被加数单元中。3MCS-51单片机指令系统72例3.3程序如下:org0movr0,#20hmovr1,#2ahmovr7,#03hclrcloop:mova,r0addca,r1movr0,aincr0incr1djnzr7,loopclraaddca,#00hmovr0,asjmp$end3MCS-51单片机指令系统733.带借位减法指令组(共4条)SUBBA,Rn;A(A)-(Rn)-(CY)SUBBA,direct;A(A)-(direct)-(CY)SUBBA,Ri;A(A)-(Ri)-(CY
46、)SUBBA,#data;A(A)-data-(CY)例:若(A)=0C9H,(R2)=54H,(CY)=1执行指令:SUBBA,R2运算结果:(A)=74H,(AC)=0,(CY)=0,(OV)=1org0mova,#0c9hmovr2,#54hsetbcsubba,r2sjmp$end3MCS-51单片机指令系统744.加1指令组(共5条,不影响PSW)INCA;A(A)+1INCRn;Rn(Rn)+1INCdirect;direct(direct)+1INCRi;(Ri)(Ri)+1INCDPTR;DPTR(DPTR)+15.减1指令组(共4条,不影响PSW)DECA;A(A)-1DEC
47、Rn;Rn(Rn)-1DECdirect;direct(direct)-1DECRi;(Ri)(Ri)-13MCS-51单片机指令系统756.乘除指令组(共2条)(1)乘法指令MULAB;BA(A)(B)CY=0,若乘积超过255,则OV=1,否则OV=0。例:若(A)=50H,(B)=0A0H执行指令:MULAB运算结果:(B)=32H,(A)=00H,(CY)=0,(OV)=1(2)除法指令DIVAB;BA(A)(B)CY=0,若除数为0,则OV=1,否则OV=0。例:若(A)=0FBH,(B)=12H执行指令:DIVAB运算结果:(A)=0DH,(A)=11H,(CY)=0,(OV)=0
48、3MCS-51单片机指令系统76乘法:org0mova,#50hmovb,#0a0hmulabsjmp$end除法:org0mova,#0fbhmovb,#12hdivabsjmp$end3MCS-51单片机指令系统777.十进制调整指令(1条)DAA例:若(A)=56H,(R5)=67H执行指令:ADDA,R5DAA运算结果:(A)=23H,(CY)=1org0mova,#56hmovr5,#67hadda,r5daasjmp$end3MCS-51单片机指令系统783.2.4逻辑运算及移位类指令1.逻辑与运算指令组(共6条)ANLA,Rn;A(A)(Rn)ANLA,direct;A(A)(d
49、irect)ANLA,Ri;A(A)(Ri)ANLA,#data;A(A)dataANLdirect,A;direct(direct)(A)ANLdirect,#data;direct(direct)data例3.4:设P1为输入口,P3.0为输出线,执行下列指令:MOV C,P1.0ANLC,P1.1ANLC,/P1.2MOV P3.0,C所实现的操作为:P3.0=(P1.0)(P1.1)(/P1.2)3MCS-51单片机指令系统79例3.4程序:org0movc,p1.0anlc,p1.1anlc,/p1.2movp3.0,csjmp$end3MCS-51单片机指令系统802.逻辑或运算指
50、令组(共6条)ORLA,Rn;A(A)(Rn)ORLA,direct;A(A)(direct)ORLA,Ri;A(A)(Ri)ORLA,#data;A(A)dataORLdirect,A;direct(direct)(A)ORLdirect,#data;direct(direct)data3.逻辑异或运算指令组(共6条)XRLA,Rn;A(A)(Rn)XRLA,direct;A(A)(direct)XRLA,Ri;A(A)(Ri)XRLA,#data;A(A)dataXRLdirect,A;direct(direct)(A)XRLdirect,#data;direct(direct)data3
51、MCS-51单片机指令系统814.累加器清0和取反指令(共2条)CLRA;A0CPLA;A(/A)例3.5:MOVR0,AANLA,#0FHANLP1,#0F0HORLP1,AMOVA,R05.移位指令组(共4条)(1)循环左移RLA(2)循环右移RRA(3)带进位循环左移RLCA(4)带进位循环右移RRCA3MCS-51单片机指令系统823.2.5控制转移类指令1.无条件转移指令组(共4条)(1)长转移指令LJMPaddr16;PCaddr16(2)绝对转移指令AJMPaddr11;PC100addr11(3)短转移指令SJMPrel;PCPC+rel例3.6:LOOP:SJMPLOOP1若
52、LOOP=0100H,LOOP1=0123H,则rel=21H(4)变址寻址转移指令JMPA+DPTR;PC(A)+(DPTR)3MCS-51单片机指令系统832.条件转移指令组(1)累加器判零转移指令JZrelJNZrel(2)数值比较转移指令(共4条)CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNERi,#data,rel(3)减1条件转移指令(共2条)DJNZRn,relDJNZdirect,rel3MCS-51单片机指令系统84例:把2000H开始的外部RAM单元中的数据送到3000H开始的外部RAM单元中,数据个数已在内部RAM3
53、5H单元中。org0movdptr,#2000hpushdplpushdphmovdptr,#3000hmovr2,dplmovr3,dphloop:popdphpopdplmovx a,dptrincdptr3MCS-51单片机指令系统pushdplpushdphmovdpl,r2movdph,r3movx dptr,aincdptrmovr2,dplmovr3,dphdjnz35h,loopsjmp$end853.子程序调用与返回指令组(1)绝对调用指令ACALLaddr11(2)长调用指令LCALLaddr16(3)返回指令RETRETI4.空操作指令NOP3MCS-51单片机指令系统8
54、63.2.6位操作类指令1.位传送指令组(共2条)MOVC,bitMOVbit,C例:MOV10H,CMOVC,20HMOV5AH,CMOVC,10H2.位置位复位指令组(共4条)SETBCSETBbitCLRCCLRbit3MCS-51单片机指令系统873.位运算指令组(共6条)ANLC,bitANLC,/bitORLC,bitORLC,/bitCPLCCPLbit位异或运算:D=EB=/EB+E/BMOVC,BANLC,/EMOVD,CMOVC,EANLC,/BORLC,DMOVD,C3MCS-51单片机指令系统884.位控制转移指令组(1)以C状态为条件的转移指令(共2条)JCrelJN
55、Crel(2)以位状态为条件的转移指令(共3条)JBbit,relJNBbit,relJBCbit,rel3MCS-51单片机指令系统893.2.7I/O口访问指令使用说明1.可以对口进行操作的指令(1)按口操作指令口输出指令口输入指令MOVPm,AMOVA,PmMOVPm,#dataMOVdirect,PmMOVPm,direct(2)按口线操作的指令口线的输入/输出指令口线的置位清0指令MOVPm.n,CSETBPm.nMOVC,Pm.nCLRPm.n口线逻辑运算指令口线状态判跳指令ANLC,Pm.nJBPm.n,relORLC,Pm.nJBCPm.n,rel3MCS-51单片机指令系统9
56、02.读引脚数据前先写“1”ORLP1,#03HMOVC,P1.0MOVC,P1.13.读端口操作时的“读改写”功能ORLP0,#0FH3.2.8MCS-51单片机指令小结3MCS-51单片机指令系统913.3MCS-51单片机指令汇总3MCS-51单片机指令系统924.1汇编语言程序设计概述4.2单片机汇编语言程序的基本结构形式4.3MCS-51单片机汇编语言程序设计举例4.4MCS-51汇编语言的伪指令4.5单片机汇编语言源程序的编辑和汇编4MCS-51汇编语言程序设计934.1汇编语言程序设计概述4.1.1汇编语言的特点及其语句格式4.1.2汇编语言程序设计的特点4MCS-51汇编语言程
57、序设计944.2单片机汇编语言程序的基本结构形式4.2.1顺序程序4.2.2分支程序1.单分支程序例4.2假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1和ST2单元中分别存放着2个8位无符号数,要求找出其中的大数并存入ST3单元中。4MCS-51汇编语言程序设计95例4.2程序:st1equ200hst2equ201hst3equ202horg0start:clrcmovdptr,#st1movx a,dptrmovr2,aincdptrmovx a,dptrsubba,r2jncbig1xcha,r2big0:incdptrmovx dptr,asjmp$big1:mo
58、vx a,dptrsjmpbig0end4MCS-51汇编语言程序设计962.多分支程序(1)使用多条CJNE例4.3某温度控制系统。若温度值TaT55(上限值),则程序转向JW(降温处理程序);若TaT54(下限值),则程序转向SW(升温处理程序);若T55TaT54,则程序转向FH(返回主程序)。CJNEA,55H,LOOP1AJMPFHLOOP1: JNCJWCJNEA,54H,LOOP2AJMPFHLOOP2: JCSWFH:RET4MCS-51汇编语言程序设计97(2)查地址表法例4.4MOVDPTR,#BRTABMOVC A,A+DPTRJMPA+DPTRBRTAB:DBBR0_B
59、RTABDBBR1_BRTABDBBR2_BRTABDBBR3_BRTABBR0:MOVA,R0SJMPBRE4MCS-51汇编语言程序设计BR1:MOVX A,R0SJMPBREBR2:MOVA,R1ANLA,#0FHANLP2,#0F0HORLP2,AMOVX A,R0BR3:MOVDPL,R0MOVDPH,R1MOVX A,DPTRBRE:SJMP$98(3)查转移指令表法例:MOV A,R3RLAMOV DPTR,#BRTABJMPA+DPTRBRTAB:AJMP ROUT0AJMP ROUT1AJMP ROUT1274MCS-51汇编语言程序设计994MCS-51汇编语言程序设计例4
60、.5MOV DPTR,#3000HCLRCRLCAJMPA+DPTR3000H3001H3002H AJMP DS3003H3004H AJMP XS3005H3006H AJMP CR键功能键值处理程序读数据01DS写数据02XS插入03CR100(4)通过堆栈操作实现多分支程序转移例:MOV DPTR,#BRTABMOV A,R3RLAMOV R1,AINCAMOVCA,A+DPTRPUSH AMOV A,R1MOVCA,A+DPTRPUSH ARET4MCS-51汇编语言程序设计BRTAB:DWBR0DWBR1DWBR1271014.2.3循环程序例4.6求字符串长度,字符串首地址为40
61、H(内部RAM)。org0movr2,#0ffhmovr0,#3fhloop:incr2incr0cjner0,#0dh,loopsjmp$end4MCS-51汇编语言程序设计102例4.7把内部RAM中首地址为data的字符串传送到外部RAM首地址为buffer的区域。字符串结束符为“$”,最大长度为32B。data1equ20hbuffer equ0030horg0movr0,#data1movdptr,#buffermovr1,#20h4MCS-51汇编语言程序设计loop:mova,r0subba,#24hjzloop1mova,r0movx dptr,aincdptrincr0djn
62、zr1,looploop1: sjmp$end1034.3MCS-51单片机汇编语言程序设计举例4.3.1算术运算程序1.加减法运算例:无符号数加法。单字节数据存放在外部RAM21H开始的单元中,数据个数为N,结果存放在R1R2中(R1为高位,R2为低位)。nequ10org0movdptr,#21hmovr3,#nmovr1,#0movr2,#04MCS-51汇编语言程序设计loop:movx a,dptradda,r2movr2,ajncloop1incr1loop1: incdptrdjnzr3,loopsjmp$end104例:无符号数减法。设有两个N字节无符号数存放在内部RAM单元中
63、(低字节在前),被减数和减数地址分别在R0和R1中,求出差存放于被减数单元中。nequ4org0clrcmovr0,#20hmovr1,#30hmovr2,#nloop:mova,r0subba,r1movr0,a4MCS-51汇编语言程序设计incr0incr1djnzr2,loopjcqazover:sjmp$qaz:setbf0sjmpoverend105例4.8假定R2、R3和R4、R5分别存放两个16位带符号二进制数,R2和R4的最高位为两数的符号位。请编写带符号双字节加减法程序,BSUB为减法程序入口,BADD为加法程序入口,结果存入R6、R7。org0movr2,#55hmovr
64、3,#44hmovr4,#88hmovr5,#77hlcallbaddmov30h,r6mov31h,r7movr2,#55hmovr3,#44hmovr4,#88hmovr5,#77hlcallbsubmov40h,r6mov41h,r7sjmp$4MCS-51汇编语言程序设计106bsub:mova,r4cplacc.7movr4,abadd: mova,r2movc,acc.7movf0,cxrla,r4movc,acc.7mova,r2clracc.7movr2,amova,r4clracc.7movr4,ajcjianjia:mova,r3adda,r5movr7,amova,r2a
65、ddca,r4movr6,ajbacc.7,qazqwe:movc,f0movacc.7,cmovr6,aret4MCS-51汇编语言程序设计107jian:mova,r3clrcsubba,r5movr7,amova,r2subba,r4movr6,ajnbacc.7,qwebmp:mova,r7cplaadda,#1movr7,amova,r6cplaaddca,#0movr6,acplf0sjmpqweqaz:setb00hretend4MCS-51汇编语言程序设计1082.乘法运算例4.9双字节无符号数乘法。被乘数和乘数分别存放于R2、R3和R6、R7单元中(R2和R6为高位字节),乘
66、积依次存放在R4、R5、R6、R7单元中。org0movr2,#12hmovr3,#01hmovr6,#56hmovr7,#02hlcalldbmulsjmp$dbmul:mova,r3movb,r7mulabxcha,r74MCS-51汇编语言程序设计movr5,bmovb,r2mulabadda,r5movr4,aclraaddca,bmovr5,amova,r6movb,r3mulab109adda,r4xcha,r6xcha,baddca,r5movr5,amovf0,cmova,r2mulabadda,r5movr5,a4MCS-51汇编语言程序设计clramovacc.0,cmov
67、c,f0addca,bmovr4,aretend1103.除法运算例4.10双字节无符号数除法。R7R6执行前被除数,执行后商R5R4除数R3R2余数3AH溢出标志R1循环次数计数器(16次)org0movr7,#56hmovr6,#78hmovr5,#12hmovr4,#34hlcalldbdivsjmp$4MCS-51汇编语言程序设计dbdiv: mov3ah,#0mova,r5jnzzeromova,r4jzoverzero:mova,r7jnzstartmova,r6jnzstartret111start:clramovr2,amovr3,amovr1,#10hloop:clrcmov
68、a,r6rlcamovr6,amova,r7rlcamovr7,amova,r2rlcamovr2,amova,r3rlcamovr3,a4MCS-51汇编语言程序设计mova,r2subba,r4jcnextmovr0,amova,r3subba,r5jcnextincr6movr3,amova,r0movr2,anext:djnzr1,loopretover:mov3ah,#0ffhretend1124.3.2数制转换程序1.十六进制数转换成ASCII码例4.11内部RAM的hex单元中存有2位十六进制数,试将其转换成ASCII码并存放于asc和asc+1单元中。hexequ20hasce
69、qu30horg0movsp,#3fhmain:pushhexacallhascpopascmova,hexswapapushaccacallhascpopasc+1sjmp$4MCS-51汇编语言程序设计hasc:decspdecsppopaccanla,#0fhadda,#7movca,a+pcpushaccincspincspretasctab:db0123456789ABCDEFend1132.ASCII码转换成十六进制数例4.12将外部RAM30H3FH单元中的ASCII码依次转换为十六进制数,并存入内部RAM6067H单元中。org0main: movdptr,#30hmovr1,
70、#60hmovr7,#08haa:acalltranswapamovr1,aincdptracalltranxchda,r1incdptrincr14MCS-51汇编语言程序设计djnzr7,aahalt:ajmphalttran:clrcmovx a,dptrsubba,#30hcjnea,#0ah,bbajmpbcbb:jcdonebc:subba,#07hdone: retend1144.3.3定时程序1.单循环定时程序MOV R5,#TIMELOOP:NOPNOPDJNZ R5,LOOPRET2.较长时间的定时程序MOV R5,#TIME1LOOP2:MOV R4,#TIME2LOOP
71、1:NOPNOPDJNZ R4,LOOP1DJNZ R5,LOOP2RET4MCS-51汇编语言程序设计1153.调整定时时间MOV R0,#TIMELOOP:ADDA,R1;哑指令INCDPTR;哑指令DJNZ R0,LOOP;10TIMEsMOV R0,#TIMELOOP:ADDA,R1;哑指令INCDPTR;哑指令NOP;哑指令DJNZ R0,LOOP;12TIMEs4MCS-51汇编语言程序设计1164.以一个基本的延时程序满足不同的定时要求MOVR0,#5LOOP1:LCALLDELAY;延时1秒DJNZR0,LOOP1MOVR0,#10LOOP2:LCALLDELAYDJNZR0,
72、LOOP2MOVR0,#20LOOP3:LCALLDELAYDJNZR0,LOOP34MCS-51汇编语言程序设计1174MCS-51汇编语言程序设计4.3.4查表程序1.查表指令MOVC A,A+DPTRMOVC A,A+PC2.查表程序举例MOVDPTR,#BSRLAMOVR2,AMOVC A,A+DPTRPUSHACCMOVA,R2INCAMOVC A,A+DPTRMOVDPH,APOPDPLCLRAJMPA+DPTRBS:DBRK0L,RK0H,RK1L,RK1H,RK2L,RK2H,键码入口地址0RK01RK12RK21184MCS-51汇编语言程序设计4.3.5数据极值查找程序例4
73、.13内部RAM20H单元开始存放8个无符号数,求出其最大数送2BH单元。org0movr0,#20hmovr7,#08hmova,r0decr7loop:incr0mov2ah,r0cjnea,2ah,chkchk:jncloop1mova,r0loop1: djnzr7,loopmov2bh,ahere:ajmphereend1194MCS-51汇编语言程序设计4.3.6数据排序程序例4.14内部RAM20H单元开始存放8个无符号数,使用冒泡法排序。org0sort:movr0,#20hmovr7,#07hclrtr0loop:mova,r0mov2bh,aincr0mov2ah,r0cl
74、rcsubba,r0jcnextmovr0,2bhdecr0movr0,2ahincr0setbtr0next:djnzr7,loopjbtr0,sorthere:ajmp$end1204MCS-51汇编语言程序设计冒泡法排序程序的改进。org0movr7,#7hsort:push07hmovr0,#20hclrtr0loop:mova,r0mov2bh,aincr0mov2ah,r0clrcsubba,r0jcnextmovr0,2bhdecr0movr0,2ahincr0setbtr0next:djnzr7,loopjnbtr0,herepop07hdjnzr7,sorthere:ajmp
75、$end1214.3.7数据检索程序1.顺序检索例4.15内部RAM20H单元开始存放8个无符号数,检索关键字放在2BH单元,检索成功的数据序号(从1开始)放在2CH单元。keyequ5org0movr0,#20hmovr7,#08hmov2ch,#0movr2,#0mov2bh,#keynext:incr2clrc4MCS-51汇编语言程序设计mova,2bhsubba,r0jzendpincr0djnzr7,nextmovr2,#0endp: mov2ch,r2here:ajmphereend1222.对分检索例4.16假定检索数据区在内部RAM中,首地址为data,数据为无符号数,且已按
76、升序排列。2AH存放检索范围的起点。2BH存放检索关键字。R0先指向数据区首地址。检索开始后,则为对分读数地址。R2检索成功标志。如检索成功,则数据序号放入其中;否则置为0FFH。R3检索次数计数器。R4存放检索到的数据。R7存放检索范围的终点。4MCS-51汇编语言程序设计123keyequ5dvlequ9data1equ30horg0mov2ah,#0movr7,#dvlmov2bh,#keymovr3,#1loop1: movr0,#data1mova,2ahadda,r7clrcrrca4MCS-51汇编语言程序设计movr2,aclrcsubba,2ahjzloop3mova,r2a
77、dda,r0movr0,amova,r0movr4,aclrcsubba,2bhjzloop5jncloop2124mov2ah,r2incr3sjmploop1loop2: mova,r2movr7,aincr3sjmploop1loop3: movr0,#data14MCS-51汇编语言程序设计mova,r0cjnea,2bh,loop4movr4,asjmploop5loop4: mova,#0ffhmovr2,aloop5: sjmploop5end1254.4MCS-51汇编语言的伪指令1.ORG(Origin)汇编起始地址命令2.END(EndofAssembly)汇编结束命令3.
78、EQU(Equate)赋值命令4.DB(DefineByte)定义字节命令5.DW(DefineWord)定义数据字命令6.DS(DefineStorage)定义存储区命令7.BIT位定义命令例:AQBITP1.04MCS-51汇编语言程序设计aqbitp1.0org0clrcmovaq,csjmp$end1264.5单片机汇编语言源程序的编辑和汇编4.5.1手工编程和汇编4.5.2机器汇编和交叉汇编4MCS-51汇编语言程序设计1275.1MCS-51单片机系统扩展及结构5.2MCS-51单片机存储器扩展与编址技术5.3MCS-51单片机程序存储器扩展5.4MCS-51单片机数据存储器扩展5
79、.5存储器综合扩展5.6MCS-51单片机存储器系统的特点和使用5单片机存储器扩展1285.1MCS-51单片机系统扩展及结构5.1.1系统扩展结构5.1.2系统总线及总线构造5单片机存储器扩展图 5.1单片机的三总线结构1295.2MCS-51单片机存储器扩展与编址技术5.2.1存储器扩展概述5.2.2单片机存储器系统5.2.3扩展存储器编址技术5单片机存储器扩展1305单片机存储器扩展5.3MCS-51单片机程序存储器扩展5.3.1只读存储器概述5.3.2程序存储器扩展用典型芯片5.3.3程序存储器扩展举例1315.4MCS-51单片机数据存储器扩展5.3.1随机存储器概述5.3.2数据存储器扩展用典型芯片5.3.3数据存储器扩展举例5单片机存储器扩展1325单片机存储器扩展5.3.3数据存储器扩展举例1335.5存储器综合扩展5.5.1同时扩展程序存储器和数据存储器5.5.2扩展既可读又可写的程序存储器5单片机存储器扩展1345.6MCS-51单片机存储器系统的特点和使用5.6.1MCS-51单片机存储器的复杂性5.6.2MCS-51单片机存储器的使用5单片机存储器扩展结束语结束语谢谢大家聆听!谢谢大家聆听!135