好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

单片微型计算机原理及应用课件.ppt

392页
  • 卖家[上传人]:博****1
  • 文档编号:569717677
  • 上传时间:2024-07-30
  • 文档格式:PPT
  • 文档大小:3.70MB
  • / 392 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 单片微型计算机原理及应用单片微型计算机原理及应用2024/7/301 第一章第一章第一章第一章……………………概述概述第二章第二章第二章第二章……………………mcs-51单片机结构及原理单片机结构及原理第三章第三章第三章第三章………… ………… MCS-51单片机指令系统及编程举例单片机指令系统及编程举例 第四章第四章第四章第四章……………………单片机定时功能及应用单片机定时功能及应用第五章第五章第五章第五章……………………单片机的中断系统单片机的中断系统第六章第六章第六章第六章……………………单片机串行口及应用单片机串行口及应用第七章第七章第七章第七章……………………单片机系统扩展单片机系统扩展第八章第八章第八章第八章………… ………… D/A、、A/D转换器接口及应用转换器接口及应用目目     录录2024/7/302 1..定义定义:单片机全称为单片微型机算计(:单片机全称为单片微型机算计(single-chip                              Microcomputer),),它在一块芯片上集成了它在一块芯片上集成了CPU、、                           RAM、、ROM((EPROM,,E2PROM))CTC和多个和多个                            I/O口,此外,有的单片机如口,此外,有的单片机如8096单片机上还集成单片机上还集成第一章第一章           概述概述一.单片机的定义及特点一.单片机的定义及特点①① 测量与显示:测量与显示:如各种智能仪表,用于提高测试与显示的如各种智能仪表,用于提高测试与显示的                             自动化程度和准确度。

      自动化程度和准确度3. 应用领域应用领域:主要应用于以下几方面:主要应用于以下几方面  2..特点特点:单片机的体积小,可靠性高,价格便宜,功耗低,:单片机的体积小,可靠性高,价格便宜,功耗低,                  它是目前应用最广泛的工业控制微机它是目前应用最广泛的工业控制微机了了ADC 和和DAC转换芯片转换芯片2024/7/303 ②②机电一体化工业机电一体化工业:如加工中心,用于提高加工的自动化程度:如加工中心,用于提高加工的自动化程度                                    和精度第一代第一代::1976-1978年,典型产品为年,典型产品为MCS-48,,8位位CPU ,,并行并行                I/O口,口,8位定时计数器,无串行位定时计数器,无串行I/O口口,RAM、、ROM容容                量较小,寻址范围小于量较小,寻址范围小于4KB二、二、 单片机的发展概况单片机的发展概况④④日常生活日常生活:如各种家电中,用于提高家电的自动化程度,增强:如各种家电中,用于提高家电的自动化程度,增强                        其功能。

      其功能③③ 实时控制系统实时控制系统:对一些实时过程的控制与监测,实现过程中数:对一些实时过程的控制与监测,实现过程中数                                 据的实时处理与控制,从而保证系统的最佳工据的实时处理与控制,从而保证系统的最佳工                                  作状态,提高系统的工作效率和产品质量作状态,提高系统的工作效率和产品质量4 l   第二代第二代::1980年年-至今,典型产品为至今,典型产品为MCS-51,,8位位CPU,,并行并行                      I/O口,增有串行口,增有串行I/O口,口,16位定时位定时/计数器,可进行计数器,可进行                      中断处理,具有并行三总线结构,中断处理,具有并行三总线结构,RAM,ROM容量容量                      较大,最大寻址范围为较大,最大寻址范围为64KB       典型产品有典型产品有8051,,8751和和8031其三种芯片的主要区别在于:其三种芯片的主要区别在于:ROM,EPROM和外接和外接EPEOM。

      8051内部程序要有生产芯片的厂内部程序要有生产芯片的厂家写入,适用于低成本大批量生产;家写入,适用于低成本大批量生产;8751片内程序可由用户固化片内程序可由用户固化1. MCS-51系列简介:系列简介:三、三、 常用单片机系列介绍常用单片机系列介绍l第三代第三代::1982-至今,典型产品为至今,典型产品为MCS-96,,是是8位机的进一步完位机的进一步完                   善,善,16位位CPU,,具有串、并行的通信功能,定时、计具有串、并行的通信功能,定时、计                   数、中断处理的功能更强,数、中断处理的功能更强, RAM、、ROM容量更大,容量更大,                  并增加了多通道并增加了多通道A/D及及 D/A转换器,寻址范围为转换器,寻址范围为64KB5                   RAM:                  ROM:                                                           EPROM:或清除,价格相对较贵,适用于开发样机;或清除,价格相对较贵,适用于开发样机;8031芯片必须外接芯片必须外接ROM,,适用于较方便进行修改和更新程序记忆的场合。

      适用于较方便进行修改和更新程序记忆的场合2. 存储器简介存储器简介::memory是单片机的主要组成部分之一,主要用于是单片机的主要组成部分之一,主要用于                            存储信息,它的分类如下:存储信息,它的分类如下:可擦除可编程的只读可擦除可编程的只读ROM,,用紫外线可擦用紫外线可擦除其内容,用专用设备用户可固化信息除其内容,用专用设备用户可固化信息 ①内存内存:随机存储器,其中信息可读可写,断电丢失全随机存储器,其中信息可读可写,断电丢失全部内容只读存储器,用户不可更改其内容,与只读存储器,用户不可更改其内容,与EPROM同样,断电仍可保存信息同样,断电仍可保存信息②外存外存:可随时读写并永久保存信息可随时读写并永久保存信息 但硬盘存储容量但硬盘存储容量硬盘:硬盘:6                                          软盘:软盘:                     优盘:优盘:                     光盘:光盘:可随时读取信息,容量大,随身携带方便,可随时读取信息,容量大,随身携带方便,也可对其进行写操作并永久保存信息,但必也可对其进行写操作并永久保存信息,但必须配备专门的刻盘机。

      须配备专门的刻盘机有限,随身携带不方便有限,随身携带不方便软盘可随时读写并永久保存信息,其容量小软盘可随时读写并永久保存信息,其容量小但可无限扩充,随身携带方便但可无限扩充,随身携带方便四、数制及其间的转换四、数制及其间的转换1.数制:.数制:常用的计数方法,有二(常用的计数方法,有二(B)、)、八八(Q)、、十(十(D)、)、十十                  六(六(H)、)、十二及六十进制等十二及六十进制等基:指数制所使用数码的个数基:指数制所使用数码的个数        如:如:B((2),),Q((8),),D((10)、)、H((16)特点同软盘,但容量较软盘大很多,比硬盘小特点同软盘,但容量较软盘大很多,比硬盘小7 权:指数制的每一位数码所对应的值,几进制数的权就是以几权:指数制的每一位数码所对应的值,几进制数的权就是以几        为底的幂,即权为基的幂为底的幂,即权为基的幂  ②十进制转换为二,八,十六进制时,原则为十进制转换为二,八,十六进制时,原则为整数部分除整数部分除 基取基取      余余,先出低位,,先出低位,小数部分乘基取整小数部分乘基取整,先出高位,先出高位。

      例例1..   4..32D=100..0101B    ((取四位小数,并非精确)取四位小数,并非精确)例例2..   254..73D=376..56Q=FE..BA①①二,八,十六进制转换为十进制时,原则为二,八,十六进制转换为十进制时,原则为按权展开相加按权展开相加例例1..FFFFH=15×163+15×162+15×161+15×160=65535例例2..10111100..101B=27+25+24+23+22+2-1+2-3=188..625D2.数制之间相互转换的原则数制之间相互转换的原则:例:例:1010B的基为的基为2,各位的权分别为:,各位的权分别为:23、、22、、21和和208 ①① 机器数机器数:数字在机器中的表示方式称为机器数,即将符号:数字在机器中的表示方式称为机器数,即将符号                   ((+,-)也作为数字的一部分具体地说,在存储,-)也作为数字的一部分具体地说,在存储                     数据时,最高一位用来表示数字的符号,当数字为数据时,最高一位用来表示数字的符号,当数字为                     正时,最高一位的值为正时,最高一位的值为0,当数字为负时,最高一,当数字为负时,最高一                     位的为值位的为值1。

      机器数有原码、反码和补码三种形式机器数有原码、反码和补码三种形式    3..数在计算机中的表示方法数在计算机中的表示方法②②    真值真值:一个数的实际大小称为这个数的真值一个数的实际大小称为这个数的真值③③ 原码原码:正数的符号位用:正数的符号位用0表示,负数的符号位用表示,负数的符号位用1表示,符号表示,符号                 位之后是数字的真值,此法表示的数字称为数的原码位之后是数字的真值,此法表示的数字称为数的原码                 正数的原码与其真值相同正数的原码与其真值相同9 例:例: 对于对于8位数据,位数据,+35H表示为表示为    [+35H]原码原码=00110101  ,,                                   --35H表示为表示为  [-35H]原码原码 =10110101  ,,                                   [+0]原码原码=00000000 ,,[-0]原码原码=10000000    例:例: 对于对于8位数据,位数据,+35H表示为表示为  [+35H]反码反码=00110101  ,,                                   --35H表示为表示为  [-35H]反码反码=11001010  ,,                                   [+0]反码反码=00000000   [-0]反码反码=11111111④④ 反码反码:正数的反码与其原码相同,负数的反码则为其对应的:正数的反码与其原码相同,负数的反码则为其对应的                 原码按位取反(符号位除外)。

      原码按位取反(符号位除外)10 ⑤⑤ 补码补码:正数的补码与其原码相同,负数的补码则为其对应的原:正数的补码与其原码相同,负数的补码则为其对应的原                  码按位取反(符号位除外)加码按位取反(符号位除外)加1⑵⑵ 计算机中所能表示的计算机中所能表示的符号数符号数的范围为:的范围为:-2n-1~+~+2n-1--1,,     n为数据的位数为数据的位数    ⑥⑥ 注注注注     ⑴⑴ 计算机中所有的符号数都是用计算机中所有的符号数都是用补码补码表示的例:对于例:对于8位数据,位数据,+35H表示为:表示为:  [+35]补码补码=00110101  ,,                                 --35H表示为:表示为: [-35]补码补码=11001011,,                                 [+0]补码补码=[-0]补码补码=00000000当当n=8时,所能表示的符号数的范围为:时,所能表示的符号数的范围为: -128~~127,,当当n=16时,所能表示的符号数的范围为:时,所能表示的符号数的范围为:-32768~~32767。

      11 ⑶⑶ 已知一个数的补码时,其真值为:已知一个数的补码时,其真值为:     [正数正数]真值真值=[正数正数]补码补码     [负数负数]真值真值=[负数负数]补码补码取反取反(符号位除外)(符号位除外)++1例:例:Y=--117--10=[--117]补补+[--10]补补                =10001011+1110110=110000001=-127        将减数与减号一起变为补码后再与被减数的补码相加,将减数与减号一起变为补码后再与被减数的补码相加,其和(如有进位则舍弃进位)就是两数之差其和(如有进位则舍弃进位)就是两数之差⑷⑷ 利用补码可将减法转换为加法以简化硬件电路,具体原理为:利用补码可将减法转换为加法以简化硬件电路,具体原理为:例:例:x=01001101,    则则[x]真值真值=01001101=77D        x=10110101,        则则[x]真真 值值=11001010+1=11001011=--75D12 4..ASCII码:码:(又称字符编码)(又称字符编码)         5.. BCD码码    用四位二进制数表示一位十进制数的编码称为用四位二进制数表示一位十进制数的编码称为BCD码。

      码        以上这些字符在计算机中都用固定的二进制数表示,国际上以上这些字符在计算机中都用固定的二进制数表示,国际上目前采用最常用的美国信息标准代码也称目前采用最常用的美国信息标准代码也称ASCII码码来表示要求来表示要求大家记住前两类字符的大家记住前两类字符的ASCII码值      ①①   英文字母英文字母A~~Z及及a~~z;;       ②②数字字符数字字符0~~9::       ③③ 专用字符:专用字符:+,-,,-,×,,/,空格和各种标点符号;,空格和各种标点符号;      ④④  各种非打印字符如:各种非打印字符如:CR((回车),回车),LF((换行),换行),            BELL((响铃)等响铃)等             计算机处理的信息并不全是数字,有时还要处理字符和字计算机处理的信息并不全是数字,有时还要处理字符和字符串,常见的字符有:符串,常见的字符有:13 第二章第二章   mcs-51单片机结构及原理单片机结构及原理§2.1   mcs-51单片机结构单片机结构 §2.2  mcs-51的存储器结构的存储器结构§2.3  单片机的时序单片机的时序14 第一节第一节       mcs-51单片机结构单片机结构 一、一、mcs-51单片机内部结构简介单片机内部结构简介          二.二.8051 CPU的组成及其功能的组成及其功能三.三. MCS-51引脚及功能引脚及功能           单片机内部最核心的部分是单片机内部最核心的部分是CPU,,CPU的主要功能是产的主要功能是产生各种控制信号,控制存储器及输入生各种控制信号,控制存储器及输入/输出端口的数据传送,实输出端口的数据传送,实现数据的算术运算、逻辑运算以及位操作处理等功能。

      现数据的算术运算、逻辑运算以及位操作处理等功能15 外时钟源外时钟源振荡器和时序振荡器和时序        OSC程序存储器程序存储器 4KB ROM   数据存储器数据存储器256BRAM/SFR外部事件计数器外部事件计数器    2×16位位定时器定时器/计数器计数器8051CPU内中断内中断外中断外中断 64KB总线总线扩展控制器扩展控制器可编程可编程I/O   P0~~P3 可编程全可编程全双工串行口双工串行口控制控制并行口并行口串行通信串行通信16 8051 CPU的组成及其功能的组成及其功能   ⑶⑶指令译码器:指令译码器:将指令将指令RS的指令转换成电信号,再经逻辑控制的指令转换成电信号,再经逻辑控制                            电路产生各种控制信号电路产生各种控制信号⑵⑵指令指令Register(RS)::8位,用于暂存待执行的指令,等待译码位,用于暂存待执行的指令,等待译码                            (译码前指令为(译码前指令为0、、1代码,译码后指令为电信号)代码,译码后指令为电信号)⑴⑴PC程序计数器程序计数器::16位专用位专用RS,,用于存放下一条将要执行的指用于存放下一条将要执行的指                                 令地址,有自动加令地址,有自动加1的功能,它可保证程序按的功能,它可保证程序按                                 一定顺序执行。

      一定顺序执行8051 CPU由控制器与运算器两部分组成由控制器与运算器两部分组成 1..控制器控制器::17 ⑷⑷数据指针数据指针DPTR::16位专用地址指针位专用地址指针RS,,主要用于存放主要用于存放16位位                                   地址,作间址地址,作间址RS使用,也可拆成两个使用,也可拆成两个8位位                                   RS,,DPH和和DPL,,它们片内它们片内RAM中占据中占据                                          的地址分为的地址分为83H和和82H 8051 CPU的组成及其功能的组成及其功能⑸⑸定时控制与条件转移逻辑电路:定时控制与条件转移逻辑电路:不介绍2..运算器运算器⑴⑴累加器累加器ACC::8位专用位专用RS,,用于存放操作数或中间结果,是用于存放操作数或中间结果,是18 8051 CPU的组成及其功能的组成及其功能⑶⑶程序状态字程序状态字RS((PSW))::8位专用位专用RS,,用于存放程序运行中用于存放程序运行中                                                  的各种状态信息,它可以进行位操的各种状态信息,它可以进行位操                                                  作,作,PSW的字节地址为的字节地址为D0H,,位地位地                                                  址为址为D0~D7H。

      各位的含义如下各位的含义如下::⑵⑵ 算逻运算部件:算逻运算部件:此部件实现算数运算与逻辑运算的功能,其此部件实现算数运算与逻辑运算的功能,其                                 运算结果的状态送运算结果的状态送PSW中                           CPU中使用最频繁的一个中使用最频繁的一个RS,,也是也是21个个SFR                           中的一个中的一个 ①① CY((PSW.7):):进位标志,表示在进行进位标志,表示在进行无符号无符号加减时,最加减时,最19                                   高位有无向更高位进(借)位,当有进位高位有无向更高位进(借)位,当有进位                                   CY=1,,无则无则CY=0程序状态字程序状态字RS((PSW))各位的含义各位的含义④④ RS1,,RS0((PSW.4,,PSW.3):):RS组选择标志,用于选择内组选择标志,用于选择内                                                              部部RAM中中4 个个RS中的一组它中的一组它                                                              们的关系如下:们的关系如下:③③ F0((PSW.5):):用户标志位,由用户通过程序设置用户标志位,由用户通过程序设置1或或0,表示,表示                                 程序处于某种状态,为后续程序执行提供条件。

      程序处于某种状态,为后续程序执行提供条件②② AC((PSW.6):):半进位标志,表示在进行无符号加减时,半进位标志,表示在进行无符号加减时,D3                                   位有无向位有无向D4位进(借)位,当有位进(借)位,当有AC=1,,无无                                   则则AC=0,,主要用于主要用于BCD 码的判断位码的判断位20           RS1   RS0   寄存器组寄存器组   片内片内RAM地址地址           0       0         第第0组组           00H~07H           0       1         第第1组组           08H~0FH           1       0         第第2组组           10H~17H           1       1         第第3组组           18H~1FH 程序状态字程序状态字RS((PSW))21 ⑷⑷ B寄存器寄存器:用于乘除法操作,:用于乘除法操作,8位位RS,,是是21个个SFR中之一,中之一,B                       用来存放第二操作数,即用于存放乘法的高位字节用来存放第二操作数,即用于存放乘法的高位字节                       或除法的余数部分。

      或除法的余数部分⑤⑤ OV((PSW.2):):溢出标志,当进行符号数运算时可表示是否溢出标志,当进行符号数运算时可表示是否                                   有溢出,则有溢出,则OV=1,,无则无则OV=0,,溢出的逻辑溢出的逻辑                                   表达式为表达式为OV=C6Y⊕ ⊕C7Y⑥⑥  F1(PSW.1)::保留位,无定义保留位,无定义⑦⑦ P((PSW.0):):奇偶标志位,表示累加器奇偶标志位,表示累加器A中含中含“1”个数个数的的奇奇                               偶性,当偶性,当A中有奇数个中有奇数个1,则,则P=1,,否则否则P=0                             ((与与A内容的奇偶无关)内容的奇偶无关)⑸⑸ 暂存器暂存器:暂存数据信息暂存数据信息22 MCS-51采用采用40引脚双列直插式封装引脚双列直插式封装(DIP)形式形式,((看看P28图图2-6)1.主电源引脚:主电源引脚:Vss(地地)和和Vcc(+5v)2.外接晶振引脚:有两个外接晶振引脚:有两个三.三. MCS-51引脚及功能引脚及功能3.控制信号引脚:.控制信号引脚: ⑵⑵ XTAL2::片内晶振器输出端,当使用外部晶振器,作为晶振片内晶振器输出端,当使用外部晶振器,作为晶振                      信号的输入端。

      信号的输入端⑴⑴ XTAL1::片内晶振器输入端,当使用外部晶振器,此端接地片内晶振器输入端,当使用外部晶振器,此端接地⑴⑴ RST/VPD::系统复位系统复位/备用电源输入引脚,输入信号,有两个备用电源输入引脚,输入信号,有两个                         作用:作用:23 24         四个四个I/O口口P1~~P3锁存器均被初始化为锁存器均被初始化为0FFH;;        堆栈指针寄存器堆栈指针寄存器SP=07H;;        而而SUBF寄存器的内容寄存器的内容不确定不确定;;        其它其它各专用各专用RS 均被写成均被写成00H;;        内部内部RAM不受复位影响,上电后不受复位影响,上电后RAM内容为随机内容为随机    MCS-51引脚及功能引脚及功能②② 当电源电压下降时,此引脚可为备用电源输入线,为片内当电源电压下降时,此引脚可为备用电源输入线,为片内     RAM 提供备用电源提供备用电源①① RST端维持两个机器周期以上的高电平时将使单片机复位端维持两个机器周期以上的高电平时将使单片机复位     复位后复位后CPU各寄存器的特点为:各寄存器的特点为:25 MCS-51引脚及功能引脚及功能③③当片内有当片内有EPROM时,可作为编程脉冲输入端使用。

      时,可作为编程脉冲输入端使用②② 访问外部访问外部memory时,时,ALE端仍以不变的频率周期性的输出正端仍以不变的频率周期性的输出正      脉冲信号,且脉冲信号,且fALE=1/6fosc  ,,所以可用作对外输出的时钟信号所以可用作对外输出的时钟信号      和定时作用;和定时作用;  ①① 当当CPU访问外部访问外部memory初时,产生正脉冲初时,产生正脉冲ALE信号输出,在信号输出,在     其后沿将其后沿将P0口输出的低口输出的低8位地址锁存于外部地址锁存器中;位地址锁存于外部地址锁存器中;  ⑶⑶ PSEN::外部程序外部程序memory((EPROM))选通信号线,当选通信号线,当CPU读读                   取外部程序时,取外部程序时,PSEN每个机器周期两次有效每个机器周期两次有效 ⑵⑵ ALE/PROG::外部扩展电路的地址锁存信号外部扩展电路的地址锁存信号/编程脉冲编程脉冲                                输入端,有三个作用输入端,有三个作用  26 ⑷⑷ EA/VPP::程序程序memory选择线选择线/编程时电源输入线,作用如下:编程时电源输入线,作用如下:MCS-51引脚及功能引脚及功能         准准双双向向端端口口工工作作特特点点::只只有有使使端端口口锁锁存存器器事事先先置置“1”,,才才能能使使对对应应口口的的I/O引引脚脚作作为为输输入入线线使使用用,,而而CPU执执行行输输出出操操作作时时,,不管端口的状态如何都能直接输出信号。

      不管端口的状态如何都能直接输出信号4..输入输出引脚:输入输出引脚:P0、、P1、、P2、、P3均为准双向端口均为准双向端口③③当当EA=1时,如果时,如果PC﹤﹦0FFFH时时,,则则CPU访问片内访问片内                          ROM ,,否则否则CPU自动转向外部自动转向外部EPROM ②②当当EA=0时时CPU只能访问只能访问片外片外memory;; ①① 对于片内有对于片内有EPROM,,编程时,此引脚接编程时,此引脚接21v编程编程VPP   ;;27  P0~~P3除作为一般的除作为一般的I/O线使线使 用外用外,,还有以下功能:还有以下功能:        MCS-51引脚及功能引脚及功能④④ P3口:第二功能见口:第二功能见P27表表2—7复位后P3口的第二功能口的第二功能                  可直接使用,但复位前必须先置口内锁存器可直接使用,但复位前必须先置口内锁存器FFH                  才能用③③ P2口;当口;当CPU访问外部访问外部memory时,时,P2口可作为外部高口可作为外部高                  8位地址的输出线。

      位地址的输出线②②  P1口:在口:在EPROM编程验证程序时输入低编程验证程序时输入低8位地址①①  P0口:当口:当CPU访问外部访问外部memory时,时,P0口可分时作为低口可分时作为低                   8位地址线和位地址线和8位双向数据线用位双向数据线用28          P3口线口线        第二功能第二功能          P3.0         RXD(串行口输入串行口输入)          P3.1              TXD (串行口输出串行口输出)          P3.2         INT0(外部中断外部中断0输入输入)          P3.3         INT1((外部中断外部中断1输入)输入)          P3.4         T0((定时器定时器0的外部输入)的外部输入)          P3.5         T1 ((定时器定时器1的外部输入)的外部输入)          P3.6        WR ((片外数据存储器写选通输出)片外数据存储器写选通输出)          P3.7        RD ((片外数据存储器读选通输出)片外数据存储器读选通输出) 29 第二节第二节 MCS-51的存储器结构的存储器结构          MCS-51单片机单片机物理物理上有上有4个存储空间:片内程序存储器,个存储空间:片内程序存储器,片外程序存储器,片内数据存储器,片外数据存储器。

      这些存片外程序存储器,片内数据存储器,片外数据存储器这些存储器结构的物理特点是:程序存储器和数据存储器空间是相互储器结构的物理特点是:程序存储器和数据存储器空间是相互独立的,片内数据存储器和片外数据存储器空间也是相互独立独立的,片内数据存储器和片外数据存储器空间也是相互独立的,所以从的,所以从逻辑逻辑上又可分为上又可分为3个存储空间个存储空间::片、外统一编址的片、外统一编址的程序存储器,片内数据存储器和片外数据存储器程序存储器,片内数据存储器和片外数据存储器 30 ①① CPU通过通过P0,,P2口送出要访问存储单元的地址口送出要访问存储单元的地址A0~A15  ②② CPU发出发出ALE信号把信号把P0口地址信号口地址信号A0~A7锁入锁存器锁入锁存器③③ 存储器按存储器按A0~A15地址进行译码,找到要访问的单元地址进行译码,找到要访问的单元        如下页图如下页图,,MCS-51访问外部存储器,粗略的讲可分为以访问外部存储器,粗略的讲可分为以下四步:下四步:④④ CPU发出发出PSEN信号,把外部信号,把外部EPROM中中A0~A15指向单指向单       元中的数据信息经元中的数据信息经P0口送入口送入CPU;;或或CPU发出发出RD信号信号       将外部将外部RAM中中 A0~A15所指向单元的所指向单元的data经经P0口读入;口读入;       或或CPU发出发出WR信号将信号将data经经P0口写入外部口写入外部RAM        A0~A15   所指向单元。

      所指向单元一、一、 MCS-51单片机内、外存储器系统简介单片机内、外存储器系统简介31 ROM4KBRAM(21个个)SFRRDWRPSENRDWRDE  地址地址锁存器锁存器  EPROM  64KB  RAM  64KBALEP0口口P2口口MCS—51+5VREAS32 二、二、MCS-51各存储器具体说明:各存储器具体说明: ⑴⑴ 外部程序存储器用于存放程序、程序执行时必要常数和表格外部程序存储器用于存放程序、程序执行时必要常数和表格⒈⒈ 外部程序存储器外部程序存储器EPROM::       MCS-51可以扩展可以扩展64K字节的字节的EPROM,,其中:其中:⑶⑶ 外部程序存储器的容量为外部程序存储器的容量为64K字节,地址为字节,地址为0000H~FFFFH,,当当EA=1时:时:CPU可以访问内部程序存储器可以访问内部程序存储器0000H~0FFFH单单元和外部程序存储器元和外部程序存储器1000H~FFFFH之间的各存储器单元;之间的各存储器单元;当当EA=0时时CPU可访问可访问0000H~FFFFH全部全部64K的片外程序存的片外程序存储器⑵⑵ 外部程序存储器受外部程序存储器受PC管理,管理,PC的内容始终指向下一条将的内容始终指向下一条将     要执行的指令所在的地址,要执行的指令所在的地址,PC具有自动加具有自动加1的功能,保证的功能,保证     程序按顺序执行。

      程序按顺序执行 33         MCS-51单片机内部单片机内部EPROM容量为容量为4K字节,地址范围为字节,地址范围为0000H~0FFFH,,在在EA=1时,且时,且PC的值小于等于的值小于等于0FFFH时,时,CPU才可访问片内才可访问片内EPROM,,而片内而片内EPROM与片外与片外EPROM同同样受样受PC管理,软件上也用管理,软件上也用movc类指令访问类指令访问⑷⑷ 外部程序存储器由外部程序存储器由PSEN信号选通,正常运行时其内信号选通,正常运行时其内     容只能读出,不能写入,掉电时其内容不消失容只能读出,不能写入,掉电时其内容不消失⑸⑸ 程序存储器由程序存储器由movc类指令访问,类指令访问,CPU在执行这类指令在执行这类指令     时,可以使时,可以使PSEN信号有效,从而选中信号有效,从而选中EPROM.⒉⒉ 内部程序存储器内部程序存储器EPROM::34 ⑴⑴ 外部数据存储器主要存放运行程序的过程中所需的外部数据存储器主要存放运行程序的过程中所需的      数据,中间结果和最终结果数据,中间结果和最终结果⑸⑸ 外部数据存储器由外部数据存储器由movx类指令访问。

      类指令访问⑷⑷ 外部数据存储器由外部数据存储器由WR或或RD信号选通,可以写入,信号选通,可以写入,     也可以读出,掉电时内容消失也可以读出,掉电时内容消失 ⑶⑶ 外部数据存储器的容量为外部数据存储器的容量为64K字节,地址为字节,地址为      0000H~FFFFH⑵⑵ 外部数据存储器受外部数据存储器受data point((数据指针)数据指针)DPTR和和     工作寄存器管理工作寄存器管理⒊⒊ 外部数据存储器外部数据存储器RAM::35 注:注:EPROM与与RAM的地址都是的地址都是0000H~FFFFH,,        但但CPU对它们的访问是相互独立的,不会产对它们的访问是相互独立的,不会产        生二意性,即生二意性,即CPU给出一个地址,不会同时给出一个地址,不会同时        选中选中2个地址,因为个地址,因为RAM在硬件上由在硬件上由RD或或WR        信号选通,软件上由信号选通,软件上由movx类指令访问,而类指令访问,而        EPROM在硬件上由在硬件上由PESN信号选通,软件上信号选通,软件上        由由movc类指令访问。

      类指令访问36 ⑵⑵ 位寻址空间位寻址空间:内部:内部RAM中,地址中,地址20H~2FH共共16个字节单元个字节单元     共共128个位)具有位寻址的功能,即个位)具有位寻址的功能,即CPU可对这可对这16个字节中的个字节中的     每一位单独进行操作,所以每一位单独进行操作,所以 20H~2FH区域是区域是MCS-51单片机单片机         MCS-51芯片内部有芯片内部有128个字节(个字节(BYTE))的内部数据存储器的内部数据存储器RAM(称片内(称片内RAM),),地址为地址为00H~7FH,,有有128B的特殊功能的特殊功能Register((SFR),),地址为地址为80H~FFH,,也称高地址区,共也称高地址区,共256个字个字节的存储空间节的存储空间⑴⑴ 工作寄存器工作寄存器R::内部内部RAM中中00H~1FH单元(共单元(共32B))为通为通     用工作用工作Register区,分为区,分为4组,每组组,每组8个字节,均可用作个字节,均可用作R0~R7,,     用户可根据用户可根据PSW中的中的RS1和和RS0的值选择相应的工作的值选择相应的工作R组。

      组4. MCS-51内部内部RAM37 布尔处理机的一个存储空间,其中:布尔处理机的一个存储空间,其中:20H~2FH对应此存储区对应此存储区中中16个字节每一个字节的地址,因为每个字节有个字节每一个字节的地址,因为每个字节有8位,所以此位,所以此存储区共有存储区共有16×8=128位供单独操作,这位供单独操作,这128个位的地址规定个位的地址规定为为00H~7FH((RAM的低区地址也是的低区地址也是00H~7FH),),在使用中由在使用中由软件加以区分如:软件加以区分如:      MCS-51内部内部RAM且有:且有:①① 对应的字节地址对应的字节地址=20H+位地址位地址/8,,         (位地址(位地址/8的的余数余数为该位在该字节中所处的具体位置)为该位在该字节中所处的具体位置)      mov  20H, A   (字节操作字节操作)   ;;   20H单元单元  ←  A的内容的内容      mov  20H, C  ((位操作)位操作)   ;;   布尔处理机存储空间第布尔处理机存储空间第20位位           (即(即24H单元中的第单元中的第0位)中位)中  ←  PSW中进位位中进位位CY内容内容 。

      38 ⑶⑶ 30H~7FH空间空间:用户:用户RAM区,共区,共80个字节,此部分空间可个字节,此部分空间可     以作为以作为buffer、、堆栈区等存储单元用,但不能作为工作寄存堆栈区等存储单元用,但不能作为工作寄存     器用,不能进行位寻址器用,不能进行位寻址例:位地址例:位地址7AH对应的字节地址的计算方法是:对应的字节地址的计算方法是:        7AH/8,,商为商为F,,余数为余数为2,,       表示该位处于片内表示该位处于片内RAM2FH((20H+F))字节的第二位字节的第二位 ②② 位地址位地址=(字节地址(字节地址-20H))×8+N;;     其中:其中:N=0~~7,,为该位在此字节中的位置,为该位在此字节中的位置,     例:例:2EH中的第中的第6位对应的位地址位对应的位地址=((2EH-20H))×8+6=76H⑷⑷ 对于工作对于工作Regester区(区(00H~1FH))单元,没有被选中的工作单元,没有被选中的工作     Regester单元与单元与30H~7FH单元具有同样功能单元具有同样功能39 ⒌⒌ MCS-51特殊功能特殊功能Register((SFR)):: 80H~0FFH⑵⑵ 而在而在80H~FFH这这128个字节中除去个字节中除去SFR占用的占用的21个字节外其余个字节外其余     字节均无定义,所以访问无定义的单元得到的是一个随即数。

      字节均无定义,所以访问无定义的单元得到的是一个随即数⑶⑶ 位寻址空间:在位寻址空间:在SFR中凡是字节地址能中凡是字节地址能被被8整除整除的的SFR均有位均有位                              寻址功能(即:寻址功能(即:末位地址为末位地址为8或或0的的SFR)⑷⑷ SFR与与RAM((00~~7FH))的区别:的区别:SFR作为源操作数时只能采作为源操作数时只能采               用用直接寻址直接寻址,寄存器间接寻址对其无效,但对,寄存器间接寻址对其无效,但对RAM有效⑴⑴ SFR的分布:的分布:MCS-51单片机共有单片机共有21个个SFR((除除PC外,外,DPTR                             算作两个算作两个register),),它们分布在内部它们分布在内部RAM的的                             80H~0FFH((占占21个字节)个字节)40 ①① SP::堆栈指针,堆栈指针, 是个是个8位位SFR,,在在RAM中的地址值为中的地址值为81H,其,其              内容用于指示堆栈栈顶(已存有数据的堆栈存储单元)内容用于指示堆栈栈顶(已存有数据的堆栈存储单元)              的地址值。

      每当有数据进栈时的地址值每当有数据进栈时SP值自动加值自动加1,出栈时自动,出栈时自动              减减1,当系统复位后,,当系统复位后,SP=07H,,即堆栈实际上是由即堆栈实际上是由08H单单              元开始②②串行数据缓冲器串行数据缓冲器SBUF::是个是个8位的位的SFR,,地址为地址为99H,,用于存用于存    放串行通讯时待发送或已接受到的数据,它由两个独立的寄存放串行通讯时待发送或已接受到的数据,它由两个独立的寄存    器(发送器(发送buf和接收和接收buf))组成,但它们共用一个地址组成,但它们共用一个地址堆栈堆栈:是个具有先入后出特点的一片存储区,堆栈的真正工作区:是个具有先入后出特点的一片存储区,堆栈的真正工作区             一般选在片内一般选在片内RAM的的30H~7FH内⑸⑸ 几个常用几个常用SFR的基本功能的基本功能41   ③③定时器定时器/计数器计数器T0/T1::8051系列单片机有两个系列单片机有两个16位的定时器位的定时器      /计数器计数器 T0和和T1,,它们分别为它们分别为TL0,,TL1和和TH0,,TH1四个四个      8位的独立位的独立SRF,,在片内在片内RAM地址为地址为8AH~8DH。

      注意:注意:T0与与T1不能作为不能作为2个个16位的位的RS来对待42           第三节单片机的时序第三节单片机的时序         一条指令可分解为若干个基本的微操作,而这些操作所对应一条指令可分解为若干个基本的微操作,而这些操作所对应的脉冲信号在时间上有严格的先后次序,这就称为计算机的的脉冲信号在时间上有严格的先后次序,这就称为计算机的时序时序要求掌握以下几个概念:要求掌握以下几个概念:二、二、 CPU的时序的时序一、一、MCS-51单片机的复位方法及复位后内部单片机的复位方法及复位后内部        各各SFR状态状态⒉⒉复位后内部各复位后内部各SFR的状态:看的状态:看P21表表2.3 ⒈⒈MCS-51单片机的复位方法:上电自动复位单片机的复位方法:上电自动复位                                                       按钮手动复位按钮手动复位43 1.振荡周期振荡周期T振振:也称时钟周期,指为单片机提供时钟信号的振荡:也称时钟周期,指为单片机提供时钟信号的振荡2.                               源源的的周周期期,,当当晶晶振振频频率率为为12MHz 时时T振振=1/12us 。

       CPU的时序的时序⒋⒋ 指令周期指令周期T指指:指令周期是指执行一条指令所需要的时间,一:指令周期是指执行一条指令所需要的时间,一     般情况下,般情况下,T指指=((1~4))T机机 ,,MCS--51系列单片机执行一条系列单片机执行一条    最长的指令(如乘、除法指令)需要最长的指令(如乘、除法指令)需要4个机器周期,即个机器周期,即4 us时间⒊⒊机器周期机器周期T机机:指:指CPU完成某些基本操作的所需要的时间,完成某些基本操作的所需要的时间,1个个                            机器周期包含机器周期包含6个状态周期个状态周期T机机=6T状状=12T振振=1us 2.状态周期状态周期T状状:也称:也称S周期,由两个振荡周期组成一个时钟周期周期,由两个振荡周期组成一个时钟周期                             如上例中:如上例中:T状状=Ts=2×1/12=1/6us44 第三章第三章  MCS-51单片机单片机  指令系统及编程举例指令系统及编程举例 指令指令:是控制计算机进行各种操作的运算代码形式的命令:是控制计算机进行各种操作的运算代码形式的命令          ((MCS-51有有42种助记符种助记符33个指令功能共个指令功能共111条指令)。

      条指令)       机器码机器码:计算机所能辨认的命令是二进制代码,又称机器码或指:计算机所能辨认的命令是二进制代码,又称机器码或指          令代码称一种计算机有几十种甚至几百中指令,如果都用令代码称一种计算机有几十种甚至几百中指令,如果都用程序程序:是人们为了完成某中预定的任务,将一系列指令,数据,:是人们为了完成某中预定的任务,将一系列指令,数据,            地址按一定顺序排列而得到的一组指令地址按一定顺序排列而得到的一组指令指令系统指令系统:计算机所能识别执行的全部指令称作这种计算机的指:计算机所能识别执行的全部指令称作这种计算机的指                    令系统各种计算机的指令系统各不相同各种计算机的指令系统各不相同45 二进制代码,记忆、书写,编程都很不方便,且易出错二进制代码,记忆、书写,编程都很不方便,且易出错汇编语言源程序汇编语言源程序:用助记符(操作码)、符号地址和标识符等:用助记符(操作码)、符号地址和标识符等                                书写的程序称之为汇编语言源程序书写的程序称之为汇编语言源程序。

      汇编汇编:汇编语言源程序在机器执行前必须先转换为相应的机器码:汇编语言源程序在机器执行前必须先转换为相应的机器码            方可被机器识别执行,这个过程称为翻译(汇编)翻译方可被机器识别执行,这个过程称为翻译(汇编)翻译            程序的方法有两种:人工翻译,汇编软件自动翻译程序的方法有两种:人工翻译,汇编软件自动翻译助记符助记符:为解决上述问题,制造厂家对指令系统中的每一条指令:为解决上述问题,制造厂家对指令系统中的每一条指令                规定了特定的英文缩写符号称为助记符规定了特定的英文缩写符号称为助记符46 §3.1 指令格式简介指令格式简介§3.2 MCS-51的寻址方式的寻址方式§3.3 指令系统指令系统§3.4 伪指令伪指令§3.5汇编程序设计及应用举例汇编程序设计及应用举例47             第一节第一节  指令格式简介指令格式简介 汇编语言的标准格式为汇编语言的标准格式为:: [标号:标号:] 指令助记符指令助记符  [操作数操作数1,操作数,操作数2,操作数,操作数3]  [;注释;注释]     ⑵⑵ 操作码助记符操作码助记符:是汇编语言中每一行不可缺少的部分,它规定:是汇编语言中每一行不可缺少的部分,它规定                                 了指令的操作功能,操作码助记符是由了指令的操作功能,操作码助记符是由2~~5个个                                 字母组成的字符串,也是机器的保留字,操作字母组成的字符串,也是机器的保留字,操作                                 码与操作数之间要用若干空格分开。

      码与操作数之间要用若干空格分开⑴⑴ 标号标号:是用户定义的符号,它代表该条指令的符号地址,以英:是用户定义的符号,它代表该条指令的符号地址,以英                 文字母开始,由文字母开始,由1~~8个字符(字母、数字和下划线个字符(字母、数字和下划线“-”))                 组成,以组成,以“::”结尾标号不能使用机器的保留字,一结尾标号不能使用机器的保留字,一个个                 程序中不允许重复定义标号标号也称标识符程序中不允许重复定义标号标号也称标识符48     ⑶⑶ 操作数操作数:可以是具体的数字,也可以是符号或:可以是具体的数字,也可以是符号或RS名,操作名,操作                         数可分为源操作数数可分为源操作数SRC((source))和目的操作数和目的操作数                         DST((destination),),二者用逗号分开,有些指令二者用逗号分开,有些指令                        无操作数无操作数⑸⑸ 带带[ ]的内容可省的内容可省。

      ⑷⑷ 注释注释:注释必须以:注释必须以“;;”开头,可有可无,可由任何可打印开头,可有可无,可由任何可打印的的                 ASCII码字符组成,用于解释说明程序码字符组成,用于解释说明程序49 第二节第二节 MCS-51的寻址方式的寻址方式例:例:mov  A,  #data    ;将数字将数字data→A中中 特点:特点:  ③③ MCS-51系列只有一条指令,其立即数为系列只有一条指令,其立即数为16位,这就是:位,这就是:              mov   DPTR,,   # data16  ;; DPH ←data高高8位位                                                          DPL ←data低低8位位②② #为立即数的前缀符号,为立即数的前缀符号,data可为可为16位,也可为位,也可为8位①① 指令操作码后面的一个字节就是操作数本身,立即数是指令操作码后面的一个字节就是操作数本身,立即数是      放在程序存储器中的一个常数放在程序存储器中的一个常数  1. 立即寻址:立即寻址:50 ③③ 因为因为direct是是8位二进制数,所以直接寻址的范围主要有以下位二进制数,所以直接寻址的范围主要有以下     三个地址空间:三个地址空间:    2. 直接寻址:直接寻址:例:例:mov  A,   70H  ;;RAM区区70H单元的内容单元的内容→A中。

      特点为中特点为::①① 指令操作码后面的一个字节就是实际操作数的地址(指令操作码后面的一个字节就是实际操作数的地址(8位)②② 指令中的直接地址可用指令中的直接地址可用direct表示表示 ,例,例push  direct;;     功能为将功能为将direct所指示的片内所指示的片内RAM中单元的内容中单元的内容→堆栈中 ⑶⑶内部内部RAM及及SFR中,可进行位寻址的位地址空间共中,可进行位寻址的位地址空间共211位位      (内部(内部 RAM中有中有20H~2FH中有中有128个位,个位,SFR中有中有83位)位)    ⑴⑴ 内部内部RAM 00H~7FH地址空间(地址空间(128个字节);个字节);    ⑵⑵ 特殊功能特殊功能R,,即即SFR (直接寻址是访问直接寻址是访问SFR的唯一寻址方式的唯一寻址方式) ;;    51 3. 寄存器寻址:寄存器寻址:例:例:mov  A,  Rn  (n=0~7)   ;;将将Rn内容内容→A中中特点:特点:①① RS的内容就是操作数本身;的内容就是操作数本身;                          ⑵⑵ 可用作间址可用作间址RS的的register有有work RS((R0 ,, R1)、)、                   堆栈指针堆栈指针SP、、数据指针数据指针DPTR。

      ⑴⑴ R中的内容不是操作数本身而是其所在存储单元的地中的内容不是操作数本身而是其所在存储单元的地     址值,即址值,即R0指示了操作数所在存储单元的地址值指示了操作数所在存储单元的地址值4. 寄存器间接寻址:寄存器间接寻址:例:例:mov  A,  @ R0   ;;将将R0所指示存储单元内容所指示存储单元内容→A 中中特点:特点:             ②② 寻址范围是:被选中的工作寻址范围是:被选中的工作RS组中的组中的8个个work RS,,                  R0~R7及及A,,B,,DPTR,,AB和进位位和进位位CY52 ⑶⑶ 间址寻址的间址寻址的范围范围:  ①① R0、、R1、、SP作为间址作为间址RS可以访问内部可以访问内部RAM的的128个字节  ⑷⑷ 间址寻址间址寻址方式方式有:有:                       ①① ADD   A,,@Ri           ;;i=0或或1                     ②② MOV  @Ri ,direct    ;;i=0或或1                     ③③ MOVX   A ,, @DPTR③③ DPTR作为间址作为间址RS可访问外部可访问外部RAM全部的全部的64KB空间。

      空间②②R0、、R1作为间址作为间址RS可以访问外部数据存储器可以访问外部数据存储器RAM页内页内         256个字节(可用个字节(可用P2口选中页面,口选中页面,64KB的的RAM可分可分         为为256个页面)个页面)  53 有两种方式有两种方式      MOVC   A,, @ A+PC  ;;A←((((A))+PC))                          MOVC   A,, @ A+DPTR ;;A←((((A))+DPTR))特点:特点:两条指令的区别:前者查表的范围是相对两条指令的区别:前者查表的范围是相对PC当前值以后的当前值以后的255                               字节字节地址空间,而后者查表范围可达整个程地址空间,而后者查表范围可达整个程                               序存储器序存储器64K字节字节的地址空间的地址空间 ⑵⑵ A是是无符号无符号8位数(位数(00H~FFH)⑶⑶寻址的范围是寻址的范围是64K字节的程序存储器字节的程序存储器EPROM⑴⑴ 是是MCS-51单片机特有的一种寻址方式,它以地址指针单片机特有的一种寻址方式,它以地址指针     DPTR或程序计数器或程序计数器PC((当前值)为基地址当前值)为基地址R,,以累加器以累加器A     作为变址作为变址R,,这二者内容之和才是实际操作数地址。

      这二者内容之和才是实际操作数地址5.基址寄存器加变址基址寄存器加变址RS间接寻址(变址寻址):间接寻址(变址寻址):54 ⑵⑵位移量位移量rel为带符号的为带符号的8位二进制数,必须以补码形式出位二进制数,必须以补码形式出    现,所以现,所以rel的范围为的范围为+127~-128,即该种寻址方式的寻,即该种寻址方式的寻    址范围为:以当前址范围为:以当前PC内容为起点向前可偏移内容为起点向前可偏移128字节,字节,    向后可转移向后可转移127个字节7. 位寻址:位寻址:         专门用于位操作指令,可对专门用于位操作指令,可对MCS-51中中211个位进行运算和个位进行运算和传送的操作,传送的操作,使用专用累加器使用专用累加器C6 相对寻址:相对寻址: 例例      JC  rel;;    若若PSW中中CY=1,,则转移至则转移至PC=PC当前值当前值+rel特点:特点:⑴⑴ 以程序计数器以程序计数器PC当前值内容为基地址,加上指令中给当前值内容为基地址,加上指令中给     定的偏移量作为操作数的存储地址定的偏移量作为操作数的存储地址55 第三节第三节   指令系统及应用举例指令系统及应用举例③③凡是指令执行后,改变了内存中凡是指令执行后,改变了内存中direct字节或字节或direct中中    各位的内容的指令,均使得各位的内容的指令,均使得PSW中的各位值不确定。

      中的各位值不确定②② direct可表示片内可表示片内RAM 00H~7FH((128B))的内存空间的内存空间     和和SFR的地址①① 除以除以direct为为DST外,其它指令都外,其它指令都不不影响影响PSW中中除除P以外以外     的其它位,以的其它位,以A为为DST的指令会影响的指令会影响PSW中的中的P位一、一、 数据传送类指令数据传送类指令::分为分为5部分,部分,看看P37表表3.1 特点:特点:       MCS-51单片机共有单片机共有111条指令,用条指令,用42个助记符表示了个助记符表示了33种指种指令功能,同一种指令所对应的操作码可多达令功能,同一种指令所对应的操作码可多达8种,指令按其功能种,指令按其功能可分为可分为4大类:数据传送类,算术运算类,逻辑运算类,控制转大类:数据传送类,算术运算类,逻辑运算类,控制转移类56 类型类型DST助记符助记符功能功能  片片 内内 RAM 传传 送送 指指 令令   AMOV  A,,RnMOV  A,,@RiMOV  A,,#dataMOV  A,,directA←RnA←(Ri )A←data A←((direct))   RnMOV  Rn,,AMOV  Rn,,directMOV  Rn,,#data Rn←A Rn←(direct) Rn←#data   directMOV  direct,,AMOV  direct,,RnMOV  direct,,direct MOV  direct,,@RiMOV  direct,,#datadirect←Adirect←Rndirect←(direct)direct←@Ridirect←#data  @RiMOV  @Ri ,,AMOV  @Ri ,,directMOV  @Ri ,, #data@Ri ←A@Ri ←(direct)@Ri← #data57 类型类型目的操作数目的操作数指令助记符指令助记符功能功能片片外外RAM传传送送指指令令DPTRMOV   DPTR,,#data16DPTR←data16 AMOVX  A,,@RiMOVX  A,,@DPTRA←(Ri)A←(DPTR)@RiMOVX  @Ri,,A(Ri)←A@DPTRMOVX  @DPTR,,A(DPTR)←AROM传传 送指令送指令 AMOVC  A,,@A+PCMOVC  A,,@A+DPTRA←(((A))+PC)A←(((A))+DPTR) 交交 换换 指指 令令XCH    A,,RnXCH    A,,@RiXCH    A,,directXCHD   A,,@RiSWAP   AA←→RnA←→(Ri)A←→((direct))A 0~~3 ←→(Ri)0~~3A7~~4←→A3~~0堆堆 栈栈指指 令令PUSH   directPOP    directSP←SP+1,(,(SP))←((direct))((direct))←((SP),),SP←SP--1 58 ④④ 以上所说的以上所说的direct不包括:不包括:A,,DPTR,,Rn,,PSW和和B。

      ⑤⑤ 通常通常SRC可以是:可以是:A,,Rn,,direct,,@Ri和和 #data 5种,而种,而DST     只能有只能有4种(种(不能是不能是#data)例例1 设内部设内部RAM 30H单元内容为单元内容为52H,,给出以下程序执行后(给出以下程序执行后(R0))       =?(?(A)=?()=?(30H)=?)=?及及30H在不同指令中的作用在不同指令中的作用MOV  A,  #30H     MOV  A,   30H   MOV  R0,,#30H    MOV  A,   @R0    MOV  30H,, #30H   ;;A←#30H   ;;A← 30H,,  即即((A))=52H   ;;R0←#30H    ;;A←((((R0)),)),即(即(A))=52H   ;(;(30H))←#30H 解:解: ((R0))=30H,, ((A))=52H,(,(30H))=30H其中,第一,三,五句中其中,第一,三,五句中#30H为立即数,第二,五条指令中为立即数,第二,五条指令中30H为直接地址,第四条指令为直接地址,第四条指令R0中的中的30H为隐含的间接地址。

      为隐含的间接地址59 例例2.已知已知P1口内容为口内容为0AAH,给出下列程序执行的结果及相应,给出下列程序执行的结果及相应       的机器码的机器码MOV R0,#30H MOV R0,#30H MOV 10H,P1MOV 10H,P1MOV A,10HMOV A,10HMOV MOV @ @R0,AR0,AMOV 40H,MOV 40H,@ @R0R0 ;(R0)=;(R0)=# #3030 78 30 78 30H H ;(10;(10H)=0AAHH)=0AAH 85 10 90 85 10 90H H ;;(A)=0AAH(A)=0AAH E5 10HE5 10H ;; (30H)=0AAH(30H)=0AAH F6HF6H ;; (40H)=0AAH(40H)=0AAH 86 40 86 40H H60 例例3. 设片内设片内RAM30H单元内容为单元内容为40H,,40H单元中的内容为单元中的内容为       10H,,P1口上的内容为口上的内容为0CAH,,给出执行以下程序的结果。

      给出执行以下程序的结果 MOV R0,#30H  MOV R0,#30H  MOV A,MOV A,@ @R0   R0   MOV R1,A    MOV R1,A    MOV B,MOV B,@ @R1    R1    MOV MOV @ @R1,P1 R1,P1 MOV P2,P1MOV P2,P1 ;(R0)=30H;(R0)=30H;(A)=(30H)=40H;(A)=(30H)=40H;(R1)=40H;(R1)=40H;(B)=(40H)=10H;(B)=(40H)=10H;(40H)=(P1)=0CAH;(40H)=(P1)=0CAH;(P2)=(P1)=0CAH;(P2)=(P1)=0CAH61   例例4. 设片外设片外RAM(2020H)=44H,(203RAM(2020H)=44H,(2030H)H)           =55H=55H,,分析下面程序执行的结果分析下面程序执行的结果MOV P2,#20H  MOV P2,#20H  MOV R0,#20H  MOV R0,#20H  MOV R1,#30H  MOV R1,#30H  MOVX A,MOVX A,@ @R0 R0  MOV R0,#40H  MOV R0,#40H  MOVX MOVX @ @R0,A  R0,A  MOVX A,MOVX A,@ @R1 R1 MOV R1,#60H MOV R1,#60H MOV MOV @ @R1,A  R1,A  ;P2=20H;P2=20H;R0=20H;R0=20H;R1=30H;R1=30H;(A)=44H;(A)=44H;R0=40H;R0=40H;(2040;(2040H H)=)=( (AA)=44)=44H H;A=(2030H)=55H;A=(2030H)=55H;R1=60H;R1=60H;(60H)=55H;(60H)=55H62 例例5.设堆栈指针.设堆栈指针SP=11H,,PSW=00H,,给出下面程序给出下面程序          执行的结果。

      执行的结果 MOV  20H,,  #53H    PUSH  20H            POP    PSW     ;(;(20H))←53H;;53H → ((SP)+1)→((12H),),     SP=SP+1,,即(即(SP))=12H;;PSW←((((SP))))=53H,,     SP=SP-1 ,,即(即(SP))=11H63 ①① 加减法指令的加减法指令的DST只能是只能是A,,SRC可为其它四种方式,减法指可为其它四种方式,减法指     令只有带进位减助记符令只有带进位减助记符           二、 二、 算术运算类指令算术运算类指令::(看P41表3.2)               此类指令具有加,减,乘,除指令,它们一般对此类指令具有加,减,乘,除指令,它们一般对PSW的的CY、、AC、、OV和和P各位均有影响,对其余四位不影响,但各位均有影响,对其余四位不影响,但INC与与DEC指令不影响指令不影响PSW的内容具体特点如下:具体特点如下:⑤⑤除法中,除法中,OV=1表示除数为表示除数为0,,A、、B中的内容均不定,其它中的内容均不定,其它    情况情况OV=0。

      ④④ 乘法中,乘法中,OV=1表示乘积大于表示乘积大于255,,OV=0表示乘积小于表示乘积小于255②② 加加1减减1指令指令不不影响影响PSW除除P位以外的其它位位以外的其它位  ③③ 乘、除法中乘、除法中CY=0  64 类类型型      助记符助记符          功能功能对对PSW的影响的影响 字节数字节数振荡周期振荡周期不不带带进进位位加加ADD A,,RnADD A,,@RiADD A,directADD A,#dataA←A+Rn  A←A+(Ri)  A←A+(direct)A←A+dataCY OV ACCY OV AC同上同上同上同上112212121212带带进进位位加加ADDC A,,RnADDC A,,@RiADDC A,directADDC A,#dataA←A+Rn+CYA←A+(Ri)+CYA←A+(direct)+CYA←A+data+CYCY OV AC同上同上同上同上同上同上112212121212带带进进位位减减SUBB A,,RnSUBB A,,@RiSUBB A,,directSUBB A,,#dataA←A-Rn-CYA←A-(Ri)-CYA←A-(direct)-CYA←A-data-CY同上同上同上同上同上同上同上同上112212121212算术运算类指令算术运算类指令65 加加  1INC AINC RnINC @RiINC directINC DPTRA←A+1Rn←Rn+1(Ri)←(Ri)+1(direct)←(direct)+1DPTR←DPTR+1P无影响无影响同上同上同上同上同上同上111211212121212减减 1DEC ADEC RnDEC @RiDEC directA←A-1Rn←Rn-1(Ri)←(Ri)-1(direct)←(direct)-1P无影响无影响同上同上同上同上111212121212乘乘法法除除法法调调整整MUL ABDIV ABDA ABA←A*BA←A/B((商),商),B←余数余数0 OV P同上同上CY  AC111484812类类型型助记符助记符功能功能对对PSW的影响的影响字节数字节数振荡周期振荡周期算术运算类指令算术运算类指令66 例例1..  给出以下程序执行结果及对程序状态字给出以下程序执行结果及对程序状态字PSW的影响。

      的影响 ;(;(30H))=43H ;(;(A))=7AH ;(;(R0))=30H ;(;(A))=((30H))+7AH=0BDHMOV 30H,,#43H  MOV  A,,#7AH    MOV  R0,,#30H  ADD  A,,@R0         执行程序以后,据以上结果知执行程序以后,据以上结果知PSW中:中:CY=D7CY=0,, AC=D3CY=0,,奇偶位奇偶位P=0,,OV=D7CY⊕ ⊕D6CY=0⊕ ⊕1=1,,此结果对于无此结果对于无符号数而言为正确,但对有符号数而言不正确因为符号数而言为正确,但对有符号数而言不正确因为2个正数个正数相加得到一个负数,所以一定是发生了溢出,结果不正确相加得到一个负数,所以一定是发生了溢出,结果不正确对对PSW的影响:的影响:  01111010     7AH                           +  01000011     43H                                  10111101     BDH67    MOV R0,,#7E     MOV 7EH,,#0FFH     MOV 7FH,,#38H     MOV DPL,,#0FEH     MOV DPH,,#10H     INC   @R0          INC   R0            INC   @R0        INC   DPTR     INC   DPTR                ;(;(R0))=7EH              ;(;(7EH))=0FFH              ;(;(7FH))=38H              ;(;(DPL))=0FEH              ;(;(DPH))=10H ;(;(7EH))+1=0FFH+1=00H→(7EH)) ;(;(R0))=7FH ;(;(7FH))+1=38H+1=39H→(7FH))   ;(;(DPTR))=10FE+1=10FFH   ;(;(DPTR))=10FF+1=1100H例例2.. 分析执行以下程序段的结果。

      分析执行以下程序段的结果68    MOV A,,#0C4H  SUBB A,,#55H   其中:(其中:(A))=6EH,(,(CY))=D7CY=0,(,(AC))=D3CY=1,,            ((OV))= D7CY⊕ ⊕D6CY=0⊕ ⊕1=1,,  ((P))=0         例例3.设进位位.设进位位C=1,,给出执行以下结果及对给出执行以下结果及对PSW的影响  ;(;(A))=0C4H   ;(;(A))- 55H-((C))= 6EH→A 对对PSW的影响:的影响: 11000100    ((C4H))                              00000001    ((C))=1                              -  01010101    ((55H))                              01101110    ((6EH))          以上结果对于无符号数而言为正确,(以上结果对于无符号数而言为正确,(OV))=1无意义,无意义,对于符号数则(对于符号数则(OV))=1表示结果为错误,负数减正数结果应表示结果为错误,负数减正数结果应为负数,而为负数,而6EH为正数,原因是因为符号数为正数,原因是因为符号数C4H=-3CH,,所以所以C4H-55H-1=((-3CH))-56H=-92H,,而而-92H=-146已超出已超出8位二位二进制数所能表示的最大负数。

      进制数所能表示的最大负数128)69 例例4.设累加器.设累加器A中内容为中内容为89的的BCD码,即码,即10001001,,R0中的中的           内容为内容为28的的BCD码,即码,即00101000,求执行下面程序后,,求执行下面程序后,           A中结果及正确的中结果及正确的BCD码值应为多少?码值应为多少? ADD  A,,R0  DA    A          ;(;(A))+((R0))→A,,即(即(A))=B1H,,即非即非         十进制正确结果,也非十六进制正确结果十进制正确结果,也非十六进制正确结果     ;(;(A))=17H ,, 这里,因为(这里,因为(C))=1,,所以所以            正确答案为正确答案为117          因为在执行因为在执行DA  A指令时,首先由于(指令时,首先由于(AC))=D3CY=1,,所以对所以对A 中低中低4位内容加位内容加6调节,使调节,使A的低的低4位变为位变为0111,然后,然后又由于又由于A中高中高4位内容大于位内容大于9,所以对,所以对A中高中高4位内容位内容 再加再加6进行进行调整,使其变为调整,使其变为0001,同时使进位位(,同时使进位位(C))=1,,则最终得到结则最终得到结果为果为117。

      70 1.以累加器以累加器A作为作为DST,,SRC可以是可以是#data,,Rn,,direct,,2.     ((内部内部RAM低低128B或或SFR))和和@Ri四种方式四种方式三、三、 逻辑运算类指令逻辑运算类指令::看P45表3.4逻辑运算类指令主要用于逻辑运算中,主要可以分为两大类:逻辑运算类指令主要用于逻辑运算中,主要可以分为两大类:①① 逻辑与(逻辑与(ANL):):按位相与,特点是清按位相与,特点是清0,全,全1才出才出1,,                                      见见0就出就出0,,看例看例1    3.单操作数的指令,操作数必须放在.单操作数的指令,操作数必须放在A中4.各类指令的特点为:.各类指令的特点为:特点:特点:此类指令除此类指令除RLC和和RRC指令外,均不影响指令外,均不影响PSW中除中除P            以外的其他位,而以外的其他位,而RLC和和RRC也只影响也只影响P与与C位2. 以以direct为为DST,,而以而以A或或 #data为为SRC的操作指令的操作指令71    类类  型型  指令助记符指令助记符   指令功能指令功能 与与指指令令ANL  A,,RnANL  A,,@RiANL  A,,#dataANL  A,,directANL  direct,,AANL  direct,,#dataA←A∧ ∧RnA←A∧ ∧(Ri)A←A∧ ∧dataA←A∧ ∧((direct))((direct))←((direct))∧∧A((direct))←((direct))∧∧data 或或指指令令ORL  A,,RnORL  A,,@RiORL  A,,#dataORL  A,,directORL  direct,,AORL  direct,,#dataA←A∨ ∨RnA←A ∨ ∨ (Ri)A←A ∨ ∨ dataA←A ∨ ∨ ((direct))((direct))←((direct)) ∨ ∨ A((direct))←((direct)) ∨ ∨ data逻辑运算类指令逻辑运算类指令72    类类   型型  指令助记符指令助记符  指令功能指令功能异异或或指指令令XRL  A,,RnXRL  A,,@RiXRL  A,,#dataXRL  A,,directXRL  direct,,AXRL  direct,,#dataA←A       RnA←A       (Ri)A←A       dataA←A      ((direct))((direct))←((direct))         A((direct))←((direct))         data 求反求反指令指令 CPL  AA←A清清0 指令指令CLR  AA←0循环循环移位移位指令指令RL   ARLC  ARR   ARRC  AA左循环移位一位左循环移位一位A带进位左循环移位一位带进位左循环移位一位A右循环移位一位右循环移位一位A带进位右循环移位一位带进位右循环移位一位73 ;;  屏蔽屏蔽A中高中高5位位 ;;去掉去掉P1中的低中的低3位位;;  P12~~0←A2~~0例例1:: 要求编程把累加器中的低要求编程把累加器中的低3位传送到位传送到P1口,传送时口,传送时           不影响不影响P1口的高口的高5位。

      位            ANL  A,,#07H            ANL  P1,,#0F8H          ORL   P1,,A③③ 逻辑异或指令(逻辑异或指令(XRL))对操作数中的某一位或某几位对操作数中的某一位或某几位     进行取反(两个操作数不同出进行取反(两个操作数不同出1,相同出,相同出0),看),看例例3②② 逻辑或(逻辑或(ORL):):按位相或,特点是置按位相或,特点是置1,有,有1就出就出1,,     全全0才出才出0,看,看例例274         MOV  A,,#0F0H         ANL   P1,,#00H            ORL    P1,,#55H            ORL    P1,,A               ANL    P1,,A       ;(;(A))=0F0H ;;P1=00H ;;P1=55H ;;P1=0F5H  ;;P1=0F0H;;        01000010       ⊕ ⊕ 01010010             00010000例例2:给出下列两段程序执行的结果给出下列两段程序执行的结果。

      例3 :      MOV  A,,#42H         XRL   A,,#52H75 例例4:分析以下程序执行的结果:分析以下程序执行的结果CLR  C              MOV  A,,#99H  RL   A,,MOV  A,,#99HRRC   A  ;(;(C))=0                ;(;(A))=99H  ;;右移一位,(右移一位,(A))=33H  ;(;(A))=99H  ;;带进位位右循环一位,带进位位右循环一位,   ((A))=4CH,(,(C))=176 四、四、 控制程序转移类指令控制程序转移类指令::看P47表3.56)如果整个程序的口地址发生改变,只要程序中各指令)如果整个程序的口地址发生改变,只要程序中各指令((5))CJNE指令的第一操作数可以是指令的第一操作数可以是A、、Rn和和@Ri,而第二操作,而第二操作          数只能是数只能是#data和和direct,且指令只影响,且指令只影响PSW中的中的CY 位,无位,无          论转移与否,论转移与否,CJNE指令均影响指令均影响CY的值,但它执行后不影的值,但它执行后不影          响各操作数(第一与第二)的内容。

      响各操作数(第一与第二)的内容4)除)除CJNE指令外,其余指令对指令外,其余指令对PSW 中各值均无影响中各值均无影响3))访问访问-128~127B存储空间的指令有存储空间的指令有SJMP和条件转移类指令,和条件转移类指令,          256字节内跳转指令有字节内跳转指令有JMP其中:(其中:(1)访问)访问64KB存储空间的指令有存储空间的指令有LCALL、、LJMP、、JMP2))访问访问2KB存储空间的指令有存储空间的指令有ACALL、、AJMP77 数型数型助记符助记符功能功能(设(设PC=本条指令地址)本条指令地址)字节字节振荡振荡周期周期无条无条件转件转移移LJMP  addr16AJMP  addr11SJMP  relPC←add16PC←add11PC←PC+2+rel322242424间转间转JMP  @A+DPTRPC←A+DPTR124无条无条件调件调用及用及返回返回LCALL  addr16ACALL  addr11RETRETI断点入栈断点入栈,,PC←addr16同上同上PC←addr11子程序返回子程序返回恢复断点,中断返回恢复断点,中断返回321124242424条条 件件 转转 移移JZ  relJNZ relCJNE A,#data,relCJNE A,,direct,,relCJNE Rn,,#data,,relCJNE @Ri,#data,relDJNZ Rn,relDJNZ direct,relA为为0转转PC←PC+2+relA不为不为0转,同上转,同上A不等于不等于data转转Rn←Rn--1,,Rn ≠0时时转转移移223333232424242424242424空操作空操作NOPPC←PC+1112                                                                                          控制程序转移类指令控制程序转移类指令78 ⑺⑺指令中的指令中的rel为一个为一个8位符号数,表示要转移的相对地址值。

      位符号数,表示要转移的相对地址值的相对位置不发生变化,则的相对位置不发生变化,则SJMP和条件转移中的各地址均不发和条件转移中的各地址均不发生变化,但长转移与绝对转移指令生变化,但长转移与绝对转移指令LJMP,,AJM和和JMP中地址值中地址值均发生变化,要修改程序中的相应地址值均发生变化,要修改程序中的相应地址值注意:注意: MCS-51 64Kmemory分为分为16段,段,32个区,个区,256页,每段页,每段             包括包括2个区,每区个区,每区2K字节,划分方法如下:字节,划分方法如下:EPROM16             位地址码中高位地址码中高8位定义为页地址,低位定义为页地址,低8位为页内地址,所位为页内地址,所                            以以64Kmemory分为分为256页,每页页,每页256个字节,规定每个字节,规定每8页页             为一个为一个2K区(区(8*256),页地址(高),页地址(高8位地址)可以写成位地址)可以写成             两位两位16进制数进制数XhXlH,,其中,高位其中,高位16进制数进制数Xh由由0~F定定             义为义为16个段,(低个段,(低8位位Xl由由0~7页定义第一个页定义第一个2K区,区,8~F             页定义第二个页定义第二个2K区,低区,低8位位Xl的值表示段内具体的页的值表示段内具体的页             码)。

      码) XL的的0~7页定义为某段内第一个页定义为某段内第一个2K区,区,XL的的0~8             页定义为第二个页定义为第二个2K区79 例如:例如:⑴⑴ AJMP  3ABCH;;设此指令执行前(设此指令执行前(PC))=289AH            ⑵⑵ AJMP  3DEFH;;设此指令执行前(设此指令执行前(PC))=37FEH            ⑶⑶ AJMP  3BCDH;;设此指令执行前(设此指令执行前(PC))=3456H解释:解释:⑵⑵第第2条指令的操作码位于第条指令的操作码位于第3段段7页内,目的地址处于页内,目的地址处于                第第3段段 第第D页内,与(页内,与(PC))+2((3段段8页)处于同一页)处于同一                2K范围内,所以此指令正确,执行此指令的功能是:范围内,所以此指令正确,执行此指令的功能是:②② 保持保持PC15~PC11值不变,将目的地址值不变,将目的地址3ABCH的第的第10~0位位   ((01010111100B),),使(使(PC))=0011101010111100B。

       ①①((PC))=((PC))+2=3ABEH,,PC15~PC11=00111,,解释:解释:⑴⑴第一条指令的操作码位于第第一条指令的操作码位于第3段第段第8页(因为(页(因为(PC))=                389AH),),而目的地址为而目的地址为3ABCH,,处于第处于第3段段A页内,页内,               与(与(PC))+2处于同一个处于同一个2K范围内,所以此指令使用正范围内,所以此指令使用正               执行后的功能使(执行后的功能使(PC))=3ABCH,,即使程序转向指定即使程序转向指定               地址执行指令,指令的执行过程为地址执行指令,指令的执行过程为80 定义:定义:     PC当前地址当前地址=((SJMP指令第一字节所在地址指令第一字节所在地址+2))((PC))= 3DEFH解释:解释:⑶⑶第第3条指令(条指令(PC))=3456H,,所以(所以(PC))+2 = 3458H处处                于于EPROM中中3段第段第4页内,目的地址为页内,目的地址为3BCDH,,处于处于                 PROM中第中第3段段B页内,页内,  与第与第3段段4页内的程序不属于同页内的程序不属于同                 一个一个2K地址范围,所以此处地址范围,所以此处AJMP 指令使用错误。

      指令使用错误注意注意2::手工汇编计算相对地址手工汇编计算相对地址rel的方法:的方法:                rel=目的地址-(目的地址-(SJMP指令第一字节所在地址指令第一字节所在地址+2))                     =目的地址-(目的地址-(PC+2))=目的地址-目的地址-PC当前值当前值规定:当目的地址大于规定:当目的地址大于PC当前地址时,当前地址时,rel值应在值应在00~7FH之间之间          ((正值),若正值),若rel值大于值大于7FH时,说明向后跳转超过时,说明向后跳转超过+127,,            超出本指令应用范围,不能用本指令当目的地址小于超出本指令应用范围,不能用本指令当目的地址小于            PC当前地址时,应有:目的地址-当前地址时,应有:目的地址-PC当前值当前值=rel﹤0,其,其            81 例如例如::计算下列指令的相对地址计算下列指令的相对地址rel::指令第一字节所在地址指令第一字节所在地址    指令指令    目的地址目的地址        rel值值    2100H                             SJMP    2123H          21H﹥0    2143H                             SJMP    2111H           0CCH﹤0第一条指令第一条指令rel=2123-((2100+2))=0021H,,所以所以rel=21H第二条指令第二条指令rel=2111-((2143+2))=FFCCH,,所以所以rel=0CCH 中低中低8位为位为rel的实际值,高的实际值,高8位一定是位一定是FFH,,表明表明rel是个负数,是个负数,当高当高8位不是位不是0FFH则说明向前跳转超过则说明向前跳转超过-128,本指令不能用。

      本指令不能用注意注意3::AJMP与与ACALL指令转移或调用的目的地址必须在指令指令转移或调用的目的地址必须在指令              操作码第一字节所在地址值操作码第一字节所在地址值+2后的同一后的同一2K范围内,否则范围内,否则             上述指令不能用上述指令不能用82 例例1.  MCS-5单片机的单片机的P1口与某设备数字温度计相连,如果设备口与某设备数字温度计相连,如果设备         温度大于温度大于50C时,需要降温,小于时,需要降温,小于50C时,需要升温,时,需要升温,         等于等于50C时停机,其程序如下:时停机,其程序如下:MOV  A,,P1  CJNE A,,#50,,CHK1     ·     ·     · ((停机操作)停机操作)CHK1::JC  CHK2           ·    ·(降温操作)(降温操作)    ·CHK2:(:(升温操作)升温操作) ;;A←((P1),),将外设的温度值及将外设的温度值及P1口送入口送入A中中;(;(A))≠50则转则转CHK1,,否则停机,否则停机,       若(若(A))>﹦50,,则(则(C))=0,,       若(若(A))﹤50,,则(则(C))=1         ;(;(A))﹤50否?(即(否?(即(C))=1?)?)               是则转是则转CHK2处,否则执行降温操作。

      处,否则执行降温操作执行此处程序表示执行此处程序表示A﹥50,,所以应执行降温所以应执行降温;此处表示(;此处表示(A))<50,,所以执行所以执行    升温指令升温指令此处表示(;此处表示(A))<50,,所以执行停机操作所以执行停机操作83   MOV  R0,,#01H  MOV  R1,,#02H  MOV  R2,,#03H  DJNZ  R0,,LABLE0  DJNZ  R1,,LABLE1  ;;∵∵((R0←((R0)-)-1))=0,,∴∴顺执顺执;;   ;; R1←((R1)-)-1,,∵∵((R1))=1≠0,,     ∴∴程序转至程序转至LABLE1例例2.分析以下程序走向:分析以下程序走向:84 取反指令:取反指令:CPL  C   ;(;(C))← ((C))                    CPL  bit  ;(;(bit))← ((bit))清清0 指令:指令:CLR  C  ;(;(C))←0                   CLR  bit  ;(;(bit)) ← 0置置1 指令:指令:SETB  C  ;(;(C)) ← 1                   SETB  bit  ;(;(bit)) ← 1五、布尔处理指令五、布尔处理指令 归类如下:看归类如下:看P49表(表(3.6))位与指令:位与指令:ANL  C,,bit     ;;C ←((C))∧∧ bit                    ANL  C,,/bit    ;;C ←((C))∧∧ bit85 位或指令:位或指令:ORL  C,,bit                    ORL  C,,/bit位传送指令:位传送指令:MOV  C,,bit                        MOV  bit,,C进位位转移指令:进位位转移指令:JC  rel                                JNC  rel直接位转移指令:直接位转移指令:JB  bit,,rel                                JNB  bit,,rel                                JBC  bit,,rel;;bit=1 转移同时使转移同时使bit=0布尔处理指令布尔处理指令86 P1.0P1.1P1.2P1.3P1.4P1.5P1.6﹠﹠≥1≥1注意注意((1)布尔处理指令的累加器用)布尔处理指令的累加器用PSW中的进位位中的进位位CY。

                例例1::P1口中口中P1.6与与p1.0~p1.5位之间的关系如下图所示,试用软位之间的关系如下图所示,试用软           件完成这一功能又称硬件软化)件完成这一功能又称硬件软化)((2))MCS-51的的4个个8位并行口每一位均可进行单独操作,位并行口每一位均可进行单独操作,          所以布尔处理的所以布尔处理的I/O口共有口共有32位87 MOV   C,,P1.1ORL   C,,P1.2 ANL    C,,P1.0    MOV   0F0H,,CMOV  C,,P1.3  ORL  C,,/P1.4  ANL  C,,0F0HANL  C,,/P1.5MOV  P1.6,,C    ;;C←P1.1 ;;C←P1.1∨∨P1.2 ;;C←((P1.1∨∨P1.2))∧∧P1.0;;将上述将上述C中结果暂存中结果暂存B寄存器第寄存器第0位位 ;;C←P1.3 ;;C←P1.3∨∨P1.4 ;;C←((P1.3∨∨P1.4))∧∧P1.1∨∨P1.2∧∧P1.0))  ;;C←[((P1.1∨∨P1.2))∧∧P1.0 ]∧∧              ((P1.3∨∨P1.4))∧∧P1.5  ;;P1.6←[((P1.1∨∨P1.2))∧∧P1.0]      ∧∧((P1.3∨∨P1.4))∧∧P1.588 例例2:编程在:编程在MCS-51的的P1.7输出一个方波。

      输出一个方波   CLR  P1.7  NOP  NOP  SETB  P1.7  NOP   NOP  CLR  P1.7P1.7t注注:此程序输出的方波周期为:此程序输出的方波周期为6T机机89 例例3:编程使:编程使P1.0连续输出连续输出128个宽度为个宽度为10个机器周期个机器周期          的方波(一个的方波(一个T机机=12T振振,,CPL、、NOP分别为一分别为一          个机器周期,而个机器周期,而DJNZ为为2个机器周期)个机器周期)        MOV  R0,,#00H       CLR  P1.0LOOP::CPL  P1.0         NOP       NOP       DJNZ R0,,LOOP    ;;送送R0为循环计数初值为循环计数初值 ;(;(P1.0))=0 ;(;(P1.0))←((P1.0))取反取反  ;;若(若(R0))=((R0))-1≠0,,        则转则转LOOP继续继续 循环90 注意注意:由于:由于CPL指令和指令和NOP执行时间均为(执行时间均为(12个振荡周期)个振荡周期)             一个机器周期,一个机器周期,DJNZ指令执行时间为指令执行时间为3个机器周期,个机器周期,             所以所以P1.0端每端每5个机器周期切换一次方向,输出波形个机器周期切换一次方向,输出波形             如上图,如上图,R0的初始值为的初始值为00H,,减减1后后R0的内容为的内容为FFH,,             即最后一条指令即最后一条指令DJNZ  R0,,LOOP保证循环保证循环256次,次,                输出输出128个方波。

      个方波 P1.0T机器机器91      第四节第四节       伪指令伪指令一、一、ORG::用于定义汇编语言源程序存放的起始地址用于定义汇编语言源程序存放的起始地址                   如:如: ORG  8000H四、四、DB或或DW::用于字节或字定义,将项或项表中的一个字节(或用于字节或字定义,将项或项表中的一个字节(或                 字)或字符串数据存入标识符开始的连续的存储单元中字)或字符串数据存入标识符开始的连续的存储单元中三、三、EQU::给标识符赋值如:标识符给标识符赋值如:标识符    EQU     数字或项数字或项                   注意注意:此语句中的标识符后面不带冒号此语句中的标识符后面不带冒号注意注意:: END用于子程序不需加标识符,用于主程序时必须要加标用于子程序不需加标识符,用于主程序时必须要加标             识符,所加的标识符就是该主程序第一条指令的符号地址识符,所加的标识符就是该主程序第一条指令的符号地址二、二、END::表示汇编程序汇编结束如:表示汇编程序汇编结束如:END  或或  END  标识符标识符伪指令伪指令::供汇编程序在汇编过程中执行的、非机器执行的语句供汇编程序在汇编过程中执行的、非机器执行的语句                指令。

      指令92 格式为:格式为:  标识符:标识符:DB   项或项表项或项表  或或   标识符:标识符:DW   项或项表项或项表                           地址地址    内容内容     地址地址    内容内容   3000H  01000001   3008H 01000110   3001H   01000010   3009H 00000000   3002H  01000011   300AH 01011000   3003H  00100000   300BH 00000000   3004H  01000100   300CH 00000000   3005H  00000000   300DH 10010000   3006H  01000101   300EH 11001111   3007H  00000000   300FH 10101011例:例:           ORG    3000HW1::DB   “A,,B,,C”,,20HW2::DW    “D,,E,,F”,,58H,,9000H,,0ABCFH93 程序设计的一般步骤有:研究分析问题程序设计的一般步骤有:研究分析问题→找出解决问题的方找出解决问题的方                                             法法→画流程图画流程图→编程编程→调试修改。

      调试修改 第五节第五节  汇编程序设计及应用举例汇编程序设计及应用举例例例⒈⒈ 两个两个16位无符号数相加,设两个位无符号数相加,设两个16位的数分别在片内位的数分别在片内RAM         30H和和40H开始的两个单元中,高字节在低地址单元中,开始的两个单元中,高字节在低地址单元中,         低字节在高地址单元中,求两数之和并存入低字节在高地址单元中,求两数之和并存入40H的单元中的单元中          亦指简单结构,其特点为:要求计算机一条一条按用户书亦指简单结构,其特点为:要求计算机一条一条按用户书写顺序逐一执行程序中的各条指令,不发生分支和转移写顺序逐一执行程序中的各条指令,不发生分支和转移 一、一、 顺序结构:顺序结构:汇编语言程序结构有以下四类:顺序结构,分支结构,循环汇编语言程序结构有以下四类:顺序结构,分支结构,循环                                                         结构,子程序结构结构,子程序结构94      MOV  A,,31H     ADD  A,,41H   ;;低字节求和低字节求和      MOV  41H,,A   ;;低字节和存低字节和存RAM中中     MOV  A,,30H        ADDC A,,40H   ;;高字节高字节带进位带进位相加相加     MOV  40H,,A   ;;存高字节和存高字节和解:双字节数相加的运算应先从低字节加起,借助于解:双字节数相加的运算应先从低字节加起,借助于        进位位可以将低字节和的进位加至高字节中去。

      进位位可以将低字节和的进位加至高字节中去95 例例2:试编程将片外:试编程将片外RAM2000H与与2001H单元的单元的     内容相乘,结果送往片内内容相乘,结果送往片内30H及及31H单元中MOV  DPTR, #2000HMOVX  A, @DPTRMOV   B, AINC   DPTRMOVX   A,@DPTR96 MUL   ABMOV   R0, #30HMOV   @R0, AINC    R0XCH   A, BMOV   @R0, A97 例例3:试编程将片外:试编程将片外RAM3000H与与3001H单元内容相单元内容相          除,商与余数分别送入片内除,商与余数分别送入片内30H及及31H单元中 MOV  DPTR,,#3000HMOV  R0,,#30HMOVX A,,@DPTRMOV  B,,AINC  DPTR98 MOVX A,,@DPTRXCH A,BDIV  AB MOV  @R0,,AINC  R0XCH A,BMOV  @R0,,A99         要求:把常数要求:把常数2567(十进制数)加到寄存器对(十进制数)加到寄存器对R4 R3                    的内容上(的内容上(4个个BCD数变量)。

      数变量)例例4:寄存器内容与常数进行双字节十进制加法运算子程序寄存器内容与常数进行双字节十进制加法运算子程序注意注意:一个字节由两个:一个字节由两个BCD数组成,称压缩的数组成,称压缩的BCD码            求和是把求和是把2567分成两个字节分别与分成两个字节分别与R3和和R4内容相内容相            加,每相加一次和在加,每相加一次和在A中进行十进制调整,最终结中进行十进制调整,最终结            果(仍为果(仍为BCD码数)在码数)在CYR4R3三个寄存器中三个寄存器中100 BCDADD::  MOV  A,,R3          ADD  A,,#67H  ;;个位、十位个位、十位BCD数相加数相加          DA   A        ;;和的十进制调整和的十进制调整          MOV  R3,,A    ;;和存和存R3中中          MOV  A,,R4          ADDC A,,#25H ;;百位、千位百位、千位BCD带进位相加带进位相加          DA   A        ;;和的十进制调整和的十进制调整          MOV  R4,,A    ;;和存和存R4中中101 MULBCD::MOV  B,,#10H                       DIV  AB                        MUL    AB                        MOV   B,,#0AH                      DIV    AB                          SWAP  A                        ORL  A,,B                       RET例例3.用.用MUL和和DIV指令实现指令实现BCD数的乘法子程序。

      数的乘法子程序入口:入口:A←已给压缩已给压缩BCD数,出口:数,出口:A←积(压缩积(压缩BCD数)数);;10H=16;;A中的中的BCD数除数除16分成两个分成两个BCD     数,高字节在数,高字节在A中,低字节在中,低字节在B中中;;两个两个BCD数相乘,积(数相乘,积(0≤积积≤    81)在)在A中,是二进制数中,是二进制数;;分离积,积除分离积,积除10商在商在A中为十中为十    位数,余数在位数,余数在B中为个位中为个位;; A中的十位数置高中的十位数置高4位中位中;;数位组合,数位组合,A中高中高4位为积的十位为积的十    位数,低位数,低4位位 为个位数为个位数     102 例例4::8位二进制数转换为位二进制数转换为BCD码子程序码子程序BINBCD1功能:将功能:将0~FFH范围内的二进制数转换为范围内的二进制数转换为BCD码码0~255②② 转换的主要方法是进行数字分离转换的主要方法是进行数字分离注意:注意: ①① 8位二进制数在内存中只占一个字节,但转换为位二进制数在内存中只占一个字节,但转换为                  BCD码后的值在内存中可能要占两个字节。

      码后的值在内存中可能要占两个字节入口:入口:A←二进制数二进制数出口:出口:R0=十位数和个位数地址指针十位数和个位数地址指针103 BINBCD1::MOV    B,,#100           DIV    AB      ;;A=百位数,百位数,B=余数(十位及个位数)余数(十位及个位数)           MOV   @R0,A    ;;百位数存入百位数存入RAM           INC     R0           MOV    A,,#10   ;;           XCH    A,,B      ;;           DIV     AB          ;;   A=十位数,十位数,B=个位数,个位数,                                                    ((A、、B中高中高4位一定为位一定为0))           SWAP   A                     ADD    A,,B    ;;数组合到数组合到A           MOV   @R0,A   ;;存入存入RAM104 二二 分支程序设计分支程序设计::注意注意::①① 一个字节的一个字节的16进制数转换为进制数转换为ASCII码,要占两个字节。

      码,要占两个字节            特点:要求计算机可以对一些条件作出判断并据判断的结果作特点:要求计算机可以对一些条件作出判断并据判断的结果作            出不同的处理出不同的处理例例1. 用查表方法进行用查表方法进行16进制数转换为进制数转换为ASCII码子程序码子程序功能:功能:多多字节字节16进制数转换为进制数转换为ASCII码码入口:入口:R0=16进制数低位地址进制数低位地址            R2=字节数字节数出口:出口:R1=ASCII码的高位地址码的高位地址②② 具体方法是先分离出每个具体方法是先分离出每个16进制数的字符,再查进制数的字符,再查     表进行转换表进行转换105 HEXASC::MOV  A,,@R0     ;;取取16进制数(一次一个字节)进制数(一次一个字节)                     ANL  A,,#0FH                 ;;屏蔽高屏蔽高4位位                     ADD  A,,#16           ;;因为因为L1处距表头为处距表头为16个字节个字节                     MOVC A,,@A+PC          ;;低低4位转换为位转换为ASCII码码           L1:    MOV  @R1,,A                  ;;存入存入RAM                     INC   R1                     MOV  A,,@R0                     SWAP    A                     ANL     A,,#0FH                     ADD     A,,#7        ;;因为因为L2处距表头为处距表头为7个字节个字节                     MOVC   A,,@A+PC       ;;高高4位转换为位转换为ASCII码码           L2:    MOV    @R1,,A               ;;存入存入RAM          106           INC      R0          INC      R1          DJNZ    R2,,HEXASC          DEC     R1          RETASCTAB::DB  “0,,1,,2,,3,,4,,5,,6,,7,,8”                      DB  “9,,A,,B,,C,,D,,E,,F”     DB是伪指令,其功能为定义每个字符占一个字节。

      是伪指令,其功能为定义每个字符占一个字节107    JUMP_4::MOV    A,,R2                      MOV    DPTR,,#JMPTAB                      MOVC   A,,@A+DPTR                      JMP     @A+DPTR  JMPTAB::  DB   m0--JMPTAB                        DB   m1--JMPTAB                        DB   m2--JMPTAB                        DB   m3--JMPTAB  m0::            MOV  A,,@R0                       RET  例例2. 设设R2=2,,分析下面程序的功能分析下面程序的功能R2=0,,1,,3时又如何?时又如何?108 m1::       MOVX  A,,@R0                RETm2::       MOV  DPL,,R0                MOV  DPH,,R1                MOVX  A,,@DPTR                RETm3::      MOV   A,,R1               ANL   A,,#0FH               ANL   P2,,#F0H               ORL    P2,,A                 MOVX  A,,@R0               RET109          在处理实际事务熟,常常要求多次重复处理问题,这类在处理实际事务熟,常常要求多次重复处理问题,这类问题用循环结构最为合适。

      循环结构由以下四部分组成:问题用循环结构最为合适循环结构由以下四部分组成:   三.循环程序三.循环程序((4)结束部分)结束部分:用于分析和存放循环处理的结果用于分析和存放循环处理的结果3)循环控制部分)循环控制部分:改变循环条件,决定循环的走向:改变循环条件,决定循环的走向          (条件的判断处理)条件的判断处理)2)处理部分)处理部分:即循环体,进行实际处理,是程序中需要:即循环体,进行实际处理,是程序中需要                                反复执行的部分反复执行的部分1)初始化部分:)初始化部分:为循环作必要的准备,如设循环次数、为循环作必要的准备,如设循环次数、             赋地址指针、变量值等赋地址指针、变量值等   110      例例1.多字节无符号数减法子程序.多字节无符号数减法子程序SUB1              入口:入口:R0←被减数低字节地址被减数低字节地址                          R1←减数低字节地址减数低字节地址                          R2←字节数字节数             出口:出口: R0=差数高字节地址差数高字节地址     说明:此子程序执行后,原存被减数的单元被差占用,说明:此子程序执行后,原存被减数的单元被差占用,             原被减数被差的值覆盖了,而减数依然保留在原被减数被差的值覆盖了,而减数依然保留在             原来的存储单元中。

      原来的存储单元中111  SUB1::CLR    C                  ;;进位清进位清0 SUB2::MOV   A,,@R0               SUBB   A,,@R1    ;;从低字节开始进行两数相减从低字节开始进行两数相减               MOV   @R0,,A     ;;存差存差               INC     R0                ;;修改地址指针修改地址指针               INC     R1               DJNZ    R2,,SUB2   ;;字节数未到循环字节数未到循环               JNC     OK           ;;所有字节减完后,若无借位,所有字节减完后,若无借位,                                                        即即CY不为不为0则转则转OK处处                        ·                        ·                        ;;此处为不够减处理程序此处为不够减处理程序                        ·               RET                        OK::  DEC  R0                  ;;此处为够减处理程序此处为够减处理程序               RET112 例例2.设有.设有100个数,它们分别存放在个数,它们分别存放在RAM的的2400H为首地址为首地址           的存储区中,要求将的存储区中,要求将100个数进行大小比较后使它们按个数进行大小比较后使它们按          升升序排列,再存入原存储区中。

      冒泡排序)序排列,再存入原存储区中冒泡排序)                 MOV   P2,,#24H                ;;置片外置片外RAM高高8位地址位地址                 MOV   R2,,#63H         ;;置外循环计数器(置外循环计数器(100~1))LOOP0::MOV   R0,,#00H              ;;置内循环地址指针初值置内循环地址指针初值                 MOV   R1,,#01H               ;;下一存储单元地址指针下一存储单元地址指针                 MOV   R3,,R2                   ;;置内循环计数器初值置内循环计数器初值LOOP1::MOVX  A,,@R0               ;;取相邻两单元中的数取相邻两单元中的数                 MOV   30H,,A                   ;; 低地址内容低地址内容→30H                 MOVX  A,,@R1                ;高地址内容;高地址内容→A中中        113               CJNE    A,,30H,,NEXT    ;;两数比较,不等转两数比较,不等转NEXT              SJMP   NOCHA       ;;相等转相等转NOCHA((不交换位置)不交换位置)NEXT::JNC     NOCHA       ;;C=0则(则(A))>>((30H))不交换,不交换,                                                                                                        转转NOCHA((@R1>R0@)             MOVX  @R0,,A               ;;交换交换R0与与R1指向单元的数指向单元的数             XCH   A,,30H                   ;;将将@R1中的数(中的数(A))与与30H                                                           ((原原R0 ))交换交换             MOVX @R1,,A                 ;;使使A((原原R0中数)中数)→@R1NOCHA::INC    R0                        ;;调节地址指针调节地址指针                  INC    R1                  DJNZ   R3,,LOOP1    ;;内循环结束判别内循环结束判别                  DJNZ   R2,,LOOP0    ;;外循环结束判别外循环结束判别                  RET114 例例2.已知内部已知内部RAM  30H单元开始存放单元开始存放20H个数个数       据,将其传送到外部据,将其传送到外部RAM的的0000H单元开单元开       始的存储区,请编程实现。

      始的存储区,请编程实现 MOV  P2,,#00HMOV  R0,,#30HMOV  R1,,#00H115               MOV  R2,,#20HLOOP: MOV  A,,@R0;;取数取数             MOVX  @R1,A;;存数存数             INC  R0             INC  R1             DJNZ  R2,,LOOP116 例例3 3:试编写一程序,查找内部:试编写一程序,查找内部RAMRAM单元的单元的20H20H~~ 50H 50H是否有是否有0AAH0AAH这一数据,若有,则将这一数据,若有,则将51H51H单单 元内容置为元内容置为1 1,否则将,否则将51H51H单元内容置为单元内容置为0 0 MOV  51H , #00HMOV  R2 , #31HMOV  R0 , #20H  117 LOOP1:  MOV  A , @R0CJNE  A , #0AAH , LOOP2MOV  51H , #01HSJMP  OVERLOOP2:  INC  R0DJNZ  R2 , LOOP1OVER:   RET118 功能:用于解决一个程序中有许多相同的运算或相同操作的问功能:用于解决一个程序中有许多相同的运算或相同操作的问            题,编写子程序须注意的问题有:题,编写子程序须注意的问题有:    四.子程序四.子程序((3)调用子程序时,须了解子程序的)调用子程序时,须了解子程序的“入口信息入口信息”和和“出口信出口信             息息”,进入子程序前应给那些变量赋值,子程序返回时,进入子程序前应给那些变量赋值,子程序返回时             结果存在何处,以便主程序使用这些结果。

      结果存在何处,以便主程序使用这些结果2)进入子程序后首先要对子程序中应用的)进入子程序后首先要对子程序中应用的RS进行保护,进行保护,                  子程序返回前应注意恢复它们的内容子程序返回前应注意恢复它们的内容1)) 一般子程序只有一个出口,即一般子程序只有一个出口,即RET指令119                   MOV    SP,,#60H                  LCALL   DLAY                ;;2T机机   DLAY::MOV    R5,,#00H            ;;T机机   LOOP::NOP                                    ;;T机机                  NOP                       DJNZ    R5,,LOOP            ;;2T机机                  RETI                                      ;;2 T机机      说明说明:程序中的延时:程序中的延时子程序子程序T机机=1us((设设fOSC=12MHZ),),              则此程序中的延时时间为:则此程序中的延时时间为:             T延延 = 2T机机+ T机机+256×4 T机机+2 T机机 =1029μS≈1mS例例1:无参型子程序。

      无参型子程序120   例例2:赋值型子程序:将片内:赋值型子程序:将片内40H单元开始的单元开始的15个单元清个单元清0            MOV   R0,,#40H            MOV   R1,,#0FH            MOV   SP,,#60H            LCALL  2RQ0   ……2RQ0:: MOV    A,,#00HLOOP::MOV    @R0,,A               INC     R0               DJNZ    R1,,LOOP               RET 121  例例3.子程序的嵌套:.子程序的嵌套: 主程序主程序::                   ……                  LCALL   DLAY1   ;;2 T机机                  ……子程序子程序::DLAY1:: MOV     R4,,#0E0H ;;T机机LOOP1:: LCALL   DLAY2    ;;2 T机机                  DJNZ     R4,,LOOP1                  RETDLAY2:: MOV     R5,,#64H ;;T机机122 LOOP::    NOP               ;;  T机机                   NOP                   NOP                   DJNZ    R5,,LOOP ;;2 T机机                      RET                ;;2 T机机例例3题题 说明:说明: 上题中上题中DLAY2中的延时时间为:中的延时时间为:          T延延2 =2 T机机+ T机机+100×5 T机机+2 T机机=505us≈0.5ms                                   而而DLAY1中的延时时间为:中的延时时间为:      T延延1=2 T机机+ T机机+((T延延2+2 T机机))×224+2 T机机                  =113567us≈114ms123 例例4.用软件延时方法实现变频振荡报警,要求用.用软件延时方法实现变频振荡报警,要求用P1.0端口输端口输          出出1kHz和和2kHz的变频信号以示报警,每隔的变频信号以示报警,每隔1秒交替变秒交替变          换一次。

      换一次DLV:: MOV    R2,,#08H                  ;;1kHz持续时间(持续时间(1秒)秒)DLV1::MOV    R3,,#0FAH              ;;内循环次数内循环次数DLV2::CPL    P1.0                              ;;输出输出1kHz方波方波1ms1s0.5ms0.5ms0.25ms1sP1.0t124               LCALL  D500us                    ;调延时;调延时500us子程序子程序              DJNZ   R3,,DLV2                ;;调用调用FA次延时子程序,次延时子程序,                                                                        持续持续125ms              DJNZ   R2,,DLV1                ;;将内循环再循环将内循环再循环8次,共次,共                                                                    持续持续1s时间时间                MOV    R2,,#10H                     ;;2kHz持续时间持续时间DLV3::MOV    R3,,#0FAH    DLV4::CPL    P1.0                                   ;;输出输出2kHz方波方波               LCALL  D250us                ;;调延时调延时250us子程序子程序               DJNZ   R3,,DLV4         ;;延时延时0.25×250=62.5ms               DJNZ   R2,,DLV3              ;;延时延时62.5×16ms=1s               SJMP   DLV                                ;;反复循环反复循环125     P1.0    P1.78031D0D7Q0Q7  74LS2408路反相驱动器路反相驱动器LED0 R+5VLED7例例2..编编制制一一个个循循环环闪闪烁烁灯灯的的程程序序。

      有有8个个发发光光二二极极管管,,每每次次其其中中某某个个灯灯闪闪烁烁点点亮亮10次次后后,,转转移移到到下下一一个个闪闪烁烁10次次,,循循环环不不止止本本程程序序的的硬硬件件连连接接如如下下图图所所示示当当P1.i输出输出 高电平时,高电平时,LED灯亮,否则不亮灯亮,否则不亮 126                 MOV  A,,#01H  ;;灯亮初值灯亮初值SHIFT::LCALL   FLASH ;;调闪亮调闪亮                                                                      10次子程序次子程序                RR   A               ;;右移一位右移一位                SJMP   SHIFT  ;;循环循环FLASH::MOV R2,,#0AH ;;闪烁闪烁10                                                                               次计数次计数127 FLASH1:: MOV    P1,,A  ;;点亮点亮                   LCALL  DELAY ;;延时延时                   MOV  P1,,#00H  ;;熄灭熄灭                   LCALL DELAY  ;;延时延时              DJNZ R2,,FLASH1;;循环循环              RET128 第四章第四章 单片机定时功能及应用单片机定时功能及应用           MCS-51系列单片机有系列单片机有2个个16位的定时器位的定时器T0和和T1,,在在实际控制系统中可实现定时或计数的功能。

      实际控制系统中可实现定时或计数的功能§4.1 定时器定时器/计数器的结构与工作原理计数器的结构与工作原理§4.2 定时器的操作模式及应用定时器的操作模式及应用 §4.3 定时器定时器/计数器的综合应用举例计数器的综合应用举例 129               一一、、定时器定时器/计数器的结构计数器的结构              二、二、定时器定时器/计数器的工作原理计数器的工作原理              三、三、TMOD与与TCON的作用与具体意义的作用与具体意义              四、四、定时器定时器/计数器的初始化计数器的初始化  第一节第一节   定时器定时器/计数器的结构与工作原理计数器的结构与工作原理130 组成:组成:MCS-51单片机内部定时器由两个特殊功能寄单片机内部定时器由两个特殊功能寄            存器存器TCON和和TMOD及及T0、、T1组成§定时器定时器/ /计数器的结构计数器的结构T0和和T1:为两个:为两个16位的定时器位的定时器/计数器,均可以分成计数器,均可以分成2                 个独立的个独立的8位计数器位计数器,,即即TH0、、TL0、、TH1、、                 TL1,,它们用于存定时或计数的初值,它们它们用于存定时或计数的初值,它们                 是一个加是一个加1的计数器。

      的计数器TCON:为控制寄存器,主要用来控制定时器的启动:为控制寄存器,主要用来控制定时器的启动                与停止TMOD:为模式控制寄存器,主要用来设置定时器:为模式控制寄存器,主要用来设置定时器/                 计数器的操作模式计数器的操作模式131 §定时器定时器/ /计数器的工作原理计数器的工作原理        T0和和T1均可工作于定时均可工作于定时/计数方式,到底工作于什计数方式,到底工作于什么方式可由用户通过软件给么方式可由用户通过软件给TMOD赋值决定,其中:赋值决定,其中:⑴⑴ 当当CTC工作于工作于定时定时状态(即状态(即C / T=0))时:计数输入时:计数输入     信号来自信号来自内部时钟脉冲内部时钟脉冲,在每一个机器周期内定时,在每一个机器周期内定时     器的计数器加器的计数器加1,故而定时器可以看成是,故而定时器可以看成是computer     机器周期的计数器(因为机器周期的计数器(因为T机机=12T振振,所以定时器,所以定时器     的的计数频率为振荡频率的计数频率为振荡频率的1/12, 即:即:fcount=fosc/12)。

          132 §定时器定时器/ /计数器的工作原理计数器的工作原理⑵⑵ CTC工作于工作于计数计数方式(方式(C/T=1))时:计数输入来自时:计数输入来自    于相应的于相应的外部外部P3.4引脚引脚T0或或P3.5引脚引脚T1要求由要求由P3.4     或或P3.5输入的计数脉冲的高电平及低电平的保持时输入的计数脉冲的高电平及低电平的保持时     间均至少应大于一个完整的机器周期,才能保证间均至少应大于一个完整的机器周期,才能保证     计数的正确性所以计数的正确性所以最高计数频率为晶振频率的最高计数频率为晶振频率的     1/24 ,  fcount<=fosc/24 ((且在脉冲的下降沿计数器且在脉冲的下降沿计数器     的值加的值加1)) 133                            D7    D6   D5    D4      D3      D2   D1   D0       TMOD  GATE  C/T  M1   M0  GATE  C/T  M1  M0       ((89H))                                     定时器定时器T1                       定时器定时器T0TMOD与与TCON的作用与具体意义:的作用与具体意义: 1..  TMOD简介简介::              TMOD是一个专用寄存器,用于控制是一个专用寄存器,用于控制T1和和T0的操作模式的操作模式及工作方式,及工作方式,TMOD模式控制寄存器不能进行位寻址,只能用模式控制寄存器不能进行位寻址,只能用字节传送指令设置定时器的工作方式及操作模式,低字节传送指令设置定时器的工作方式及操作模式,低4位用于位用于定义定时器定义定时器T0,,高高4位用于定义定时器位用于定义定时器T1。

      系统复位时系统复位时TMOD所有位均为所有位均为0其各位定义如下:其各位定义如下:134 当当GATE=1时:称为时:称为硬硬启动,定时器的启动要由启动,定时器的启动要由TRi                            位和外部中断引脚位和外部中断引脚INTi共同控制只共同控制只                            有当外部中断引脚有当外部中断引脚 INT0((P3.2))或或                            INT1((P3.3))为为高高 电平时,电平时,TR0 或或                            TR1置置1才能启动定时器工作才能启动定时器工作GATE::门控位,用来控制定时器启动操作方式,分门控位,用来控制定时器启动操作方式,分               软起动与硬起动两种软起动与硬起动两种TMOD简介简介当当GATE=0时:称为时:称为软软启动,定时器只由软件控制位启动,定时器只由软件控制位                                         TR0或或TR1来控制启停当来控制启停。

      当TCON中中                            的的TRi位为位为1,定时器启动开始定时;,定时器启动开始定时;                            Ri=0时,定时器停止工作时,定时器停止工作135 C / T::功能选择位功能选择位TMOD简介简介当当C/T=0时:时:T0或或T1设置为设置为定时定时器工作方式;计数脉器工作方式;计数脉                       冲由内部提供,计数周期等于机器周期冲由内部提供,计数周期等于机器周期M1 M0::操作模式控制位,操作模式控制位,2位可形成位可形成4种编码,对应种编码,对应                于于4种操作模式种操作模式4种模式定义如下:种模式定义如下:当当C/T=1时:时: T0或或T1设置为设置为计数计数器工作方式,计数信器工作方式,计数信                       号冲为外部引脚号冲为外部引脚T0(( P3.4 )或)或T1(( P3.5 ))                       引入的外部脉冲信号引入的外部脉冲信号136 M1  M0    操作模式操作模式      功能简述功能简述    TMOD简介简介1    1         模式模式3::T0分成分成2个独立的个独立的8位计数器位计数器TH0和和TL0,,其其                 中中TH0只可用于定时只可用于定时,而,而TL0可用于定时或计数,此可用于定时或计数,此                 时时T1停止计数,一般用于串行口波特率发生器。

      停止计数,一般用于串行口波特率发生器1   0     模式模式2::8位自动重装计数器,位自动重装计数器,THi的值在计数中不变,的值在计数中不变,                TLi溢出时,溢出时,THi中的值自动装入中的值自动装入TLi中0    1        模式模式1::16位计数器位计数器      0    0        模式模式0::13位计数器,位计数器,THi使用高使用高8位,位,TLi使用低使用低                5位,而位,而Tli的高三位系统由动添的高三位系统由动添0137 TMOD与与TCON的作用与具体意义:的作用与具体意义:TF1:定时器定时器T1溢出中断请求标志,溢出中断请求标志,T1溢出时由硬件自动将其溢出时由硬件自动将其            置置“1”,并可申请中断(若此时,并可申请中断(若此时IE寄存器中相应位允许,寄存器中相应位允许,            则则CPU自动响应中断,进入中断子程序)当自动响应中断,进入中断子程序)当CPU响应响应            中中断断转转向向中中断断服服务务程程序序时时,,由由硬硬件件使使其其置置“0”,,即即硬硬件件自自            动置位、复位。

      软件查询须由软件清动置位、复位软件查询须由软件清“0”TCON::定定时时器器/计计数数器器控控制制寄寄存存器器,,用用来来存存放放定定时时器器/                计数器的控制字,其格式为:计数器的控制字,其格式为:2..TCON简介简介::((88H)) 8FH  8EH  8DH  8CH  8BH  8AH  89H  88H ((位位寻址)寻址) TCON     TF1   TR1  TF0    TR0   IE1    IT1    IE0    IT0    138 IE0与与IE1::外部中断外部中断INT0和中断和中断INT1 (( P3.2、、 P3.3))的中断请的中断请                       求标志TCON简介简介当当ITi=1时规定时规定INTi为边沿(脉冲)触发方式,为边沿(脉冲)触发方式,下降沿有效下降沿有效当当ITi=0时规定时规定INTi为电平触发方式,为电平触发方式,低电平有效低电平有效TR1::T1的运行控制位,由软件对其进行置位和复位,来启的运行控制位,由软件对其进行置位和复位,来启             动动和和关关闭闭定定时时器器/计计数数器器T1,,定定时时器器启启动动时时该该位位应应置置“1”。

      TF0::功能同功能同TF1,,对象为对象为T0TR0::功能同功能同TR1,,对象为对象为T0IT1与与 IT0::用软件置位用软件置位/清清0来选择外部中断源的起动方式为来选择外部中断源的起动方式为                        边沿或电平触发方式边沿或电平触发方式139 IE0与与IE1::当外部中断源有中断请求时,硬件自动当外部中断源有中断请求时,硬件自动                       将将IEi置位当CPU 响应中断并转向中断响应中断并转向中断                       服务子程序时,如为服务子程序时,如为低低电平触发电平触发(ITi=0))                      方式方式,,IEi不能由硬件使其复位不能由硬件使其复位“0”,只,只有有                      当外部中断申请信号再变为当外部中断申请信号再变为高高电平时,电平时,                      才由才由CPU自动自动清除清除IEi ;;如为边沿(如为边沿(下降下降                      沿)触发方式(沿)触发方式(ITi=1),),当当CPU 响应中响应中                      断时由硬件自动将断时由硬件自动将IEi 清清“0”。

       TCON简介简介140          对对CTC使用前,必须先进行初始化初始化程使用前,必须先进行初始化初始化程序中要写入相应的控制字序中要写入相应的控制字 定时器定时器/ /计数器的初始化计数器的初始化    2.设置定时或计数器的初值.设置定时或计数器的初值——可直接将初值可直接将初值          写入写入TH0、、TL0或或TH1、、TL1中16位计数位计数         初值必须分两次写入对应的计数器初值必须分两次写入对应的计数器  1.确定工作方式、操作模式、启动控制方式.确定工作方式、操作模式、启动控制方式——         写入写入TMOD寄存器一)初始化的步骤:(一)初始化的步骤:141 4.启动定时器工作.启动定时器工作——可使用可使用SETB TRi启动启动若第一步若第一步      设置为软启动,即设置为软启动,即GATE设置为设置为0时,以上指令执行后,时,以上指令执行后,      定时器即可开始工作若定时器即可开始工作若GATE设置为设置为1时,还必须由时,还必须由      外部中断引脚外部中断引脚INTi共同控制,只有当共同控制,只有当INTi引脚电平为引脚电平为      高时高时,以上指令执行后定时器方可启动工作。

      定时器,以上指令执行后定时器方可启动工作定时器       一旦启动就按规定的方式定时或计数一旦启动就按规定的方式定时或计数   3.根据要求确定是否采用中断方式.根据要求确定是否采用中断方式——直接对中断允许寄直接对中断允许寄         存器存器IE各位赋值开放中断时,对应位置各位赋值开放中断时,对应位置1;采用程序;采用程序         查询方式查询方式IE对应位应清对应位应清0,进行中断屏蔽进行中断屏蔽     定时器定时器/ /计数器的初始化计数器的初始化142 定时器定时器/ /计数器的初始化计数器的初始化(二)计数初值的计算(二)计数初值的计算            模式模式0::      模式模式1::     模式模式2::     模式模式3::         定时或计数方式下计数初值如何确定,定时器选定时或计数方式下计数初值如何确定,定时器选择不同的工作方式,不同的操作模式其计数初值均不择不同的工作方式,不同的操作模式其计数初值均不相同若设最大计数值为相同若设最大计数值为M,,各操作模式下的各操作模式下的M值为:值为:    M=213=8192    M=216=65536    M=28=256 ,,8位自动重装位自动重装    M=28= 256,,定时器定时器T0分成分成2个独立个独立                           的的8位计数器位计数器143          MCS--51的两个定时器均为加的两个定时器均为加1计数器,计数器,计数器初值计数器初值X的计算方式为:的计算方式为:                     定时器定时器/ /计数器的初始化计数器的初始化         式中的式中的M由操作模式确定,不同的操作模由操作模式确定,不同的操作模式计数器的长度不相同,故式计数器的长度不相同,故M值也不相同。

      而值也不相同而式中的计数值与定时器的工作方式有关式中的计数值与定时器的工作方式有关X = M -- 计数值计数值144         计数工作方式时计数工作方式时,计数脉冲由外部引入计数脉冲由外部引入,是对外部脉是对外部脉冲进行计数冲进行计数,因此计数值根据要求确定其因此计数值根据要求确定其计数初值计数初值为为:                定时器定时器/ /计数器的初始化计数器的初始化  计数脉冲频率为:计数脉冲频率为:        fcount=fosc×1/12        定时工作方式时,因为计数脉冲由内部供给,是定时工作方式时,因为计数脉冲由内部供给,是对机器周对机器周 期进行计数,故期进行计数,故         X=M--计数值计数值 (一般:计数值(一般:计数值=计数次数)计数次数)[例例1]  某工序要求对外部脉冲信号计某工序要求对外部脉冲信号计100次:次:X=M-100 2..定时定时工作方式时工作方式时1..计数计数工作方式时工作方式时145 计数脉冲周期为计数脉冲周期为::Tc=1/fcount=12/ fosc设设t为要求定时的时间,则定时工作方式的为要求定时的时间,则定时工作方式的计数值计数值为:为:计数值计数值=定时时间定时时间/计数脉冲周期计数脉冲周期= t/Tc =(fosc×t)/12定时工作方式的定时工作方式的计数初值计数初值X等于:等于:      X=M--计数值计数值 =M-(-(fosc×t))/12      式中:式中:fosc为振荡器的振荡频率;为振荡器的振荡频率;                      M 值由操作模式决定。

      值由操作模式决定定时器定时器/ /计数器的初始化计数器的初始化146 [例例2]  MCS—51的主频为的主频为6MHz,,要求产生要求产生1ms的定时,的定时,             假设定时器工作于操作模式假设定时器工作于操作模式1,则其初值为:,则其初值为:           定时器定时器/ /计数器的初始化计数器的初始化[例例3] 设置设置T1为定时工作方式,定时为定时工作方式,定时50ms,选操作模选操作模          式式1,允许中断,软启动;,允许中断,软启动;T0为计数方式,对为计数方式,对          外部脉冲进行计数外部脉冲进行计数10次,硬启动,禁止中断,次,硬启动,禁止中断,          选操作模式选操作模式2编写初始化程序,设编写初始化程序,设 fosc=6MHzX=216-(-(6×106×1ms))/12 =65536--500   =65036 =0FE0CH( (注意单位的转换:注意单位的转换:ms→s)ms→s)147 定时器定时器/ /计数器的初始化计数器的初始化解:解:T0设为计数方式模式设为计数方式模式2,硬启动硬启动,故计数初值故计数初值X0为:为:                  X0=256-10=246=F6H    X1=65536-(6×50×1000)/12     =65536-25000=40536=9E58H模式控制字:模式控制字:0 0 0 1 1 1 1 0      1EH初始化程序如下:初始化程序如下:T1设为定时方式,定时设为定时方式,定时50ms, 模式模式1,软启动,,软启动,其计数初值其计数初值X1为:为:148 定时器定时器/ /计数器的初始化计数器的初始化MOV    TMOD,  #1EH          ;;写工作模式字写工作模式字MOV    TH0,    #0F6H          ;;定时器定时器0计数初值计数初值MOV    TL0,    #0F6HMOV    TH1,    #9EH           ;;定时器定时器1计数初值计数初值MOV    TL1,    #58HMOV    IE,     #10001000B      ;;CPU、、T1开中断开中断SETB    TR0    ;;启动启动T0, 但要等到待但要等到待INT0=1时,时,                                    T0方可真正启动,开始定时方可真正启动,开始定时SETB    TR1    ;;启动启动T1,,T1开始定时开始定时149 第二节第二节   定时器的操作模式及应用定时器的操作模式及应用 一、一、模式模式0及应用及应用::二、二、模式模式1及应用及应用::三、三、模式模式2及应用及应用::四、四、模式模式3及应用及应用::150 注:注:模式模式0是是13位定时器的操作模式,当计算出计数初值位定时器的操作模式,当计算出计数初值X       ((13位)后,应先将位)后,应先将X转换为转换为16位再填入位再填入THi与与TLi中,具中,具         体转换的方法为:保持体转换的方法为:保持X的的低低5位值不变,将位值不变,将X的的      高高8位值依次左移位值依次左移3位(空出的三位补位(空出的三位补0))      后后,再与,再与X的低的低5位组合成位组合成16位数分别送入位数分别送入THi与与TLi中。

      中 TF0     TH0          TL0((高高8位)位)(低低5位)位)中中断断  12分频分频foscT0(P3.4))C/T=0C/T=1TR01GATEINT0(P3.2))控制控制fosc/12TH0((或)或)TH1模式模式0结构结构&151 例例1.选用.选用T0操作模式操作模式0,用于定时,用于定时,,由由P1.0输出周输出周          期为期为10ms的方波,设晶振的方波,设晶振fosc=6MHzX0=213-fosc×t/12=8192-6×5×1000/12    =8192-2500=5692=163CH解:解:P1.0输出周期为输出周期为10ms宽的方波,只要每隔宽的方波,只要每隔5ms        取反一次即可得到取反一次即可得到10ms的方波因此可以选的方波因此可以选        用用T0定时定时5ms152          由于上电复位后,由于上电复位后,TMOD各位均为各位均为0,所以此控制,所以此控制字(字(00H))可以不用写入可以不用写入TMOD中初始化程序如下:中初始化程序如下:由由X0=163CH即:即: 0001011000111100 得得::转换后:转换后: X0= 1011000100011100B=0B11CH根据题义设置模式控制字根据题义设置模式控制字TMOD为:为: 00000000, 即即00H          由于作由于作13位计数器使用,位计数器使用,TL0的高的高3位未用,应位未用,应填填0,所以应将计数初值的高,所以应将计数初值的高11位全部向左平移位全部向左平移3位,位,低低5位保持不变,中间空出的位保持不变,中间空出的3位填位填0。

      因而因而X0的实际的实际值应为:值应为:153           ORG    8000H     MOV    TL0,  #1CH    ;;T0的计数初值的计数初值X0     MOV    TH0,  #0B1H     SETB    TR0           ;;启动启动T0    LP1:: JBC     TF0,  LP2      ;;查询计数溢出否,查询计数溢出否,                                                             同时清除同时清除TF0      AJMP    LP1           ;;没有溢出等待没有溢出等待   LP2::MOV  TL0,   #1CH  ;;溢出重置计数初值溢出重置计数初值      MOV    TH0,   #0B1H      CPL     P1.0            ;;输出取反输出取反      SJMP    LP1             ;;重复循环重复循环154          模式模式1与模式与模式0结构完全相同,唯一区别是计数结构完全相同,唯一区别是计数器长度为器长度为16位。

      位例例2.用定时器.用定时器1产生一个产生一个50Hz的方波,由的方波,由P1.1输出,输出,          仍用程序查询方式,仍用程序查询方式,fosc=12MHz模式模式1 1及应用及应用解:方波周期解:方波周期T=1/50=0.02s, 用用T1定定10ms,,计数初值计数初值       X1=216-12×10×1000/12 =65536-10000         =55536=0D8F0H源程序如下:源程序如下:155       MOV   TMOD,   #10H     ;;T1模式模式1,定时,定时      SETB   TR1               ;;启动启动T1LOOK::MOV   TH1,     #0D8H    ;;T1计数初值计数初值      MOV   TL1,     #0F0H       $:: JNB    TF1,      $        ;;T1没有溢出等待没有溢出等待      CLR    TF1               ;;产生溢出清标志位产生溢出清标志位      CPL    P1.1               ;;P1.1取反输出取反输出      SJMP   LOOP              ;;循环循环 156 TF0   TL0((8位)位)中中断断  12分频分频foscT0(P3.4)C/T=0C/T=1TR0&GATEINT0(P3.2))控制控制fosc/12T0((或)或)T1模式模式2结构结构   TH0((8位)位)重重装装入入         当模式当模式0、模式、模式1用于循环重复定时计数时,每用于循环重复定时计数时,每次计满溢出,寄存器全部为次计满溢出,寄存器全部为0,第二次计数还得重新,第二次计数还得重新计数初值,这样编程麻烦,而且影响定时时间精度,计数初值,这样编程麻烦,而且影响定时时间精度,模式模式2解决了这种缺陷。

      解决了这种缺陷模式模式2 2及应用及应用157 [例例3]用定时器用定时器1,模式,模式2计数,要求每计满计数,要求每计满100次,次,         将将P1.0端取反模式模式2 2及应用及应用计数初值:计数初值:   X1=28-100=156=9CH                    TH1=TL1=9CH,                      TMOD=60H (计数方式,模式计数方式,模式2) 源程序如下:源程序如下:解:解:T1 工作于计数方式,外部计数脉冲由工作于计数方式,外部计数脉冲由T1(P3.5)        引脚引入,每来一个由引脚引入,每来一个由1至至0的跳变,计数器的跳变,计数器        加加1,由程序查询,由程序查询TF1的状态158               MOV   TMOD,   #60H ;;T1模式模式2,计数方式,计数方式              MOV   TH1,     #9CH      ;;T1计数初值计数初值     MOV   TL1,     #9CH              SETB   TR1                ;;启动启动T1 LOOP: JBC     TF1,     REP   ;;TF1=1转且使转且使TF1=0              SJMP   LOOP              ;;否则等待否则等待 REP:: CPL    P1.0                ;;P1.0取反输出取反输出              SJMP   LOOP              ;;模式模式2 2及应用及应用159 [例例4] 由由P3.4引脚引脚(T0)输入一低频脉冲信号(其频率输入一低频脉冲信号(其频率<0.5kHz)),要要         求求P3.4每发生一次负跳变时,每发生一次负跳变时,P1.0输出一个输出一个500μs的同步脉的同步脉         冲,同时冲,同时P1.1输出一个输出一个1ms的同步脉冲。

      已知的同步脉冲已知fosc=6MHz 模式模式2 2及应用及应用1ms1ms500μs500μsP3.4P1.0P1.1定时方式定时方式计数方式计数方式计数方式计数方式定时方式定时方式解:按题意画出输出信号的波形如下图:解:按题意画出输出信号的波形如下图: 160 模式模式2 2及应用及应用⑴⑴设初态设初态P1.0输出高电平(系统复位时即为高),输出高电平(系统复位时即为高),P1.1输出低输出低    电平电平,,设设T0为模式为模式2,计数工作方式(,计数工作方式(1次,初值为次,初值为FFH)⑸⑸ 然后然后T0又恢复对外部脉冲的计数方式,如此循环又恢复对外部脉冲的计数方式,如此循环     500μs定时的计数初值定时的计数初值X为:为:X=256-500×6/12=06H⑷⑷当当T0第一次定时第一次定时500μs到时,计数器溢出后,使到时,计数器溢出后,使P1.0恢复为恢复为1,,    P1.1不变,不变,T0继续第二次继续第二次500μs定时的计数,第二次产生溢出定时的计数,第二次产生溢出    后恢复后恢复P1.1为为0⑶⑶此时再将此时再将T0改变为定时工作方式(改变为定时工作方式(500μs,,初值为初值为06H)),并,并    且使且使P1.0输出为输出为0,,P1.1输出为输出为1。

      ⑵⑵当加在当加在P3.4上的外部脉冲产生由上的外部脉冲产生由1至至0的负跳变时,则使的负跳变时,则使T0计数计数    器加器加1而产生溢出,程序查询到而产生溢出,程序查询到TF0为为1时,表示计数到时,表示计数到161 程序如下:程序如下:START::MOV   TMOD,  #06H    ;;T0模式模式2,计数工作方式,计数工作方式      MOV   TH0,     #0FFH   ;;T0计数初值计数初值      MOV   TL0,     #0FFH       CLR    P1.1             ;;P1.1初态为初态为0     SETB   TR0            ;;启动启动T0       LOOP::  JBC   TF0,   LP1    ;;检测外部信号负跳变否?检测外部信号负跳变否?     SJMP   LOOP           ;;无等待无等待LP1::      CLR    TR0          ;;关定时器关定时器     MOV   TMOD,  #02H    ;;T0改变为定时改变为定时500μs,,模式模式2     MOV   TH0,    #06H     ;;定时的计数初值定时的计数初值       MOV   TL0,    #06H   162        SETB   P1.1             ;;P1.1输出输出1       CLR    P1.0             ;;P1.0输出输出0       SETB   TR0             ;;启动启动T0定时定时LOOP1::JBC   TF0,    LP2      ;;第一个第一个500μs到否?到否?       SJMP   LOOP1           ;;未到等待未到等待LP2::      SETB   P1.0              ;;到了到了P1.0恢复恢复LOOP2::JBC   TF0,    LP3      ;;第二个第二个500μs到否?到否?       SJMP   LOOP2    LP3::      CLR    P1.1              ;;P1.1恢复恢复0       CLR    TR0              ;;关定时器关定时器      AJMP   START 163 TF0   TL0((8位)位)中中断断  12分频分频foscT0(P3.4)C/T=0C/T=1TR0+GATEINT0((P3.2))控制控制fosc/12TL0模式模式3结构结构TH0模式模式3结构结构TF0   TH0((8位)位)TR1控制控制fosc/12中中断断模式模式3 3及应用及应用164 ①①T0可分为两个独立的可分为两个独立的8位定时计数器位定时计数器TH0和和TL0,,    其中其中TH0只能作为只能作为8位定时器,而位定时器,而TL0既可以作既可以作    为定时器又可以作为计数器用。

      为定时器又可以作为计数器用    模式模式3 3及应用及应用1.操作模式.操作模式3只适合于定时器只适合于定时器T02..T0工作于操作模式工作于操作模式3下的特点:下的特点:③③TH0的启停只受的启停只受TR1的控制,不受的控制,不受GATE位的位的    控制(但控制(但TL0仍受仍受GATE的控制)的控制) ②② TL0占用占用T0的全部控制位、引脚和标志位的全部控制位、引脚和标志位TR0,,     而而TH0占用占用T1的中断源和的中断源和TR1、、TF1165 3..T0工作于操作模式工作于操作模式3下下T1的特点:的特点:   模式模式3 3及应用及应用④④ T0工作于操作模式工作于操作模式3时,时,T1一般用作串行口一般用作串行口     的波特率发生器的波特率发生器 ③③ T1的停止:给的停止:给T1送入送入模式模式3的模式控制字后,的模式控制字后,     T1就停止工作就停止工作②② T1的启动:的启动:T1设置好工作方式后就设置好工作方式后就自动自动启动,启动,     不能使用不能使用TR1控制位①①  此时此时T1仍可被设置为模式仍可被设置为模式0、、1或或2,用于不,用于不      需要中断的场合下的定时或计数。

      需要中断的场合下的定时或计数166 [例例5]设某用户系统中已使用了设某用户系统中已使用了2个外部中断源,并置定时器个外部中断源,并置定时器T1工工         作于模式作于模式2,作串行口波特率发生器用现要求再增加一个,作串行口波特率发生器用现要求再增加一个         外部中断源并由外部中断源并由P1.0输出一个输出一个5kHz的方波fosc=12MHz模式模式3 3及应用及应用TL0的计数初值为的计数初值为0FFH;;TH0的计数初值的计数初值X为:为:∵∵P1.0的方波频率为的方波频率为5kHz,,故周期故周期T=1/5kHz=0.2ms=200μs∴∴用用TH0定时定时100μs,,X=256-100×12/12=156 解:为了不增加其它硬件开销,可设置解:为了不增加其它硬件开销,可设置T0工作于模式工作于模式3计数方式,计数方式,        把把T0的引脚作附加的外部中断输入端,的引脚作附加的外部中断输入端,TL0的计数初值为的计数初值为        FFH,,当检测到当检测到T0引脚由引脚由1至至0负跳变使,负跳变使,TL0立即产生溢出,立即产生溢出,       申请中断,相当于边沿触发的外部中断源。

      申请中断,相当于边沿触发的外部中断源T0模式模式3下下TL0       作计数器用,而作计数器用,而TH0可用作可用作8位的定时器,定时控制位的定时器,定时控制P1.0输出输出       的的5k Hz的方波信号的方波信号167 MOV  TMDO,   #27H ;;T0模式模式3,计数;,计数;T1模式模式2,定时,定时MOV   TL0,     #0FFH   ;;TL0计数初值计数初值MOV   TH0,     #156    ;;TH0计数初值计数初值MOV  TH1,    #data ;;data是根据波特率要求设置的常数是根据波特率要求设置的常数MOV   TL1,     #data ;; focs=12MHzMOV  TCON,   #55H    ;;外中断外中断0、、1边沿触发,边沿触发,                                                           启动启动TH0,,TH1MOV   IE,       #9FH    ;;开放全部中断开放全部中断源程序如下:源程序如下:168 第三节第三节   定时器定时器/计数器的综合应用举例计数器的综合应用举例 一、一、定时器定时器/计数的综合应用举例计数的综合应用举例:二、二、运行中读定时器运行中读定时器/计数器:计数器:169 解:设外部脉冲由解:设外部脉冲由INT0(P3.2)输入,输入,T0工作于定时方式,选择工作于定时方式,选择        操作模式操作模式1((16位计数),位计数),GATA设为设为1,测试时,应在,测试时,应在        INT0为低电平时,设置为低电平时,设置TR0为为1,一旦,一旦INT0变为高电平时,变为高电平时,        就启动计数;就启动计数;INT0再次变化时,停止计数。

      此计数值(放再次变化时,停止计数此计数值(放        在在TH0、、TL0中)即为被测脉冲的宽度中)即为被测脉冲的宽度定时器的综合应用举例定时器的综合应用举例测试程序如下:测试程序如下:例例6:利用:利用T0门控位测试门控位测试INT0引脚上出现的正脉冲宽度,已知引脚上出现的正脉冲宽度,已知          fosc=12MHz,,将所测到的高将所测到的高8位值存入片内位值存入片内71H,,低低8位存位存         入片内入片内70H单元中170 MOV  TMOD,  #09H  ;;T0定时,模式定时,模式1,,GATA=1MOV  TL0,    #00H   ;;T0从从0000H开始计数开始计数MOV  TH0,    #00HMOV  R0,     #70HJB     P3.2,   $       ;;等待等待P3.2变低变低SETB  TR0            ;;P3.2已变低,准备启动已变低,准备启动T0JNB    P3.2,   $       ;;等待等待P3.2变高,启动变高,启动T0计数计数JB     P3.2,   $        ;;等待等待P3.2再次变低再次变低CLR   TR0            ;; P3.2已变低,已变低,T0停止计数停止计数MOV  @R0,   TL0     ;;存入计数值存入计数值INC    R0MOV  @R0,   TH0171 例例7:试用:试用8051定时器定时器0作外部工件计数器,外部工件信号由作外部工件计数器,外部工件信号由T0          端引入,端引入,T1作定时器,每隔一秒钟检测一次作定时器,每隔一秒钟检测一次T0中的计数值,中的计数值,          当检测到当检测到100个工件时,使个工件时,使P1.0端口输出信号变反,程序不端口输出信号变反,程序不           断循环控制断循环控制P1.0的输出,设的输出,设fosc=12MHz。

      定时器的综合应用举例定时器的综合应用举例R7软件计数:计数值软件计数:计数值=1×1000/50=20工作模式控制字设置为:工作模式控制字设置为:0  0  0  1  0  1  1  0           16H定时器定时器T0的计数的计数初值初值::X0=256-100=156定时器定时器T1的计数的计数初值初值:设:设T1定时定时50ms,,模式模式1X1=216-(50×12×103)/12=15536=3CB0H解:外部信号由解:外部信号由T0(P3.4)引脚引入引脚引入8051,设置,设置T0为计数方式,模为计数方式,模        式式2;;T1为定时方式,与软件计数一起实现定时为定时方式,与软件计数一起实现定时1秒钟172 源程序如下:源程序如下:MOV  TMOD,  #16H;;T1模式模式1定时,定时,T0模式模式2计数计数MOV  TH1,    #3CH  ;;T1计数初值,定时计数初值,定时50msMOV  TL1,    #B0HMOV  TH0,    #156   ;;T0计数初值,计数计数初值,计数100次次MOV  TL0,    #156MOV  R7,     #20  ;;R7软件计数软件计数20次次CLR   EA            ;;屏蔽所有中断(关屏蔽所有中断(关CPU中断)中断)SETB  TR1           ;;启动启动T1SETB  TR0           ;;启动启动T0173 LOOP::JBC    TF1,   LQ     ;;T1溢出转溢出转       SJMP  LOOP          ;;否等待否等待LQ::      MOV  TH1,   #3CH   ;;重装重装T1计数初值计数初值       MOV  TL1,   #B0H       DJNZ  R7,    LOOP  ;;1秒未到转秒未到转       MOV  R7,     #20    ;;1秒到重装软件计数值秒到重装软件计数值LP::       JNB   TF0,    LOOP  ;;T0未溢出转未溢出转       CPL   P1.0    ;;100个工件计满个工件计满P1.0输出变反输出变反       SJMP  LOOP         ;;返回重复循环返回重复循环174 例例7:已知:已知8051单片机的单片机的fosc=12MHz,用,用T1工工          作在方式作在方式2定时,试编程由定时,试编程由P1.1输出周期输出周期          为为2ms的方波。

      的方波MOV  TMOD,,#20H ;;T1方式方式2                                                                              定时定时MOV  TH1,,#06H ;定时;定时250μsMOV  TL1,,#06HSETB  TR1175 L2::MOV  R2,,#04HL1::JNB  TF1,,$         CLR  TF1         DJNZ  R2 ,  L1         CPL  P1.1         SJMP  L2176 例例9:某单片机系统:某单片机系统,时钟频率为时钟频率为12MHZ,定时,定时         器器/计数器计数器T0用于用于20ms定时定时,T1用于用于100次次        计数,两者均要求重复工作计数,两者均要求重复工作,试编写达到上试编写达到上        述要求的程序述要求的程序. 解:解:TMOD  01100001,,   T0定时定时20ms ::          X0=216-20×10-3×12×106/12=0B1E0H,,         T1计数计数100次:次:X1=28-100=156 MOV TMOD,  #62HCLR   EA177 MOV  TH1,    #156MOV  TL1,    #156 SETB  TR1           SETB  TR0          LOOP1::MOV  TH0,    #0B1HMOV  TL0,    #0E0H LOOP2::JBC  TF0,   LOOP1  SJMP  LOOP2 178 运行中读定时器运行中读定时器/ /计数器计数器定时器定时器/计数器计数器在在运行中可随时任意改变其运行中可随时任意改变其定时定时/计计数数  常数,具体方法有二:常数,具体方法有二:1.在在定时器定时器/计数器运行过程中计数器运行过程中直接装入新的定时直接装入新的定时   /计数常数;计数常数;定时器定时器/计数器计数器在在运行中可不打断其定时过程而随时运行中可不打断其定时过程而随时   读取其当前的计数值,具体步骤为:读取其当前的计数值,具体步骤为:2.先关闭先关闭定时器定时器/计数器计数器,装入新的定时,装入新的定时/计数常计数常   数后再起动数后再起动定时器定时器/计数器计数器。

      179 1.先读取高先读取高8位位THi的值;的值;2.然后读取低然后读取低8位位TLi的值;的值;3.最后再读取高最后再读取高8位位THi的值;的值;例如以下读取结果为:例如以下读取结果为:TH0=10H,,TL0=0FFH,,TH0=11H    ((重读重读))TH0=11H,,TL0=00H,,   TH0=11H    ((可以可以))4.比较前后两次读取的比较前后两次读取的THi值是否相同,相同则表示值是否相同,相同则表示   THi及及TLi中的内容即为中的内容即为定时器定时器/计数器计数器的当前值,的当前值,   不同则要重复整个读取过程不同则要重复整个读取过程180 运行中读定时器运行中读定时器/ /计数器计数器RDTIME:  MOV   A,,  THi    MOV   R0,   TLi    CJNE   A,,THi,,RDTIME      MOV    R1,,A    RET               程序程序读入的定时器读入的定时器/计数器计数器的计数值高的计数值高8位在位在R1 中,低中,低8位在位在R0中运行中运行中读定时器读定时器/ /计数器计数器的程序如下:的程序如下:181 第五章第五章 单片机的中断系统单片机的中断系统  §5.1 MCS-51的中断系统的中断系统§5.2 中断处理过程中断处理过程§5.3 外部中断的扩充方法外部中断的扩充方法 182 第一节第一节 MCS-51的中断系统的中断系统    一、一、中断的概念、优点及中断系统的组成中断的概念、优点及中断系统的组成   二.二.中断源及中断服务程序入口地址中断源及中断服务程序入口地址     三.三.中断控制部分的功能中断控制部分的功能    四四.   中断优先级结构中断优先级结构 183         计算机在执行某一段程序的过程中,由于计算计算机在执行某一段程序的过程中,由于计算机系统内、外部的某种原因,有必要中止原程序的机系统内、外部的某种原因,有必要中止原程序的执行,而去执行相应处理程序,待处理程序被执行执行,而去执行相应处理程序,待处理程序被执行完之后,再回去执行被终止的原程序,这种在完之后,再回去执行被终止的原程序,这种在程序程序执行过程中由于某些随机原因被中间打断的情况称执行过程中由于某些随机原因被中间打断的情况称之为之为“中断中断”。

      中断类似于程序中调用子程序,区别中断类似于程序中调用子程序,区别在于在于中断的发生是随机中断的发生是随机的,而调用子程序是编程人的,而调用子程序是编程人员在时间上事先安排好的员在时间上事先安排好的§MCS-51的中断系统的中断系统§ 中断的概念、优点及中断系统的组成中断的概念、优点及中断系统的组成§中断定义中断定义184 ①① 提高了提高了CPU对外界异步事件的处理能力,如对外界异步事件的处理能力,如CPU可以命令定可以命令定     时器,串行口及外设同时工作,大大提高时器,串行口及外设同时工作,大大提高CPU的工作效率;的工作效率;    §MCS-51的中断系统的中断系统§ 中断的概念、优点及中断系统的组成中断的概念、优点及中断系统的组成§中断技术的优点中断技术的优点::       MCS-51中断系统有中断系统有5个中断源,由个中断源,由5个个SFR((TCON、、SCON、、IE、、IP和和T1))和顺序查询逻辑组成和顺序查询逻辑组成中断系统的组成:中断系统的组成:看看P76图图5.1③③ 使使CPU具有了处理故障的能力,如电源突跳、存储出运算,具有了处理故障的能力,如电源突跳、存储出运算,       溢出等错误等,计算机均不必停机,可以自动解决。

      溢出等错误等,计算机均不必停机,可以自动解决②②   可使可使CPU及时处理实时控制中许多随机参数和信息;及时处理实时控制中许多随机参数和信息; 185           MCS-51中断系统有中断系统有5个中断源,它们分别为:个中断源,它们分别为:INT0 ((P3.2)、)、INT1((P3.3)、)、T0((P3.4)、)、T1((P3.5),),串串行口发送和接收中断源行口发送和接收中断源RXD((P3.0)、)、TXD((P3.1)其其中,中,INT0、、INT1、、T0和和T1的中断标志在的中断标志在TCON中(对应中(对应于于IE0、、IE1和和TF0、、TF1)RXD和和TXD的中断标志在的中断标志在SCON中(对应于中(对应于RI和和TI)引起中断的原因或发出中断申请的来源称引起中断的原因或发出中断申请的来源称之为中断源之为中断源        § MCS-51的中断系统的中断系统§中断源及中断服务程序入口地址中断源及中断服务程序入口地址1.中断源.中断源::186 § MCS-51的中断系统的中断系统§中断源及中断服务程序入口地址中断源及中断服务程序入口地址 2..  中断服务子程序的入口地址中断服务子程序的入口地址              中断源中断源                   矢量地址矢量地址         自然优先级自然优先级     INT0外部中断外部中断0中断中断       0003H             最高最高     T0定时器定时器0中断中断               000BH                              INT1外部中断外部中断1中断中断       0013H                                     T1定时器定时器1中断中断               001BH                                       RI或或TI串行口中断串行口中断         0023H             最低最低   187            MCS—51的中断服务子程序的入口地址是的中断服务子程序的入口地址是固定的,由固定的,由0003H开始至开始至0023H,,每个中断源的中每个中断源的中断服务子程序的入口地址(又称中断矢量地址)断服务子程序的入口地址(又称中断矢量地址)内只有内只有8个字节,所以一般在此地址内使用个字节,所以一般在此地址内使用JMP指指令,使中断子程序转移到用户安排的中断服务程令,使中断子程序转移到用户安排的中断服务程序的入口处。

      序的入口处 § MCS-51的中断系统的中断系统§中断源及中断服务程序入口地址中断源及中断服务程序入口地址188   1..中断请求标志中断请求标志   ①①  IE0::INT0((外部中断外部中断0)的中断请求输入端标志)的中断请求输入端标志,,                    标志标志P3.2引脚输入的信号是否有效引脚输入的信号是否有效   ②② IE1::INT1((外部中断外部中断1)的中断请求输入端标志,)的中断请求输入端标志,                   标志标志P3.3引脚输入的信号是否有效引脚输入的信号是否有效§ MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能         MCS-51单片机有单片机有5个中断源,它们的有关信号个中断源,它们的有关信号分别锁存在分别锁存在TCON((定时定时/计数控制计数控制R))和和SCON((串串行口控制行口控制R))中189          INT0与与INT1都可直接接受外设向都可直接接受外设向CPU发出的中发出的中断申请信号,它们有效时分别由断申请信号,它们有效时分别由 硬件对硬件对TCON的的 IE0和和 IE1进行置位,中断信号的触发形式受定时进行置位,中断信号的触发形式受定时/计数器计数器控制寄存器控制寄存器TCON中中IT0与与IT1控制。

      当为控制当为脉冲脉冲触发触发((ITi=1))时,时,IEi 在在CPU 响响 应中断时自动由硬件清应中断时自动由硬件清0;;当为(当为(低低))电平电平触发(触发(ITi=0))时,在时,在CPU响应中断响应中断后,只有当后,只有当INTi引脚上的引脚上的电平由低变高电平由低变高时,时,IEi位才位才能由硬件清除能由硬件清除 § MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能190 § MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能§中断请求标志中断请求标志④④ TF1::片内定时器片内定时器T1溢出中断请求标志,当定时溢出中断请求标志,当定时     器器T1定时或计数到产生溢出时,硬件电路就自动定时或计数到产生溢出时,硬件电路就自动     置位置位TCON中的中的TF1,,向向CPU发出中断申请发出中断申请③③ TF0::片内定时器片内定时器T0的溢出中断请求标志,当定的溢出中断请求标志,当定     时器时器T0定时或计数到产生溢出时,硬件电路就自定时或计数到产生溢出时,硬件电路就自     动置位动置位TCON中的中的TF0,,向向CPU发出中断申请。

      发出中断申请  191   ⑤⑤ TI或或RI::串行口中断请求,当串行口发送一帧串行口中断请求,当串行口发送一帧       信号结束时,由硬件电路自动置位串行口控制信号结束时,由硬件电路自动置位串行口控制       寄存器寄存器 SCON中的中的TI=1,,或者串行口接收一帧或者串行口接收一帧       信号结束时,由硬件电路自动置位信号结束时,由硬件电路自动置位RI=1,,向向       CPU发出中断申请,请求发出中断申请,请求CPU进行中断处理进行中断处理§ MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能§中断请求标志中断请求标志   (注:任何情况下,(注:任何情况下,RI和和TI都必须由软件进行清都必须由软件进行清0 192         (A8H ) AFH   AEH   ADH   ACH   ABH   AAH   A9H   A8H    IE       EA                             ES     ET1     EX1    ET0    EX0     2.中断允许与屏蔽.中断允许与屏蔽§ MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能        MCS-51单片机中,设有一个专用寄存器单片机中,设有一个专用寄存器IE称称为中断允许寄存器(为中断允许寄存器(interrupt permit),),其作用其作用是用来对各中断源进行开放或屏蔽的控制。

      其各是用来对各中断源进行开放或屏蔽的控制其各位的定义如下:位的定义如下:193   EA-IE.7::为为CPU中断总允许位中断总允许位EA=1 CPU开放开放                    中断,而每个中断源是开放还是屏蔽中断,而每个中断源是开放还是屏蔽                    分别由各自的允许位确定分别由各自的允许位确定EA=0时时                      CPU关中断,禁止一切中断关中断,禁止一切中断   2.中断允许与屏蔽.中断允许与屏蔽§ MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能ET1-IE.3::为定时器为定时器1中断允许位中断允许位ET1=1,,允允                     许许T1中断,否则禁止中断中断,否则禁止中断ES-IE.4::为串行口中断允许位为串行口中断允许位ES=1,,允许串行口允许串行口                  的接收和发送中断;的接收和发送中断;ES=0禁止串行口中断禁止串行口中断194 EX1-IE.2::位为外部中断位为外部中断1的中断允许位的中断允许位。

      EX1=1                      允许外部中断允许外部中断1中断:否则禁止中断中断:否则禁止中断  2.中断允许与屏蔽.中断允许与屏蔽§ MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能EX0-IE.0::为外部中断为外部中断0的中断允许位的中断允许位EX0=1允允                      许外部中断许外部中断0中断,否则禁止中断中断,否则禁止中断ET0-IE.1::为定时器为定时器0的中断允许位的中断允许位ET0=1允允                     许许T0中断,否则禁止中断中断,否则禁止中断 195   ET2-IE.5::为定时器为定时器2中断允许位,仅用于中断允许位,仅用于52子系子系                        列单片机中,列单片机中,ET2=1允许定时器允许定时器2中断,中断,                        否则禁止中断系统复位后,否则禁止中断系统复位后,IE各位各位                        均为均为0,即禁止所有中断即禁止所有中断IE寄存器寄存器                        可以进行字节寻址也可以进行位寻址。

      可以进行字节寻址也可以进行位寻址                           2.中断允许与屏蔽.中断允许与屏蔽§ MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能196  (B8H)   BFH   BEH   BDH   BCH   BBH   BAH   B9H   B8H      IP                            PT2     PS      PT1    PX1   PT0    PX0     3. 中断优先级设定中断优先级设定§ MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能          MCS-51单片机的中断分为单片机的中断分为2个优先级,每个个优先级,每个中断源的优先级都可以通过中断优先级寄存器中断源的优先级都可以通过中断优先级寄存器IP((interrupt  priority))中的相应位来设定中的相应位来设定IP也是也是可进行字节寻址和位寻址的寄存器,其各位的定义可进行字节寻址和位寻址的寄存器,其各位的定义如下:如下: 197  PT2-IP.5::为定时器为定时器2的优先级设定位,仅适用于的优先级设定位,仅适用于                      52子系列单片机。

      子系列单片机PT2=1时,设定为时,设定为                     高优先级,否则为低优先级高优先级,否则为低优先级 3. 中断优先级设定中断优先级设定§ MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能PS-IP.4::为串行口优先级设定位为串行口优先级设定位PS=1时,串行时,串行                 口为高优先级,否则为低优先级口为高优先级,否则为低优先级IP.7和和IP.6::保留位保留位198  PT1-IP.3::为定时器为定时器1优先级设定位优先级设定位PT1=1时,时,T1                      为高优先级,否则为低优先级为高优先级,否则为低优先级  3. 中断优先级设定中断优先级设定§ MCS-51的中断系统的中断系统§ 中断控制部分的功能中断控制部分的功能PX0-IP.0::为外部中断为外部中断0优先级设定位优先级设定位PX0=1时,时,                外部中断外部中断0为高优先级,否则为低优先级为高优先级,否则为低优先级PT0-IP.1::为定时器为定时器0优先级设定位优先级设定位。

      PT0=1时,时,T0                   为高优先级,否则为低优先级为高优先级,否则为低优先级PX1-IP.2::为外部中断为外部中断1优先级设定位优先级设定位PX1=1时,时,                     外部中断外部中断1为优先级,否则为低优先级为优先级,否则为低优先级 199          一台计算机往往有多个中断源,会出现几个中断源同一台计算机往往有多个中断源,会出现几个中断源同时发出中断请求的情况,这就要求用户事先根据它们的轻时发出中断请求的情况,这就要求用户事先根据它们的轻重缓急,给每个中断源确定一个中断级别重缓急,给每个中断源确定一个中断级别——优先权优先权,此,此时当几个中断源同时发出中断请求时,时当几个中断源同时发出中断请求时,CPU能找出中断级能找出中断级别最高的中断源并响应,在响应结束后,再响应其它级别别最高的中断源并响应,在响应结束后,再响应其它级别较低的中断源的中断请求如果较低的中断源的中断请求如果CPU在响应并处理优先权在响应并处理优先权较低的中断请求过程中,又接到级别比它高的中断请求,较低的中断请求过程中,又接到级别比它高的中断请求,则则CPU中断当前的处理而为级别较高的中断请求服务,这中断当前的处理而为级别较高的中断请求服务,这种情况叫做种情况叫做中断嵌套中断嵌套。

       §中断优先级结构中断优先级结构§ MCS-51的中断系统的中断系统200 §中断优先级结构中断优先级结构§ MCS-51的中断系统的中断系统 1.. MCS-51单片机的中断优先权:单片机的中断优先权:         MCS-51单片机用中断优先级寄存器单片机用中断优先级寄存器IP((0B8H))为各中断源设置高优先级或低优先级为各中断源设置高优先级或低优先级2.. MCS-51对中断优先级的处理原则:对中断优先级的处理原则:         不同级不同级的中断源同时申请中断时,的中断源同时申请中断时,先高后低先高后低,,同一级同一级中断源同时申请中断时,按中断源的中断源同时申请中断时,按中断源的自然优自然优先级先级进行处理,即进行处理,即::外部中断外部中断0→定时器定时器/计数器计数器0溢出溢出→外部中断外部中断1→定时器定时器/计数器计数器1溢出溢出→串行口中断串行口中断201     ①① 低优先级的中断的处理程序可以被高优先级低优先级的中断的处理程序可以被高优先级         的中断申请打断,反之不能的中断申请打断,反之不能    §中断优先级结构中断优先级结构§ MCS-51的中断系统的中断系统上面顺序中上面顺序中由左至右由左至右优先级别依次优先级别依次降低降低,且必须且必须遵循以下原则:遵循以下原则:②② 一种中断(无论哪种)一旦得到响应,它同一种中断(无论哪种)一旦得到响应,它同     级的中断不能打断它。

      级的中断不能打断它202 第二节第二节 中断处理过程中断处理过程一.一.中断响应中断响应二.二.中断处理中断处理 203 §中断处理过程中断处理过程              1.. 中断响应的条件中断响应的条件         ((1)有中断源发出中断请求;)有中断源发出中断请求;         ((2)中断总允许位)中断总允许位EA=1即即CPU开中断;开中断;         ((3)申请中断的中断源的中断允许位为)申请中断的中断源的中断允许位为1,即没有被屏蔽;,即没有被屏蔽;         ((4)中断不受阻中断不受阻                §中断响应中断响应 ③③   正在执行正在执行RETI指令或正在对指令或正在对IE或或IP寄存器读写操寄存器读写操        作,这些操作进行完后至少要执行一条其它指令作,这些操作进行完后至少要执行一条其它指令        之后之后CPU才会响应中断才会响应中断以下情况中断会受阻以下情况中断会受阻::①①    同级或高优先级的中断正在进行;同级或高优先级的中断正在进行;②②    一条指令还未执行完;一条指令还未执行完;204 中断源发中断申请中断源发中断申请中断响应条件是否满足?中断响应条件是否满足?中断是否受阻?中断是否受阻?YNY把把PC断点地址压入堆栈断点地址压入堆栈N相应中断源的中断入口地址相应中断源的中断入口地址送入送入PC,,转向中断服务程序转向中断服务程序⒉⒉中断响应的过程中断响应的过程 §中断处理过程中断处理过程          §中断响应中断响应 205          一般情况下,中断服务程序主要包括四大部分的内一般情况下,中断服务程序主要包括四大部分的内容:保护现场、为中断源服务、恢复现场、中断返回容:保护现场、为中断源服务、恢复现场、中断返回 。

        §中断处理中断处理§中断处理过程中断处理过程          ⒈⒈中断程序处理的过程中断程序处理的过程 ②② 硬件自动执行一条长调用指令硬件自动执行一条长调用指令LCALL,,把把PC当前值入栈,当前值入栈,      清除中断标志(以免第二次引起中断),但清除中断标志(以免第二次引起中断),但RI与与TI必须必须      由软件清除由软件清除①① CPU一响应中断,立即按查询结果置中断优先级状态触一响应中断,立即按查询结果置中断优先级状态触     发器,表明发器,表明CPU开始处理的中断的优先级别,供下一个开始处理的中断的优先级别,供下一个     查询周期查询,同时阻止任何同级中断进入,但允许被查询周期查询,同时阻止任何同级中断进入,但允许被     高级中断信号再次中断高级中断信号再次中断206 ③③  最后最后CPU把中断源相应的中断向量压入把中断源相应的中断向量压入PC中,程序转入中,程序转入      中断服务程序入口中断服务程序入口§中断处理中断处理§中断处理过程中断处理过程          ⑤⑤ 中断返回,在软件中用中断返回,在软件中用RETI指令,执行该指令时指令,执行该指令时CPU首首     先清除中断优先级状态触发器,然后将栈顶的两个字节先清除中断优先级状态触发器,然后将栈顶的两个字节     内容自动弹入内容自动弹入PC中,程序返回到原程序中被中断处继续中,程序返回到原程序中被中断处继续     执行。

      执行④④  执行中断服务子程序执行中断服务子程序207 关中断关中断→保护现场保护现场→开中断开中断→中断服务中断服务→关中断关中断→恢复现场恢复现场            →开中断开中断→ 中断返回中断返回→断点地址由堆栈弹入断点地址由堆栈弹入PC §中断处理中断处理§中断处理过程中断处理过程          ⒉⒉中断服务程序的主要内容中断服务程序的主要内容::解:此例要求解:此例要求P1.0输出方波的周期时间较长,用一个定时期输出方波的周期时间较长,用一个定时期        无法实现长时间的定时,解决的办法可用定时器加软件无法实现长时间的定时,解决的办法可用定时器加软件        计数的方法或是两个定时器合用的方法来实现,计数的方法或是两个定时器合用的方法来实现, 例例:用定时器:用定时器1定时,由定时,由P1.0输出周期为输出周期为2分钟的方波已知分钟的方波已知         fosc=12MHz208 方法一:方法一:解:用定时器解:用定时器T1定时定时10ms;;加软件计数实现定时一分钟加软件计数实现定时一分钟        40H单元作单元作ms的计数单元:的计数单元:1s/10ms=100次次        41H单元作单元作s的计数单元:的计数单元:1min/1s=60次次          29H单元的(单元的(4FH))D7位作分的计时标志位:标志用位作分的计时标志位:标志用4FH        T1的计数初值:的计数初值:X=216-12×10×1000/12=55536=0D8F0H主程序:主程序:         ORG    0000H       AJMP   2000H       ORG    001BH       AJMP   2100H209        ORG    2000H       MOV    TMOD,,#10H    ;;T1定时,模式定时,模式1       MOV    TH1,,#0D8H    ;;T1计数初值计数初值       MOV    TL1,,#0F0H       MOV    IE,,#88H        ;;CPU、、T1开中断开中断        SETB    TR1             ;;启动启动T1       MOV    40H,,#100       ;;ms计数初值计数初值       MOV    41H,,#60       ;;S计数初值计数初值       CLR      4FHTT::   JNB     4FH,,TT         ;;等待等待1分钟到分钟到       CLR      4FH             ;;清分标志位清分标志位       CPL     P1.0                       ;;输出变反输出变反       AJMP    TT              ;;反复循环反复循环210 T1中断服务程序:(由中断服务程序:(由001BH转来)转来)       ORG     2100H       MOV    TH1,,#0D8H      ;;T1重赋初值重赋初值       MOV    TL1,,#0F0H             DJNZ    40H ,,TT1        ;;判判1S到否?到否?       MOV    40H,, #100        ;;到重赋计数值到重赋计数值       DJNZ    41H ,, TT1        ;;判判1min到标志位到标志位       MOV     41H,, #60        ;;到了重赋计数值到了重赋计数值       SETB     4FH              ;;置置1min到标志位到标志位TT1::  RETI                      ;;中断返回中断返回211 方法二方法二::解:采用两个定时器以实现长时间的定时,两个定时器中一个解:采用两个定时器以实现长时间的定时,两个定时器中一个        定时,另一个作为计数,定时的时间到可以输出一个控制定时,另一个作为计数,定时的时间到可以输出一个控制        信号作为另一个定时器的计数脉冲。

      具体的方法如下:信号作为另一个定时器的计数脉冲具体的方法如下:         X0=216-12×60×103/12=5536=15A0H X1 =216-1000=64536=0FC18H        设设T0定时定时60ms,,模式模式1;;T1计数当T0定时定时60ms到控制到控制P1.2输出方波作为输出方波作为T1的计数脉冲(的计数脉冲(P1.2输出与输出与T1((P3.5))连接连接起来);起来);T1计数溢出控制计数溢出控制P1.0输出脉宽为输出脉宽为1分钟分钟((延时为延时为1分钟,分钟,即即计数计数1000次次)的方波,)的方波,T0与与 T1的计数初值分别为的计数初值分别为X0与与X1 ::212 主程序如下:主程序如下:            ORG       0000H            SJMP     START            ORG      000BH            AJMP    INTR0 ;;T0中断服务程序入口地址中断服务程序入口地址            ORG      001BH           AJMP    INTR1  ;;T1中断服务程序入口地址中断服务程序入口地址           ORG      2000HSTART::MOV TMOD,,#51H  ;;T0定时、模式定时、模式1,,                                                          ;;T1计数、模式计数、模式1213  MOV      TH0,,#15H     ;;T0计数初值计数初值  MOV      TL0,,#0A0H MOV      TH1,,#0FCH    ;;T1计数初值计数初值 MOV      TL1,,#18H MOV      IE,,#8AH      ;;CPU、、T0、、T1开中断开中断 SETB      TR0            ;;启动启动T0 SETB      TR1            ;;启动启动T1 LL::  SJMP      LL             ;;等待中断等待中断             ((60ms后后T0先产生中断,先产生中断,T0产生产生1000次次             中断(中断(1min))后后T1才会产生一次中断)才会产生一次中断)214 T0的中服务程序(由的中服务程序(由000BH转来):转来):INTR0::    MOV       TH0,,#15H    ;;T0重赋初值重赋初值                    MOV       TL0,,#0A0H                       CPL P1.2 ;;P1.2 取反作取反作T1的计数脉冲输入的计数脉冲输入                    RETI                    ;;中断返回中断返回INTR1::    MOV       TH1,,#0FCH  ;;T1重赋初值重赋初值                    MOV       TL1,,#18H                    CPL        P1.0          ;;P1.0 取反输出取反输出                       RETI215 第三节第三节   外部中断的扩充方法外部中断的扩充方法  一、一、利用定时器扩充外部中断源法利用定时器扩充外部中断源法::  (看(看P93页)页)二、二、中断和查询结合法中断和查询结合法::   (看(看P93页)页)三、三、矢量中断扩充法矢量中断扩充法::  (看(看P94页)页)        MCS—51单片机只为用户提供了两个外部中断请求输单片机只为用户提供了两个外部中断请求输入端,若外部中断源超过两个时,就需要扩充外部中断源。

      入端,若外部中断源超过两个时,就需要扩充外部中断源下面介绍三种扩充外部中断源的方法下面介绍三种扩充外部中断源的方法216 具体应用如下具体应用如下:利用定时器扩充外部中断源法利用定时器扩充外部中断源法         MCS--51单片机有两个定时器,具有两个内部中断标志单片机有两个定时器,具有两个内部中断标志和外部计数输入引脚当定时器设置为和外部计数输入引脚当定时器设置为计数计数方式,计数初值方式,计数初值设为满量程设为满量程0FFH,一旦外部信号从计数器引脚输入一个负跳一旦外部信号从计数器引脚输入一个负跳变信号,计数器加变信号,计数器加1产生溢出中断,从而可以转去处理该外部产生溢出中断,从而可以转去处理该外部中断源的请求因此我们可以把外部中断源作中断源的请求因此我们可以把外部中断源作边沿触发边沿触发的的输输入信号,接至定时器的入信号,接至定时器的T0(P3.4)或或T1(P3.5)引脚上,该定时器引脚上,该定时器的溢出中断标志及中断服务程序作为扩充外部中断源的标志和的溢出中断标志及中断服务程序作为扩充外部中断源的标志和中断服务程序中断服务程序 217 INT1INT0 装置装置2 装置装置3 装置装置4 装置装置1+5V8051P1.0P1.1P1.2P1.3中断和查询结合法中断和查询结合法①①MCS--51的两根外部中的两根外部中断输入线中的每一根,都可断输入线中的每一根,都可以通过线或的关系连接多个以通过线或的关系连接多个外部中断源,如右图;外部中断源,如右图;②②无论哪个外设提出中断申无论哪个外设提出中断申请,都会使请,都会使INT0变低,向变低,向CPU发出中断申请信号;发出中断申请信号;③③利用输入端口线作为各中利用输入端口线作为各中断源的识别线,即可通过程断源的识别线,即可通过程序查询序查询P1.0~~P1.3的逻辑电的逻辑电平得知究竟是哪个外设产生平得知究竟是哪个外设产生了中断申请信号。

      了中断申请信号④④各中断的各中断的优先级由软件查询的顺序优先级由软件查询的顺序决定218       ORG  0003H      LJMP  INTRP0  ;;INT0中断服务程序入口中断服务程序入口…     …INTRP0::PUSH  PSW ;;中断服务程序是一个中断查询程序中断服务程序是一个中断查询程序       PUSH   A                  JB      P1.0,  DV1                  JB      P1.1,  DV2                  JB      P1.2,  DV3                  JB      P1.3,  DV4EXIT::   POP     A                 POP     PSW                 RETI219 DV1::…            装置装置1的中断服务程序的中断服务程序AJMP    EXITDV2::…装置装置2的中断服务程序的中断服务程序AJMP    EXITDV3::…装置装置3的中断服务程序的中断服务程序AJMP    EXITDV4::…装置装置4的中断服务程序的中断服务程序AJMP    EXIT220     输入输入中断矢量中断矢量 INTR7 INTR6 INTR5 INTR4 INTR3 INTR2 INTR1 INTR0 00H 10H 20H    30H    40H    50H    60H    70HGS INT1 E1  I7  I6  I0A2A1A0P1.7P1.4P1.5P1.6P1.3~~0MCS--5174LS148 INTR7 INTR0 INTR68个中断源的个中断源的矢量矢量矢量中断扩充法矢量中断扩充法          利用利用8--3优先权编码器优先权编码器74LS148和外部中断引脚和外部中断引脚INT0、、INT1实现中断的扩充。

      扩展电路及中断矢量表如下:实现中断的扩充扩展电路及中断矢量表如下:221          其中:外部其中:外部8个中断源的中断请求由个中断源的中断请求由INTR7~~INTR0引引入入74LS148的输入端的输入端I7~~I0,148对对8个中断源的申请进行优先个中断源的申请进行优先权的排队,经排队后产生相应的矢量代码权的排队,经排队后产生相应的矢量代码A2~~A0送送MCS-51的的P1.6~~P1.4位其中INTR7优先权最高,优先权最高,INTR0优先权最优先权最低低当有多个中断同时发生时,编码器只对其中一个优先权当有多个中断同时发生时,编码器只对其中一个优先权最高的中断做出反应,并输出其矢量代码而任一个中断源最高的中断做出反应,并输出其矢量代码而任一个中断源有请求均通过有请求均通过148的的GS输出端加到输出端加到INT1引脚上,向引脚上,向CPU发出发出中断请求中断请求74LS148的真值表如表的真值表如表5-1所示矢量中断扩充法矢量中断扩充法222 输入输入输出输出 E1  I0   I1  I2   I3   I4  I5   I6   I7 A2 A1 A0 GS EO  1   ×  ×  ×  ×  ×  ×  ×  ×  0    1   1    1   1    1    1    1   1  0   ×  ×  ×  ×  ×  ×  ×  0  0   ×  ×  ×  ×  ×  ×  0    1  0   ×  ×  ×  ×  ×  0    1    1  0   ×  ×  ×  ×  0    1    1    1  0   ×  ×  ×  0    1    1    1    1  0   ×  ×  0    1    1    1   1    1  0   ×  0    1    1    1    1   1   1  0   0    1    1    1    1    1   1   1  1    1    1    1    1  1    1    1    1    0   0    0   0    0    1   0    0   1    0    1   0    1   0    0    1   0    1   1    0    1   1    0   0    0    1   1    0   1    0    1   1    1   0    0    1   1    1   1    0    174LS148    真值表真值表223         无论外部的无论外部的INTR0~~INTR7中哪一个中断源发生中断申中哪一个中断源发生中断申请,请,CPU响应中断时都要转入响应中断时都要转入INT1的入口处的入口处0013H单元执行,单元执行,所以在所以在0013H处要安排引导程序,使程序转移到与矢量相对处要安排引导程序,使程序转移到与矢量相对应的入口地址去执行。

      假设应的入口地址去执行假设8个中断源的页地址均为个中断源的页地址均为PAGE,,中断服务子程序事先存放在地址为中断服务子程序事先存放在地址为PAGE((高高8位)和位)和P1((低低8位)位)所指示的所指示的ROM中,则引导程序应为:中,则引导程序应为:矢量中断扩充法矢量中断扩充法224  0013H::PUSH    ACC     ;;保护保护A的内容的内容     MOV     A,  P1   ;;读取中断矢量,读取中断矢量,00H~~70H     PUSH    ACC     ;;中断矢量入栈中断矢量入栈         PUSH    PAGE  ;;中断服务程序页地址入栈,中断服务程序页地址入栈,                           PAGE为任意一个可直接寻址的为任意一个可直接寻址的RAM值值      RET     ;;返回指令,实际操作是将栈顶两字返回指令,实际操作是将栈顶两字                              节的内容(节的内容(PAGE与与ACC的值,它们的值,它们                              构成中断服务子程序的入口地址构成中断服务子程序的入口地址)送)送                              入程序计数器寄存器入程序计数器寄存器PC中,程序将中,程序将                              由由PC指示的地址开始执行。

      指示的地址开始执行225 当当8个中断子程序不在同一页面上时,引导程序可如下个中断子程序不在同一页面上时,引导程序可如下:PUSH    ACC     ;;保护保护A的内容的内容CLR      APUSH    ACC     ;;00H入栈,作为中断服务程序入口地入栈,作为中断服务程序入口地                                    址的低址的低8位地址位地址MOV     A,  P1   ;;读取中断矢量,读取中断矢量,A=00~~70HSWAP    A          ;;读取中断矢量,高低读取中断矢量,高低4位交换,位交换,00~~07HORL    A, #78H  ;;A=78H~~7FHMOV   R0,,AMOV   A,,@R0 ;;取高取高8位地址(在位地址(在78H~~7FH单元中)单元中)PUSH   ACC       ;;高高8位地址入栈位地址入栈RET             ;;转向中断服务程序入口处(高转向中断服务程序入口处(高8位地址由位地址由                             78H~~ 7FH单元内容给出,低单元内容给出,低 8位地址为位地址为00H))226 并行通讯:数据的传输方式是按字节进行的,如并行通讯:数据的传输方式是按字节进行的,如P0~~P3口,口,                      每个口一次可传输每个口一次可传输8位二进制数。

      位二进制数 第六章第六章 单片机串行口及应用单片机串行口及应用串行通讯:数据的传输方式是按位进行的,每个口一次只串行通讯:数据的传输方式是按位进行的,每个口一次只                      能传输能传输1位二进制数,位二进制数,MCS—51有一个全双工有一个全双工                      串行口227 一般串行口按功能可分为三类:一般串行口按功能可分为三类:MCS-51单片机是一个全双工串行口它有四种工单片机是一个全双工串行口它有四种工作方式:作方式:0、、1、、2、、3,每一种方式具有不同的波特率每一种方式具有不同的波特率波特率:串行口每秒钟能发送或接收的二进制数的位数波特率:串行口每秒钟能发送或接收的二进制数的位数                称为波特率标准值)称为波特率标准值)((3)全双工串行口:可同时进行发送与接收的串行口全双工串行口:可同时进行发送与接收的串行口2)半双工串行口:即可接收又可发送但二者不可同)半双工串行口:即可接收又可发送但二者不可同          时进行的串行口时进行的串行口1)单工串行口:只能用于接收或发送的串行口,单)单工串行口:只能用于接收或发送的串行口,单          一功能。

      一功能228 第一节串行口的结构与工作原理第一节串行口的结构与工作原理第二节第二节  工作方式与波特率的设置工作方式与波特率的设置一、一、串行口结构串行口结构二、二、串行口状态寄存器串行口状态寄存器SCON一.一.串行口的工作方式串行口的工作方式二.二.多机通讯多机通讯229          由两个数据缓冲器由两个数据缓冲器SBUF、、电源控制寄存器电源控制寄存器PCON、、一个串行控制寄存器一个串行控制寄存器SCON、、一个波特一个波特率发生器率发生器T1和一个移位寄存器组成和一个移位寄存器组成§串行口的结构与工作原理串行口的结构与工作原理§串行口结构串行口结构            SBUF在物理上对应着两个独立在物理上对应着两个独立R,,一个是发一个是发送缓冲器(送缓冲器(TBUF),),一个是接收缓冲器一个是接收缓冲器(RBUF)二者公用一个地址,其中二者公用一个地址,其中SBUF中的中的RBUF只能读不只能读不能写,能写,SBUF中的中的TBUF是是CPU写写SBUF,,不能读⒈⒈ 数据缓冲器数据缓冲器SBUF((99H)):属于属于SFR不可位寻址不可位寻址230          控制寄存器的控制寄存器的D7位位SMOD为串行口波特率的加为串行口波特率的加倍选择位。

      当用软件使倍选择位当用软件使SMOD=1时,则使方式时,则使方式1、、2及及3的波特率为的波特率为SMOD=0时的时的2倍,其中:倍,其中:§串行口的结构与工作原理串行口的结构与工作原理§串行口结构串行口结构⒉⒉ 电源控制寄存器电源控制寄存器PCON((87H)):SFR不可位寻址不可位寻址即即CPU对对RBUF是只读,所以二者公用一个地址不会是只读,所以二者公用一个地址不会发生混乱发生混乱231 §串行口的结构与工作原理串行口的结构与工作原理§串行口结构串行口结构在方式在方式1和和3中:中:波特率波特率=2SMOD×((T1的溢出率)的溢出率)/32在方式在方式2中:中:       波特率波特率=2SMOD×fosc/64   98H SCON9FH9EH9DH 9CH 9BH 9AH 99H98HSM0 SM1 SM2 REN TB8RB8   TI  RI3.串行口状态寄存器串行口状态寄存器SCON:串行口状态寄存器串行口状态寄存器SCON可位寻址,其各位含义如下:可位寻址,其各位含义如下:232  SM0、、SM1::两位用于选择串行口两位用于选择串行口0~~3四种不同四种不同                            的工作方式。

      的工作方式 §串行口的结构与工作原理串行口的结构与工作原理§串行口状态寄存器串行口状态寄存器SCONSM2::串行口方式串行口方式2及及3的多机控制位,功能如下:的多机控制位,功能如下:方式方式0:不用此位,通常使:不用此位,通常使SM2=0方式方式1::SM2=0时,只要收到停止位(任何值)就使时,只要收到停止位(任何值)就使RI置置1  SM2=1时,只有收到有效停止位(时,只有收到有效停止位(1)才使)才使RI置置1方式方式2、、3:: SM2=0时,无论收到时,无论收到RB8为为0或或1,硬件均会使,硬件均会使RI置置1         SM2=1时,只有接收到时,只有接收到RB8=1时,硬件才会使时,硬件才会使RI置置1233 §串行口的结构与工作原理串行口的结构与工作原理§串行口状态寄存器串行口状态寄存器SCON即:在方式即:在方式2和和3中,若中,若 SM2=1且接收到第九位数且接收到第九位数      ((RB8))为为0时,则不能置位中断时,则不能置位中断 标志标志RI,,接接         收到的数据失败收到的数据失败SM2=0,任何时候接收的,任何时候接收的         数据都有效。

      数据都有效         在方式在方式1时,若时,若SM2=1,,则只有接收到有效则只有接收到有效                               停止位(停止位(1)才能置中断标志)才能置中断标志RI,,                               SM2=0时无任何要求时无任何要求         在方式在方式0中中SM2=0234 REN::串行口接收控制位由软件置位或清串行口接收控制位由软件置位或清0,,              REN=1,,允许接收;允许接收;REN=0禁止接收禁止接收§串行口的结构与工作原理串行口的结构与工作原理§串行口状态寄存器串行口状态寄存器SCONTB8::在方式在方式2、、3中,它是传送的第中,它是传送的第9位数,由软位数,由软            件置位或清件置位或清0,它可以作为通信数据的奇偶,它可以作为通信数据的奇偶            校验,在多机通讯中,这一位常用于表示校验,在多机通讯中,这一位常用于表示            串行口传送的信息是地址帧还是数据帧串行口传送的信息是地址帧还是数据帧235 §串行口的结构与工作原理串行口的结构与工作原理§串行口状态寄存器串行口状态寄存器SCON RB8::接收到的方式接收到的方式2、、3中的第中的第9位数,用作奇偶位数,用作奇偶              校验或地址校验或地址/数据标志。

      数据标志              在方式在方式0不使用不使用RB8               在方式在方式1中:若中:若SM2=0,,则则RB8收到任何收到任何                                                       停止位都使停止位都使RI置置1 ,,                                    若若SM2=1,,则则RB8只有在接收只有在接收                                                        到到 有有 效效 的的 停停 止止 位位“1”                                                        时才会使时才会使RI置置1,,                                                        否则否则RI不置位               236 §串行口的结构与工作原理串行口的结构与工作原理§串行口状态寄存器串行口状态寄存器SCON SM2=0时,无论收到时,无论收到RB8为为0或或1,硬件均会使,硬件均会使RI置置1 SM2=1时,只有接收到时,只有接收到RB8=1时,硬件才会使时,硬件才会使RI置置1TI::发送中断标志。

      发送中断标志         在方式在方式0:发送第:发送第8位结束时由硬件置位,位结束时由硬件置位,         在方式在方式1、、2、、3中:在停止位开始发送时中:在停止位开始发送时                                           由硬件置位由硬件置位         TI=1时表示发送完毕向时表示发送完毕向CPU申请中断,申请中断,CPU         响应中断后就可以接着发送下一帧数据,在响应中断后就可以接着发送下一帧数据,在         任何方式中,任何方式中,TI均需软件清均需软件清0237 RI::接收中断标志接收中断标志        方式方式0中:接收第中:接收第8位结束时由硬件置位位结束时由硬件置位        方式方式1、、2、、3中,接收到停止位时由硬件置位中,接收到停止位时由硬件置位        RI=1时表示接收完毕向时表示接收完毕向CPU申请中断,申请中断,CPU响响        应中断后从应中断后从SBUF中取出数据,但在方式中取出数据,但在方式1中中        SM2=1时,若未接收到有效的停止位(时,若未接收到有效的停止位(1),),       则不会对则不会对RI置位。

      任何方式均需置位任何方式均需软件对软件对RI清清0§串行口的结构与工作原理串行口的结构与工作原理§串行口状态寄存器串行口状态寄存器SCON238     ((1)当)当TI=0时,表示目前串行口处于发送状态,时,表示目前串行口处于发送状态,              任一条以任一条以SBUF为为DST的操作指令均可启的操作指令均可启              动发送过程的开始动发送过程的开始          §串行口的结构与工作原理串行口的结构与工作原理§串行口的结构与工作原理串行口的结构与工作原理((2)当)当TI=1时,表示目前串行口一帧数据已发时,表示目前串行口一帧数据已发          送完毕,向送完毕,向CPU申请中断,申请中断,CPU响应中断响应中断          时再清除时再清除TI标志使标志使TI=0后,串行口又可以后,串行口又可以          发送下一幀数据,但仍然用以发送下一幀数据,但仍然用以SBUF为为DST          的指令启动的指令启动注意注意::239  ⑶⑶ 当当RI=0,,REN=1是,表示目前串行口处于接受状是,表示目前串行口处于接受状      态,可以接收串行口进入的任何信息到态,可以接收串行口进入的任何信息到SBUF中。

      中§串行口的结构与工作原理串行口的结构与工作原理§串行口的结构与工作原理串行口的结构与工作原理⑷⑷ 当当RI=1,,REN=1时,表示目前串行口处于接受状时,表示目前串行口处于接受状     态,且已接收完一帧态,且已接收完一帧 数据数据,,正向正向CPU申请中断,申请中断,     CPU响应中断时清除响应中断时清除RI标志,使串行口又可以标志,使串行口又可以    接受下一帧数据到接受下一帧数据到SBUF中240 §串行口的结构与工作原理串行口的结构与工作原理§串行口的结构与工作原理串行口的结构与工作原理⑹⑹ TI,,RI均需上软件清均需上软件清0⑸⑸ 上述过程中,串行口数据发送必须在上述过程中,串行口数据发送必须在TI=0时由相时由相      应指令启动,串行口的数据的接收在应指令启动,串行口的数据的接收在RI=0时可随时可随      时接受,不用启动时接受,不用启动241 §工作方式与波特率的设置工作方式与波特率的设置§串行口的工作方式串行口的工作方式 ①① 方式方式0采用采用SR输入输出方式,可外接输入输出方式,可外接SR扩展扩展       I/O口,也可以外接其它同步口,也可以外接其它同步I/O口设备。

      口设备1.方式.方式0——同步移位同步移位R的传输方式的传输方式⑴⑴ 方式方式0的特点:的特点:③③发送发送/接收数据,一帧格式为接收数据,一帧格式为8位二进制数传输位二进制数传输    数据时,低位在先,高位在后数据时,低位在先,高位在后②② 传送的数据信息,无论是输入还是输出,均由引传送的数据信息,无论是输入还是输出,均由引     脚脚P3.0((RXD))端接收或发送,而移位同步正端接收或发送,而移位同步正     脉冲由脉冲由P3.1((TXD))输出242 ④④发送发送/接收数据的波特率是固定的,为接收数据的波特率是固定的,为fosc/12即为振即为振    荡器频率的荡器频率的1/12,与,与PCON无关,不必设置无关,不必设置PCON§工作方式与波特率的设置工作方式与波特率的设置§串行口的工作方式串行口的工作方式①① 发送状态可设为:发送状态可设为:MOV   SCON,,#00H;;             即选择即选择0方式,方式,sm2=0,,禁止接收,与禁止接收,与RB8无无关,目前处于非中断状态如果工作状态由复位开关,目前处于非中断状态如果工作状态由复位开始,(始,(SCON=00H))可不必用软件设置可不必用软件设置SCON。

      ⑵⑵ 方式方式0控制字的设置:控制字的设置:243 §工作方式与波特率的设置工作方式与波特率的设置§串行口的工作方式串行口的工作方式            即方式即方式0,允许接收(但未启动接收),已发,允许接收(但未启动接收),已发出中断如此时希望启动接收,则可用软件指令清出中断如此时希望启动接收,则可用软件指令清除除RI,,使使RI=0,,则则CPU就立即启动可接收数据;就立即启动可接收数据;②② 接收状态可以设置成两种情况,如下:接收状态可以设置成两种情况,如下:                    MOV   SCON,,#11H ;;                   MOV   SCON,,10H  ;;             串行口处于接收非中断状态,把串行口处于接收非中断状态,把10H写入写入SCON立即启动接收立即启动接收244 §工作方式与波特率的设置工作方式与波特率的设置§串行口的工作方式串行口的工作方式①①方式方式0的发送:的发送:看看图图,利用串行口作显示器,图中,利用串行口作显示器,图中串行口为输出口,它实质上是通过串行口为输出口,它实质上是通过74SL164芯片(串芯片(串行输入并行输出行输入并行输出SR))把串行口数据转换为并行输出。

      把串行口数据转换为并行输出8051单片机串行口工作在方式单片机串行口工作在方式0发送状态,利用发送状态,利用P1.0作为输出选通信号(作为输出选通信号(P1.0=1时,串行口同步脉冲信号时,串行口同步脉冲信号才能输出)假设显示缓冲区设在才能输出)假设显示缓冲区设在40H,,41H,,42H((即要显示的三个字节的数放在即要显示的三个字节的数放在40H~42H单元中)单元中)程序由复位状态开始运行程序由复位状态开始运行⑶⑶ 方式方式0的应用举例的应用举例 245 1     CLK  CLR2               74LS164LED((42H))1   CLK    CLR2               74LS164LED((41H))1   CLK  CLR2               74LS164LED((40H))&+5V+5VP1.0P3.1P3.08051其中:其中:CLR是是74LS164的选通端,的选通端,CLK是是74LS164的的            时钟端时钟端,,时钟时钟CLK端上每个端上每个上上升沿都会使该芯升沿都会使该芯           片的片的8位数据输出右移一位位数据输出右移一位。

      246             SETB   P1.0        ;(;(P1.0))=1,,选通串行口选通串行口            MOV   R7,,#03H   ;;显示内容的字节数显示内容的字节数→R7            MOV   R0,,#40H   ;;R0指向显示缓冲区指向显示缓冲区TL1::MOV   A,,@R0    ;;取出要显示的数取出要显示的数→A           ADD   A,,#0EH   ;;此处相对表头此处相对表头TABLE的的                                               偏移量为偏移量为0EH           MOVC  A,,@A+PC;;查字型表查字型表           MOV  SBUF,,A  ;;送给串行口送给串行口buf,,然后发然后发                                              送显示送显示开始运行(开始运行(SCON=00H),),发送程序如下:发送程序如下:247 TL2:: JNB   TI,,TL2                ;;查发送中断标志查发送中断标志TI,,                                                          判定一帧传送完否?判定一帧传送完否?             CLR    TI                         ;;清发送中断标志清发送中断标志             INC     R0                        ;;调节缓冲器指针调节缓冲器指针             DJNZ   R7,,TL1            ;;要显示的内容显示完否?要显示的内容显示完否?                                                            否,转至否,转至TL1处处             CLR   P1.0                       ;;显示内容显示完毕,关显示显示内容显示完毕,关显示                                                           器选通,不再移位器选通,不再移位             RET                                 ;;最终三个显示器分别显示最终三个显示器分别显示                                                          42H~40H单元的内容单元的内容TABLE::C0H,,F9H,,A4H,,B0H,,99H,,92H                  82H,,F8H,,80H,,90H,,98H248   9   Q  2  CP   74LS165                S/L 8051      P3.0      P3.1            P1.0RXDTXD  9   Q  2  CP    74LS165                S/L②② 方式方式0接收:如下图:编程从接收:如下图:编程从16位扩展输入口(由并入串出位扩展输入口(由并入串出      移位寄存器移位寄存器74LS165组成)读入组成)读入40个字节数据并把它存入片个字节数据并把它存入片      内内40H开始的单元中。

      开始的单元中S/L为为74LS165 的接收和移位控制端)的接收和移位控制端)               MOV   R7,#20       ;;设置读入字节数设置读入字节数           MOV   R0,#40H      ;;设置内部设置内部RAM地址指针地址指针           SETB   F0           ;;设置读入字节奇偶数标志设置读入字节奇偶数标志RCV0::CLR    P1.0          ;;并行置入并行置入16位数据位数据   SETB   P1.0         ;;允许串行移位允许串行移位249 RCV1::MOV   SCON ,  #10H   ;;设置串口方式设置串口方式0启动接收过程启动接收过程          JNB    RI ,  $          ;;等待接收一帧数据结束等待接收一帧数据结束          CLR    RI           ;;接收结束,清接收结束,清RI中断标志位中断标志位         MOV   A ,  SBUF      ;;读取缓冲器接收的数据读取缓冲器接收的数据          MOV   @R0 ,  A       ;;存入片内存入片内RAM中中         INC    R0          CPL    F0         JB    F0 , RCV2     ;;接收完偶数帧则重新并行置入数据接收完偶数帧则重新并行置入数据               SJMP   RCV1        ;;否则再接收一帧否则再接收一帧RCV2::DJNZ    R7  ,  RCV0     ;;预定字节数没有接收完继续预定字节数没有接收完继续                ……                               ;对读入数据进行处理;对读入数据进行处理250    2.方式.方式1——8位通用异步接收或发送方式位通用异步接收或发送方式。

      §工作方式与波特率的设置工作方式与波特率的设置§串行口的工作方式串行口的工作方式波特率波特率=2SMOD/32×((定时器定时器T1溢出率)溢出率)⑶⑶ 发送与接收的波特率均可变,当定时器发送与接收的波特率均可变,当定时器1作为波作为波     特率发生器,串行口方式特率发生器,串行口方式1波特率为:波特率为:⑵⑵ RXD((P3.0))为接收端,为接收端,TXD((P3.1))为发送端为发送端 ⑴⑴ 串行口方式串行口方式1为为8位通用异步接收或发送方式,每位通用异步接收或发送方式,每帧帧      为为10位位二进制数:二进制数:0 D0 D1 D2 D3 D4 D5 D6 D7 1,,      其其中中一一位位启启始始位位“0”在在先先,,接接着着是是8位位data传传送送,,低低     位在先,高位在后,最后一位是有效停止位位在先,高位在后,最后一位是有效停止位“1”251 ①① SMOD为寄存器为寄存器PCON的最高位,的最高位,SMOD=1时,串时,串     行口方式行口方式1的波特率是的波特率是SMOD=0时的时的2倍  §工作方式与波特率的设置工作方式与波特率的设置§串行口的工作方式串行口的工作方式②② 定时器定时器1的溢出率是定时器的溢出率是定时器1每秒钟溢出的次数每秒钟溢出的次数,,     它取决于它取决于T1计数的速度和预置值,定时器计数的速度和预置值,定时器1((T1))       可以工作在可以工作在0,,1,,2三种工作方式的任一种,其中三种工作方式的任一种,其中    最最典型的是方式典型的是方式2,自动重新装入值存放在,自动重新装入值存放在TH1中,中,    计数速度就是计数速度就是T1输入的计数脉冲的频率输入的计数脉冲的频率 f计数计数。

      所以所以    这种方式的溢出率及波特率分别为:这种方式的溢出率及波特率分别为:252 当当C/T=0时,计数速度时,计数速度=fosc/12,,所以串行口方式所以串行口方式1的的波特率为:波特率为:⑷⑷ 串行口方式串行口方式1的的发送发送控制字为:控制字为:      MOV   SCON,,#40H  ;;方式方式1,禁止中断,处于非,禁止中断,处于非                                                          中断状态中断状态       串行口方式串行口方式1的的接收接收控制字为控制字为:(有两种):(有两种)  MOV  SCON,,#50H   ;;接收到的第一帧数据一定有效,接收到的第一帧数据一定有效,                                                   以后只要以后只要RI=0,,就可以接收就可以接收§工作方式与波特率的设置工作方式与波特率的设置§串行口的工作方式串行口的工作方式253 MOV  SCON,,#70H  ;;除满足除满足RI=0外,接收到的第一帧数外,接收到的第一帧数                                                 据还必须保持停止位为据还必须保持停止位为“1”才有才有效效§工作方式与波特率的设置工作方式与波特率的设置§串行口的工作方式串行口的工作方式     ①① RI=0((即即SBUF中上一帧数据已取走);中上一帧数据已取走);     ②② SM2=0或接收到的停止位为或接收到的停止位为“1”。

      上述接收设置的控制字就可同时满足上述接收设置的控制字就可同时满足2种条件⑸⑸ 在在MCS-51串行口方式中接到一帧信号,判断它是否有效串行口方式中接到一帧信号,判断它是否有效     要同时满足两个条件:要同时满足两个条件:注:在接收的同时不排斥发送,可同时进行接收与发送注:在接收的同时不排斥发送,可同时进行接收与发送254 ⑹⑹ 奇偶校验:奇偶校验:  §串行口的工作方式串行口的工作方式结论结论:无论:无论A中内容如何,接收方收到的数据其奇偶性一定中内容如何,接收方收到的数据其奇偶性一定              呈奇性,由此可作为接收信息的奇偶校验呈奇性,由此可作为接收信息的奇偶校验当开始时当开始时P=0,,P=1,将取反后的,将取反后的P中值送入中值送入ACC.7后,后,A中中                                       1的个数变为奇数的个数变为奇数设开始时设开始时P=1,,则则P=0,,将取反后的将取反后的P值送入值送入ACC.7后,后,A中含中含                                         1的个数仍为奇数;的个数仍为奇数;例例1::MOV  A,,#ASCII   ;;ASCII码送入码送入A中,当中,当A中有偶中有偶                                                        数个数个1,则则PSW中中P=0,否则否则P=1。

                 MOV  C,,P           CPL    C                  MOV   ACC.7,,C  255 3.串行口方式.串行口方式2、、方式方式3::9位位UART((通用异步接通用异步接                                                  收和发送)收和发送)                                                               §工作方式与波特率的设置工作方式与波特率的设置 §串行口的工作方式串行口的工作方式⑵⑵ RXD((P3.0))为接收端,为接收端,TXD((P3.1))为发送端为发送端⑴⑴ 串行口方式串行口方式2、、3均为均为9位通用异步接收和发送位通用异步接收和发送每帧共每帧共11     位:一位位:一位起始位起始位0,一位可编程位和一位,一位可编程位和一位停止位停止位1,, 8     数据位(低位在先):数据位(低位在先): D0  D1  D2  D3  D4  D5  D6  D7        第第9位(可编程位)数据发送的是位(可编程位)数据发送的是TB8中内容,据求可使中内容,据求可使      TB8置位置位/复位,接收端将复位,接收端将TB8的内容接收存入的内容接收存入RB8中。

      中256 ⑶⑶ 方式方式2与与3 只有一点不同,只有一点不同,方式方式2的波特率相对固定的波特率相对固定,方方    式式3的波特率则不定的波特率则不定外部计数(外部计数(C/ T=1):):内部定时(内部定时(C/T=0):):方式方式3:波特率计算与方式波特率计算与方式1完全相同完全相同方式方式2:波特率波特率=((2SMOD/64))× fosc=fosc/64 ::SMOD=0            波特率波特率=((2SMOD/64))× fosc=fosc/32 ::SMOD=1§工作方式与波特率的设置工作方式与波特率的设置 §串行口的工作方式串行口的工作方式257 ⑷⑷ 传送传送方式控制字:方式控制字: §串行口的工作方式串行口的工作方式⑸⑸ 接收接收方式控制字:方式控制字: 方式方式2:: MOV  SCON , #90H ;;                可接收或发送,接收时可接收或发送,接收时RB8的值来自的值来自TB8位;位;方式方式3:: MOV  SCON , #0D0H ;;                可接收或发送,接收时可接收或发送,接收时RB8的值来自的值来自TB8位。

      位⑹⑹ 奇偶校验:如下奇偶校验:如下方式方式3::MOV  SCON,,#0C0H ;禁止接受,发送的第;禁止接受,发送的第9位数位数                             据在据在TB8中(目前为零,据需要也可改为中(目前为零,据需要也可改为1););方式方式2::MOV  SCON , #80H;;禁止接受,发送的第禁止接受,发送的第9位数据在位数据在                                     TB8中(目前为零,据需要也可改为中(目前为零,据需要也可改为1););258 注意:当注意:当A中的内容中的内容“1”的个数为的个数为奇数奇数时,时,P=1,,∴∴ P取反后为取反后为0,,             ∴∴TB8=0,,则发送的则发送的9位数(位数(A中中8位,加上位,加上TB8一位共一位共9              位)其中位)其中“1”的个数为奇数;的个数为奇数;             例例2::MOV A,(,(data1)) ;;A←((data1)) ,,只改变只改变                                                            PSW中的中的P位。

      位          MOV  C,,P                   CPL  C          MOV  TB8,,C          MOV  SBUF,,A              当当A中的内容中的内容“1”的个数为的个数为偶数偶数时,时,P=0,,∴∴P取反后为取反后为1,,             ∴∴TB8=1,,则发送的则发送的9位数(位数(A中中8位,加上位,加上TB81位等于位等于              9位)其中位)其中“1”的个数仍为奇数的个数仍为奇数259  例例3:把内部:把内部RAM40H~5FH单元中单元中ASCII码码数据,在最高位数据,在最高位           加上奇偶校验位后,由甲机发送到乙机串行口采用加上奇偶校验位后,由甲机发送到乙机串行口采用          方式方式1,波特率为,波特率为1.2kb/s,,振荡器频率振荡器频率fosc=11.059MHz所以所以TH1=0E8H§工作方式与波特率的设置工作方式与波特率的设置 §串行口的工作方式串行口的工作方式 解:甲机串口方式解:甲机串口方式1发送状态,所以设为发送状态,所以设为SCON 40H,,乙机乙机         方式方式1状态,状态,SCON设为设为50H。

      甲、乙机波特率应为一甲、乙机波特率应为一         致:致:1.2kb,,设设T1采用方式采用方式2,, 260  MOV  TMOD,,#20H  ;;此处开始此处开始设置传送方甲机软件设置传送方甲机软件,,                                                   首先设定首先设定T1工作在方式工作在方式2,定时,定时 MOV  TL1,,#0E8H  ;;据波特率据波特率1.2kB设置设置T1的时间常数的时间常数                                                为为0E8H MOV  TH1,,#0E8H SETB TR1         ;;启动启动T1 MOV  SCON,,#40H  ;;设置甲机串行口工作方式设置甲机串行口工作方式                                                 (方式(方式1,发送状态),发送状态) MOV  R0,,#40H    ;;R0指向发送指向发送buf首址首址 MOV  R1,,#20H    ;;R1为字节计数器,甲机要向乙机为字节计数器,甲机要向乙机                                            发送发送20个字节个字节261 LOOP::MOV  A,,@R0     ;;R0指向的内容指向的内容→A中,此指中,此指                                                           令只影响令只影响PSW中的中的P               CALL  SPOUT        ;;调用发送子程序调用发送子程序               INC  R0                       ;;调用发送受冲区指令调用发送受冲区指令               DJNZ R1,,LOOP  ;;传送字节数判断,未传送完则传送字节数判断,未传送完则                                                          继续传送继续传送                    …………SPOUT::MOV  C,,P        ;;所有所有ASCII码最高位均为码最高位均为0,,                                                           所以奇偶判断位放在最高位所以奇偶判断位放在最高位                   CPL  C                   MOV  ACC.7  ,,C              262       MOV  SBUF,,A    ;;启动发送,发送启动发送,发送A中内容中内容$::JNB  TI,,$      ;;等待一帧发送结束,产生中断等待一帧发送结束,产生中断      CLR  TI         ;;清清TI允许再发送允许再发送       RET  MOV  TMOD,,#20H ;;自此下开始为接收方乙机软件自此下开始为接收方乙机软件       MOV  TL1,,#0E8H       MOV  TH1,,#0E8H       SETB TR1       MOV  R0,,#40H  ;;设置接收缓冲区设置接收缓冲区       MOV  R1,,#20H  ;;R1为接收字节计数器(应为为接收字节计数器(应为32个)个)LOOP1::CALL SP-IN     ;;调用接收子程序调用接收子程序263             JNC  ERROR     ;;若若C≠1则传送出错,转则传送出错,转ERROR            MOV  @R0 , A     INC    R0            DJNZ R1, LOOP1; 未接收到未接收到32个字符则转个字符则转LOOP1                       …………SP-IN::MOV  SCON,,#50H;;设置乙机为接收方式设置乙机为接收方式1$:        JNB  RI,,$     ;;等待一帧接收完毕发出中断等待一帧接收完毕发出中断  CLR  RI         MOV  A,,SBUF   ;;读入接收数据读入接收数据→A         MOV  C,,P      ;;C←((P))   ANL  A,,#7FH  ;;去掉最高位奇偶值,将原去掉最高位奇偶值,将原ASCII码值复原码值复原             RET  ERROR::…………           ;;出错子程序出错子程序264 主主        机机  从从  机机((1))  从从  机机((2))  从从  机机((3))  从从  机机((4))  从从  机机((5))  从从  机机((6))§工作方式与波特率的设置工作方式与波特率的设置§多机通讯多机通讯 265 §工作方式与波特率的设置工作方式与波特率的设置§多机通讯多机通讯 ⑴⑴ 多机通信时主要有两种方式:半双工通信和全双工通信,多机通信时主要有两种方式:半双工通信和全双工通信,     主、从之间可双向通信,但从机之间只能通过主机通信,主、从之间可双向通信,但从机之间只能通过主机通信,     不能直接通信。

      不能直接通信⑶⑶ 在主机传送给从机的信息中,若在主机传送给从机的信息中,若TB8=1表示传送是地址帧,表示传送是地址帧,     当当TB8=0时,表示传送的是数据帧时,表示传送的是数据帧⑵⑵ 多机通信时主、多机通信时主、从机串行口均工作在方式从机串行口均工作在方式2或方式或方式3,,SM2作作     为多机通信的控制位为多机通信的控制位控制控制R,,SOCN中的中的SM2设置为设置为1)266  ⑷⑷ 在接收到地址帧后,所有从机都进入各自的中断服务程序,在接收到地址帧后,所有从机都进入各自的中断服务程序,       每个从机在自己的中断服务子程序中进行识别:主机发出每个从机在自己的中断服务子程序中进行识别:主机发出       的地址号是否与本从机地址号相同?相同的从机将的地址号是否与本从机地址号相同?相同的从机将SCON       中中SM2置为置为0,不同的从机,不同的从机SM2=1保持不变保持不变§工作方式与波特率的设置工作方式与波特率的设置§多机通讯多机通讯  ⑸⑸ 当主机发出数据帧(当主机发出数据帧(TB8=0))时:对于时:对于SM2=0的从机,由的从机,由       于基地址号与主机发出的地址号相同所以不管接收到第九于基地址号与主机发出的地址号相同所以不管接收到第九       位位RB8为何值,都能激活为何值,都能激活RI,,使接到的数据有效,完成主使接到的数据有效,完成主       机与从机之间一对一的通信。

      机与从机之间一对一的通信267          单片机的最小系统:由单片机的最小系统:由MCS-51单片机加上片外电单片机加上片外电源,复位电路及振荡晶体组成的系统成为最小系统,单源,复位电路及振荡晶体组成的系统成为最小系统,单片机的扩展可分为:地址总线扩展、程序存储器扩展、片机的扩展可分为:地址总线扩展、程序存储器扩展、数据存储器扩展及数据存储器扩展及I/O口扩展   第七章第七章 单片机系统扩展单片机系统扩展第一节第一节    总线扩展总线扩展第二节第二节 程序存储器的扩展程序存储器的扩展第三节第三节    数据存储器的扩展数据存储器的扩展第四节第四节    I/O口的扩展口的扩展268             微机的微机的CPU大都是单独的大都是单独的CB、、AB和和DB,,而而 MCS-51受管受管脚的限制,脚的限制,AB与与DB是复用的,且都用是复用的,且都用I/O口线兼用,为了将口线兼用,为了将AB 分离出来,通常采用地址锁存器进行总线扩展常用的分离出来,通常采用地址锁存器进行总线扩展常用的芯片有:芯片有:74LS273、、74LS373、、74LS377和和8282等,在硬件上等,在硬件上均可由均可由ALE信号控制。

      即在信号控制即在ALE信号由信号由高变低高变低时将出现在时将出现在P0口的地址信号锁存到外部地址锁存器中,直到下一次口的地址信号锁存到外部地址锁存器中,直到下一次ALE变高时,地址才发生变化变高时,地址才发生变化 第一节第一节 总线扩展总线扩展269                    P2                  ALE                                   P0         8051         8751         8031                        PSEN                WR                RD       地址地址   锁存器锁存器      地址地址      总线总线数据总线数据总线  控制总线控制总线     总总 线线 扩扩 展展270          由于程序存储器扩展的芯片一般都使用由于程序存储器扩展的芯片一般都使用EPROM,,最常用的芯片有最常用的芯片有27打头打头的芯片,的芯片,如如2716(2KB)、、2732(4KB)、)、27648KB)、)、27128((16KB)、)、27256((32KB)、)、27512((64KB),),产品价格相差不大,宜选用大产品价格相差不大,宜选用大容量芯片。

      程序存储器扩展时使用的引线容量芯片程序存储器扩展时使用的引线有:地址线、数据线和控制线,其中:有:地址线、数据线和控制线,其中: 第二节第二节 程序存储器的扩展程序存储器的扩展271 数据线数据线::P0口口地址线地址线:高:高8位用位用P2口,低口,低8位用位用P0口,通过锁存器口,通过锁存器                  与扩展芯片的低与扩展芯片的低8位相接,所以最大可扩展位相接,所以最大可扩展                  的存储容量为:的存储容量为: 216=64KB的的EPROM程序存储器的扩展程序存储器的扩展 需要使用的控制线有:需要使用的控制线有:  ①①ALE::为为P0口地址锁存器锁存信号,与锁存器口地址锁存器锁存信号,与锁存器                  的控制信号相连,的控制信号相连,ALE利用其下降沿对利用其下降沿对                  地址信号进行锁存地址信号进行锁存272 ③③ PSEN::为片外为片外EPROM选通信号,软件上用选通信号,软件上用                    MOVC指令实现,硬件上与扩展芯指令实现,硬件上与扩展芯                    片的数据输出选通线片的数据输出选通线OE相连,与读相连,与读                    信号功能相同。

      信号功能相同②② EA::为片内为片内0000~~0FFFH((EA=1))或片外或片外               1000~~0FFFFH((EA=0))EPROM选选               择信号,选择择信号,选择扩展芯片时必须有扩展芯片时必须有EA=0程序存储器的扩展程序存储器的扩展273       P2.0~P2.7             ALE     8031EA           P0         PSEN  锁锁  存存  器器  A8~AnA0~A7 EPROMD0~D7    CEOE程序存储器的扩展程序存储器的扩展 扩展一片扩展一片EPROMEPROM 274         此系统中只用一片此系统中只用一片EPROM,,不需要片选信号,所以将不需要片选信号,所以将CE接地,需用多少根地址线由所选用的接地,需用多少根地址线由所选用的EPROM的容量决定的容量决定其中:其中:程序存储器的扩展程序存储器的扩展 扩展一片扩展一片EPROMEPROM M=2X        设某容量的设某容量的EPROM芯片有芯片有M个个存储单元,即有存储单元,即有M个字节个字节的存储容量的存储容量,,需要的地址线的数目为需要的地址线的数目为X,,则则M与与X的关系为:的关系为:             1根根地址线可给出地址线可给出21个个存储单元,存储单元,            2根根地址线可给出地址线可给出22个个存储单元,存储单元,            3根根地址线可给出地址线可给出23个个存储单元,存储单元,275 锁锁存存器器A0~A7           A8~An       EPROM((2))                                                         CE        D0~D7        OE                                             P2.5        P2.0~P2.7             ALE   8031EA                  P0                              PSENA0~A7          A8~An                            CE  EPROM((1))                          D0~D7           OE程序存储器的扩展程序存储器的扩展 扩展两片扩展两片EPROMEPROM276 程序存储器的扩展程序存储器的扩展扩展两片扩展两片EPROMEPROM         每片每片EPROM需用多少根地址线,由所选用的需用多少根地址线,由所选用的EPROM的容量决定。

      的容量决定当当P2.5=0时:选中时:选中EPROM((1))当当P2.5=1时:选中时:选中EPROM((2))         此系统中用了两片此系统中用了两片EPROM,,需要由片选信号需要由片选信号决定同一时刻到底选用哪一片决定同一时刻到底选用哪一片EPROM,,所以将所以将CE接到接到P2.5上,上,277 A7A6A5A4A3A2A1A0OE           CE27128Q7Q6Q5Q4Q3Q2Q1Q0P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.78051PSEN   ALEA13A12A11A10  A9  A8D0D1D2D3D4D5D6D7Q0Q1Q2A3Q4Q5Q6Q774LS373OEGEPROM的扩展举例的扩展举例1 1右图中:右图中:①① 27128的容的容       量为量为16KB②② 27128的地的地     址范围为:址范围为:0000~~3FFFH或或C000~~FFFFH278 A7A6A5A4A3A2A1A0OE           CE27128Q7Q6Q5Q4Q3Q2Q1Q0P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.78051PSEN   ALEA13A12A11A10  A9  A8D0D1D2D3D4D5D6D7Q0Q1Q2A3Q4Q5Q6Q774LS373OEGEPROM的扩展举例的扩展举例1 1右图中:右图中:①① 27128的容的容       量为量为16KB②② 27128的地的地     址范围为:址范围为:0000~~3FFFH或或C000~~FFFFH279 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.78051PSEN   ALEA8A9A10A11 A12A7A6A5A4A3A2A1A0Q0Q1Q2Q3Q4Q5Q6Q7OECE2764((A))D0D1D2D3D4D5D6D7Q0Q1Q2A3Q4Q5Q6Q774LS373OEGA8A9A10A11 A12A7A6A5A4A3A2A1A0Q0Q1Q2Q3Q4Q5Q6Q7OECE2764((B))EPROM的扩展举例的扩展举例2 2右图中,设右图中,设P2.6=P2.7=0,,则有:则有:①① 2764的容量的容量     为为8KB②② 2764((A))的地址范围为:的地址范围为:0000~~1FFFH③③ 2764((B))的地址范围为:的地址范围为:2000~~3FFFH280 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.78051PSEN   ALEA8A9A10A11 A12A7A6A5A4A3A2A1A0Q0Q1Q2Q3Q4Q5Q6Q7OECE2764((A))D0D1D2D3D4D5D6D7Q0Q1Q2A3Q4Q5Q6Q774LS373OEGA8A9A10A11 A12A7A6A5A4A3A2A1A0Q0Q1Q2Q3Q4Q5Q6Q7OECE2764((B))EPROM的扩展举例的扩展举例2 2右图中,设右图中,设P2.6=P2.7=0,,则有:则有:①① 2764的容量的容量     为为8KB②② 2764((A))的地址范围为:的地址范围为:0000~~1FFFH③③ 2764((B))的地址范围为:的地址范围为:2000~~3FFFH281 EPROM的扩展举例的扩展举例3 3          下图下图采用两片采用两片27256(32K×8位位)EPROM组成组成64KB的存储系统的存储系统.地址译码非常简单地址译码非常简单,通过通过P2.7的的输出来实现片选输出来实现片选,当当P2.7=0时时,ROM1被选中被选中,其地址其地址为为0000H~~7FFFH;当当P2.7=1时时,经反相后将选中经反相后将选中ROM2,其地址为其地址为8000H~~FFFFH.EPROM的扩展举例的扩展举例4         如图如图::282 283 右图采用右图采用更大容量更大容量的的27512(64 K×8位位) EPROM芯芯片片,连接电连接电路更为简路更为简单单,片选端片选端只要接地只要接地,使它总处使它总处于选中状于选中状态即可态即可,地地址空间为址空间为::0000H~~FFFFH. 284         常使用的芯片以常使用的芯片以6打头,如打头,如6116、、6264等,所用等,所用的引线基本与程序存储器扩展相同,只是控制线中有的引线基本与程序存储器扩展相同,只是控制线中有RD和和WR作为片外作为片外RAM的读写信号。

      的读写信号第三节第三节 数据存储器的扩展数据存储器的扩展        一、一、线选法扩展线选法扩展RAM二、二、译码法扩展译码法扩展RAM285 线选法扩展RAM举例1线选法:就是把单根的地址线接到芯片的片选信线选法:就是把单根的地址线接到芯片的片选信                号上,用地址线来选择需要的芯片号上,用地址线来选择需要的芯片其中:其中:6116((1#)地址为)地址为0F000H~~0F7FFH            6116((2#)地址为)地址为0E800H~~0EFFFHP2.4P2.3P2.2P2.1P2.0P0.0~~P0.7          ALERDWR8051A10A9A8A0~~A7D0~~D7QE     WECS6116((1#)) 8282A0~~A7A10A9A8A0~~A7D0~~D7QE     WECS6116((2#))286 译码法扩展译码法扩展RAM译码法:就是采用译码电路来选择所需要的芯片常用译码法:就是采用译码电路来选择所需要的芯片常用                的译码器有的译码器有3--8译码器译码器74LS138和和2--4译码器译码器                 74LS139,,它们的引脚和功能如下:它们的引脚和功能如下:     输输  入入       输输     出出使能使能选择选择Y0Y1Y2Y3   GB  A   1   0   0   0   0X  X0   00   11   01   1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 02--4译码器译码器74LS139真值表真值表74LS13912345668161514131211109   1G   1A   1B   1Y0   1Y1   1Y2   1Y3GNDYCC2G2A2B2Y02Y1   2Y2   2Y3287          输入输入                        输出输出使能使能选择选择Y0Y1Y2Y3Y4Y5Y6Y7E3 E2 E1C B A 1  0   0 1  0   0 1  0   0 1  0   0  1  0   0  1  0   0  1  0   0  1  0   0  0  0  00  0  10  1  00  1  11  0  01  0  11  1  01  1  1  0  1  1  1  1  1  1  1 1 0 1 1 1 1 1 1 1  1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0  X  X X  1  X X  X  1X X X X X X X X X  1  1  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 174LS13812345668161514131211109      A      B      C     E1     E2     E3    Y7GNDYCCY0Y1Y2Y3Y4Y5Y63--8译码器译码器74LS138真值表真值表288 P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALE8051PSEN   WR   RDP0A0A12A11A10A9A8A7~~D7~~D0   OECE IC02764A0A12A11A10A9A8A7~~D7~~D0   OECE IC12764A0A12A11A10A9A8A7~~D7~~D0  WE    OECE IC26264A0A12A11A10A9A8A7~~D7~~D0  WE  OECE IC3626474LS373Q7Q0~~D7~~D074LS139GBAY2Y1Y0译码法扩展译码法扩展存储器综合举例存储器综合举例IC0::                                        IC1::IC2::                                        IC3::0000H~~1FFFH2000H~~3FFFH0000H~~1FFFH4000H~~5FFFH289 用一片用一片27256EPROM为为 8031提供提供32KB的外的外部程序存部程序存储器储器,用一用一片片62256静静态态RAM为为8031提供提供32KB的外的外部数据存部数据存储器储器,如图如图所示所示. 290         由于外部程序存储器由于外部程序存储器27256只是用只是用14根地址线根地址线,而而P2.7对对27256没有参与控制没有参与控制,所以会出现一个存储单元所以会出现一个存储单元有有2个地址个地址,即地址重叠即地址重叠.27256EPROM地址空间为:地址空间为:当当P2.7=0时时,基本地址为:基本地址为:0000H~~7FFFH; 当当P2.7=1时时, 重复的地址为重复的地址为8000H~~FFFFH.                数据存储器数据存储器62256的片选端接的片选端接8031的的P2.7,所以它所以它的地址空间为的地址空间为0000H~~7FFFH,且唯一确定且唯一确定.291 (2) CPU用用MOVX指令访问指令访问I/O口。

      口3) 硬件上硬件上I/O口写入受口写入受 WR控制,控制,I/O口读出受口读出受 RD控制         单片机的扩展系统中,需要使用大量的单片机的扩展系统中,需要使用大量的I/O口线,但用户真口线,但用户真正能使用于外设的正能使用于外设的I/O口线并不多,也只有口线并不多,也只有P1口的口的8根根I/O线,所线,所以常要对以常要对I/O口进行扩展,扩展的主要芯片有口进行扩展,扩展的主要芯片有8155,,8255等,等,I/O接口扩展的特点有:接口扩展的特点有: (1) 外部外部RAM与接口与接口统一编址统一编址,即每一个端口号相当于外,即每一个端口号相当于外      部部RAM的一个存储单元的一个存储单元第四节第四节        I/OI/O口的扩口的扩展展292                 一、一、 8155的结构及引脚的结构及引脚   二、二、8155内部内部RAM的使用的使用   三、三、8155内部寄存器介绍内部寄存器介绍    四、四、实用的实用的I/O扩展线举例扩展线举例 I/O I/O 口口 的的 扩扩 展展293   8155扩展器是集扩展器是集存储器、存储器、I/O口及口及CTC于一身的多功于一身的多功能芯片,特别适用能芯片,特别适用于单片机应用系统,于单片机应用系统,是一种最常用的外是一种最常用的外围扩展器。

      围扩展器 8155为为40引脚双列直插式引脚双列直插式封装,如右图封装,如右图 8155的结构及引脚的结构及引脚815512345678910111213141516171819204039383736353433323130292827262524232221VCCPC2PC1 PC0 PB7PB6PB5PB4PB3PB2PB1PB0PA7PA6PA5PA4PA3PA2PA1PA0            PC3            PC4TIMER IN       RESET             PC5TIMER OUT          IO/M             CE                 RD                       WR            ALE            AD0            AD1            AD2            AD3            AD4            AD3            AD1            AD0                  VCCABC256B静态静态RAM14位位定时计定时计数器数器命令命令/状态状态寄存器寄存器294 ((2)) RESET::8155内部复位输入端,复位时内部复位输入端,复位时3个个I/O口均处于口均处于                             输入方式,输入方式,CTC停止工作。

      停止工作4)) AD0~AD7::三态地址三态地址/数据线当数据线当AD0~AD7上为地址上为地址((1)) PA、、PB、、PC共共22位位I/O口,可通过命令口,可通过命令R选择它们的工选择它们的工                                   作方式(作方式(IN OR OUT))8155的结构及引脚的结构及引脚((3)) IO/ M::8155内部内部RAM与与I/O口选择线,当口选择线,当IO/M=0时选择时选择           8155内部内部RAM,,此时此时AD0~AD7上的地址为上的地址为8155内部内部RAM           地址,当地址,当IO/ M=1时选择时选择8155I/O口或命令状态口或命令状态R,,此时此时           AD0~AD7上的地址为上的地址为I/O口地址或命令口地址或命令R地址    295 ((8)) TIMER IN和和TUMER OUT::CTC的输入端和输出端的输入端和输出端5)) CE::片选信号低电平有效,片选信号低电平有效,ALE下降沿将其锁存到下降沿将其锁存到                     8155内部内部R。

      6)) ALE::地址锁存有效信号在地址锁存有效信号在ALE下降沿把下降沿把AD0~AD7上上                       的地址锁存在的地址锁存在8155内部内部R8155的结构及引脚的结构及引脚信号时,信号时,ALE下降沿把该地址值锁入下降沿把该地址值锁入8155芯片内部地址锁存芯片内部地址锁存器;当器;当AD0~AD7为数据信号时,根据为数据信号时,根据WR、、RD及及IO/M信号信号对对8155的的IO或或 M进行读或写操作进行读或写操作7)) RD、、 WR信号:读写信号读或写信号:读写信号读或写8155的片内的片内RAM或或                             I/O口,由口,由IO/M信号的值决定信号的值决定296 8155内部内部RAM的使用的使用下面一段程序为检验数据是否能正确从下面一段程序为检验数据是否能正确从8155读出和写入,按上读出和写入,按上图的连线,图的连线,256B的的 RAM区的地址范围为:区的地址范围为:0FC00H~~0FCFFHP2.0PA0PA7~~PB0PB7~~PV0PC5~~P2.2P2.7~~P0.0P0.7~~AD0AD7~~WRRDALE80518155WRRDALEIO/MRSTRESETP2.1CE297 STAR::MOV   DPTR, #0FC00H   ; 指向指向8155                                                    RAM的的00H单元单元         MOV   A,    #01H      ; 01写入写入A中中         MOVX  @DPTR, A  ; 写入写入8155片内片内                                                RAM单元单元         INC    DPTR       ;       指向下一个单元指向下一个单元         MOV    A, #0FFH         MOVX  @DPTR, A          MOV   DPTR, #0FC00H  298  MOVX  A , @DPTR    ; 从从8155RAM中读数中读数 MOV    R2, A            ; 暂存暂存R2中中 INC     DPTR            ; 指向下一个单元指向下一个单元 MOVX    A, @DPTR         ADD    A, R2             ; 取出的两个数相加取出的两个数相加 JZ       OK              ;   和为零?和为零?ERR::…                     ;   不为不为0,读,读/写不正确写不正确OK::…                      ;  和为和为0,读,读/写正确写正确299 8155内部共有内部共有7个寄存器,共占个寄存器,共占7个地址它们的地址分布如下表:个地址它们的地址分布如下表:                                        8155口地址分布口地址分布AD7  AD6  AD5  AD4   AD3  AD2  AD1  AD0    选中的寄存器选中的寄存器A7      A6     A5     A4      A3     A2     A1     A0X       X      X       X       X       0       0       0    命令命令/状态寄存器状态寄存器X       X      X       X       X       0       0       1            A口口X       X      X       X       X       0       1       0             B口口X       X      X       X       X       0       1       1             C口口X       X      X       X       X       1       0       0    定时器定时器/计数器低计数器低8位位X       X      X       X       X       1       0       1    定时定时/计数器高计数器高6位位                                                                             和方式寄存器和方式寄存器8155内部寄存器介绍内部寄存器介绍300  1.. I/O口口R::PA、、PB口均为口均为8位位R,,均可工作于输入均可工作于输入/输出输出        或选通工作方式,地址分别为:或选通工作方式,地址分别为:xxxxx001H、、xxxxx010H。

              PC口为口为6位位R,,可工作于输入可工作于输入/输出方式,或作为输出方式,或作为PA、、PB        口选通工作方式时的控制线,地址为口选通工作方式时的控制线,地址为xxxxx011H8155内部寄存器介绍内部寄存器介绍⑴⑴ CTC作用:作用:CTC是是14位位递减递减计数器,它对计数器,它对TIMER IN引脚的引脚的     脉冲进行脉冲进行计数计数,每出现一个脉冲内部计数器减,每出现一个脉冲内部计数器减1,当计数值,当计数值     减到减到0时,向时,向TIMER OUT引脚送出一个方波或脉冲信号引脚送出一个方波或脉冲信号2..命令命令R::8位,只能写不能读,地址为位,只能写不能读,地址为xxxxx000H,,P123图图7.223..状态状态R::8位,只读不写,地址为位,只读不写,地址为xxxxx000H,, P123图图7.234..定时定时/计数器计数器CTC::     301 302 D0=1时时A口有中断申请口有中断申请D1=1时时A口口BUF满满D2=1时允许时允许A口中断口中断D3=1时时B口有中断申请口有中断申请D4=1时时B口口BUF满满D5=1时允许时允许B口中断口中断D6=1时时CTC定时计数定时计数到达终值,除到达终值,除①②①②外,外,③③开始新的计数过程开始新的计数过程 时该位复位为时该位复位为0 0303  ①①  定时器有定时器有2个个R::定时器低定时器低8位位R((PITL))和定时和定时          器高器高6位位R((PITH))及及2位定时方式,定时器低位定时方式,定时器低8       位位R地址为地址为xxxxx100,,高高8位地址为位地址为xxxxx101。

       定时定时/计数器计数器CTC8155内部寄存器介绍内部寄存器介绍②② 定时器的高定时器的高8位中最高位中最高2位为位为CTC输出方式定义输出方式定义     位,位,CTC可被定义为四种方式:可被定义为四种方式:看看P124图图7.24⑵⑵ 定时器定时器R的具体功能:的具体功能:304 定时定时/计数器计数器CTC8155内部寄存器介绍内部寄存器介绍M2   M1        输出方式选择输出方式选择   0     0     方式方式0:单次方波:单次方波,如如((a))图   0     1     方式方式1:连续方波,如:连续方波,如((b))图   1     0     方式方式2:终止计数时输出单个脉冲,如:终止计数时输出单个脉冲,如 (c)图   1     1     方式方式3:连续脉冲,如:连续脉冲,如((d))图a))((c))((b))((d))305  ③③ 14位定时器的计数范围为位定时器的计数范围为2H~3FFH,,原因是:当计数长度原因是:当计数长度      为偶数时,方波输出为对称的,当计数长度为奇数时,则为偶数时,方波输出为对称的,当计数长度为奇数时,则      输出方波为不对称的,安排的高电平的半个周期比低电平输出方波为不对称的,安排的高电平的半个周期比低电平      的半个周期多计一个数。

      的半个周期多计一个数   定时定时/计数器计数器CTC8155内部寄存器介绍内部寄存器介绍⑶⑶ CTC的应用举例:如下页的应用举例:如下页④④ CTC在计数期间,可以将新的计数长度值和输出方式装入到在计数期间,可以将新的计数长度值和输出方式装入到     计数长度计数长度R中,它不影响定时器原来的操作,仅当装入了新中,它不影响定时器原来的操作,仅当装入了新     的启动命令到命令的启动命令到命令R后,即给命令后,即给命令R重新复值为重新复值为11xxxxxx并并     要等到原先计数值到要等到原先计数值到0后才按新的工作方式及计数长度工作后才按新的工作方式及计数长度工作306 例例1:用:用8155的定时的定时/计时器作为方波发生器,由计时器作为方波发生器,由TIMER          OUT端输出的方波频率为端输出的方波频率为TIMER IN端输入计数脉端输入计数脉          频率的频率的24分频,编出相应的初始化程序分频,编出相应的初始化程序即即::CTC工作于方式工作于方式1(输出连续方波输出连续方波),最高两位,最高两位=01,,        计够计够24 (0018H)个脉冲信号时输出一个方波个脉冲信号时输出一个方波,,。

      0100000000011000((4018和和H))解:按解:按图图接口电路,接口电路, TIMER IN端输入端输入24个脉冲个脉冲        信号,信号, TIMER   OUT端输出一个方波,所以端输出一个方波,所以        定时定时/计数方式和计数长度字:计数方式和计数长度字:307 MOV   DPTR , #0FDFCHMOV   A , #18H           ;装入计数值低装入计数值低8位位MOVX  @DPTR , AINC    DPTRMOV   A , #40H ; 装入计数值高装入计数值高6位及方式字位及方式字MOVX  @DPTR , A   MOV   DPTR , #0FDF8H    ;指向命令口指向命令口MOV   A, #0C2H   ;启动定时器计数,启动定时器计数,B口为口为                                  输出,输出,A口口C口为输入口为输入MOVX   @DPTR, A308 解:解:8155的的RAM和各端口地址如下:和各端口地址如下:RAM的地址:的地址:0000H- 00FFH ,命令口:,命令口:0200HA口:口:0201H,,  B口:口:0202H,,   C口:口:0203H定时器低位:定时器低位:0204H,定时器高位:,定时器高位:0205H, 定时器定时定时器定时/计数的方式和计数长度字为:计数的方式和计数长度字为:4018H例例2:在下页:在下页图图所示的接口电路中,设所示的接口电路中,设A口与口与C口为输入口为输入          口,口,B口为输出口,均为基本口为输出口,均为基本I//O口,定时器为口,定时器为          连续方波工作方式,对输入脉冲进行连续方波工作方式,对输入脉冲进行24分频。

      试分频试          编写编写8155的初始化程序的初始化程序命令字可选取为:命令字可选取为: 110000010=C2H ,,∵∵PA =0,      PB=1                         PC2PC1=00, IEA=0,     IEB=0,       TM2TM1=ll 309 310 MOV     DPTR,,#0204H;;        指向定时器低指向定时器低8位位MOV     A,,    ##18H;;   设置定时器的低设置定时器的低8位的值位的值MOVX  @@DPTR,,A;;              写入定时器低写入定时器低8位位INC        DPTR;;                      指向定时器的高位指向定时器的高位MOV     A,#,#40H;;           设置定时器的高设置定时器的高6位及位及                                                           2位输出方式位的值位输出方式位的值MOVX  @@DPTR,,A;;                   写入高位的值写入高位的值MOV     DPTR, # 0200H;;                  指向命令口指向命令口MOV     A,#,#C2H;;                   取取8155的命令字的命令字MOVX  @@DPTR,,A;;                       写入命令字写入命令字311 例例2::8155作为显示器的接口电路,用作为显示器的接口电路,用8155定时器定时,定时器定时,         每隔每隔1秒钟依次读出秒钟依次读出8155内部内部RAM的数据,送的数据,送B口口        的的LED显示,显示,8155与与LED及及8051的接口电路见下图。

      的接口电路见下图解:编程思路如下解:编程思路如下⑴⑴由图可知,由图可知,8155定时器的计数脉冲频率为定时器的计数脉冲频率为5kHz,  P0.0~~p0.7            ALE              RD             WR             P2.1             P2.0                        INT0AD0~~AD7          PB0ALE                     PB1RD                        PB2WR                       PB3IO/M                    PB4CE                        PB5                              PB6TIMEROUT           PB7                    TIMERIN f=5kHz          +5v80518155LED0LED7312 计数器计满溢出的输出信号计数器计满溢出的输出信号TIMEROUT接接8051的外部的外部中断中断0输入端,定时时间到可向输入端,定时时间到可向CPU申请中断,在中断申请中断,在中断服务程序中从服务程序中从8155的的RAM中取一个数送中取一个数送B口输出显示。

      口输出显示⑵⑵ 程序执行前先向程序执行前先向8155内部内部256B的的RAM中写入中写入     0~~255的数据⑶⑶ 8155的口地址分配,由的口地址分配,由图图看出看出P2.1连在连在8155的的    IO/M上上,,P2.0连在连在8155的的CE引脚上引脚上,, P2.0=0    时选中时选中8155,此时当,此时当p2.1=0时访问时访问8155的的RAM,,   其地址范围为其地址范围为0FC00H~~0FCFFH;;P2.1=1时访时访   问问8155的的I/O口,端口地址为:口,端口地址为:313 FEF8H        命令命令/状态口状态口FEF9H        A口口FEFAH        B口口FEFBH        C口口FEFCH        定时器低定时器低8位位FEFDH        定时器高定时器高8位位⑷⑷ 用用8155定时器定时定时器定时1秒,设置为方式秒,设置为方式2(终止计数时(终止计数时     输出单个脉冲),因为计数周期输出单个脉冲),因为计数周期=1/5=0.2ms ,其计,其计     数初值为:计数初值数初值为:计数初值=1×1000/0.2=5000=1388H。

           由以上分析可编写初源程序如下:由以上分析可编写初源程序如下:314 ORG   0000HSJMP   STARORG   0003HAJMP   INTR0      ;外部中断外部中断0中断服务程序入口中断服务程序入口STAR:: MOV   22H, #00H      ;8155RAM的首地址写入的首地址写入8051片内片内22H、、23H单元单元MOV   23H, #0FCHMOV   R1, #22HMOV   R0, #0FFH      ;R0计数计数315      MOV   DPTR , #0FC00H  ;指向指向8155RAM的首址的首址                MOV   R7, #0FFH              ;写入次数计数写入次数计数                MOV   A, #00H                   ;写入初值写入初值LOOP::MOVX  @DPTR, A           ;向向8155RAM写入数据写入数据               INC    DPTR                       ;修改地址指针修改地址指针               INC    A                               ;数据增量数据增量     DJNZ   R7, LOOP              ;未写完重复未写完重复     MOV   DPTR, #0FEF8H   ;指向指向8155命令口命令口     MOV   A, #0C2H           ;启动计数,启动计数,B口基本输出口基本输出316 MOVX  @DPTR, AMOV   DPTR, #0FEFCH    ;指向定时器低指向定时器低8位位MOV   A, #88HMOVX  @DPTR, A             ;装入低装入低8为计数值为计数值INC    DPTRMOV   A, #93HMOVX  @DPTR , A  ;装入高装入高6为计数值,定时器输出方式为计数值,定时器输出方式2MOV   IE, #81H                   ;开开CPU及及INT0中断中断SETB   IT0                            ;INT0为边沿触发为边沿触发执行其它程序执行其它程序……317 INT0中断服务程序:(由中断服务程序:(由0003H来)来)INTR0::MOV   DPTR, #0FEF8H  ;重新启动计数器重新启动计数器      MOV   A, #0C2H      MOVX  @DPTR, A         MOV   DPTR, #0FEFCH   ;装入计数值及装入计数值及                                                                           定时器工作方式定时器工作方式      MOV   A, #88H      MOVX  @DPTR, A         INC    DPTR      MOV   A, #93H                 MOVX  @DPTR, A 318 MOV   DPH, 23HMOV   DPL, @R1INC      R1MOVX  A, @DPTR               ;取数据取数据MOV   DPTR, #0FEFA         ;指向指向B口口MOVX  @DPTR, A               ;数据送数据送B口输出显示口输出显示INC    @R0                             ;22H单元内容加单元内容加1CJNE   @R0, #0FFH, EXIT  ;数据未取完返回数据未取完返回MOV    R1,#22H  ;指向指向8155的首地址,重复显示过程的首地址,重复显示过程EXIT::RETI                          ;中断返回中断返回注意:此程序中省略了保护和恢复现场的操作,在实际的应用注意:此程序中省略了保护和恢复现场的操作,在实际的应用            中应加以考虑。

      中应加以考虑319 例例3:: 用用74LS244扩展并行输入口和用扩展并行输入口和用74LS273扩展扩展           输出口输出口. 如图如图,如果如果74LS244的输入端接一组开的输入端接一组开           关关, 74LS273的输出端接一组指示灯的输出端接一组指示灯,要求将开要求将开           关的状态由对应的指示灯显示出来关的状态由对应的指示灯显示出来,编写输入编写输入           输出程序输出程序如下:如下:DRV-IO::   MOV    DPTR,   #0FEFFH    ;端口地址端口地址                      MOVX   A,  @DPTR         ;读输入口读输入口                      MOVX   @DPTR ,   A        ;送输出口送输出口                      RET320 74ls27374ls244321 例例4:: 如如图图所示的电路,从所示的电路,从8155的的A口输入数据,并口输入数据,并           进行判断;若不为进行判断;若不为0,则将该数据存入,则将该数据存入8155的的            RAM中(从起始单元开始,数据总数不超过中(从起始单元开始,数据总数不超过            256个),同时从个),同时从B口输出,并将口输出,并将PC0置置“1”;;           若为若为0,则停止输入数据,同时将,则停止输入数据,同时将PC0清清“0”,,           使编写程序。

      使编写程序解解::程序如下:程序如下:MOV   DPTR,, #0200H    ;指向命令口;指向命令口MOV   A,, #06H         ;设置命令字;设置命令字MOVX  @DPTR, A         ; 写入命令字写入命令字322 323 MOV   R0,  #00H        ;指向;指向8155的的RAM区首址区首址MOV   R1,, #00H        ;数据总数为;数据总数为256个个LP1::  MOV   DPTR,, #0201H    ;指向;指向A口口MOVX  A,, @DPTR        ; 从从A口读入数据口读入数据JZ    LP3              ; 为为0则转则转MOVX  @R0,  A          ; 存入存入RAM单元单元INC   R0               ; 指向下一单元指向下一单元INC   DPTR             ; 指向指向B口口MOVX  @DPTR,  A        ; B口输出口输出324    INC   DPTR             ; 指向指向C口口   MOVX  A, @DPTR         ; C口读入口读入   SETB  ACC.0            ; 使使PC0=1      MOVX  @DPTR, A         ; 回送回送   DJNZ  R1, LP1          ; 未完则反复未完则反复LP2::  SJMP  $                ; 暂停暂停LP3::  MOV   DPTR, #0203H     ; 指向指向C口口   MOVX  @DPTR, A         ; 回送回送   SJMP  LP2 325 例例5::8255A与与8031的连接如的连接如图图所示所示.采用线选法寻采用线选法寻       址址,P2.7接接8255A的的 CS,单片机的最低两位地址单片机的最低两位地址       线接线接8255的端口选择线的端口选择线A1、、A0,所以,所以8255A       的的PA口、口、PB口、口、PC口和控制口的地址分别口和控制口的地址分别       为为7FFCH、、7FFDH、、7FFEH、、7FFFH.如果如果       8255A的的PA口接一组指示灯口接一组指示灯, PB口接一组开口接一组开      关关,要求将开关的状态由对应的指示灯显示出要求将开关的状态由对应的指示灯显示出      来来,则则8255A初始化和输入输出程序初始化和输入输出程序如下如下:: 326 327 INIT-IO::   MOV    DPTR,  #7FFFH   ;控制口控制口                     MOV   A,      #82H      ;方式控制字方式控制字(PA                                    口方式口方式0输出输出,PB口方式口方式0输入输入)                     MOVX  @DPTR,  A       ;写方式控制字写方式控制字                     MOV   DPTR,  #7FFDH                     MOVX   A,  @DPTR  ;读读PB口开关状态口开关状态                     MOV   DPTR,  #7FFCH                     MOVX  @DPTR,  A       ;输出到输出到PA口口                     RET328 实用的实用的I/O扩展线举例扩展线举例1G1A1B1Y11Y31Y074LS139((1))P2.7P2.6P2.51Q~~7QCP1D~~7D74LS373P0.0P2.4P2.3P2.2P2.1P2.0~~P0.7PSENWRRDA0~~A7 A8~~A12D0~~D7OECS2764A0~~A7 A8~~A12D0~~D7 WRCS6264RD2B    2A    2G74LS139((2))2Y0IO/M              AD0~~AD7  ALE   RD  WR  CEPA0~~PA7     PB0~~PB7     PC0~~PC58155ALEP2.3    P2.48031329 系统中使用了一片系统中使用了一片8031,一片,一片74LS139译码器,一片译码器,一片74LS373锁锁存器,一片片内程序存储器扩展芯片存器,一片片内程序存储器扩展芯片2764,一片片外数据存储,一片片外数据存储器芯片器芯片6264,以及一片,以及一片I/O扩展芯片扩展芯片8155。

         实用的实用的I/OI/O扩展线举例扩展线举例1.. 用户系统译码电路分析:用户系统译码电路分析: ((1))74LS139芯片中有芯片中有2个独立个独立           的的2—4译码器:译码器:     1G、、1B、、1A、、1Y0、、1Y1、、     1Y2、、1Y3为第一组为第一组     2G、、2B、、2A、、2Y0、、2Y1、、     2Y2、、2Y3为第二组为第二组    2—4译码器的逻辑关系如表译码器的逻辑关系如表1::输入(使能选择)输入(使能选择)          输出输出  G    B    AY0  Y1  Y2 Y3        1     X    X            0     0      0                  0        0      1          0     1      0         0     1      1   1     1      1     1   0     1      1     1   1     0      1     1   1     1      0     1   1     1      1     0表表1330  ⑵⑵ 图中:图中:74LS139((1))2—4译码器的输入端译码器的输入端1G、、1A、、     1B分别与地址线分别与地址线A15~A13((P2.7~P2.5))相接,输出相接,输出     端端1Y0、、1Y1、、1Y3分别为分别为2764、、74LS139及及6264的的     片选信号,如表片选信号,如表2                     1G      1A      1BA15     A14       A13输出输出选择选择0 0 01Y027640 1 01Y174LS139(2)0 1 11Y36264表表  2实用的实用的I/OI/O扩展线举例扩展线举例331 ⑶⑶ 74LS139第二组第二组2—4译码器输入端译码器输入端2G、、2A、、2B分别与分别与1Y1、、     A12((P2.4)、)、A11((P2.3))相连,输出端相连,输出端2Y0为为8155的片选的片选     号,如表号,如表3::   2G((1y1))2A  2B输出输出 作作  用用    A15  A14  A13   0     1     0A12  A11                         0 0     33202Y0=0选择选择8155      表表3实用的实用的I/OI/O扩展线举例扩展线举例332    由表由表2可知:可知:2764的片选信号为的片选信号为2Y0,,即即A15=0,,A14=0,,A13=0时,有时,有2Y0=0,,此时此时2764的的CE信号有效。

      信号有效2764共有共有13条地址线,条地址线,分别与分别与8031地址总线地址总线A12~A0相接,所以相接,所以2764所占的地址空间为:所占的地址空间为:实用的实用的I/OI/O扩展线举例扩展线举例A15  A14  A13  A12……A0      即:即: 2764地址空间为地址空间为0~1FFFH共共8kB  0     0     0      0   ……0      注注::A15 A14A13的值只能为的值只能为000(片选(片选 0     0     0      0   ……1               信号),才能使信号),才能使2Y0=0,,A12~A0    …  …  …  …  …  …                 可为可为0或或1 0     0     0      1 …… 12..2764的地址分布:的地址分布:333       8155共有共有8条地址数据线条地址数据线A0~A7,,分别与分别与8031AB的的A0~A7相接,而相接,而IO/M信号接信号接A8          6264EPROM((8KB))也有也有13根地址线,分别与根地址线,分别与AB的的A12~A0相接,所以其地址空间为相接,所以其地址空间为6000~7FFFH((8KB)。

        实用的实用的I/OI/O扩展线举例扩展线举例⑴⑴  8155内部内部RAM所占地址空间如所占地址空间如::⑵⑵  8155I/O口所占地址空间如下口所占地址空间如下:: 3..6264地址分布:地址分布:4..8155地址分布:地址分布:         334   A15  A14  A13  A12  A11    A10   A9   A8   A7……A0    0    1       0     0      0      X     X     0     0… …  0   0    1       0     0      0      X     X     0     0 ……  1   ……………………………………………………………   0    1       0     0      0      X     X     1     1 ……  1         实用的实用的I/OI/O扩展线举例扩展线举例8155内部内部RAM所占地址空间所占地址空间        其中其中A10 A9的值可仍选,在的值可仍选,在A10 A9=00时时,8155内部内部RAM的地址空间为的地址空间为4000H~40FFH共共256B。

      335  A15  A14  A13   A12   A11    A10   A9   A8   A7… … …A2   AT   A0    0    1      0       0      0      X      X    X     0   XXX    0     0    0   命令命令R   0    1      0       0      0      X      X    X     0   XXX    0     0    1    PA口口   0    1      0       0      0      X      X    X     0   XXX    0     1    0    PB口口   0    1      0       0      0      X      X    X     0   XXX    0     1    1    PC口口   0    1      0       0      0      X      X    X     0   XXX    1     0    0    PITL   0    1      0       0      0      X      X    X     0   XXX    1     0    1    PITH 实用的实用的I/OI/O扩展线举例扩展线举例8155I/O口所占地址空间如下口所占地址空间如下336 命令命令R地址为:地址为:4100H,,PA口地址为口地址为4101H,,PB口地址为口地址为4102H,,PC口地址为口地址为4103H,,CTC低字节寄存器低字节寄存器TL地址地址为为4104H,, CTC高字节寄存器高字节寄存器TH地址为地址为4105H。

      实用的实用的I/OI/O扩展线举例扩展线举例8155I/O口所占地址空间如下口所占地址空间如下         具有具有8kB的外部程序存储器和的外部程序存储器和8kB的外部数据存储器的外部数据存储器;;适适于对设备仪器进行智能化改造具有于对设备仪器进行智能化改造具有36根根I/O线与外设交换信线与外设交换信息,适于对开关量进行控制息,适于对开关量进行控制 5.扩展以后的单片机系统用途.扩展以后的单片机系统用途 其中其中A15 A14 A13 A12 A11 =01000,,才有才有2Y0=0,,A8恒为恒为1才选才选择择I/O口地址A10A9任意,任意,A7~A3任意,在它们均取任意,在它们均取0时有:时有:337                  ORG  0000             ;;此程序存入此程序存入2764芯片中芯片中       MOV  DPTR,,#4100H   ;;DPTR指令命令指令命令R       MOV  A,,#0FH      ;;命令命令R的设置为:不影响计数操作的设置为:不影响计数操作       MOVX  @DPTR,,A       ;;禁止禁止A、、B口中断,口中断,A、、B、、C                                                               口为基输出方式口为基输出方式       MOV  A,,#0FFH             ;;第一次第一次PA各位均输出各位均输出“1”LOOP1::MOV  DPTR,,#4101H  ;;A中内容送中内容送A口,则口,则                                                                         PA口各位均输出口各位均输出1或或0       MOVX  @DPTR,,A               例.例.8155I/O口软件举例:要求在图口软件举例:要求在图7-7所示的用户系统中的所示的用户系统中的PA、、        PB、、PC三口每一位都输出连续方波。

      三口每一位都输出连续方波338              INC      DPTR              ;;A中内容送中内容送B口口             MOVX  @DPTR,,A             INC      DPTR              ;;A中内容送中内容送C口口             MOVX  @DPTR,,A             MOV  R0,,#00H         ;;延时延时LOOP2::DJNZ  R0,,LOOP2            CPL   A                         ;;A中内容取反中内容取反            SJMP  LOOP1339 ①①  上述程序运行时,可用示波器在上述程序运行时,可用示波器在8155的的PA、、PB、、PC口每口每       一一 条引脚上测得连续方波;条引脚上测得连续方波;    ②②  上述程序必须写入扩展系统的上述程序必须写入扩展系统的2764中;中;③③  延时时间为(大致):延时时间为(大致):           256×24T振振=256×24×1/((6×106))≈1ms=1024us 设设fosc=6mHz::则有则有           256×24T振振+12T振振+24T振振+12T振振=1048us≈1ms注意:注意:340 第八章第八章 D/A、、A/D转换器接口及应用转换器接口及应用  一、一、 A/D转换器转换器二、二、 A/D转换器与微机的接口技术转换器与微机的接口技术三、三、 A/D转换器与转换器与CPU信息传递的方式信息传递的方式 四四、、常用常用A/D转换芯片转换芯片 五、五、A/D转换实例转换实例 六、六、模拟量输出通道及模拟量输出通道及D/A转换器转换器 341 功能:是将连续变化的模拟量信号转换为数值上等功能:是将连续变化的模拟量信号转换为数值上等            效的数字信号。

      效的数字信号D/A、、A/D转换器接口及应用转换器接口及应用一、一、A/D转换器转换器⑴⑴分辨率:表示分辨率:表示ADC所能分辨的最小量化单位,即表所能分辨的最小量化单位,即表    示示ADC对微小输入量变化的敏感程度通常用转换对微小输入量变化的敏感程度通常用转换    数字量的位数表示,数字量的位数表示,N位位ADC其分辨率为其分辨率为N位按原理可分为四类:计数式、双积分式、逐次逼近式按原理可分为四类:计数式、双积分式、逐次逼近式                                    及并行式及并行式A/D转换器二、二、 A/D转换器的基本参数转换器的基本参数342 A/D转换器转换器⑶⑶转换时间:完成一次转换时间:完成一次A/D转换所需要的时间一转换所需要的时间一    般芯片的转换时间为几个般芯片的转换时间为几个us~200us,,也常用转换也常用转换    率表示                         转换率转换率=1/转换时间转换时间⑵⑵转换精度:指与数字输出量对应的模拟输入量的转换精度:指与数字输出量对应的模拟输入量的    实际值与理论值之间的差值,它反映实际值与理论值之间的差值,它反映ADC实际输实际输    出接近理想输出的精度程度。

      出接近理想输出的精度程度         对于满刻度为对于满刻度为10v的的8位位ADC,,A/D所能分辨的所能分辨的最小电压变化量为最小电压变化量为10/255=0.039v=39mv  例例:对于:对于8位位ADC,,其分辨率为其分辨率为8位    343 ⑴⑴ 接口的任务:接口的任务:①① 发发转转换换启启动动信信号号因因为为转转换换何何时时开开始始,,是是由由外外部部来来控控制制的的,,何时开始转换由接口发启动信号何时开始转换由接口发启动信号②② 取取回回“转转换换结结束束”状状态态信信号号::ADC产产生生的的转转换换结结束束信信号号,,可可以作为以作为CPU查询或向查询或向CPU申请中断的依据申请中断的依据③③ 读读取取转转换换的的数数据据::在在得得到到转转换换结结束束信信号号后后,,CPU可可用用查查询询方方式或中断方式将转换结果读走式或中断方式将转换结果读走④④ 进进行行通通道道寻寻址址::对对多多个个模模拟拟量量输输入入通通道道的的系系统统,,要要分分别别选选用用各各模模拟拟量量输输入入端端一一般般模模拟拟通通道道的的编编号号是是以以代代码码的的形形式式由由DB上上发出的,而不是真正的由发出的,而不是真正的由AB发出的。

      发出的D/A、、A/D转换器接口及应用转换器接口及应用A/D转换器与微机的接口技术转换器与微机的接口技术344 A/D转换器与微机的接口技术转换器与微机的接口技术 ①① 与与CPU直接相连,有些型号如直接相连,有些型号如ADC0809带有带有data out锁存锁存      器和三态门,分辨率与器和三态门,分辨率与DB宽度相同,所以可以直接与微宽度相同,所以可以直接与微      机的机的DB相连,此种接口线的结构简单,成本低相连,此种接口线的结构简单,成本低③③ 利用利用I/O接口芯片与接口芯片与CPU相连,如相连,如8155、、8255等各类微机等各类微机     都有与自己的并行都有与自己的并行I/O口配套的接口芯片,利用这些芯片将口配套的接口芯片,利用这些芯片将    A/D转换器与转换器与CPU连接,无需外接其它电路,使用方便可靠连接,无需外接其它电路,使用方便可靠②② 采用三态锁存器与采用三态锁存器与CPU相连,对于芯片内部不带相连,对于芯片内部不带OUT锁存锁存     器的器的A/D转换器,或转换器,或A/D的分辨率高于的分辨率高于CPU dB宽度时,数宽度时,数     据要份两次传送,均可采用这种连接方法。

      据要份两次传送,均可采用这种连接方法74LS244))  ⑵⑵   接口的形式:接口的形式:345 D/A、、A/D转换器接口及应用转换器接口及应用A/D转换器与转换器与CPU信息传递的方式信息传递的方式 ⑴⑴程序查询方式程序查询方式::CPU在在A/D转换期间,一直需转换期间,一直需    要查询要查询A/D “转换结束转换结束”信号状态,当状态满足时信号状态,当状态满足时    就可以读取信息此类方法程序设计简单,但就可以读取信息此类方法程序设计简单,但    实时性差,耗费实时性差,耗费CPU大量时间)大量时间)⑵⑵等待方式等待方式:若微机的:若微机的CPU设有等待信号(设有等待信号(WAIT    READY))时,设想使这些等待信号在时,设想使这些等待信号在A/D转换期转换期    间处于无效状态,间处于无效状态, A/D转换结束时它们有效,转换结束时它们有效,CPU    才可以开始读取数据才可以开始读取数据346 D/A、、A/D转换器接口及应用转换器接口及应用A/D转换器与转换器与CPU信息传递的方式信息传递的方式 ⑶⑶定时采样方式定时采样方式:也称延时程序法预先精确的:也称延时程序法。

      预先精确的    计算好计算好A/D转换需要的时间,这样在转换需要的时间,这样在CPU在发动在发动     A/D启动命令后就自动执行一个延时程序,此延启动命令后就自动执行一个延时程序,此延    时程序执行完后,时程序执行完后,A/D转换一定也结束了,转换一定也结束了,CPU    可以读取可以读取A/D转换的结果转换的结果注意:(要求:延时时间注意:(要求:延时时间≥A/D转换时间)转换时间)⑷⑷中断方式中断方式:把:把A/D转换结束信号作为中断请求信转换结束信号作为中断请求信    号,送到中断控制器的中断请求输入端或号,送到中断控制器的中断请求输入端或CPU的的    INT端,在端,在CPU响应中断时读取转换结果响应中断时读取转换结果347 A/D转换器与转换器与CPU信息传递的方式信息传递的方式注意注意::前三种方式,前三种方式,A/D转换期间,转换期间,CPU均处于等均处于等            待状态,待状态,CPU资源浪费较大后面中断方式资源浪费较大后面中断方式            中,在中,在A/D转换期间,转换期间,CPU发出启动信号后发出启动信号后            就可转去处理别的工作,在接到中断信号后就可转去处理别的工作,在接到中断信号后            再转回读入再转回读入A/D转换结果,即转换结果,即CPU与与A/D转转            换是并行工作的,所以换是并行工作的,所以CPU的工作效率较的工作效率较            高,但若高,但若A/D转换时间较短,应采用前三种转换时间较短,应采用前三种            方式,因为响应中断、保护、恢复现场这方式,因为响应中断、保护、恢复现场这            一系列的工作所花去的时间可能与一系列的工作所花去的时间可能与A/D转换转换            的时间相当甚至更长。

      的时间相当甚至更长 348 ③③CS信号有效时,若信号有效时,若WR信号有效,则启动信号有效,则启动A/D转换,转换,ADC开开    始进行始进行A/D转换;若转换;若RB信号有效,则产生信号有效,则产生INTR信号,表示信号,表示    转换结束,转换结束,CPU可以读取转换结果可以读取转换结果⑴⑴ADC 0804::①①ADC 0804是是8位位A/D转换芯片,即转换结果为转换芯片,即转换结果为8位二进制数位二进制数 D/A、、A/D转换器接口及应用转换器接口及应用  常用常用A/D转换芯片转换芯片④④若在若在A/D转换过程中再次启动转换,则中止正在进行的转换转换过程中再次启动转换,则中止正在进行的转换 ,,    而进行新的转换过程,但输出锁存器仍记录前次转换结果而进行新的转换过程,但输出锁存器仍记录前次转换结果②②ADC 0804内部具有内部具有8位位data锁存器及输出三态门,可直接锁存器及输出三态门,可直接    与与CPU相连,无需辅助接口相连,无需辅助接口 349 ⑵⑵ADC 0809     D/A、、A/D转换器接口及应用转换器接口及应用常用常用A/D转换芯片转换芯片START::启动启动A/D转换控制输入端口,加转换控制输入端口,加正正脉冲脉冲                     后后A/D转换开始。

      转换开始②② 引脚功能:(看引脚功能:(看P135图图7.32和和7.33)) IN0~IN7::8路模拟量输入端口路模拟量输入端口①① 特点分辨率为特点分辨率为8位,可锁存三态输出,允许位,可锁存三态输出,允许8路模路模    拟信号进入拟信号进入350 351 ⑵⑵ADC 0809     D/A、、A/D转换器接口及应用转换器接口及应用  A/D转换芯片实例转换芯片实例A、、B、、C::8路模拟开关的路模拟开关的3位地址选通输入端,用位地址选通输入端,用                     于选择哪一路模拟信号可以进行于选择哪一路模拟信号可以进行ADC内内                     被转换成数字信号被转换成数字信号2--1~~2--7::8位数字量输出端口位数字量输出端口ALE::地址锁存控制器地址锁存控制器高高电平时把电平时把CBA的值送入的值送入            地址锁存器,并经译码器得到地址输出,以地址锁存器,并经译码器得到地址输出,以            选择相应的模拟输入通道选择相应的模拟输入通道352 EOC::A/D转换结束输出端口,转换开始后,转换结束输出端口,转换开始后,EOC              信号变低,信号变低,转换结束时,转换结束时,EOC返回高电平返回高电平,,              同时将转换结果锁在输出锁存器中。

      此信号同时将转换结果锁在输出锁存器中此信号              可以作为可以作为A/D转换器的状态信号供查询,也转换器的状态信号供查询,也              可以作为中断请求信号可以作为中断请求信号A /D转换芯片实例转换芯片实例ADC 0809OE::输出允许控制端口输出允许控制端口OE端的电平由低变为端的电平由低变为高高           时,打开三态输出锁存器,将转换结果的数时,打开三态输出锁存器,将转换结果的数           字量送到字量送到CPU的的DB上353 D/A、、A/D转换器接口及应用转换器接口及应用例例1.利用中断方式,分别对.利用中断方式,分别对8路模拟信号轮流采集路模拟信号轮流采集          一次,转换结果依次存放在首址为一次,转换结果依次存放在首址为30H的片外的片外          数据数据RAM中选用选用ADC0809芯片,如芯片,如图图   例例2.. 同上题,利用查询方式操作同上题,利用查询方式操作四、四、A/D转换实例转换实例REF((+))和和REF((-):):参考电压输入端口一般参考电压输入端口一般REF((+))与与VCC相连,相连,REF((-))与与GND相连。

      相连CLK::时钟信号端口时钟信号端口354 ++RD355  如上图硬件接线方式:可工作于中断方式,也可工作于查询如上图硬件接线方式:可工作于中断方式,也可工作于查询 方式ADC0809工作过程:工作过程:  ②② 模拟通道地址的译码输入模拟通道地址的译码输入A、、B、、C,,由由P0.2~P0.0通过地址通过地址     所存器所存器74LS373提供,据提供,据P0.2~P0.0的连接方法的连接方法,,8个模拟输个模拟输     入通道的地址分别为入通道的地址分别为00F8H~00FfH((其中因为其中因为P2.0=0,,才才     可能使可能使OE、、START、、ALE信号有效),由地址信息给出信号有效),由地址信息给出③③启动启动A/D转换:使转换:使START有效④④ 转换结束后转换结束后ADC0809发发EOC信号⑤⑤ CPU读取转换结果读取转换结果(使使OE有效)①①先选通道号地址到先选通道号地址到A、、B、、C,,由由ALE信号锁存通道号地址信号锁存通道号地址356                    ORG  0000H                AJMP  MAIN                ORG  0013H     ;;外部中断外部中断1的中断程序首地址的中断程序首地址                  AJMP  INT1MAIN::MOV  R1,,#30H         ;;送片外送片外RAM地址地址                  MOV  R7,,#08H         ;;送通道数送通道数                  MOV  DPTR,,#00F8H  ;送端口号;送端口号                  SETB  IT1 ;;IT1=0设置设置INT1引脚为低电平触发方式引脚为低电平触发方式                  SETB  EX1;; EX1=1 允许外部中断允许外部中断1中断中断                  SETB  EA;;EA::中断允许中断允许R总开关,总开关,EA=1允许中断允许中断357 READ::MOVX  @DPTR,,A ;;送出通道号送出通道号DPTR,,选中通道选中通道                                             INi;;此指令使此指令使WR信号有效,启动信号有效,启动                                             A/D转换。

      转换数据来自通道)转换转换数据来自通道)HERE::SJMP  HERE;;ADC0809正在转换正在转换IN0~IN7通道中的通道中的                                           模拟量之一,模拟量之一,CPU可以去处理别的工可以去处理别的工                                           作,等待中断,一旦中断信号到来,作,等待中断,一旦中断信号到来,                                           IE=1时,立即转到时,立即转到0013H执行               DJNZ  R7,,READ;;8路信号未转换完跳至路信号未转换完跳至READ处处                                                   继续继续INT1::MOVX  A,, @ DPTR;;使使RD信号有效,从而信号有效,从而OE信号信号                                                      有效;将有效;将ADC0809锁存器内容锁存器内容                                   (转换结果)读至(转换结果)读至A中,并送片外中,并送片外RAM中中      358 注意:也可以有另外一种连续方式:注意:也可以有另外一种连续方式:C、、B、、A不通过不通过74LS373,,            而是直接连在而是直接连在P0.0~P0.2上,则此时上,则此时C、、B、、A的值必须的值必须                  由传送数据时数据线上信息的低由传送数据时数据线上信息的低3位给出,即位给出,即8个通道地个通道地            址由传送的数据(一般在址由传送的数据(一般在A中)的低中)的低3位的不同选择,位的不同选择,            编程时先确定芯片编程时先确定芯片DAC0809的一个地址(改为的一个地址(改为0FEFFH))            然后用指令然后用指令MOVX  @DPTR,,A  据据A中低中低3位的值来选位的值来选            择相应的择相应的8个模拟通道。

      若对此题则初始时必须有个模拟通道若对此题则初始时必须有MOV            A,,00H,,然后每转换一次使然后每转换一次使A的内容加的内容加1,此种方法,此种方法            ADC0809在整个系统中只占一个地址号,但要多次使在整个系统中只占一个地址号,但要多次使            用用A中内容MOVX  @R1,,AINC  R1INC  DPTR   ;;片外片外RAM指针加指针加1,通道号加,通道号加1,转换下一,转换下一                            通道内容通道内容RETI359 例例2程序如下:程序如下:               ORG  0000HMAIN::MOV  DPTR,,#00F8H  ;;P2.0=0且指向且指向IN0通道通道              MOV  R1,,#30H                 ;;片外片外RAM指针指针              MOV  R7,,#08H                 ;;通道数量通道数量READ::MOVX   @DPTR,,A        ;;启动启动A/D转换,通道转换,通道                                                                           号地址号地址→ADC0809HERE::JB  P3.3,,HERE                ;;测试测试INT1端是否有效端是否有效              MOVX  A,,@DPTR              MOVX   @R1,,A              INC  R1              INC  DPTR                          ;;通道号地址加通道号地址加1                  DJNZ  R7,,READ360 例例⒊⒊试试设设计计AD574与与8位位机机的的接接口口电电路路,,设设需需要要采采集集40H个个数数,,转转换结果存于片外换结果存于片外40H中,接线如下页图,说明:中,接线如下页图,说明:①①AD574有三态锁存器,直接与有三态锁存器,直接与8051 DB相接。

      相接P2.7为为CS信号②②12/8=0,,分分两两次次传传送送转转换换结结果果第第一一次次输输出出高高8位位,,第第二二次次输输出出低低4位尾随位尾随4个个0,用,用2个字节地址个字节地址③③A0接接P0.0,,工工作作时时应应使使A0=P0.0=0,,结结合合R/C=0,启启动动12位位A/D转转换④④转转换换结结束束信信号号STS接接P3.3,,即即状状态态口口中中的的最最高高位位检检测测时时,,P3.3=0时,表明转换结束;时,表明转换结束;P3.3=1时,表明正在进行时,表明正在进行A/D转换⑤⑤设设 AD574数数 据据 口口 高高 地地 址址 为为 3F02H其其 中中 口口 地地 址址 为为 :: 低低 字字 节节3F01H((A0=1););高高8位位3F02H((A0=0)361 362 程序如下:程序如下:          MOV  R7,,#40H      ;;采集次数采集次数          MOV  R1,,#40H      ;;片外片外RAM地址指针地址指针ST:: MOV  DPTR,,#3F02H ;;数据口地址指针,主要目的使数据口地址指针,主要目的使                                                      下面操作时下面操作时AD574中中A0=0          MOV  A,,#00H ;;使读信号使读信号RD有效,从而使有效,从而使CE有效,有效,                            方方可可与与P2.7=CS =0一一起起使使AD574处处于于工工作作状状态态           MOVX  @DPTR,,A   ;;使使WR=0有效,从而有效,从而R/C=0,,加加                                                 之之A0=P0.0=0,,所以所以12 位位A/D转换转换REP::JB P3.3,,REP;;读取读取AD574的状态,看的状态,看A/D转换是否结转换是否结                                          束,即看束,即看STS=0 否?测试否?测试STS=P0.0=1                                          否?否? 若若STS=1表示正进行表示正进行A/D 转换,转换,                                           STS=0转换结束转换结束     363      MOVX  A,,@DPTR    ;;读取转换结果的高读取转换结果的高8位,并位,并                                                          送入片外送入片外RAM中中     MOVX  @R1,,A     MOV  A , DPTL     DEC  A            ;;数据口低(数据口低(4位)字节地址(位)字节地址(A0=1))     MOV   DPTL , A     INC   R1         ;;片外片外RAM指针加指针加1,指向下一存储单元,指向下一存储单元     MOVX  A,,@DPTR    ;;读取低字节转换结果读取低字节转换结果     ANL  A,,0F0H    ;;保留低字节中的高保留低字节中的高4位,尾随位,尾随4个个0                                               输出到片外输出到片外RAM 中中     MOVX  @R1,,A     INC   R1     DJNZ  R7,,ST     ;;若若40次采集未作完,则继续采集次采集未作完,则继续采集364 例例4365       ORG    2000HMOV  R0,,#30H     MOV  R7,#,#4FH;循环计数器置初值;循环计数器置初值ML::MOV  DPTR,#,#FEF3H;选通道选通道3MOVX  @DPTR,,A;启动;启动0809MOV  R2,#,#20HDL:: DJNZ  R2,,DL;延时;延时HE::JB  P3.3,,HE;结束否?;结束否?MOVX  A,@@DPTR;结果送入内存;结果送入内存RAM中中 MOV  @R0,,A INC   R0 DJNZ R7,,ML ;采集完?采集;采集完?采集4FH次次HH::SJMP  HH;暂停;暂停366 D/A、、A/D转换器接口转换器接口模拟量输出通道模拟量输出通道 功能:将计算机输出的数字信号保持并转换为能推动功能:将计算机输出的数字信号保持并转换为能推动             执行元件工作的模拟信号。

      执行元件工作的模拟信号组成:数模(组成:数模(D/A))转换器、输出保持器及多路转转换器、输出保持器及多路转            换器⑴⑴分辨率分辨率:是:是DAC能识别的最小单位,也指能识别的最小单位,也指DAC                      能够转换的二进制数的位数能够转换的二进制数的位数数模(数模(D/A))转换器基本参数转换器基本参数:367 ⑴⑴分辨率分辨率:是:是DAC能识别的最小单位,也指能识别的最小单位,也指DAC                     能够转换的二进制数的位数能够转换的二进制数的位数D/A、、A/D转换器接口转换器接口模拟量输出通道模拟量输出通道 ⑶⑶转换精度转换精度:指:指DAC实际输出值与理论值之间的实际输出值与理论值之间的                        误差⑵⑵建立时间建立时间(转换时间):指从数字量输入(转换时间):指从数字量输入DAC到到                      完成完成D/A转换,输出达到最终值并稳定转换,输出达到最终值并稳定                      为止所需的时间为止所需的时间。

      368 数模(数模(D/A))转换器转换器①① DAC0832主要有两个主要有两个8位位R和一个和一个8位位D/A转换器转换器     组成,组成, 使用使用2个个8位位R可以进行可以进行2次缓冲操作次缓冲操作   ((看看P139图图7.37))3.典型的.典型的D/A转换器及接口:转换器及接口: DAC0832③③XFER为传送控制信号,与为传送控制信号,与WR2信号共同控制信号共同控制      LE2信号②② CS为片选信号为片选信号ILE为输入为输入R允许信号,与允许信号,与CS、、     WR1信号共同控制信号共同控制LE1信号④④LE1、、LE2分别为分别为2级输入级输入R的输入允许信号的输入允许信号369 370 单缓冲方式:单缓冲方式:INPUT register和和DAC register之一处之一处                        于直通于直通,,另一寄存器处于受控状态,适另一寄存器处于受控状态,适                        用于只有一路模拟量输出,虽有几路模用于只有一路模拟量输出,虽有几路模                       拟量,但不需要同时输出的情况。

      拟量,但不需要同时输出的情况数模(数模(D/A))转换器转换器直接方式:直接方式:LE1与与LE2端均恒有效端均恒有效,,两个两个R都不受控都不受控,,                       转换数据可经过两个转换数据可经过两个R 直接进入直接进入D/A转换转换                    器⒋⒋DAC0832有三种工作方式:有三种工作方式:371 数模(数模(D/A))转换器转换器②②利用第二级锁存器的锁存信号来实现两个或利用第二级锁存器的锁存信号来实现两个或    多个转换器的同步输出多个转换器的同步输出①①DAC0832在输出模拟信号的同时可采集下一个数在输出模拟信号的同时可采集下一个数    字量,所以可有效提高转换速度字量,所以可有效提高转换速度双缓冲方式:可利用锁存器对双缓冲方式:可利用锁存器对INPUT R和和DAC  R                        分别进行锁存,即两个分别进行锁存,即两个R都受控都受控,,                            以达到:以达到:⒋⒋DAC0832有三种工作方式:有三种工作方式:372               MOV  DPTR,,#0FFFEHSTEP::MOV  A,,#dataH      ;;置输出矩形波上限值置输出矩形波上限值           MOVX  @DPTR,,A ;;启动启动D/A转换转换          ACALL  DELH          ;;调输入高电平延时程序调输入高电平延时程序          MOV  A,,#dataL       ;;置输出矩形波下限值置输出矩形波下限值          MOVX   @DPTR,,A ;;启动启动D/A转换转换          ACALL  DELL          ;;调输入低电平延时程序调输入低电平延时程序          SJMP  STEP              ;;循环循环例例1.. 如图如图产生产生矩形矩形波程序:波程序: dataH dataL373 ATART::MOV  DPTR,#0FFFEH;;选中选中DAC0832 STEP1::  MOV  A,,#00H               ;;置初值置初值 STEP2::  MOVX  @DPTR,A          ;;启动启动D/A转换转换                   INC  A                   CJNE  A,,#(data+1) ,,STEP2  ;;A中中                                                                  内容不等于设置值时跳转内容不等于设置值时跳转                   AJMP  STEP1                       ;;重复执行重复执行 例例2:要求使用:要求使用DAC0832产生产生锯齿锯齿波程序。

      硬件接线波程序硬件接线如下页图如下页图           由于由于P2.7与与CS相连,所以相连,所以P2.7=0,,所以选择所以选择DAC0832的的           地址为地址为0FFFH注:在指令注:在指令CJNE  A,,#data,,STEP2之前加延时程之前加延时程        序可改变锯齿形波的频率序可改变锯齿形波的频率data374 A0A0375                    MOV   DPTR,,#0FFFEHSTEP1::MOV  A,,#00HSTEP2::MOVX  @DPTR,,A                INC  A                CJNE  A,,#data,,STEP2STEP3::MOVX   @DPTR,,A                DEC A                CJNE  A,,#00H,,STEP3               AJMP  STEP1例例3..        产生产生三角三角波程序:波程序:  data376                    MOV   DPTR,,#0FFFEHSTEP1::MOV  A,,#00HSTEP2::MOVX  @DPTR,,A                INC  A                CJNE  A,,#data,,STEP2                LCALL   DELAY1STEP3:: MOVX   @DPTR,,A例例4..  产生产生阶梯形阶梯形波的程序波的程序:: data377                DEC  A                         CJNE  A,,#01H,,STEP3                LCALL   DELAY2               AJMP  STEP1DELAY1::     …    RETDELAY2::     …                    RET378 379 例例.根据根据图图单脉冲方式的单脉冲方式的D/A转换接口电路转换接口电路,试编写程试编写程     序序,使使DAC0832输出以下波形:负向锯齿波、三输出以下波形:负向锯齿波、三     角波、阶梯波、梯形波、矩形波。

      角波、阶梯波、梯形波、矩形波 MOV    DPTR,   #00FEHMOV    A,       #0FFHLOOP::  MOVX    @DPTR,   ADEC     ASJMP    LOOP⑴⑴输输出出负负向向锯锯齿齿波波380   MOV    DPTR,   #00FEH  MOV    A,       #00HUP::  MOVX   @DPTR,    A  INC     A  JNZ     UP  MOV    A,    #0FEHDOWN::  MOVX   @DPTR,    A  DEC     A  JNZ      DOWN  SJMP     UP ⑵⑵ 输输 出出 三三 角角 波波381 ⑶⑶输出阶梯波输出阶梯波          MOV     DPTR,   #00FEH          MOV    A,       #00HUP:: ADD     A,      #10H          MOVX   @DPTR,    A          SJMP     UP382 ⑷⑷输出梯形波输出梯形波            MOV     DPTR,   #00FEH            MOV    A,       #00HUP::   MOVX   @DPTR,    A            INC     A    JNZ     UP                 LCALL   DELAY383 ⑷⑷输出梯形波输出梯形波MOV    A,     #0FFHDOWN::MOVX   @DPTR,    A          DEC     A   JNZ      DOWN   LCALL   DELAY   SJMP     UP384          MOV     DPTR,   #00FEHLOOP:: MOV     A,    #DATA1 MOVX   @DPTR,    A LCALL   DELAY MOV    A,, #DATA2 MOVX   @DPTR,    A LCALL   DELAY SJMP     LOOP⑸⑸ 输输 出出 矩矩 形形 波波385 DELAY::  MOV     R7,    #3DL2::        MOV     R6,    #0FFHDL1::       DJNZ     R6,    DL1                    DJNZ     R7,    DL2                    RET⑸⑸ 输输 出出 矩矩 形形 波波386 1.如下图如下图:用:用74LS244扩展并行输入口和用扩展并行输入口和用74LS2732.     扩展输出口,如果扩展输出口,如果74LS244的输入端接一组开关的输入端接一组开关, 3.     4LS273的输出端接一组指示灯的输出端接一组指示灯,要求将开关的状态要求将开关的状态4.    由对应的指示灯显示出来由对应的指示灯显示出来,编写输入输出程序。

      编写输入输出程序解解) 2.8051外部扩展外部扩展4KB程序存储器程序存储器,要求地址范围为要求地址范围为3.     1000H~1FFFH,以便和内部程序存储器地址相以便和内部程序存储器地址相衔衔4.     接接,,画出系统的联接逻辑图画出系统的联接逻辑图 (解解) 补充作业题:补充作业题:387 4.将将8031单片机外接一片单片机外接一片2716和一片和一片6116组成一个应组成一个应   用系统用系统,请画出硬件连接图请画出硬件连接图,并指出扩展存储器的地并指出扩展存储器的地   址范围 (解解) 3.试设计符合下列要求的试设计符合下列要求的8031系统:分别外接系统:分别外接2KB程程    序存储器和序存储器和2KB数据存储器,画出系统的连接逻辑数据存储器,画出系统的连接逻辑   图,要求给出必要的控制线,写出各芯片的地址范图,要求给出必要的控制线,写出各芯片的地址范     围 (解解) 注:注:3、、4题二者选一题二者选一388 补充题补充题1图图389 390 391 解:逻辑图解:逻辑图如上页如上页:: 设高位地址设高位地址P2.3~~P2.7值全为值全为1,,2716地址范围为:地址范围为:0F800H~~0FFFFH设高位地址设高位地址P2.3~~P2.6值全为值全为1,,P2.7=0,,6116地址范围为:地址范围为:7800H~~7FFFH设高位地址设高位地址P2.3~~P2.7值全为值全为0,,2716地址范围为:地址范围为:0000H~~07FFH6116地址范围为:地址范围为:0000H~~07FFH392 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.