第5章 MSC51单片机功能模块_第1页
第5章 MSC51单片机功能模块_第2页
第5章 MSC51单片机功能模块_第3页
第5章 MSC51单片机功能模块_第4页
第5章 MSC51单片机功能模块_第5页
已阅读5页,还剩139页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章MCS51单片机功能模块南京邮电大学电气工程系Outline5.1中断系统原理及应用5.2定时器/计数器原理及应用5.3串行通信接口原理及应用5.1

中断系统原理及应用 (1)中断 (2)中断源:能产生中断的外部和内部事件(3)中断优先级(4)中断嵌套5.1.180C51单片机的中断系统概述1.中断系的概念5.1.180C51单片机的中断系统概述1.中断系的概念单片微机的中断系统需要解决的问题 ⑴当有中断申请时,CPU能及时响应中断,中断处理后能回到原断点处继续处理原任务;⑵当有多个中断源同时申请中断时,应能先响应优先级高的中断源,实现中断优先级的控制;⑶高优先级中断源可以中断正在执行的低优先级中断源,实现中断嵌套,并能逐级正确返回原断点处。5.1.180C51单片机的中断系统概述⒈实现CPU与外部设备的速度配合发中断请求

空闲接收数据接收数据准备发中断请求打印打印打印机执行主程序继续执行主程序继续执行主程序响应中断中断返回响应中断中断返回

启动打印机传送数据传送数据CPU5.1.180C51单片机的中断系统概述⒉实现实时控制依靠中断技术能实现实时控制。⒊实现故障的及时发现及处理硬件故障、运算错误、程序运行故障等利用中断技术,能及时发现故障并自动处理

⒋实现人机联系如通过键盘向单片微机发出中断请求,可以实时干预计算机的工作5.1.180C51单片机的中断系统概述2.中断系统的结构5.1.180C51单片机的中断系统概述80C51有5个中断源外部2个内部3个定时中断2个串行中断1个2.中断系统的结构5.1.180C51单片机的中断系统概述◆由外部信号引起中断请求信号分别从引脚INT0和INT1上引入◆有两种信号触发方式低电平或下降沿,可通过设置有关控制位进行定义⑴INT0(P3.2):外部中断0

当IT0(TCON.0)=0时,低电平有效; 当IT0(TCON.0)=1时,下降沿有效。⑵INT1(P3.3):外部中断1

当IT1(TCON.2)=0时,低电平有效; 当IT1(TCON.2)=1时,下降沿有效。(1)外部中断

当计数器发生计数溢出时,表明设定的定时时间到或计数值已满,这时可以向CPU申请中断。80C51有两个源,即:⑴T0(P3.4):定时器/计数器T0溢出中断,计数来源为机器周期或P3.4引脚输入的负脉冲,计数溢出时请求中断。⑵T1(P3.5):T1溢出中断。(2)定时中断

每当串行口发送或接收一帧串行数据时,就产生一个中断请求。

RXD,TXD:串行中断。每个中断源都对应一个中断请求标志位,它们设置在特殊功能寄存器TCON和SCON中。当中断源请求中断时,相应的中断请求标志位置位。(3)串行中断

◆矢量中断:当CPU响应中断时,由硬件直接产生一个固定的地址,即矢量地址,由矢量地址指出每个中断源设备的中断服务程序的入口。◆当CPU识别出某个中断源时,由硬件直接给出一个与该中断源相对应的矢量地址,从而转入各自中断服务程序。中断矢量中断源中断矢量地址外部中断0(INT0)0003H定时器/计数器0(T0)000BH外部中断1(INT1)0013H定时器/计数器1(T1)001BH串行口(RI、TI)0023H定时器/计数器2002BH中断矢量地址1.中断控制80C51单片机中有4个特殊功能寄存器与中断控制相关:IE、IP、TCON、SCON。(1)中断允许寄存器IE:中断允许和禁止由中断允许寄存器IE控制。5.1.2中断源的控制与响应过程IE(0A8H)D7D6D5D4D3D2D1D0位地址0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H位名称EA××ESET1EX1ET0EX0(1)EA(IE.7):CPU中断允许位。(2)ES(IE.4):串行口中断允许位。(3)

ET1(IE.3):T1中断允许位。(4)

EX1(IE.2):外部中断1中断允许位(5)

ET0(IE.1):T0中断允许位。(6)EX0(IE.0):外部中断0中断允许位。

当EA=1,允许所有中断开放,各中断的允许或禁止由各中断源的中断允许控制位进行设置;当EA=0时,屏蔽所有中断。(1)中断允许寄存器IE(2)中断优先级寄存器IPPS:串行口中断优先级控制位。PT1:定时器/计数器1的中断优先级控制位。PX1:外部中断1PT0:定时器/计数器0PX0:外部中断0。IP(0B8H)D7D6D5D4D3D2D1D0位地址0BFH0BEH0BDH0BCH0BBH0BAH0B9H0B8H位名称×××PSPT1PX1PT0PX0以上某一位若设置为0,则对应中断源被设置为低优先级;若设置为1,则为高优先级。系统复位后IP寄存器中各位均为0,此时所有中断源均为低优先级。两个不可寻址的优先级状态触发器一个用于指示某一高优先级中断正在进行服务,而屏蔽其它高优先级中断;另一个用于指示某一低优先级中断正在进行服务,从而屏蔽其它低优先级中断,但不能屏蔽高优先级中断(2)中断优先级寄存器IP◆在中断执行过程中,高中断优先级可以中断低中断优先级的中断过程。但是若在中断服务程序中,关掉所有中断(CLREA)或关掉部分中断时除外。◆当CPU同时接收到两个不同优先级的中断请求时,先响应高优先级的中断,如果CPU同时接收到的是几个同一优先级的中断请求时,则由内部的硬件查询序列确定它们的优先服务次序。(2)中断优先级寄存器IP★在同一优先级内有一个由内部查询序列确定的笫二个优先级结构。其排列如下: 中断源

中断请求标志位

中断优先级⒈外部中断0IE0最高⒉定时器T0中断TF0⒊外部中断1IE1⒋定时器T1中断TF1⒌串行口中断TI或RI最低 【例5-1】若单片机系统中片外中断源为高优先级,片内中断源为低优先级,则如何设置IP的值呢?分析:片外中断源有两个,即外部中断0和外部中断1,相应的优先级控制位置为1;片内中断源有3个,即定时器/计数器0、定时器/计数器1和串行口中断,相应的优先级控制位置为0。位名称×××PSPT1PX1PT0PX0IP的值00000101则(IP)=00000101B。【例5-2】若(IE)=96H,(IP)=1BH,则当定时器/计数器0、串行口中断和外部中断1同时发出中断请求时,CPU首先响应的是哪一个中断源?分析:由于(IE)=96H,则位名称EA××ESET1EX1ET0EX0IE的值10010110可见,发出中断请求的3个中断源,其中断允许位ES、EX1和ET0都为1,且中断总控制位EA也为1,因此3个中断源均有可能被响应。由于(IP)=1BH,则位名称×××PSPT1PX1PT0PX0IP的值0001101123(3)

定时器/计数器控制寄存器TCONTCON寄存器用于定时器/计数器0、定时器/计数器1及外部中断0、外部中断1的相关控制,格式如下:TCON(88H)D7D6D5D4D3D2D1D0位地址8FH8EH8DH8CH8BH8AH89H88H位名称TF1TR1TF0TR0IE1IT1IE0IT024TCON寄存器中与中断系统相关的位有以下几个:TF1:定时器/计数器1(T1)溢出标志位,即T1中断请求标志位。TF0:定时器/计数器0(T0)溢出标志位,即T0中断请求标志位。IE1:外部中断1(INT1)的中断请求标志位。IT1:外部中断1的中断触发方式控制位,其可以通过程序设置为0或1。IT1=0,电平触发;IT1=1,下降沿触发。IE0:外部中断0的中断请求标志位,其含义同lE1。IT0:外部中断0的中断触发方式控制位,其含义同IT1。(3)

定时器/计数器控制寄存器TCON(4)串行口控制寄存器SCONSCON(98H)D7D6D5D4D3D2D1D0位地址9FH9EH9DH9CH9BH9AH99H98H位名称SM0SM1SM2RENTB8RB8TIRISCON寄存器中的最低两位(TI和RI)与中断系统相关:TI:串行口发送中断请求标志位。当串行口发送完一帧数据,硬件自动置TI为1,向CPU请求中断。RI:串行口接收中断请求标志位。注意:响应串行口中断后,硬件并不自动将中断请求标志位清0,此时必须由软件将标志位TI或RI清0。2.中断响应(1)中断响应条件

单片机在每个机器周期采样中断请求标志位,在下一个机械周期(即查询周期)对采样到的信息进行查询。如果在前一个机器周期有中断请求标志位,则在查询周期内便会查询到,CPU按照中断优先级进行中断处理。下列一些情况,CPU不立即响应中断:1.CPU正处于同级或更高级的中断。2.当前机器周期不是执行当前指令的最后一个机器周期。3.当前正在执行的指令是返回指令或对IE/IP寄存器的读/写指令。80C51规定,在执行完这些指令后,必须再执行一条指令,然后才能中断响应。中断响应过程的时序(2)中断的响应过程2.中断响应CPU响应中断主要执行以下操作:

①硬件自动置位优先级状态触发器,封锁同级别和低级别的中断。②保护断点,自动将程序计数器PC的内容压入堆栈保护,便于中断服务程序执行完后返回。③中断请求标志位清除,其中串行口中断需要用户软件清除。④将被响应的中断服务程序的入口地址送程序计数器PC,控制程序转去执行相应的中断服务程序。2.中断响应中断服务程序的入口地址称为中断向量,80C51单片机中各中断源均有固定的中断向量,如下表所示中断源中断向量外部中断0(INT0)0003H定时器/计数器0000BH外部中断1(INT1)0013H定时器/计数器1001BH串行口(RI+TI)0023H2.中断响应单片机复位后PC为0000H,意味着CPU从0000H地址开始执行程序,而中断向量占用了0003H~0023H空间,因此在使用中断的系统中要在程序存储器的0000H~0002H处设置一条无条件转移指令,指向真正主程序所在的起始地址。中断向量设置在程序的低地址端,为每个中断预留了8个字节的空间。很多情况下,该空间不能满足中断服务程序的要求,这时可将中断服务程序安排在其他地址空间,在中断向量处设置无条件转移指令,使程序跳转至用户安排的中断服务程序的起始地址。2.中断响应ORG0000HLJMPMAIN;主程序起始地址ORG0003H;外部中断0的中断向量LJMPINTT0;中断服务程序起始地址ORG0030H;主程序的起始地址,后续为主程序代码MAIN:……SJMP$ORG0100H;中断服务程序起始地址,接下来为中断服务程序INTT0:……RETIEND例如注意

中断服务程序的返回指令只能使用RETI,其作用是清0中断响应时置位的优先级状态触发器并从堆栈栈顶弹出两个字节的数据送至程序计数器PC,返回中断前的断点。

RET指令也能使程序返回到原来被中断的位置继续向下执行,但它并不通知中断控制系统,致使中断控制系统误认为仍在继续执行中断服务程序。因此,RET指令不能替代RETI指令。中断响应时间是指从CPU采样到中断请求信号开始,再到跳转至中断向量所需的时间一般,在单级中断系统中,中断的响应时间最短为3个机器周期,最长为8个机器周期3.中断响应时间①中断请求有效且满足中断响应的3个条件,经过查询周期(1个机器周期)再加上LCALL指令的执行时间(2个机器周期),CPU从采样中断标志位开始,共需3个机器周期,此时响应速度最快,响应时间为3个机器周期。②如果查询周期不是当前指令的最后一个机器周期,中断响应必须等到当前指令结束,而指令的执行时间分为单周期、双周期或4个机器周期,此种情况下,中断响应时间需额外增加1~3个机器周期,即需要4~6个机器周期。③如果查询周期时CPU正在执行的是RET、RETI或访问IE、IP等与中断设置及控制相关的指令,即使其他条件都满足,CPU也需等当前指令完成后,再执行一条指令才能响应中断。此种情况下,中断响应时间需4~8个机器周期。④如果当前正在执行的是同级或高优先级中断程序,则该中断请求会被挂起,只有等到当前的中断程序执行完成后,CPU才能响应该中断请求。此种情况下,中断响应时间无法估算。CPU采样到中断请求后,可能有以下几种情况1.定时器/计数器0、定时器/计数器1中断请求的撤销

T0、T1的溢出中断采用跳变触发方式的外部中断在CPU响应中断后,由内部硬件自动清除中断标志TF0和TF1、IE0和IE1,而自动撤除中断请求。如果定时器/计数器中断处于关闭状态,溢出事件通过查询方式处理,通过软件将中断请求标志位清0。5.1.3中断请求的撤除2.外部中断0、外部中断1中断请求的撤销

采用电平触发方式的外部中断

中断标志的撤消是自动的,但中断请求信号的低电平可能继续存在,在以后机器周期采样时又会把已清“0”的IE0、IE1标志重新置“1”,再次申请中断。

保证在中断响应后把中断请求信号从低电平强制改变为高电平5.1.3中断请求的撤除SD端的负脉冲信号通过单片机的一根I/O线(P1.0)来实现,使D触发器置1,进而撤销低电平的中断请求信号。利用D触发器撤销外部中断请求的低电平

ANLP1,#0FEH

;Q置1

ORLP1,#01H

;SD无效使P1.0输出一个负脉冲,其持续时间为两个机器周期,以使D触发器置位,撤除低电平中断请求3.串行口中断请求的撤销

串行接收(RI)/发送(TI)中断

80C52中的T2的溢出和捕获中断在CPU响应中断后,必须在中断服务程序中应用软件清除RI、TI、(TF2和EXF2)这些中断标志,才能撤除中断5.1.3中断请求的撤除5.1.4外部中断源的扩展扩展外部中断源主要有两种方式:OC门结合软件来扩展利用空余的定时器/计数器来扩展PINT0:PUSHPSW;保护现场

PUSHACC JBP1.0,LOOP1;转向中断程序1 JBP1.l,LOOP2;转向中断程序2 JBP1.2,LOOP3;转向中断程序3 JBP1.3,LOOP4;转向中断程序4INTEND:POPACC;恢复现场

POPPSW RETILOOP1:… ;中断服务程序1 AJMPINTENDLOOP2:… ;中断服务程序2 AJMPINTENDLOOP3:… ;中断服务程序3 AJMPINTENDLOOP4:… ;中断服务程序4 AJMPINTEND外部中断0的中断服务程序

80C51共有5个中断源,由4个特殊功能寄存器TCON、SCON、IE和IP进行管理和控制。在80C51中,需要用软件对以下5个内容进行设置:⑴设置跳转指令,控制程序转向中断服务程序。⑵设置CPU中断总控位的允许与禁止。⑶设置各中断源中断请求的允许与禁止。⑷外部中断请求,还需进行触发方式的设置。⑸设置各中断源的优先级。5.1.5中断服务程序的设计中断程序一般包含:中断控制程序和中断服务程序中断控制程序即中断初始化程序,一般包含在主程序中5.1.5中断服务程序的设计⑴保护断点和现场、恢复断点和现场

中断服务程序在调用和返回时,也有一个保护断点和现场、恢复断点和现场的问题。

在中断响应过程中,断点的保护主要由硬件电路自动实现。它将断点压入堆栈,再将中断服务程序的入口地址送入程序计数器PC,使程序转向中断服务程序,即为中断源的请求服务。中断服务程序编写注意事项

80C51,现场:累加器A、工作寄存器R0~R7以及程序状态字PSW等。①通过堆栈操作指令PUSHdirect;②通过工作寄存器区的切换;③通过单片微机内部存储器单元暂存。现场保护一定要位于中断服务程序的前面 在结束中断服务程序返回断点处之前要恢复现场,与保护现场的方法相对应。中断服务程序的最后一条指令必须是RETI指令。中断服务程序编写注意事项⑵对中断的控制

应在保护现场和恢复现场之前,关闭CPU中断在保护现场和恢复现场之后,再根据需要使CPU开中断对于重要中断,不允许被其它中断所嵌套。除了设置中断优先级外,还可以采用关中断的方法,待中断处理完之后再打开中断系统中断服务程序编写注意事项

例5-3:单片机主程序和中断服务子程序中有如下程序段,若响应中断前(SP)=07H,则断点保护好之后,SP为何值?主程序:中断服务子程序:……MOVA,#77HMOVA,#0FFHMOVDPTR,#1000HMOVDPTR,#7000HMOVX@DPTR,AMOVX@DPTR,A……RETI分析:中断可能在主程序的任何一条指令执行前发生,若恰发生在MOVX@DPTR,A前,而又没有保护累加器A与寄存器DPTR,则返回主程序后可能会出错,因此中断服务子程序中现场保护可参考如下程序段,注意数据保护与恢复时PUSH与POP指令成对出现且顺序颠倒。PUSHPSWPUSHACCPUSHDPHPUSHDPL…MOVA,#0FFHMOVDPTR,#7000HMOVX@DPTR,A…POPDPLPOPDPHPOPACCPOPPSWRETI(SP)=中断前(SP)+2+PUSH指令条数=07H+2+4=0DH例5-4:设某中断服务子程序用寄存器R1、R3作为中间数据暂存器,用寄存器R0和寄存器B作为与主程序进行参数传递的公共数据存储器,主程序使用工作寄存器0区,且该中断服务程序要访问外部数据存储器,问该程序需保护哪些单元?如何保护?设响应中断前(SP)=60H,断点保护好后堆栈指针SP为何值?分析:因用寄存器R0和寄存器B作为与主程序进行参数传递的公共单元,所以不需保护;访问片外RAM要MOVX指令,设用DPTR作为间址寄存器,则需要使用累加器A、DPH、DPL。因此,中断服务子程序中需保护的单元是6个:①程序状态字PSW,②中间数据暂存器R1、R3,③累加器A、DPH、DPL。断点保护之后,(SP)=60H+2+6=68H。495.2.1定时器/计数器的结构及功能1.硬件法定时功能完全由硬件电路完成,不占用CPU时间;需通过改变元件参数以改变定时时间,不灵活。2.软件法 软件定时是执行一段循环程序来进行时间延时。无需硬件,时间精确,但牺牲了CPU的时间,且延时时间不易长,时间响应敏感的场合不适用。5.2定时器/计数器原理及应用50

3.可编程定时器/计数器

通过软件编程来实现定时时间的改变通过中断或查询方法来完成定时功能或计数功能80C51:16位的T0和T180C52:16位的T0、T1和T280C51系列的部分产品(如Philips公司的80C552)中:作看门狗的8位定时器T35.2.1定时器/计数器的结构及功能51◆定时器/计数器的核心:加1计数器基本功能:计数加1

计数:是对T0、T1或T2引脚上输入的负跳变进行计数增l

定时:是对单片微机内部的机器周期进行计数,从而得到定时

波特率发生器:80C51的定时器/计数器还可用作串行接口的波特率发生器5.2.1定时器/计数器的结构及功能521.定时器/计数器的结构及工作原理6个特殊功能寄存器:T0的8位计数器TH0和TL0、T1的8位计数器TH1和TL1、定时器/计数器工作方式寄存器TMOD、定时器/计数器控制寄存器TCON;4个外部引脚:P3.2(INT0),P3.3(INT1),P3.4(T0),P3.5(T1)。53(1)工作方式寄存器TMODTMOD地址为89H,不可进行位寻址2.定时器/计数器的控制与状态寄存器TMODD7D6D5D4D3D2D1D0位名称GATEC/TM1M0GATEC/TM1M0TMOD寄存器分成高4位和低4位两部分,分别用于设置T1和T0,且两者对应位的功能相同。T1T054◆M1、M0:工作方式选择位M1M0工作方式

计数器配置

00方式013位定时/计数器

01方式116位定时/计数器

10方式2自动重装载的8位定时/计数器

11方式3T0分为两个8位计数器T1无此功能停止计数(1)工作方式寄存器TMOD55◆C/T:功能选择位①C/T=0:定时器计数输入信号:内部时钟脉冲每个机器周期使计数器的值增1

计数速率:振荡频率的1/12②C/T=1:计数器计数输入信号:通过引脚T0和T1的外部信号在S5P2期间,CPU采样,若遇负跳变,则计数增1(1)工作方式寄存器TMOD56◆GATE:门控位

GATE=1:(INT0=1)+(TR0=1)共同启动T0 (INT1=1)+(TR1=1)共同启动T1GATE=0:仅由TR0和TR1置位来启动T0和T1(1)工作方式寄存器TMOD57(2)控制寄存器TCON(88H)D7D6D5D4D3D2D1D0TCON8FH8EH8DH8CH8BH8AH89H88H(88H)TF1TR1TF0TR0IE1IT1IE0IT0TCON的高4位存放T0和T1的运行控制位和溢出标志位,低4位为外部中断的触发方式控制位和中断请求标志位。TF1:定时器/计数器1(T1)的溢出标志位。TF0:定时器/计数器0(T0)的溢出标志位。TR1:定时器/计数器1(T1)的运行控制位。TR0:定时器/计数器0(T0)的运行控制位。

复位后,TCON寄存器的所有位均为058方式0:13位定时器/计数器

3.T0和T1的工作方式TLx的高3位未用计数溢出时,TFx置位逻辑反逻辑或逻辑与59方式1:16位定时器/计数器3.T0和T1的工作方式60方式2:常数自动重装的8位定时器/计数器3.T0和T1的工作方式重新装入不影响THx的内容可实现每隔预定时间发出控制信号方式2适合于作为串行口波特率发生器使用计数寄存器计数常数寄存器溢出时,TFx置位、重装载61(4)

方式3双8位计数器(仅支持T0)一个8位定时器/计数器TL0一个8位定时器TH0T0T1:停止计数3.T0和T1的工作方式62(4)

方式3双8位计数器(仅支持T0)634.监视定时器(看门狗)T3可强迫单片机进入复位状态,从硬件或软件故障中解脱出来64定时器T3每隔时间t加1:

t=12×2048/fosc

当晶振为12MHz时,t为2.048msT3的控制:EW+PCONPCON的格式:D7D6D5D4D3D2D1D0SMOD--WLE--PD-WLE:看门狗定时器允许重装标志,EW:看门狗定时器允许位4.监视定时器(看门狗)T3飞利浦80C552:监视定时器T3由一个11位的预分频器和8位定时器T3组成65

在T3溢出时,复位8XC552,并产生复位脉冲输出至复位引脚RST

为防止系统复位,必须在定时器T3溢出前,通过软件对其进行重装首先要确定系统能在不正常状态下维持多久,这段时间就设定为监视定时器的最大间隔时间。T3中装入0:监视时间间隔最长装入值为FFH:监视时间间隔最短如果发生软件或硬件故障,将使软件对定时器T3重装失败,从而T3溢出导致复位信号的产生4.监视定时器(看门狗)T366例:Watchdog使用的一段程序如下:

T3EQU 0FFH;定时器T3的地址

PCONEQU 87H;电源控制寄存器PCON的地址WATCH_INTVEQU156;看门狗的时间间隔(2.048×100ms)

插在用户程序中对看门狗需要重新装入的地方:LCALL WATCHDOG;调用看门狗服务子程序WATCHDOG:ORLPCON,#10H ;允许定时器T3重装MOVT3,#WATCH_INTV;装载定时器T3RET4.监视定时器(看门狗)T367定时器/计数器运行前,在数据寄存器中预先置入的常数,称为定时常数或计数常数TC其中:

t:定时时间; Tc:机器周期

fosc:晶体振荡器频率; L:计数器的长度。5.2.2定时器/计数器的应用⒈定时器/计数器溢出率的计算68T0及T1: 方式0 L=13213=8192

方式1 L=16216=65536

方式2 L=828=256TC:定时器/计数器初值,即定时常数或计数常数。定时时间的倒数即为溢出率,即:⒈定时器/计数器溢出率的计算5.2.2定时器/计数器的应用69已知:要求的定时时间t、设定的定时器工作方式(确定L)及晶体振荡频率fosc,待求量:先计算出TC值(十进制数),再将其转换成二进制数TCB(或者十六进制数),最后再分别送入THi、TLi。⒈定时器/计数器溢出率的计算5.2.2定时器/计数器的应用70对于T0、T1:方式0时:TCB=TCH+TCL,TCH:高8位,TCL:低5位

MOV THi,#TCH ;送高8位

MOV TLi,#TCL ;送低5位(高3位为0)方式1时:TCB=TCH+TCL,TCH:高8位,TCL:低8位

MOV THi,#TCH ;送高8位

MOV TLi,#TCL ;送低8位。方式2时:TCB—8位重装载

MOVTHi,#TCB ;送高8位

MOVTLi,#TCB;送低8位。⒈定时器/计数器溢出率的计算71分析:2ms方波即1ms的高电平和1ms的低电平,只需用定时器产生1ms的定时,每次定时时间到后取反P1.0的输出即可得到周期为2ms的方波。

要求使用T0且fosc=6MHz。

(1)解:定时常数计算振荡器的频率fosc=6MHz,机器周期为2μs,方式0计数器长度L=13(213=8192),定时时间t=1ms=0.001s定时常数:例5-5:编程实现在P1.0引脚输出周期为2ms的方波(1)方式0应用实例72TC为7692=1E0CH,二进制数TCB=00011110000

01100B,取低13位,其中高8位TCH=F0H,低5位为TCL=0CH。计数长度为1E0CH=7692,定时为(8192—7692)×2μs=0.001s。TMOD的设定

(1)方式0应用实例73(2)编程P1.0输出方波,高、低电平持续时间相同,只需定时时间到后,取反输出信号即可。编程时可以使用两种机制响应定时器/计数器的溢出事件:查询和中断。(1)方式0应用实例74ORG 0000H

SJMPCOUNT

ORG 0030H COUNT:MOVTMOD,#0;设置T0为定时器作方式0

MOVTL0,#0CH

MOVTH0,#0F0H;写定时常数

SETBTR0;启动定时器T0L1:JBCTF0,PTF0;查询TF0,TF0←0;若TF0=1则PC←TF0

;否则顺序执行

SJMPL1;L1循环体可替换为JNBTF0,$

;CLRTF0PTF0:CPLP1.0;1ms时间到后,取反P1.0

MOVTL0,#0CH;重置定时常数

MOVTH0,#0F0H

SJMPL1;跳转至L1,等待下一个1ms

END(1)查询方式处理溢出事件,其程序代码如下:75(2)中断方式响应溢出事件,其程序代码如下:ORG0000H;中断方式编程AJMPMAINORG000BH;T0中断向量AJMPINTT0ORG0030HMAIN:MOVTMOD,#00H;写控制字,设置T0为定时功能、方式0MOVTH0,#0F0H;写定时常数(定时1ms)MOVTL0,#0CHSETBTR0;启动T0SETBET0;允许T0中断SETBEA;开放CPU中断SJMP$;定时中断等待ORG0100H;T0中断服务程序INTT0:MOVTH0,#0F0H;重写定时常数MOVTL0,#0CHCPLP1.0;P1.0取反输出RETI;中断返回END76分析:周期为1s的方波,高、低电平持续的时间均为500ms,定时器方式1的计数范围最大,一次定时时间最大为:定时器一次计数无法实现500ms的定时。此时,可以考虑定时100ms,每完成5次定时取反P1.1引脚的输出。计算得:初值=3CB0H,即TH1=3CH,TL1=0B0H。T1工作在定时功能、方式1下,故控制字TMOD=00010000B。例5-6:已知fosc=6MHz,利用T1产生100ms定时,使用P1.1输出周期为1s的方波。(2)方式1应用实例77ORG0000HAJMPCOUNTORG0030HCOUNT:MOVTMOD,#10H;00010000BMOVTH1,#3CH;置初值,使定时100msMOVTL1,#0B0HSETBTR1MOVR0,#5LOOP:JBCTF1,LOOP1SJMPLOOPLOOP1:MOVTH1,#3CH;重置初值MOVTL1,#0B0HDJNZR0,LOOP;判断是否已5次定时100msLOOP2:CPLP1.1MOVR0,#5;重置循环变量SJMPLOOPEND例5-6:程序如下78例5-7:系统晶振频率为6MHz,设计一个秒计数器,秒信号数据存放在50H单元。分析:1s=20ms×50,T0工作在定时功能下,定时20ms,可计算得到:TMOD=00000001H,初值=D8F0H,因此TH0=0D8H,TL0=0F0H。程序中使用中断机制响应定时器溢出事件,每中断50次即1s时间到,调整秒计数器。79SECONDEQU50H;存放秒数据NEQU51H;存放中断次数,模50ORG0000HLJMPMAINORG000BH;T0中断服务程序的入口地址LJMPINTT0ORG0030HMAIN:MOVTMOD,#01H;设置T0工作在定时方式1MOVTH0,#0D8HMOVTL0,#0F0HMOVN,#0;用于计中断次数MOVSECOND,#0;存放当前记录的秒数SETBTR0;启动T0SETBET0;开放T0中断SETBEA;开放总中断L1:SJMPL1;在循环执行本条指令过程中,中断服务程序被响应例5-7:程序如下80INTT0:MOVTH0,#0D8H;重置计数初值

MOVTL0,#0F0HINCNMOVA,NCJNEA,#50,L2;如中断不到50次则不需调整秒数据MOVN,#0;如中断已到50次则秒加1,N重新置0INCSECONDMOVA,SECONDCJNEA,#60,L2MOVSECOND,#0;如满60秒,则秒计数器清0L2:RETIEND例5-7:程序(续)若要求显示当前秒数,则将指令L1:SJMPL1用显示程序段替代,并且在循环执行显示程序段的过程中每隔20ms响应一次中断服务程序。81例5-8:系统晶振频率为6MHz,P3.4输入低频负脉冲信号,要求P3.4发生负跳变时P3.0输出一个500μs的同步脉冲。分析:P3.4是T0的外部输入引脚;利用计数功能检测到负脉冲信号时,P3.0输出500μs的同步脉冲,其实质是P3.0进行单稳态输出,500μs的时间可以通过定时器获得。因计数功能检测负脉冲和定时功能获取500μs定时并非同时进行,所以上述两项工作既可以分别使用T0、T1来完成,也可以使用同一定时器/计数器来完成。在此选用两个定时器/计数器分别承担计数与定时工作,T0用于检测负跳变,设置为计数功能、方式2,初值为0FFH,负跳变一到,TL0加1产生溢出,置中断请求标志位TF0为1,同时使P3.0产生负跳变,并持续500μs,即0.5ms。该定时时间由T1产生,T1设置为定时功能、方式2。(3)方式2应用实例82ORG0000HLJMPSTARTORG0030HSTART:SETBP3.0;先使P3.0置位为1MOVTMOD,#26H;控制字00100110BMOVTH0,#0FFH;设置初值MOVTL0,#0FFHSETBTR0;打开运行控制位LOOP1:JBCTF0,PTF01;等待输入脉冲SJMPLOOP1PTF01:CLRTR0;T0停止工作CLRP3.0;P3.0输出低电平(产生负跳变)例5-8:程序如下83MOVTH1,#6;使T1定时500μsMOVTL1,#6SETBTR1;开500μs定时(T1)LOOP2:JBCTF1,PTF02;等500μs定时到SJMPLOOP2PTF02:

SETBP3.0;500μs时间到,P3.0输出高电平CLRTR1;T1停止工作SJMPSTARTEND例5-8:程序(续)84例5-9:系统晶振频率为6MHz,设计一个测量振荡信号频率的简易测频仪,测频仪开关与P1.0引脚相连,该引脚为低电平时启动测频仪,测量的频率结果存放在内存的50H、51H和52H地址中,高地址存放高字节。

分析:频率是单位时间内脉冲的个数,公式为f=N/T。测量时需用一个定时器来获得确定的时间间隔T,还需用一个计数器来计数,即在特定的时间间隔内被测信号的脉冲数N,然后计算出频率f。(4)综合应用实例8551系列单片机内有两个定时器/计数器,可以完成上述一个定时器和一个计数器的功能。采用T1作计数功能、方式1,从初值0开始计数,即TH1=00H,TL1=00H;采用T0作定时功能、方式1,定时100ms,在100ms时间内所计个数乘以10就是每秒的脉冲数,也就是频率的赫兹数。(4)综合应用实例86(65536-初值)×12/6MHz=100ms,计算得:初值=15536=3CB0H,TH0=3CH,TL0=B0H。为简化程序,不考虑按键消抖动。具体程序如下:ORG0000HSJMPCOUNTORG0030HCOUNT:MOVTMOD,#51H;设置T0、T1功能、工作方式

MOVTH0,#3CH;设置初值

MOVTL0,#0B0HMOVTH1,#0MOVTL1,#0Ifbegin:JBP1.0,Ifbegin;判断是否启动测频SETBTR1;打开运行控制位SETBTR0例5-9:程序如下87TOVER:JNBTF0,TOVER;未到100msCLRTR1;到100ms,停止计数CLRTR0;停止定时MUL10:MOVA,TL1;以下为计数值乘以10MOVB,#10MULABMOV50H,AMOV51H,BMOVA,TH1MOVB,#10MULABADDA,51H;思考两个数相乘的规则?MOV51H,AMOVA,BADDCA,#0MOV52H,ASJMP$END885.3串行口原理及应用两种传送方式⑴并行传送方式

以计算机的字长(通常是8、16或32位)为传输单位,一次传送一个字长的数据,即一个数据编码字符的各位同时发送、并排传输,又同时被接收。并行通信的特点是通信速度快,但传输信号线多,传输距离较远时线路复杂、成本高,通常用于近距离传输。895.3串行口原理及应用

⑵串行传送方式数据传输时一个数据编码字符的各位不是同时发送,而是按一定顺序,一位接着一位在信道中被发送和接收。串行通信的特点是传输信号线少,通信线路简单、成本低,但通信速度较慢,适合长距离通信。串行传送方式的物理信道为串行总线90同步传输对数据块进行传输,一个数据块中包含着许多连续的字符,在字符之间没有空闲。通常发送方用同步字符表示每一串同步数据流的开始。选用什么字符作为同步字符,可由收发双方协商或由协议规定。在有效信息开始传送前,发送方首先发送事先约定的同步字符来表示传输数据流的开始,然后收发双方同步开始进行数据传输。1.异步通信和同步通信5.3.1串行通信基础知识91(2)异步传输

也称起止同步传输方式,以帧为单位进行传输,每帧由起始位、被传送字符的数据位(低位先发)、校验位(可选)、停止位4部分构成。有多个字符需要传输时,帧之间可以无间隔连续传输,也可以间隔任意时长、约定为高电平的空闲状态。每个字符都用起始位、停止位包装起来,在字符间允许有长短不一的间隙。单片机串行通信采用异步传输。1.异步通信和同步通信5.3.1串行通信基础知识92起始位:低电平,占1位,用于控制收发双方的同步。数据位:待传送数据的各个二进制位,常用8个数据位D0~D7的方式,即先发送D0,最后发送D7。校验位:可选,占1位,其紧跟数据位之后,用于对发送的数据进行校验。停止位:高电平,占1位、1.5位或2位,其紧接校验位之后,用于表示一帧的结束。异步传输的数据格式

93例5-10:若单片机串行通信的帧格式为:1位起始位、8位数据位、1位奇校验位、1位停止位,则发送字符“1”的波形如何?分析:“1”的ASCII=31H=00110001B,先发送1位起始位(低电平),然后是8位数据位,低位在前、高位在后,接着是1位奇校验位,本例中奇校验位是0,最后发送1位停止位。1.异步通信和同步通信94在异步数据传输过程中,收发双方的以下两项设置必须保持一致。帧格式:即有关上述编码形式中奇偶校验形式以及数据位长度、停止位个数的规定,通信双方必须保持一致。传输速率:收发双方通信速率一致才能确保正确地接收、识别数据。1.异步通信和同步通信95按照信号传输的方向和同时性:⑴单工方式:单一方向传送⑵半双工方式:双向、不能同时发收

⑶全双工方式:双向,可同时发收⒉串行通信线路形式965.3.2串行接口结构及控制机制80C51串行口是一个全双工的异步串行通信接口,它有4种工作方式,既可作为通用异步收发器(UART),也可作为同步移位寄存器使用。方式0:同步移位寄存器方式,一般用于外接移位寄存器芯片以扩展I/O接口。方式1:8位异步通信方式,常用于双机通信。方式2和方式3:9位异步通信方式,常用于多机通信,区别在于波特率的来源不同。方式0和方式2的波特率直接由系统时钟产生。方式1和方式3的波特率由定时器/计数器T1的溢出率确定。971.80C51单片机的串行口硬件结构

串行数据通信中两个技术问题:数据传送解决传送中的标准、数据帧格式及工作方式等数据转换解决数据进行串、并行的转换通常由通用异步接收发送器(UART)

电路来完成5.3.2串行接口结构及控制机制9880C5串行口结构主要由发送SBUF、发送控制器、输出控制门、接收控制器、输入移位寄存器、接收SBUF等组成。1.80C51单片机的串行口硬件结构

99发送SBUF和接收SBUF是在物理上隔离的两个缓冲器,共用一个特殊功能寄存器名称SBUF,字节地址都为99H。CPU通过指令来自动区分该访问哪个物理SBUF寄存器,当CPU向SBUF写数据时,对应的是发送SBUF,而当CPU读SBUF时,对应的是接收SBUF。发送方式下,串行数据通过TxD(P3.1)引脚输出;接收方式下,串行数据从RxD(P3.0)引脚输入。串行口内部在接收SBUF之前还有移位寄存器,从而构成了串行接收的双缓冲结构,以避免在数据接收过程中出现帧重叠错误。1.80C51单片机的串行口硬件结构

100数据发送:发送数据时,执行一条向SBUF写入数据的指令,把数据写入串口的发送SBUF,就启动了发送过程。在发送时钟的控制下,先发送一个低电平的起始位,紧接着把发送SBUF中的内容按低位在前、高位在后的顺序一位一位地发送出去,最后发送一个高电平的停止位。一个字符发送完毕,串行口控制寄存器SCON中的发送中断标志位TI置位;对于方式2和方式3,当发送完数据位后,要把串行口控制寄存器SCON中的TB8位发送出去后才发送停止位。注意:串行口有两个特殊功能寄存器SCON和PCON,用来设置串行口的工作方式及波特率等。1.80C51单片机的串行口硬件结构

101数据接收:接收数据时,采用过采样的方式对线路进行扫描,判断线路的状态,并以此来判定串行通信一帧中的各个功能位。过采样的速率一般是波特率的8倍、16倍或32倍,在数据位的中点采用“3中取2”的方式判定数据位的高低。如起始位不是“0”,则起始位无效,复位接收电路;如是正常起始位,开始接收其他各位数据,直至接收完停止位结束,接收的前8位数据依次移入输入移位寄存器,根据工作方式的不同对第9位数据做不同处理。如接收有效,则输入移位寄存器中的数据置入接收SBUF中,同时置SCON中接收中断标志RI为1,通知CPU取数据。1.80C51单片机的串行口硬件结构

1022.串行口控制机制(1)串行口状态控制寄存器SCON

控制串行通信的方式选择、接收,指示串行口的中断状态。字节地址为98H,既可支持字节寻址也可支持位寻址,位地址为98H~9FH。位地址

9FH

9EH9DH9CH

9BH9AH99H

98H位功能SM0SM1SM2REN

TB8

RB8

TI

RI串行口工作方式选择位103串行口工作方式选择

SM0SM1工作方式特点波特率

00

方式0串行移位寄存器方式fosc/1201

方式18位UART方式可变,由T1的溢出率决定10

方式29位UART方式fosc/64或fosc/3211

方式39位UART方式可变,由T1的溢出率决定(1)串行口状态控制寄存器SCON

104

控制串行通信的方式选择、接收,指示串行口的中断状态允许方式2、3中的多处理机通信位(1)串行口状态控制寄存器SCON

位地址

9FH

9EH9DH9CH

9BH9AH99H

98H位功能SM0SM1SM2REN

TB8

RB8

TI

RI105

控制串行通信的方式选择、接收,指示串行口的中断状态允许串行接收位方式2、3要发送的第9位数据方式2、3要接收的第9位数据位地址

9FH

9EH9DH9CH

9BH9AH99H

98H位功能SM0SM1SM2REN

TB8

RB8

TI

RI(1)串行口状态控制寄存器SCON

106

控制串行通信的方式选择、接收,指示串行口的中断状态发送中断标志位接收中断标志位位地址

9FH

9EH9DH9CH

9BH9AH99H

98H位功能SM0SM1SM2REN

TB8

RB8TIRI(1)串行口状态控制寄存器SCON

107TI:发送中断标志位 方式0中,在发送第8位末尾置位;在其它方式时,在发送停止位开始时设置。 由硬件置位,用软件清除。RI:接收中断标志位 方式0中,在接收第8位末尾置位;在其它方式时,在接收停止位中间设置。 由硬件置位,用软件清除(1)串行口状态控制寄存器SCON

108电源控制寄存器PCON地址为87H,只能字节寻址。该寄存器中只4位有定义,最高位SMOD与串行口控制有关,其它位与低功耗工作方式有关。D7D6D5D4D3D2

D1D0SMOD——WLFGF1GF0

PDIDLSMOD:串行通信波特率系数控制位

当SMOD=1时,使波特率加倍复位后,SMOD=0(2)电源控制及波特率选择寄存器PCON1095.3.380C51串行口工作方式1.串行口方式0--同步移位寄存器方式

数据传输波特率固定为fosc/12

由RXD(P3.0)引脚输入或输出数据由TXD(P3.1)引脚输出同步移位时钟

接收/发送的是8位数据,传输时低位在前110从执行写SBUF指令(例如,MOVSBUF,A)的下一个机器周期开始启动串行数据的发送过程;从满足REN=1(允许接收)和RI=0(接收中断请求标志位清除)的下一个机器周期开始启动串行数据的接收过程TI和RI分别为发送中断请求标志位和接收中断请求标志位,两者均由硬件置位,但必须由软件清零。1.串行口方式0--同步移位寄存器方式

1112.串行口方式1--8位UART发送或接收一帧信息为10位:1位起始位(0)、8位数据位(低位在前)和l位停止位(1)由TXD(P3.1)引脚发送数据由RXD(P3.0)引脚接收数据

波特率由T1和T2的溢出决定1122.串行口方式1--8位UART113

在进行最后一次移位时,能将数据送入接收数据缓冲器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论