《单片机功能部件.ppt》由会员分享,可在线阅读,更多相关《单片机功能部件.ppt(141页珍藏版)》请在三一办公上搜索。
1、MCS-51单片机内部功能部件MCS-51系统扩展MCS-51功能扩展,MCS-51单片机内部功能部件,第6章 中断系统第7章 定时/计数器第8章 串行通信接口,中断的概念 现代的计算机都具有实时处理功能,能对外部发生的事件如人工干预、外部事件及意外故障做出及时的响应或处理,这是依靠计算机的中断系统来实现的。在MCS51应用系统中,经常需要处理如下问题:1定时器问题 在温度控制系统中,需对受控对象的温度进行定时采样,两次采样之间的时间间隔是固定的,如每秒一次。在电机恒速控制系统中,需对受控电机的转速进行定时采样,两次采样之间的时间间隔也是固定的,如每秒两次。为了定时采样,就必须使用定时器。当C
2、PU启动定时器后,就要等待定时器的定时超时标志,然后就进行采样,周而复始,循环不止。,2键盘按键问题 键盘是计算机系统操作者对系统进行参数设置和状态控制的常用设备,操作者何时对键盘进行操作是无法事先确定的。单片机应快速响应键盘操作。3串行通信问题 一个单片机控制系统可能与另一个计算机系统有联系,它们之间的数据交换是通过异步串行通信接口RS-232C进行的。MCS51单片机有一个串行通信控制器,当CPU将要发送的一个字节数据提交给串行通信控制器后,需要等串行通信控制器把这个字节数据发送完毕,才能发送下一个字节数据。这时,CPU要等待串行通信控制器的一个标志,表明串行通信控制器的发送缓冲器空闲,才
3、能把下一个要发送字节数据提交给串行通信控制器。CPU除了发送数据之外,还要接收对方发送来的数据,而对方什么时候要发送数据是无法确定的。MCS51单片机的串行通信控制器会自动处理数据接收,一旦接收到一个字节的数据,串行通信控制器会设置数据接收完成标志,CPU检测到该标志后,就从串行通信控制器中将数据读出。,上述三个问题中,一个共性的问题是:CPU需要对一个标志进行检测判断,以决定是否进行一项预定的工作(即执行一个特定的程序段)。对一个可能随机出现的标志进行检测判断,可以采用两种方法:查询/中断。查询是指CPU在程序流程中循环判断标志的改变。如:启动定时器时,定时器的定时超时标志TF为0,定时间隔
4、到时,定时器将定时超时标志TF置为1,程序中CPU用循环结构判断该标志是否为1等待定时结束:while(TF=0);TF=1;调用采样函数,(TF定时到标志),或者在主函数的流程中按顺序判断各个标志的状态,以确定要做的工作。while(1)if(TI)调用发送函数;if(RI)调用接受函数;if(keypress)调用按键处理函数;这里,TI、RI、keypress分别为定时到标志、发送缓冲器空标志、接收缓冲器满标志和有键按下标志。,所谓中断是指,单片机内部有一个中断管理系统,它对内部的定时器事件、串行通信的发送和接收事件及外部事件(如键盘按键动作)等进行自动的检测判断,当有某个事件产生时,中
5、断管理系统会置位相应标志通知CPU,请求CPU迅速去处理。CPU检测到某个标志时,会停止当前正在处理的程序流程,转去处理所发生的事件(针对发生的事件,调用某一特定的函数,称为该事件的中断服务函数),处理完以后,再回到原来被中断的地方,继续执行原来的程序。这个过程称为中断。(CPU对中断标志的检测是在程序指令执行的周期中顺带进行的,不影响指令的连续执行。)注:程序中的一般函数是由主函数或其它函数调用的,而中断服务函数不能被其它函数调用,它的执行完全是随机的。,中断管理系统可以处理的事件称为中断源。一般计算机系统允许有多个中断源,当几个中断源同时向CPU请求中断,要求为它们服务的时候,就存在CPU
6、优先响应哪一个中断请求源的问题,一般根据中断源(所发生的实时事件)的轻重缓急排队,优先处理最紧急事件的中断请求,于是规定每一个中断源都有自己的中断优先级别。当CPU正在处理一个中断源请求时,又发生了另一个优先级比它高的中断请求,如果CPU能够暂时中止执行当前的中断服务程序,转而去处理优先级更高的中断请求,待处理完以后,再继续执行原来的低级中断处理程序,这样的过程称为中断嵌套,这样的中断系统称为多级中断系统。没有中断嵌套功能的中断系统称为单级中断系统。,中断系统要解决的问题,CPU在不断的执行指令中,是如何检测到随机发生的中断请求中断能够人为控制吗(允许中断或禁止中断)中断是随机产生的,不能用一
7、般的子程序调用,那么如何处理中断处理子程序呢当有多个中断时怎么处理中断服务完毕,如何正确回到原断点处,MCS51中断系统 MCS51系列中不同型号单片机的中断源数量是不同的(511个),最典型的8051单片机有5个中断源(外部中断0、1,内部定时器中断0、1,串口中断),具有两个中断优先级。与中断系统有关的特殊功能寄存器有中断允许寄存器IE、中断优先级控制寄存器IP、中断控制寄存器TCON和SCON中有关位。MCS51单片机基本的中断系统结构如图41所示。,1中断源与中断标志 MCS51中典型的8051单片机有5个中断源:两个外部中断:(P3.2 INT0、P3.3 INT1)上输入的外部中断
8、源,低电平或负跳变有效,置位TCON中的IE0和IE1中断请求标志位;三个内部中断源:定时器计数器T0、T1的溢出中断源和串行口的发送/接收中断。对T0和T1中断,当定时计数回0溢出时,由硬件自动置位TCON中的TF0或TF1中断请求标志位;对串行接收发送中断,当完成一串行帧的接收发送时,由硬件自动置SCON中的中断请求标志位TI(发送)或RI(接收),必须由用户在中断服务程序中复位TI或RI。,中断控制寄存器TCON的各位(可位寻址):IE0:外部中断0请求源(INT0)标志。IE01,外部中断0正在向CPU请求中断,当 CPU响应该中断时由硬件清零IE0(边沿触发方式)。IT0:外部中断源
9、 INT0 触发方式控制位。IT0 0,外部中断0程控为电平触发方式,当P3.2输入低电平时,置位IE0。IT0 1,外部中断0程控为边沿触发方式,相继的两次采样,一个周期中采样到为高电平,接着的下个周期中采样到为低电平,则置1 IE0。,IE1:外部中断1请求(INT1,P3.3)标志。IE1 1外部中断1向 CPU请求中断,当 CPU响应外部中断时,由硬件清0 IE1(边沿触发方式)。IT1:外部中断1触发方式控制位。IT1 0,外部中断1程控为电平触发方式,IT1 1,外部中断1为边沿触发方式。其功能和IT0类似。TR0:定时计数器T0运行控制位。(启动/停止)TF0:定时计数器T0溢出
10、中断标志位,CPU执行中断服务程序时由硬件复位。TR1:定时计数器T1运行控制位。TF1:定时计数器T1溢出中断标志位,CPU执行中断服务程序时由硬件复位。,串行口中断:串行口的接收中断标志RI(SCON.0)和发送中断标志TI(SCON.1)逻辑或以后作为内部的一个中断源。当串行口发送完一个字符由内部硬件置位发送中断标志TI,接收到一个字符后也由内部硬件置位接收中断标志RI。应该注意,CPU响应串行口的中断时,并不清0 TI和RI中断标志,TI和RI必须由软件清0(中断服务程序中必须有清 TI、RI的指令)。SCON:串行通信控制寄存器,2中断控制(1)中断允许寄存器IEMCS51的CPU对
11、中断源的开放或屏蔽,即每一个中断源是否被允许中断,是由内部的中断允许寄存器IE(IE为特殊功能寄存器,它的字节地址A8H,可位寻址)控制的,其格式如下:EA:CPU的中断开放标志。EA 1,CPU开放中断;EA 0,CPU屏蔽所有的中断申请。EX0:外部中断0中断允许位。EX0 1,允许中断;EX0 0,禁止中断。,ET0:T0的溢出中断允许位。ET0 1,允许T0中断;ET0 0,禁止T0中断。EX1:外部中断1中断允许位。EX1 1,允许外部中断1中断;EX1 0,禁止外部中断1中断。ET1:定时器计数器 T1的溢出中断允许位。ET1 1,允许T1中断;ET1 0禁止T1中断。ES:串行口
12、中断允许位。ES 1,允许串行口中断;ES 0禁止串行口中断。,(2)中断优先级控制MCS51有两个中断优先级,每一中断请求源可编程为高优先级中断或低优先级中断,实现二级中断嵌套。一个正在被执行的低优先级中断服务程序能被高优先级中断所中断,但不能被另一个同级的或低优先级中断源所中断。若CPU正在执行高优先级的中断服务程序,则不能被任何中断源所中断,一直执行到结束,遇到返回指令RETI,返回主程序后再执行一条指令才能响应新的中断源申请。*为了实现上述功能,MCS51的中断系统有两个不可寻址的优先级状态触发器,一个指出CPU是否正在执行高优先级中断服务程序,另一个指出CPU是否正在执行低级中断服务
13、程序。这两个触发器的1状态分别屏蔽所有的中断申请和同一优先级的其他中断源申请。另外,MCS51的片内有一个中断优先级寄存器IP(IP为特殊功能寄存器,它的字节地址为B8H,可位寻址),其格式如下:,PX0:外部中断0中断优先级控制位。PX0 1,外部中断0中断定义为高优先级中断;PX0 0,外部中断0中断定义为低优先级中断。PT0:定时器T0中断优先级控制位。PT0 1,定时器T0中断定义为高优先级中断;PT0 0,定时器T0中断定义为低优先级中断。PX1:外部中断1中断优先级控制位。PX1=1,外部中断1中断定义为高优先级中断;PX1 0,外部中断1中断定义为低优先级中断。PT1:定时器T1
14、中断优先级控制位。PT1 1,定时器T1中断定义为高优先级中断;PT1 0,定时器T1中断定义为低优先级中断。,PS:串行口中断优先级控制位。PS 1,串行口中断定义为高优先级中断;PS 0,行口中断定义为低优先级中断。在 CPU接收到同样优先级的几个中断请求源时,一个内部的硬件查询序列确定优先服务于哪一个中断申请,这样在同一个优先级里,由查询序列确定了优先级结构,其优先级别排列如下:外部中断0 最高 定时器T0中断 外部中断1 定时器T1中断 串行口中断 最低,#MCS51复位以后,特殊功能寄存器IE、IP的内容均为0,由初始化程序对IE、IP编程,以开放中央处理器CPU中断、允许某些中断源
15、中断和改变中断的优先级。*3中断响应过程 MCS51的CPU在每一个机器周期顺序检查每一个中断源。在机器周期的S6采样并按优先级处理所有被激活的中断请求,如果没有被下述条件所阻止,将在下一个机器周期的状态S1响应激活了的最高级中断请求。CPU正在处理相同的或更高优先级的中断;现行的机器周期不是所执行指令的最后一个机器周期;,正在执行的指令是中断返回指令(RETI)或者是对IE、IP的写操作指令(执行这些指令后至少再执行一条指令后才会响应中断)。*如果上述条件中有一个存在,CPU将丢弃中断查询的结果;若一个条件也不存在,将在紧接着的下一个机器周期执行中断查询的结果。处理器响应中断时,先置位相应的
16、优先级状态触发器(该触发器指出CPU开始处理的中断优先级别),然后执行一条硬件子程序调用,清0中断请求源申请标志(TI和RI除外)。接着把程序计数部PC的内容压入堆栈(但不保护PSW),将被响应的中断服务程序的入口地址送程序计数器PC,各中断源服务程序的入口地址为:,外部中断00003H定时器T0000BH外部中断10013H定时器T1001BH串行口中断0023H通常在中断入口,安排一条跳转指令,以转移到用户设计的中断处理程序入口。CPU执行中断处理程序一直到RETI指令为止。RETI指令是表示中断服务程序的结束,CPU执行完这条指令后,清0响应中断时所置位的优先级状态触发器,然后从堆栈中弹
17、出顶上的两个字节到程序计数器 PC,CPU从原来打断处重新执行被中断的程序。由此可见,用户的中断服务程序末尾必须安排一条返回指令RETI,CPU现场的保护和恢复必须由用户的中断服务程序实现。,*一、中断处理过程 中断处理过程分为四个阶段:中断请求,中断响应,中断处理、中断返回。MCS51系列单 片机的中断过程流程如图6.2所示。,N,N,Y,Y,Y,N,执 行 指 令,中断标志1?(中断请求?),指令最后一个T周期?,EA=1?允 许 位=1?,CPU 判 别优 先权,响 应优 先权高 的中断,断点的PC进栈,中断服务入口地址送PC,撤 除 中 断 标 志,中 断 服 务,中 断 返 回,断
18、点 出 栈 送 PC,中断请求.,中断响应,中断服务,中断返回,中断请求、中断响应过程由硬件完成。中断服务程序应根据需要进行编写。程序中要注意保护现场和恢复现场。中断返回是通过执行一条RETI中断返回指令,使堆栈中被压入的断 点地址送PC,从而返回主程序的断点继续执行主程序。另外RETI还有恢复优先级状态触发器 的作用,因此不能以RET指令代替“RETI”指令。,*二、中断请求的撤除 CPU响应中断后,应撤除该中断请求标志,否则会再次中断。对定时计数器T0、T1的溢出中断,CPU响应中断后,硬件自动清除中断请求标志TF0 TF1。对边沿触发的外部中断INT1和INT0,CPU响应中断后硬件自动
19、清除中断请求标志IE0和IE1。对于串行口中断,CPU响应中断后,没有用硬件清除中断请求标志TI、RI,即这些中断标志 不会自动清除,必须用软件清除,这是在编串行通信中断服务中应该注意的。对电平触发的外部中断,CPU在响应中断时也不会自动清除中断标志,因此,在CPU响应中断后应立即撤除INT1或INT0的低电平信号。,*4外部中断响应时间INT0和INT1电平在每一个机器周期的S5P2被采样并锁存到IE0、IE2中,这个新置入的IE0、IEI状态等到下一个机器周期才被查询电路查询到。如果中断被激活,并且满足响应条件,CPU接着执行一条硬件子程序调用指令以转到相应的服务程序入口,该调用指令本身需
20、两个机器周期。这样,在产生外部中断请求到开始执行中断服务程序的第一条指令之间,最少需要三个完整的机器周期。,如果中断请求被前面列出的三个条件之一所阻止,则需要更长的响应时间。如果已经在处理同级或更高级中断,额外的等待时间明显地取决于别的中断服务程序的处理过程。当没有处理同级或更高级中断时,如果正在处理的指令没有执行到最后的机器周期,所需的额外等待时间不会多于3个机器周期,因为最长的指令(乘法指令MUL和除法指令 DIV)也只有 4个机器周期,如果正在执行的指令为IE、IP的指令,额外的等待时间不会多于 5个机器周期(最多需一个周期完成正在处理的指令,完成下一条指令(设MUL或DIV)4个机器周
21、期)。这样,在一个单一中断优先级的系统里,外部中断响应时间总是在38个机器周期之间。,*外部中断触发方式选择1电平触发方式 若外部中断定为电平触发方式,外部引脚中断输入必须有效(保持低电平),直到CPU实际响应该中断时为止,同时在中断服务程序返回之前,外部中断输入必须无效(高电平),否则CPU返回后会再次引起中断。所以电平触发方式适合于外部中断输入以低电平输入的、而且中断服务程序能清除外部中断输入请求信号的情况。在用户系统中,可将中断输入信号经一个D触发器接入,并使D触发器的D端接地,当外部中断请求的正脉冲信号出现在D触发器的CLK端时,D触发器的Q端产生负电平,INTx有效,发出中断请求,C
22、PU执行中断服务程序时,利用一根口线,如P1.0,输出一负电平脉冲使D触发器置位,撤消中断请求。,2边沿触发方式外部中断若定义为边沿触发方式,外部中断申请触发器能锁存外部中断输入线上的负跳变,即使CPU暂时不能响应,中断申请标志也不会丢失。在这种方式里,如果相继连续两次采样,一个周期采样到外部中断输入为高电平,下个周期采样到低电平,则置位中断申请触发器,直到CPU响应此中断时才清0。这样不会丢失中断,但输入的脉冲宽度至少保持12个时钟周期(若晶振频率为6MHz,即 2S)才能被CPU采样到。外部中断的边沿触发方式适合于以脉冲形式输入的外部输入请求,如ADC0809的AD转换结果的标志信号EOC
23、为正脉冲,取反后连到8031的INTx,就可以中断方式读取AD的转换结果。,中断服务程序及例程使用MCS51的中断,要为使用到的中断源编写中断服务程序。C51为中断服务程序的编写提供了方便的方法。C51的中断服务程序是一种特殊的函数,它的说明形式为:void 函数名(void)interrupt n using m 函数体语句 这里,interrupt和using是为编写C51中断服务程序而引入的关键字,interrupt表示该函数是一个中断服务函数,interrupt后的整数n表示该中断服务函数是对应哪一个中断源。,每个中断源都有系统指定的中断编号:中 断 源 中 断 编 号外部中断00定时
24、器T01外部中断12定时器T13串行口中断4using指定该中断服务程序要使用的工作寄存器组号,m为03。关键字interrupt和using只能用于中断服务函数的说明而不能用于其它函数。程序中的任何函数都不能调用中断服务函数,中断服务函数是由系统调用的。,例:INT0端口接一开关,P1.0接一发光二极管。开关闭合(接地)时,发光二极管改变一次状态。#include“reg51.h”#include“intrins.h”Sbit P10=P10void delay(void)int a=5000;while(a)_nop_();/*INTRINS.H中说明的内部函数*/,P1.0,INT0,v
25、oid int0_srv(void)interrupt 0 using 1 delay();if(INT0=0)P10=!P10;while(INT0=0);void main()P10=0;初始化TCON、IE、IP EA=1;IT0=0;EX0=1;while(1);,例6-1,例如,对本节的例1用C语言编程#includeint0()interrupt 0/*INT0中断函数*/P1=0 x0f;/*输入端先置1,灯灭*/P1=4;/*读入开关状态,并左移四位,使开关反映在发光二极管上*/main()EA=1;/*开中断总开关*/EX0=1;/*允许INT0中断*/IT0=1;/*下降沿
26、产生中断*/while(1);/*等待中断*/,*法1:在主程序中控制中断次数#includechar i;code char tab16=0 x3f,0 x06,0 x5b,0 x4F,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;int()interrupt 2i+;/*计中断次数*/P1=tabi;/*查表,次数送显示*/,main()EA=1;EX1=1;IT1=1;ap5:P1=0 x3f;/*显示“0”*/for(i=0;i16;);/*当I16等待中断*/goto ap5;/*当i=
27、16重复下 一轮16次中*/,法二:在中断服务程序中控制中断次数#includechar i;code char tab16=0 x3f,0 x06,0 x5b,0 x4F0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;,int()interrupt 2 i+if(i16)P1=tabi;elsei=0;P1=0 x3f;main()EA=1;EX1=1;IT1=1;P1=0 x3f;while(1);/*等待中断*/,作业:中断控制流水灯,定时/计数器,定时/计数器控制寄存器定时/计数器运行控制定
28、时/计数器工作方式,通常实现定时/计数有3种主要方法:软件定时,即让机器执行一个程序段,这段程序本身没有具体的执行目的,只是为了磨时间。执行这段程序所需要的时间就是延时时间。这种程序前面已设计过。这种方法定时占用CPU执行时间,降低了CPU利用率。数字电路硬件定时:采用小规模集成电路器件如555,外接定时部件(电阻和电容)构成。这样的定时电路简单,但要改变定时范围,必须改变电阻和电容,这种定时电路在硬件连接好以后,修改不方便。可编程定时/计数器是为方便微型计算机系统的设计和应用而研制的,它是硬件定时,又很容易地通过软件来确定和改变它的定时值,通过初始化编程,能够满足各种不同的定时和计数要求,因
29、而在嵌入式系统的设计和应用中得到广泛的应用。(基本原理),8051型有两个十六位定时/计数器T0、T1,有四种工作方式。MCS51系列单片机的定时/计数器有几个相关的特殊功能寄存器:方式控制寄存器TMOD;加法计数寄存器TH0、TH1(高八位)TL0、TL1(低八位);定时/计数到标志TF0、TF1(中断控制寄存器TCON)定时/计数器启停控制位TR0、TR1(TCON)定时/计数器中断允许位ET0、ET1(中断允许寄存IE)定时/计数器中断优先级控制位PT0、PT1(中断优IP),1.定时工作方式,设置为定时工作方式时,定时器计数的脉冲是由51单片机片内振荡器经12分频后产生的。每经过一个机
30、器周期定时器(T0或T1)的数值加1直至计数满产生溢出。如:当8051采用12MHz晶体时,每个机器周期为1s,计5 个机器周期即为5 s,即定时5 s。,2.计数工作方式,设置为计数工作方式时,定时/计数器对引脚 P3.4(T0)和P3.5(T1)输入的外部脉冲信号计数。当输入脉冲信号产生由1至0的下降沿时,定时器的值 加 1。测量过程是:CPU前一个机器周期采样脉冲值为高,下一个机器周期采样脉冲值为低,则计数器加 1。,由于检测一个1至0的跳变需要二个机器周期,故最高计数频率为振荡频率的二十四分之一。虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保持
31、时间至少是一个完整的机器周期。,无论是定时还是计数,当软件设定了定时/计数器的工作方式,启动以后,定时/计数器就按规定的方式工作,不占用CPU的操作时间,此时CPU可执行其他程序,到了计满规定的时间或规定的个数(定时/计数器溢出),定时/计数器会给出溢出标志,你可以通过查询或中断方式了解是否溢出。这种工作的方式如同人带的手表,人在工作或睡觉,而手表依然滴滴答答行走,你可以通过看表或设闹钟方式,到了规定的时间,干你想干的事。,定时计数器方式控制寄存器TMOD 定时计数器的工作方式由TMOD的各位控制,TMOD的格式为:TMOD的低四位为T0的方式字,高四位为T1的方式字。TMOD不能位寻址,必须
32、整体赋值。TMOD各位的含义如下:1.工作方式选择位M1、M0 M1、M0的状态决定定时器的工作方式:,2.定时和外部事件计数方式选择位C/T C/T0为定时器方式。在该方式中,以振荡器输出时钟脉冲(fosc)的十二分频信号(即机器周期)作为计数信号,也就是每一个机器周期,定时器加1,若晶振为12MHz,则定时器计数频率为1MHz,计数的脉冲周期为1S。定时器从初值开始加1计数直至定时器溢出。,C/T1为外部事件计数器方式,这种方式将外部引脚(T0为P3.4、T1为P3.5)上的输入脉冲作为计数脉冲。(下降沿进行计数)外部事件计数时最高计数频率为晶振频率的二十四分之一,外部输入脉冲高电平和低电
33、平时间必须在一个机器周期以上。对外部输入脉冲计数的目的通常是为了测试脉冲的周期、频率或对输入的脉冲数进行累加。,3.门控位GATE GATE与TR0、TR1配合决定定时/计数器的启停。GATE=0时,定时器/计数器的启停只受定时器运行控制位(TR0、TR1)的控制。(软件启动)GATE=1时,定时器/计数器的启停除受TR0、TR1控制外,还受外部引脚(INT0、INT1)输入电平的控制(为高)。即TR0和INT0控制T0的运行,TR1和INT1控制T1的运行(软硬启动),定时器运行控制位在特殊功能寄存器 TCON中存放着定时器的运行控制位和溢出标志位。1定时器T0运行控制位TR0TR0(TCO
34、N.4)由软件置位和清零。当GATE=0时,T0的计数仅由TR0控制,TR0=1时允许T0计数,TR0=0时禁止T0计数,这时,定时器仅由软件控制。当GATE=1时,仅当TR0=1且P3.2的输入信号为高电平时T0才计数,当TR0为0或P3.2的输入为低电平时都禁止T0计数,这时,若置TR0为1,则定时器仅由引脚信号的状态控制启停,因而是硬件控制的。用TR0和INT0一起控制定时器的启停,则为软、硬件配合控制。2定时器 T1运行控制位TR1,定时/计数器的工作方式MCS51的定时器有方式0、方式1、方式2和方式3这4种工作方式。1.方式0当M1M0=00时,定时器工作于方式0。,与,方式 0为
35、13位的计数器,由TL0的低5位和TH0的8位组成,TL0低5位计数溢出时向TH0进位,TH0计数溢出时置位溢出标志TF0。若T0工作于定时方式,设计数初值为a,晶振频率为12MHz,则T0从初值开始计数到溢出的定时时间为 t(213a)1S。2.方式1当M1M0=01时,定时器工作于方式1。,T1工作于方式1时,由TH1作为高8位,TL1作为低8位,构成一个十六位的计数器。若T1工作于定时方式1,计数初值为 a,晶振频率为12MHz,则T1从计数初值计数到溢出的定时时间为t=(216a)S。3.方式2M1M0=10时,定时器计数器工作于方式2,方式2为自动恢复初值的 8位计数器。TL1作为8
36、位计数器,TH1作为计数初值寄存器。t=(28a)S。,*4.方式3 M1M0=11时,被设置为方式3。,若T1设置为工作方式3时,则使T1停止计数。若T0被设置为方式3,则T0分为两个独立的8位计数器TL0和TH0。TL0可作为八位定时/计数器,可使用T0的所有状态控制位(GATE、TR0、INT0(P3.2)、T0(P3.4)、TF0等),TL0计数溢出时置位溢出标志TF0,TL0计数初值必须由软件每次设定。TH0只能作为一个8位定时器,并使用T1的状态控制位TR1、TF1。TRl为1时,允许TH0计数,当TH0计数溢出时,置1溢出标志TF1。一般只有当T1用于串行口的波特率发生器时,T0
37、才在需要时用于方式3,以增加一个计数器。这时T1的启停也受TR1控制,当T1计数溢出时不置位TF1。,定时/计数器应用举例使用MCS51单片机的定时/计数器的步骤是:1设定TMOD,确定:工作状态(用作定时器/计数器);工作方式;控制方式。如:T1用于定时器、方式1,T0用于计数器、方式2,均用软件控制。则TMOD的值应为:0001 0110,即0 x16。2设置合适的计数初值,以产生期望的定时间隔。由于定时/计数器在方式0、方式1和方式2时的最大计数间隔取决于使用的晶振频率fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将定时间隔分段处理。,计数初值的计算方法如下,设晶振频
38、率为fosc,则定时/计数器计数频率为fosc/12,定时/计数器的计数总次数T_all在方式0、方式1和方式2时分别为213=8192、216=65536和28=256,定时间隔为T,计数初值为a,则有 T=12(T_all a)/fosc a=T_all Tfosc/12 a=Tfosc/12(注意单位)THx=a/256;TLx=a%256;,3确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器的中断及总中断:ET0=1;EA=1;还需要编写中断服务函数:void T0_srv(void)interrupt 1 using 1 TL0=a%256;
39、TH0=a/256;中断服务程序段 4启动定时器:TR0(TR1)=1。,如图所示,P1中接有八个发光二极管,编程使八个管轮流点亮,每个管亮100ms,设晶振为6MHz。,7.4.3 应用编程举例,例1:从P1.0输出方波信号,周期为50ms。采用定时/计数器T0用于定时器,定时间隔为25ms,软件控制,方式1,中断方式。设fosc=6MHz。定时计数初值为:a=-0.025*6000000/12=-12500#include“reg51.h”void main()TMOD=0 x01;TH0=-12500/256;TL0=-12500%256;,ET0=1;EA=1;TR0=1;While(
40、1);void T0_srv(void)interrupt 1 using 1TL0=-12500%256;TH0=-12500/256;P10=!P10;,例2:从P1.0输出方波信号,周期为2s。(同72)实现一:硬件定时+软件计数 采用T0做定时器,方式1,定时间隔为0.1s,中断方式。另设一全局变量ah1用于计数,每隔0.1秒ah1加1。定时计数初值为:(设fosc=6MHz)a=-0.1*6000000/12=-50000#include“reg51.h”char ah1;void main()TMOD=0 x01;TH0=-50000/256;TL0=-50000%256;,ET0
41、=1;EA=1;TR0=1;While(1);void T0_srv(void)interrupt 1 using 1TL0=-50000%256;TH0=-50000/256;ah1+;if(ah1=10)ah1=0;P10=!P10;,*实现二:(1)T1做计数器,初值为-10,方式2,中断方式。P1.1与T1(P3.5)相连。(2)T0不变还做定时器,定时间隔为0.1s,方式1,中断方式。每隔0.1s,P1.1输出一个方波:P11=1;P11=0;#include“reg51.h”char ah1;void main()TMOD=0 x61;TH0=-5000/256;TL0=-5000
42、%256;,TH1=-10;TL1=-10;ET0=1;ET1=1;EA=1;TR0=1;TR1=1;While(1);void T0_srv(void)interrupt 1 using 1TL0=-50000%256;TH0=-50000/256;P11=1;P11=0;,void T1_srv(void)interrupt 3 using 2P10=!P10;,*例3:波形展宽程序.P124 设P3.4输入低频的窄脉冲信号,要求在P3.4输入发生负跳变时,P1.0输出一个500S的同步脉冲。设fosc=6MHz,P1.0的初态为高电平(1)平时T0选为方式2做计数器用,初值为-1(0FF
43、H);(2)一旦P3.4输入发生负跳变时,程序查询到TF0变为1,则T0改为做定时器(500S),并使P1.0输出低电平,T0溢出后恢复P1.0高电平,T0又工作于计数器方式。,#include“reg51.h”void main()TMOD=0 x06;/*T0计数器,方式2,软件控制*/TH0=-250;TL0=-1;/*或TL0=255*/TR0=1;,while(1)while(TF0=0);TF0=0;/非中断方式 TMOD=0 x02;/*T0定时器,方式2*/P10=0;while(!TF0);TF0=0;P10=1;TMOD=0 x06;/*T0 恢复为计数器*/TL0=-1;
44、请大家回去想想中断的写法,*例4 测量正脉冲宽度P125说明:当TMOD中的GATE=1,则定时/计数器T0(T1)的启停由INT0(INT1)引脚控制,所以将该脉冲信号接到INT0(INT1)。,#include“reg51.h”void main()char a,b;int c;TMOD=0 x09;/*T0定时器,方式1,硬件控制*/TH0=0;TL0=0;while(INT0=1);TR0=1;while(INT0=0);/*等待INT0上跳 等INT0=1时,T0开始工作*/while(INT0=1);/*等待INT0下跳*/a=TH0;b=TL0;c=256*a+b;c=c*T;,
45、第8章 串行通信接口,串行通信的基本概念串行接口的控制寄存器串行接口的工作方式*波特率的设定及编程,8 1 概 述 单片机应用与数据采集或工业控制时,往往作为前端机安装在工业现场,远离主机,现场数据采用串行通信方式发往主机进行处理,以降低通信成本,提高通信可靠性。如下图所示。应用,数据通信方式有两种:并行通信与串行通信并行通信:所传送数据的各位同时发送或接收,数据有多少位就需要多少根数据线。特点:速度快,成本高,适合近距离传输 如计算机并口,打印机,8255。串行通信:所传送数据的各位按顺序一位一位 地发送或接收。只需一根数据,一根地线,共2 根 特点:成本低,硬件方便,适合远距离通信,传输速
46、度低。,计算机技术中常见的一些接口,1、串行通信的基本概念在串行通信系统中,根据数据流动方向可以分为三种方式:单工通信:数据只能单向传送。半双工通信:通信是双向的,但每一时刻,数据流通的方 向是单向的。全双工通信:允许数据同时在两个方向流动,即通信双方的 数据发送和接收是同时进行的。,在串行通信过程中,通信双方必须采用相同的通信速率,即每秒钟发送或接收的位数,称为波特率,如600,1200,2400,4800,9600,19200bps等。P135 波特率与有效波特率2、异步串行通信/同步串行通信 异步串行通信采用如下的帧结构:起始位+8位数据位+停止位或 起始位+9位数据位+停止位其中:起始
47、位为低电平,停止位为高电平。,优点:硬件结构简单。缺点:传输速度慢。,P,1,D0,D1,D2,D3,D4,D5,D6,D7,P,1,0,第n个字符(一帧),n-1,n+1,0,D0,起始位,数据位(58位),校验位,停止位,在同步通信中,发送方在数据或字符开始处就用同步字符(常约定12个字节)指示一帧的开始,由时钟来实现发送端和接收端同步,接收方一旦检测到与规定的同步字符符合,下面 就连续按顺序传送若干个数据,最后发校验字节。见下图:,SYN字符1,SYN字符2,数据1,数据2,.,数据n,连续传送n 个数据,校验,3错误校验在串行通信过程中,传输的电信号会受到各种干扰而产生畸变,因而使接收
48、方接收到错误的数据。所以进行错误校验。(在发送的数据信号中加入多余的信息位而达到错误校验的目的)在异步串行通信系统中,奇偶校验是一种简单的错误校验编码。奇偶校验分为奇校验和偶校验。奇校验是指数据各位与校验位中1码的总个数为奇数个,偶校验是指数据各位与校验位中1码的总个数为偶数个。,通信的双方针对上面情况应该有一个约定,什么时候开始发送,什么时候发送完毕;接收方收到的信息是否正确等,这就是通信协议。所谓通信协议就是通信双方必须共同遵守的 一种约定,约定包括数据的格式、同步的方式、传送的步骤、检纠错方式及控制字符的定义 等,4*串行通信过程和UART 基本的计算机异步串行通信系统中,两台计算机之间
49、通过三根信号线TxD、RxD和GND连接起来,TxD与GND构成发送线路,RxD与GND构成接收线路。一台计算机的TxD、RxD线分别与另一台计算机的RxD、TxD线相连。,Receive Data Transmit Data,实现串行通信的必要过程是并串(并行数据被CPU或外设处理,串行数据在线路上传输)。发送过程:CPU将要发送的一个字节并行数据 串行数据序列;组帧(加一个起始位和一个停止位,还可能加入校验位);按事先约定的通信波特率发送起始位,然后发送数据位和校验位,最后发送停止位。接收过程:当通信线路处于空闲状态(双方都没有数据发送)时,接收线RxD为高电平。CPU以16倍于波特率的频
50、率对RxD进行采样,当采样到低电平后,延时半位宽度,在该位中部进行三次采样,进行多数判决,确认若为低电平,则确定接收到起始位。然后,延时一位宽度接收一位数据,直至接收到停止位。然后将串行数据拆帧并转换为并行数据,交CPU处理。(每接收一位数据时,采用三次采样的判决方法),由于在串行通信过程中的并串转换、串并转换、线路检测、采样判决、组帧、拆帧、发送和接收等操作需消耗CPU大量时间,以至CPU无法处理其它工作,因而开发出专用于处理异步串行通信发送和接收工作的芯片UART(通用异步串行通信接收发送器)。,UART 传输结构,CPU只需将要发送的一个字节数据交给UART,其它发送工作由UART自动完