经典单片机原理及应用课件.ppt
1,第1章 单片机概述,2,整 体 概 述THE FIRST PART OF THE OVERALL OVERVIEW, PLEASE SUMMARIZE THE CONTENT,第一部分,3,单片机又称为微控制器(Micro Controller Unit,MCU),是微型计算机的一个非常重要的分支。自从20世纪70年代问世以来,就以其体积小、功能全、可靠性高、控制功能强、性价比高等特点在智能仪表、机电一体化、实时控制、家用电器、信息和通信产品等各个领域得到了广泛的应用,对各行各业的改造和产品的更新换代起着非常重要的推动作用,对人们的生活产生了深刻的影响。,4,本章首先介绍了单片机的基本结构与特点、单片机与嵌入式系统和单片机应用的特点,然后简述了单片机的发展趋势,为了让读者对MCS-51系列单片机有一个较全面的了解,还介绍了MCS51系列单片机的基本概况和MCS51系列的最新发展。,5,11单片机与嵌入式系统,单片机是将中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM或EPROM)、中断系统、定时器/计数器和一些输入/输出接口等微型计算机的部件都集成在一个芯片上的微控制器( Microcontroller)。中央处理器包括运算器、控制器和寄存器3个主要部分,它是单片机的核心。,6,111 单片机的基本结构与特点,80C51单片机的基本结构与特点:程序存储器和数据存储器分开I/O端口多功能分时复用片内特殊功能寄存器和工作寄存器组 片内有全双工串行通信接口独立的位处理器,7,112单片机与嵌入式系统,1嵌入式系统的主要特点嵌入式系统的主要特点体现在两个方面:(1)目的性和针对性。(2)实时性。,8,2典型应用,嵌入式系统的典型应用主要有以下几个方面:(1)过程控制。(2)网络通信。例如,在程控交换机、路由器、桥接器、集线器、Modem以及手机等设备和部件上的应用。(3)智能仪器。例如,在示波器、医疗仪器上的应用。(4)消费电子。例如,在掌上电脑、数字电视、游戏机、洗衣机等家用电器上。(5)计算机外部设备。例如在打印机、扫描仪、磁盘驱动器以及终端等设备上。(6)军事电子。例如,在雷达、电子对抗、坦克、战机以及战舰等方面的应用。,9,113 单片机应用的特点,单机应用的领域主要有:(1)智能产品(2)智能仪表(3)测控系统(4)数控系统(5)智能接口,10,多机应用,单片机的多机应用系统可分为功能弥散系统、并行多处理机系统以及局部网络系统。(1)功能弥散系统(2)并行多机处理系统(3)局部网络系统,11,12 单片机的发展趋势,单片机的发展推动了应用系统的发展,应用系统的发展又反过来对单片机提出了更高的要求,从而促进单片机的发展。目前,单片机正朝着功能更强、速度更快、功耗更低的方向发展。,12,121 CPU的发展,采用双CPU结构,以提高处理能力。增加数据总线的宽度,单片机内部采用16位数据 总线,其数据处理能力明显优于8位单片机。采用流水线结构,指令以队列形式出现在CPU中,且有很快的处理速度。采用串行数据总线结构。,13,122 存储器的发展,存储器的发展主要体现在以下三个方面:1存储容量加大2片内使用EEPROM或Flash3程序保密化,14,123 I/O端口多功能化,随着集成度的不断提高,把众多的外围功能器件集成在片内已经具备了充分的条件。这也是单片机以后发展的重要趋势。单片机除了集成有一般必须具有的ROM、RAM、定时器/计数器、中断系统外,随着单片机挡次的提高,以适应检测、控制功能更高的要求,片内集成的器件通常还有A/D、D/A、LED/LCD显示驱动器、DMA控制、PWM(脉宽调制器)、PLC(锁相环控制)、PCA(可编程计数阵列)、WDT(看门狗)等。,15,124 低功耗和宽电压范围,COMS电路为实现低电压、低功耗提供了条件。在8位单片机中已有二分之一的产品实现了COMS化,并设有空闲和掉电两种工作方式。采用CHMOS制作工艺使单片机集HMOS的高速、高集成度和CMOS的低功耗技术为一体,使单片机的功耗进一步降低,适应的电压范围更宽。,16,125 采用RISC体系结构,采用RISC(精简指令系统计算机)的体系结构,可以使指令系统中的绝大部分指令成为单周期指令。提高指令的运行速度 .目前,在一些采用RISC体系结构的单片机中已达到了在一个时钟周期内执行一条指令的运行速度。,17,126 总线串行化,采用串行接口虽然较之并行接口在数据传输速度上有所减缓,但由于串行传输速度的不断提高,加之单片机面对对象的有限速度要求,使得单片机应用系统中的串行扩展技术仍然获得很大的发展。随着外围电路串行接口技术的发展,以及单片机串行扩展接口设置的普遍化、高速化,以及由于在片Flash Memory使可以免去外部扩展EPROM等因素,从而导致单片机的并行接口技术日趋衰退。目前许多原来带有并行总线的单片机系列,都推出了不少删去了并行总线的非总线单片机。,18,13 MCS-51系列及其部分兼容机简介,目前已投放市场的主要单片机产品多达70多个系列,500多个品种。这还不包括那些系统或整机商定制的专用单片机以及针对专门业务、专门市场的单片机品种。,19,131 目前较有影响的单片机种类,市场上较有影响的单片机有如下一些系列:Intel公司生产的MCS-51和MCS-96系列。Motorola公司生产的68HCXX系列。Microchip公司生产的16C5X/6X/7X/8X系列。Texas公司生产的MSP430FXX系列。,20,132 MCS51系列及其部分兼容单片机,MCS-51系列单片机是国内引进最早从而最为普及的单片机系列,具有种类多、应用广和可替换性强的特点。,21,1Intel公司的MCS-51系列,Intel公司于1980年推出的MCS-51奠定了嵌入式应用单片微型计算机的经典CISC体系结构。MCS-51系列的主要产品按照功能可以划分为如下类型,(1)基本型(2)增强型 (3)低功耗型(4)高级语言型(5)A/D型(6)DMA型(7)多并行接口型,22,2ATMEL公司的AT89系列,ATMEL公司率先将独特的Flash存储技术注入MCS-51单片机中,其推出的AT89系列单片机,在世界电子行业中引起了极大的反响,在国内也受到广大用户的欢迎。Flash存储器的使用加速了单片机技术的发展,基于Flash存储器的ISP/IAP(在系统可编程/在现场可编程)技术极大地改变了单片机应用系统的结构模式以及开发和运行条件,是8051单片机技术发展的一次重大飞跃。,23,AT89系列单片机的特点,(1)内部含电可擦写闪速只读存储器Flash(2)与80C51引脚兼容(3)可反复重新编程(4)可反复进行系统实验,24,本章结束!谢谢!,25,第2章 MCS-51单片机的结构和时序,26,21 关于MCS-51系列,MCS-51系列单片机是Intel公司开发的一种应用非常广泛的一种单片机,它集成有强大的片内功能和强大的指令系统,得到了广大用户的好评。MCS-51系列单片机有多种不同型号,常见的型号有:8031、8051、8751、80C31、80C51等,它们都是8位机单片机,它们的内部结构可能有一些不同,但它们的指令系统完全兼容。下表是几种常见MCS-51系列单片机的型号及它们的异同。,27,21 关于MCS-51系列,表2-1几种常见MCS-51系列单片机的型号,28,MCS-51系列单片机的主要特点:,采用单V供电,个引脚能够兼容(只是号引脚略有区别);位字长即数据总线宽度位,为位机;片内集成了振荡器和时钟电路(用户一般只须增加很少的外围电路);具有KB的外部数据存储器与外部程序存储器的寻址空间(最大可达位地址线);具有条双向I/O线;具有个位定时器计数器(8052/8032具有个);具有全双工串行口,可同时收发数据;具有个位寻址单元;,29,22 MCS-51单片机结构及原理,2.2.1 MCS-51单片机的基本结构2.2.2 MCS-51单片机的基本原理,30,2.2.1 MCS-51单片机的基本组成,MCS-51系列单片机都包括以下几个部分:中央处理器CPU内部数据存储器RAM内部程序存储器ROM(个别型号不带)输入输出接口电源等,31,中央处理器CPU,中央处理器是单片机的核心,包括运算器和控制器两大部分。运算器主要是用来完成算术逻辑运算等功能。它由算术逻辑单元(ALU)、位处理器、累加器ACC、寄存器B、暂存器等部分组成。 控制器由定时和控制逻辑、内部振荡电路OSC、指令寄存器及其译码器、程序计数器PC、程序和数据寄存器、程序状态字寄存器PSW、RAM地址寄存器、数据指针DPTR和堆栈指针SP等部分组成。,32,内部数据存储器RAM,存储器是单片计算机中用来存放程序或数据的部件。在单片机中,存储器类型按功能可以分为只读和随机存取存储器两大类。,33,MCS-51系列单片机内存储器的组织,MCS-51系列单片机的存储器采用了三段彼此独立的地址空间来组织。256B片内数据存储器地址空间;64KB片外数据存储器地址空间;64KB储蓄存储器地址空间(片内和片外地址空间有部分重叠);,34,程序存储器地址空间,在8051单片机中,程序存储器的地址范围为:0000HFFFFH.因为它有4KB的片内ROM,所以片内ROM和片外ROM有4KB的地址是重叠的。其重叠地址范围为:0000H0FFFH,当EA为高电平时,CPU的先从片内ROM中取指令,直到超出它的地址范围(0000H0FFFH),再从外部ROM中取指令。当EA为低电平时,CPU只从外部ROM中取指令。,35,8051单片机内几个特殊的地址单元及作用,36,数据存储器的地址空间,在8051单片机中,其数据存储器分为两个独立的部分:片内RAM和片外RAM。片内RAM的地址范围为:00HFFH片外RAM的地址范围为:0000HFFFFH在MCS-51系列单片机内部RAM中,存储器分为四个区域,即工作寄存器区,位寻址区,用户RAM和堆栈区,特殊功能寄存器区(SFR)。,37,8051单片机存储器的组织结构图,38,MCS-51工作寄存器区,工作寄存器区共32B,地址范围为:00H1FH;位寻址区共16B,地址范围为:20H2FH;用户RAM和堆栈区的地址空间有80B,地址范围为:30H7FH;其他128B为特殊功能寄存器区,其地址范围为:80HFFH。另外,32B工作寄存器区分为四组,如表所示。其中的每个组都包含个字节,即个寄存器(R0R7)。用户在使用时,只能同时使用其中的一组。,39,工作寄存器的分组及选择控制,注:RS0和RS1为程序状态字(PSW)的D3和D4位,40,位寻址区位地址分配,41,8051单片机的特殊功能寄存器,42,特殊功能寄存器,1)ACC:累加器(位),通常用A表示。实际上它就是一个寄存器,因为常用于加法运算,所以称它为加法器。累加器是单片机中最重要的也使用最频繁的寄存器之一,大部分的运算类指令都要用到它。2)B:乘法寄存器(位)。主要用于乘、除法运算,用于存放乘数或除数。在不做乘除法时,也可以做普通寄存器使用。3)PSW:程序状态字(位)。这是一个很重要的寄存器,用于存放CPU工作状态,通过PSW,我们可以了解CPU的当前工作(执行程序)状态,并据此作出相应的处理。,43,特殊功能寄存器,4)DPTR(DPH、DPL):数据指针(16位)。通常用它来访问外部数据存储器中的任一单元。有时也可以用作通用寄存器。5)P0、P1、P2、P3:是四个并行输入/输出口的寄存器。 6)SP:堆栈指针(8位),是一个8位的专用寄存器。在单片机中,可以在RAM中构造这样一个特殊区域,用来存放数据,这个区域存放数据的规则就是“先进后出,后进先出”,我们称之为“堆栈”。,44,堆栈举例,在使用堆栈时,当入栈操作时,SP先加1,然后执行数据存储操作。例如:开始时SP=34H,在单片机执行PUSH A 指令后,SP=35H,此时,存储器地址34H中存放的就是累加器A的值(A=20H)。,图23 堆栈指针的示意图,45,23 MCS-51单片机的引脚及其片外总线结构,231 MCS-51引脚功能232 片外三总线结构233 MCS-51单片机并行口结构,46,231 MCS-51引脚功能,MCS-51单片机引脚功能分布图,47,单片机的时钟电路,48,232 片外三总线结构,单片机的管脚可以构成三总线结构:地址总线数据总线控制总线,49,地址总线(AB),地址总线主要是在单片机扩展时,用于地址信号的传输。可以通过地址选通访问外部存储器或设备的内容。MCS-51单片机地址总线宽度为16位,因此其能访问的外部存储器的地址范围是0000HFFFFH,即可达64KB。在单片机中,由P0口经地址锁存器提供16位地址总线的低8位地址(A7-A0),由P2口直接提供16位地址总线的高8位地址(A15A8),50,数据总线,MCS-51单片机是8位单片机,其数据总线的宽度位8位,由P0口提供。,51,控制总线,52,单片机的三总线,53,233 MCS-51单片机并行口结构,54,P0口结构,55,P0口的特点,P0口的特点:1)P0口可作通用I/O口使用,又可作地址/数据总线口;2)作地址/数据总线时,P0是一真正双向口,而作通用I/O口时,只是一个准双向口;3)P0口可作为地址/数据总线使用;4)P0既可按字节寻址,又可按位寻址;5)可带8个TTL输入,驱动NMOS时,需接上拉电阻。,56,P1口结构,57,P1口的特点,P1口的特点:1)只能作I/O口使用,且也是一个准双向口;2)内部已有上拉电阻,不是开漏输出口;3)可按字节寻址,也可按位寻址。,58,P2口结构,59,P2口的特点,P2口的特点:1)当P2口作为通用I/O时,是一准双向口。2)从P2口输入数据时,先向锁存器写“1”。3)可位寻址,也可按字节寻址4)做地址总线时,输出地址高8位。,60,P3口结构,61,P3口的第二功能,62,P3口特点,P3口特点:1)作通用I/O时,“第二输入功能”应保持高电平,此时它是一个准双向口;2)工作于第二功能时,该位的锁存器应置1,63,24 MCS-51单片机的工作方式,单片机系统可以有多种工作方式.包括:复位方式、程序执行方式、单步执行方式、掉电和节电工作方式EPROM编程和校验方式,64,241 复位方式,图2-11 8051复位电路的结构,65,241 复位方式,系统复位后,内部各寄存器进入下列特定的状态(为不定数),66,各种复位电路,67,242 程序执行方式,程序执行方式是单片机的基本工作方式。所执行的程序可以放在内部ROM、外部ROM,或同时放在内部ROM和外部ROM中。由于复位后PC=0000H,所以程序的执行总是从0000H单元开始的,但是,用户的程序一般不可能从0000H单元开始存放。因此,需要从0000H单元开始存放一条长转移指令,以使执行转移到用户程序的入口地址。例如:ORG 0000HLJMP MAIN ; MAIN为用户程序入口ORG 0100HMAIN: ;用户程序,68,243 单步执行方式,单步执行是指单片机系统在外界脉冲的控制下,每次只执行一条指令后就暂停下来的执行方式。因此它是调试程序、跟踪程序执行,以了解程序执行流程的一种有效手段。实现单步执行方式,要借助于MCS-51的中断控制系统。,69,244 掉电和节电方式,(1)8051的掉电方式具体作法:信息转存,启用备用电源维持供电。因此是一种低功耗节电方式。,70,244 掉电和节电方式,(2)80C51的节电方式节电方式也是一种能减少单片机功耗的工作方式,通常可以分为待机(等待)方式和掉电(停机)方式两种.只有CHMOS型器件才有这种工作方式待机方式和掉电方式由专用寄存器PCON(电源控制寄存器)的有关位来控制的。,71,PCON寄存器格式,图2-14 PCON寄存器格式,72,待机与掉电方式控制电路,73,245 编程和校验方式,编程是指利用特殊手段对单片机内EPROM进行写人的过程.校验则是对刚刚写人的程序代码进行读出验的过程。 例如:8751H片内EPROM有编程、校验和保密位编程三种工作方式,74,表2-8 8751H EPROM操作方式,ALE/,注:表中表示任意电平,0表示低电平,1表示高电平。VPP为210.5V,,的编程脉冲为50ms负脉冲。,75,(1)EPROM编程方式,76,(2)EPROM程序校验,如果程序的保险位未设置,则无论是在编程期间或编程之后,都可以将片上程序存储器的内容读出来进行校验。程序的校验时,需要用到微型计算机控制,微型计算机把12位地址送入被校验的8751H的P2和P1口,以读出选中的EPROM存储单元中的代码,经P0口送给微型计算机。微型计算机将读出的代码与编程时写入的编程代码进行比较,若两者相同,则该EPROM单元编程正确,否则编程不正确。,77,25 MCS-51单片机的时序,78,访问外部ROM和RAM的时序,图2-18 读外部程序ROM时序,79,读外部数据RAM时序,80,谢谢!,81,第4章 单片机汇编语言程序设计,82,第4章 单片机汇编语言程序设计,41 概述42 伪指令43汇编语言程序设计方法44汇编语言程序设计举例,83,41 概述,单片机汇编语言程序实际上就是单片机的所支持的能完成指定功能的指令系列。构成汇编语言程序的是汇编语句。在MCS-51系列单片机汇编语言中汇编语句一般分为两种:指令性语句(即汇编指令)指示性语句(即伪指令)指令性语句在汇编后成为单片机执行的指令码,而指示性语句并不能产生可执行的指令码,它只是在汇编时通知汇编程序如何工作。,84,411 汇编的概念,在单片机中,汇编是将单片机的汇编语言助记符指令(汇编程序)翻译成单片机能识别执行的二进制机器指令(目标程序)。目前汇编一般有两种方法:手工汇编机器汇编手工汇编是用人工查表的方式进行汇编程序的翻译为目标程序。汇编程序是一种翻译程序,利用汇编指令与机器码指令的一一对应的关系。将源程序翻译成目标程序,85,汇编过程,源程序(汇编指令程序),汇编,目标程序(机器码指令程序),图4-1 汇编过程,86,412 汇编程序,汇编语言程序转换成机器语言的过程称为汇编过程。能实现汇编语言到机器语言的转换的程序称为汇编程序。汇编时汇编过程可以由汇编程序完成,也可以由人工完成。因此,汇编可以分为:手工汇编机器汇编,87,(1)手工汇编,手工汇编就是根据指令表,将源程序由汇编指令逐条翻译成机器指令,并把这些机器指令代码以字节为单元从起始地址依次排列成目标程序的过程。手工汇编一般分两步进行(即两次汇编过程):第一步:确定各条指令(第一字节)的地址并翻译出各条指令的机器码。第二步:将第一步未处理的标号进行代替,求出标号所代表的具体地址或地址偏移量,从而形成最终机器代码。,88,手工汇编举例,89,(2) 机器汇编,机器汇编是由计算机的汇编软件将汇编语言源程序自动生成机器语言程序,称汇编软件为汇编程序。机器汇编可在单片机开发系统(如仿真器)上汇编软件实现,称驻留汇编;在其它计算机(如PC机)上进行,称交叉汇编。,90,42 伪指令,伪指令是单片机中的指示性指令,它主要是汇编时告诉汇编程序,如何汇编源程序的指令。说明:伪指令不能被汇编成机器代码,也不能被机器执行完成某种操作,因此称为伪指令,91,(1)、起始地址伪指令 ORG,指令格式:ORG addr16 指令功能:用于规定目标程序段或数据块的在程序存储器中的起始地址,需放置在被设置在程序段或数据块的开始处。 例如: ORG 3000H START: MOV A, #30H ,92,(2)、汇编结束伪指令 END,指令格式:END 或 END 标号 指令功能:汇编时通知汇编程序,对源程序的汇编到此结束。一个程序中只出现一次,在程序的最后出现。,93,(3)赋值伪指令 EQU,指令格式: 标识符 EQU 数值或汇编符号指令功能:汇编时告诉汇编程序,将汇编语句操作数的值赋予本语句的标识符。“标识符”在源程序中可以作数值使用,也可以作数据地址、位地址使用。要使用此标识符必须先定义后使用,且放在程序开头。注意:标识符后没有冒号,只须一个空格分隔。 例如: DATA EQU 29H MOV A , DATA ,94,(4)、定义字节伪指令 DB,指令格式: 标号: DB 字节数据或字节数据表指令功能:汇编时告诉汇编程序从指定的地址单元开始,定义若干字节存储单元,并将指定的数据或数据表赋予作为初值。注意:数据表中各字节数据用逗号分隔,如果是字符数据还需要用“”引起来,数据可以是二进制、十六进制和ASCII码;DB指令在汇编语言程序中可以多次使用。 例如: ORG 1000H ADDR: DB 20H DATA: DB 0AFH, “A” , 00100001B 汇编结果是将20H存放于ADDR即1000H地址单元中,将0AFH存放于ADDR+1地址单元,将“A”存放于ADDR+2地址单元;将00100001B存放于ADDR+3地址单元。,95,(5)、定义字伪指令 DW,指令格式: 标号: DW 字数据或字数据表指令功能:汇编时告诉汇编程序从指定的地址单元开始,定义若干个字存储单元,并将指定的数据或数据表赋予作为初值。其中数据高八位存入低地址;低八位存入高地址。 例如: ORG 1000H DATA1: DW 7654H,40H、12、AB ,96,(6)、数据地址赋值伪指令 DATA,指令格式:字符名称 DATA 表达式指令功能:将表达式指定的数据地址赋予规定的字符名称。注意:该指令与EQU指令相似,只是可先使用后定义,放于程序开头、结尾均可。,97,(7)、定义空间伪指令 DS,指令格式: 标号: DS 数值指令功能:从标号所指示的地址单元开始,保留指定的若干字节空间作为备用空间。 例如: ORG 2000H DS 0FH DB 55H,11H,0F1H ;从100BH开始存放55H、11H、0F1H。注:DB、DW、DS 只能用于程序存储器;而不能用于数据存储器。,98,(8)、位地址赋值伪指令 BIT,指令格式: 标识符 BIT 位地址指令功能:将位地址赋予规定的标识符。 例如: X1 BIT P1.0 相当于 X1 EQU 90H,99,43汇编语言程序设计方法,单片机软件开发过程是单片机设计的主要任务之一,它的开发过程一般包括以下四个阶段:(1)编写汇编语言源程序;(2)汇编;(3)调试;(4)固化等。,100,43汇编语言程序设计方法,图4-1 单片机软件开发过程,101,43汇编语言程序设计方法,为了编写高质量的单片机程序,编写单片机汇编语言程序时需要做到以下几点:1)程序占用存储空间尽量少;2)运行时间短;3)程序的编制、调试及排错所需时间短;4)结构清晰,可读性好、易于移植。,102,43汇编语言程序设计方法,汇编语言程序设计一般步骤 :1)分析问题,明确任务2)建立数学模型,确定算法3)绘制程序流程图4)编写源程序 5)汇编、调试,103,三种基本程序结构,三种基本程序结构:顺序结构分支结构循环结构等如下图所示 :,104,图 (a)顺序结构 图 (b) 分支结构,分支1,分支2,入口,出口,Y,N,条件满足否?,105,图 (c) 循环结构(1) 图 (d)循环结构(2),106,431顺序程序,例4-1 设在外RAM的50H单元存有1个字节数据,要求将其分解成两个4位数据,并将其高4位存入原单元的低4位,其低4位存入51H单元的低4位,而这两个单元的高4位均为0,试编写实现此任务的汇编语言程序。解:分析:本题可考虑用ANL 指令屏蔽低4位来获取高4位数据,然后用SWAP A指令将50H单元的数据高低4位互换。这样就得到了第一个4位数据。第二个4位数据只需将原数据屏蔽掉高4位即可。参考程序如下:,107,ORL 1000H MOV R0,#50H ;外存地址 MOVX A,R0 ;读取原数据 MOV B,A ;保存原数据 ANL A,#0F0H ;屏蔽低4位 SWAP A ;高低4位互换 MOVX R0,A ;保存第一个4位数 ANL B,#0FH ;屏蔽高4位,得到第二个4位数 MOV A,B INC R0 ;修改地址 MOVX R0,A ;保存第二个4位数 END,108,432 分支程序,分支结构程序是根据不同的条件,选择不同的分支以进行相应的处理。通常可用条件转移指令形成简单分支结构。 如:判断(A)= 0 (或 非0) ,程序转移 判断(CY)= 1 (或 0) ,程序转移 判断(bit)=1 (或 0) ,程序转移 以下是二个分支程序设计的例子。例4-2、设a存放在累加器A中,b存放在寄存器B中,要求按下式计算Y值,并将结果Y存于累加器A中,试编写程序。 a-b (a0) Y = a+b (a 0),109,解:本题关键是判a是正数,还是负数;显然累加器A中的ACC.7为符号为,如果是负数则该位为1,若该位为0,则为非负数。显然条件的判断变为检测ACC.7是否为1。 ORG 1000H START: JB ACC7,KK0 ;判断并选择分支 CLR C ;清进位标志位 SUBB A,B ;a-b SJMP DONE ;跳过 a+b 分支 KK0: ADD A,B ;a+b DONE: SJMP ;原地踏步,等待 END,110,例4-3、设有两个16位无符号数M,N分别存放在8031单片机内部RAM的40H、41H及50H、51H单元中,当M N时,将内部RAM的42H单元清0;否则,将该单元置成全1,试编程。解法I:因为无16位数的比较指令,所以,只能用8位数的比较指令,111,ORG 2000H CMP:MOV A,50H CJNE A,40H,CMP1 MOV A,51H CJNE A,41H,CMP1 SJMP NHIGHE ;跳过一些其它分支 CMP1:JC HIGHE NHIGHE:MOV 42H,#0FFH SJMP DONE HIGHE:MOV 42H,#00H DONE:SJMP END,112,解法II:先假设M N,再来判断是否NA NB ORG 3000H CMP2:MOV R0,#00H MOV A,50H CJNE A,40H,CMP3 MOV A,51H CJNE A,41H,CMP3 SJMP NHIGHE CMP3:JC HIGHE NHIGHE:MOV R0,#0FFH ;不大于标志 HIGHE:MOV 42H,R0 SJMP END,113,433循环程序,循环程序是指在一定条件下,程序中的一些代码重复执行的情况。典型循环结构程序一般包括四部分:初始化部分循环处理部分循环控制部分循环结束部分,114,例4-4 将首址为DATA的100个外部RAM单元清零。解:该例为已知循环次数的循环程序将循环次数存放在R0中。程序如下: MOV R0,#64H ;设置循环计数器 MOV DPTR,#DATA ;设置地址指针 CLR ALOOP: MOVX DPTR,A ;清0 INC DPTR DJNZ R0,LOOP ;判0结束循,115,例4-5 设某以“$”为结束标志的字符中共不超过256个,存放在内部RAM以STA为首址的连续单元里,设统计此字符中长度并存放到内部RAM的LEN单元中。解法I: 程序如下: ORG 1000H MOV R2,#STA ;设地址指针 MOV B,#00H ;设计数器 LOOP: MOV A,R2 CJNE A,“$”,NEXT ;判断是否结束 MOV LEN,B ;存数据结果 SJMP DONE NEXT: INC B ;修改计数器 INC R2 ;修改地址指针,准备下一次循环 SJMP LOOP DONE: END,116,解法II程序如下: ORG 1000H MOV R2,#STA-1 ;设地址指针 MOV B,#0FFH ;设计数器 LOOP: INC R2 ;修改地址指针,准备下一次循环 INC B ;修改计数器 MOV A,R2 ;取数 CJNE A,“$”,LOOP ;判断循环是否结束 MOV LEN,B ;存数据 END,117,例4-6、设用户用键盘输入长度不超过100字节的字符串放在8031单片机外部RAM以20H为首地址的连续单元,该字符串用回车符CR(CR= 0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中。解:从首单元开始取数,每取一数判断其是否为CR,是则结束。 ORG 1000H STADA DATA 20H SLANG DATA 1FH CMCR2:MOV R0,#STADA-1 MOV B,#0FFH CRLOP:INC R0 INC B MOVX A,R0 CJNE A,#0DH,CRLOP MOV SLANG,B SJMP END,118,例4-7、单片机片内RAM中,DATA1位置起的20H个RAM单元,试统计每个单元1的位数,并存入以DATA2起的20H个单元内。解:分析:这是一个两重循环,循环次数都是已知,内循环为求8位数1的位数,循环次数为8,外循环的次数为20H。程序如下: ORG 2000H MOV R0,DATA1 ;置地址指针 MOV R1,DADA2 MOV R7,20H ;外循环计数器 CON: MOV R6,#08H ;内循环计数器 MOV A, R0 ;取数 MOV R5,#0 :从第0位开始判断 CONBIT: RLC A ;内循环,统计每字节1的个数 JNC NEXTB INC R5 ;计数 NEXTB:DJNE R6,CONBIT MOV A,R5 MOV R1,A ;存数 INC R1 ;修改指针,指向下一单元 INC R0 DJNE R7,CON ;外循环判0 END,119,434 子程序,子程序设计是程序设计模块化的重要技术,它可以大大提高程序代码的可重用性。在使用子程序时,主程序调用子程序需要用到LCALL或ACALL指令,在子程序中末尾必须用返回指令RET返回到主程序中。注意:在单片机汇编语言程序中,一般允许进行子程序的嵌套调用,但嵌套调用时调用的层数最好不要太多,以提高程序的效率。,120,434 子程序,在子程序设计和调用时,要注意两个方面的主要问题:(1)在子程序中的现场保护;(2)主程序与子程序间参数的传递方式。,121,(1)现场保护,为了避免子程序调用时修改了一些寄存器的内容导致对主程序的影响,子程序执行时首先必须将两段程序都用到的寄存器或存贮单元保存起来,这种过程称为现场保护。在子程序返回时,再将保存起来的内容恢复到原来状态,使子程序返回后能继续正确执行程序,这个过程称恢复现场。一般来说,现场保护可以在主程序中进行,也可以在子程序中进行。要保护的现场可能是寄存器,也可以能是一段内存(对于PC值的现场保护和恢复是由计算机在执行LCALL,ACALL和RET时自动完成的),保护的方法通常采用堆栈的方法,即在保护现场时让被保存的内容入栈,恢复时让被保护的内容出栈。 通常,为了方便调用子程序,现场保护一般由程序员在子程序的开头和结尾编程实现,此时要注意用于传递参数的寄存器对主程序的影响。,122,(2)、主程序与子程序的参数传递,子程序在使用时,有时需要从主程序获得某些数据,也可能需要将处理结果返回给主程序。这些工作就是通过子程序的参数来实现。根据数据传送的方向可将参数分为人口参数和出口参数。如果主程序在调用子程序时需将具体的数据传递给子程序中相应的变量(寄存器等),这些数据称为入口参数。如果子程序执行结束后将运行结果传递给主程序供主程序使用,这些结果数据称为出口参数。单片机子程序传递参数的方法主要有以下三种: 1)累加器和通用寄存器传送 2)指针寄存器传送 3)堆栈传送,123,例4-8、编写一段子程序将片内RAM的一组单元清零。设被清零的地址单元的首地址在R0中,被清零的地址单元个数在R7中。解:子程序:(通过通用寄存器来传递参数) ORG 1000H SUB1: MOV A,#00H ;清除 A内容为零 LOOP:MOV R0, A ;R0中的内容清零 INC R0 ;修改地址 DJNZ R7,LOOP ;R7非零时循环 DONE:RET主程序: MAIN : MOV R0,#30H ;参数1(首地址) MOV R7,#0AH ;参数2(地址个数) ACALL SUB1 ;调用子程序 ,124,例4-9(1)编写子程序,实现以下功能:计算内部RAM中N个字节无符号数之和。(N小于1000H)。(2)编写一程序,调用(1)中子程序实现以下功能:求内部RAM30H5FH中存放的字节无符号数之和,并存入60H、61H单元中(高位在前),若和大于100H,62H单元0FFH,否则62H单元清零解:分析:该例中需要传递的参数有3类: 参与运算的字节无符号数个数N,用寄存器R2传递。 参与运算的数据,在RAM单元中,以R0为指针寄存器,通过间接寻址传送。 运算结果,共两个,用R1间接寻址传送,125,(1)子程序如下: ORG 2000H SUB2:PUSH PSW ;保护现场 MOV R1,#0 ;目的单元清零 INC R1 MOV R1,#0 LOOP:MOV A,R0 ;取数 ADD A,R1 ;求和 MOV R1,A ;存和的低字节数 DEC R1 ;修改指针,指向和的高位地址 CLR A ADDC A,R1 ;取进位位 MOV R1,A ;存和的高字节数 INC R1 ;修改指针,指向和的低位地址 INC R0 ;修改指针,指向下一个单元 DJNZ R2,LOOP POP PSW ;恢复现场 RET,126,(2)主程序如下: ORG 0100H MAIN:MOV R0,#30H ;设置R0为入口指针寄存器 MOV R1,#60H ;设置R1为出口指针寄存器 MOV R2,#2FH ;设置R2传递字节数 ACALL SUB2 MOV 62H,#0FFH ;预置62H单元为0FFH MOV A,61H ;判总和高位是否为0 JNE TOEND MOV 62H,#00H ;小于100H,62H改为00HTOEND:END,127,44汇编语言程序设计举例,441 算术运算类程序442 逻辑运算类程序443 代码转换类程序444查表程序445 数据排序程序446延时程序447 软件看门狗程序448 数字滤波程序,128,441 算术运算类程序,MCS-51单片机算术运算类指令有单字节的加(ADD)、带进位加(ADDC)、带进位减(SUBB)、乘(MUL)、除(DIV)等 。例4-10、两个4字节无符号数分别存放在以DATA1和DATA2为首址的连续单元中(低字节在前),设计程序求两数的和,结果放在被加数单元中。解 ORG 2000H START: MOV R0,#DATA1 MOV R1,#DATA2 MOV R2,#04H CLR C LOOP: MOV A,R0 ADDC A,R1 ;带进位加法 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP JC OTHER ;最高字节有进位,转它程序处理 RET,129,例4-11、 两个4字节无符号数分别存放在以DATA1和DATA2为首址的连续单元中(低字节在前),设计程序求两数的差,结果放在被减数单元中。解 ORG 2200H START: MOV R0,#DATA1 MOV R1,#DATA2 MOV R2,#04H CLR C LOOP: MOV A,R0 SUBB A,R1 ;带进位减法 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP JC OTHER ;最高字节有借位,转它程序处理 RET,130,442 逻辑运算类程序,MCS-51单片机逻辑运算指令有与ANL、或ORL、异或XRL、求反CPL、清零CLR等指令,可以字节操作,也可逐位进行。 例4-12、单片机片内RAM有两个数据段分别从地址DATA1和DATA2开始,每个数据段数