《最新单片机的片内资源PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新单片机的片内资源PPT课件.ppt(86页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、3 31 1 计数器与定时器计数器与定时器 3.1.1 3.1.1 定时定时/ /计数器的模式和控制寄存器计数器的模式和控制寄存器 3.1.2 3.1.2 定时技术器的工作方式定时技术器的工作方式 3 31 13 3定时器定时器/ /计数器计数器2 2 3.1.4 3.1.4 定时器定时器0/10/1应用举例应用举例 3.1.5 AT89S513.1.5 AT89S51单片机的看门狗单片机的看门狗可位寻址 76543210复位值:00H TFlTRlTF0TR0IE1IT1 IE0IT0 位 符号 功能TCON7 TFl 定时器计数器1溢出标志位。当T1被允许计数后,T1从初值开始加1计数,最
2、高位产生溢出时,TFl置“1”,并向CPU请求中断,当CPU响应时,TFl由硬件清“0”,TFl也可以由程序查询或清“0”。TCON6 TRl定时器T1的运行控制位。该位由软件置位和清零。当GATE(TMOD7)=0,TR1=1时就允许T1开始计数,TR1=0时禁止T1计数。当GATE(TMOD7)=1,TR1=1且INTl输入高电平时,才允许T1计数。表3-2 定时计数器控制寄存器 TCONTCON5 TF0定时器计数器。溢出标志位。当TO被允许计数后,TO从初值开始加1计数,最高位产生溢出时,TF0置“1”,并向CPU请求中断,当CPU响应时,TF0由硬件清“0”,TF0也可以由程序查询或
3、清“0”。TCON4 TR0定时器T0的运行控制位。该位由软件置位和清零。当GATE(TMOD3)=0,TR0=1时就允许T0开始计数,TR1=0时禁止T0计数。当GATE(TMOD3)=1,TR0=1且INT0输入高电平时,才允许TO计数。TCON3 IE1外部中断1中断请求标志位。当主机响应中断转向该中断服务程序执行时,由内部硬件自动将IE1位清0。TCON2 IT1外部中断1触发方式控制位。ITl=0时,外部中断1为低电平触发方式,当INTl(P3.3)输入低电平时,置位1El。采用低电平触发方式时,外部中断源(输入到INTl必须保持低电平有效,直到该中断被CPU响应,同时在该中断服务程
4、序执行完之前, 外部中断源必须被清除(P33要变高),TCON2 IT1否则将产生另一次中断。当1T1=1时,则外部中断1(INTl)端口由“1”到“0”下降沿跳变,激活中断请求标志位IEl,向CPU请求中断处理。TCON1 IE0外部中断。中断请求标志位。当主机响应中断转向该中断服务程序执行时,由内部硬件自动将IE0位清0。TCON0 IT0外部中断。触发方式控制位。IT0=0时,外部中断。为低电平触发方式,当INT0(P3 2)输入低电平时,置位IE0。采用低电平触发方式时,外部中断源输入到INT0必须保持低电平有效,直到该中断被CPU响应,同时在该中断服务程序执行完之前,部中断源必须被清
5、除(P32要变高),否则将产生另一次中断。当IT0=1时,则外部中断0(INT0)端口由“1”到“0”下降沿跳变,激活中断请求标志位IEl, 向主CPU请求中断处理。TCON寄存器用来反映定时/计数器的状态及对定时/计数器进行控制。3.1.2 3.1.2 定时技术器的工作方式定时技术器的工作方式 (1) 定时器/计数器的工作方式0 定时器/计数器的工作方式0称之为13位定时/计数方式。它由TL(1/0)的低5位和TH(0/1)的8位构成13位的计数器,此时TL(1/0)的高3位未用。 13位模式只是为48系列兼容而设计的一种工作式,一般不用。该13位寄存器包含THn全部8个位及TLn的低5位。
6、TLn的高3位不定,可将其忽略,如图32所示。图3-2 定时/计数器工作方式0图3-3 定时器/计数器的工作方式1 (2)定时器/计数器的工作方式1工作方式1是16位的定时/计数方式,将M1、M0设为0、1即可,其它特性与工作方式0相同,如图3-3所示。(3)定时器/计数器的工作方式2定时器/计数器的工作方式2,如图34所示。这种工作方式也称为自动加载方式。能够自动装入预置数,预置数存放在T(0/1)的高8位,这时高8位不参与计数。只有低8位参与计数,高8位不参与计数,用作预置数的存放,每当计数溢出,就会打开T(0/1)的高、低8位之间的开关,预置数进入低8位。这是由硬件自动完成的,不需要由人
7、工干预。通常这种工作方式用于波特率发生器。图3-4 定时器/计数器的工作方式2 自动装入预置数的工作方式(4)定时器/计数器的工作方式3这种式作方式之下,定时/计数器0被拆成2个独立的定时/计数器来用。其中,TL0可以构成8位的定时器或计数器的工作方式,而TH0则只能作为定时器来用。我们知道作定时、计数器来用,需要控制,计满后溢出需要有溢出标记,T0被分成两个来用,那就要两套控制及、溢出标记了,这时TL0还是用原来的T0的标记,而TH0则借用T1的标记。此时T1无标志位可用一般情况处,只有在T1以工作方式2运行(当波特率发生器用)时,T0才用于工作于方式3。在模式3时,定时器1停止计数将与TR
8、l设置为0相同。定时/计数器工作方式3如图35所示。图3-5 定时器/计数器的工作方式3 3.1.3 3.1.3 定时器定时器/ /计数器计数器2 2 52单片机比51单多了一个定时器/计数器称之为定时器/计数器2是一个具有16位自动重装载或捕获能力定时器/计数器。专用寄存器T2CON是它的控制寄存器。它的工作方式可分为两类,一类为定时器/计数器方式,另一为波特率发生器方式。特别现在的AT89C52/AT89S52等FLASH型52单片机中还可以用T2的溢出产生方波输出,同时还新增加了T2MOD,可以设置计数的方向,既可以加法计数,也可以减法计数。 T2定时器工作方式下TL2和TH2计数的值是
9、机器周期数。T2作计数器用时,外部计数脉冲由T2(P1.0)输入,52的定时器2有三种工作模式,分别是: 捕捉模式:捕捉模式可记录事件发生的准确时间,如图36所示。 自动加载模式:可实现16位的自动加载,如图37所示。 波特率产生器模式:主要用在串行通信上作波特率发生器和方波输出,如图39所示。 定时/计数器2的控制寄存器有TC2ON和T2MOD,见表3-3所示和表3-4所示。TF2EXF2RCLKTCLKEXEN2TR2 T2CON.7定时2溢出标志必须软件清“0”。RCLK1或TCLK1时,TF2无效 T2CON.6定时器2外部标志位。EXEN21时,T2EX上的负跳变而出现捕捉或重载时,
10、EXF2会被硬件置位。定时器2打开,EXF21时,将产生中断申请,执行定时器2中断程序。EXF2必须软件清“0”。在减计数模式(DCEN 1)下EXF2不能引起中断。 T2CON.5 串行口接收数据时钟标志位。若RCLK=1,串行口将使用定时器2溢出脉冲作为串行口工作模式1和3的串口接收时钟;RCLK=0,将使用定时器1计数溢出作为串口接收时钟。 T2CON.4 串行口发送数据时钟标志位。若TCLK1,串行口将使用定时器2溢出脉冲作为串行口工作模式1和3的串口发送时钟;TCLK=0,将使用定时器1计数溢出作为串口发送时钟。 T2CON.3定时器2外部允许标志位。当EXEN2 1时,如果定时器2
11、没有用作串行时钟,T2EX(P1.1)的负跳变见引起定时器2捕捉和重载。若EXEN2=0,定时器2将视T2EX端的信号为无效 T2CON.2开始停止控制定时器2。TR21,定时器2开始工作1,选择计数器工作方式。外部事件计数为下降沿触发 0,当定时器2溢出或EXEN21时T2EX出现负跳变,都会出现自动重载操作。将引起T2EX的负脉冲。当RCKL1或T2出时,强制做自动重载操作。表33定时器计数器2控制寄存器T2CONT2OEDCENT2输出使能位计数器加/减控制位:0加; 1减表34 T2MOD寄存器(C9H) 装载寄存器RCAP2H和RCAP2L来实现的。TH2、TL2和RCAP2H、RC
12、AP2L之间接有双向缓冲器(三态门)。当CP/=0时,选择自动重装载功能,即把RCAP2H和RCAP2L的数据自动装入TH1和TH2。当CP/=1时,选择捕获工作方式,数据传递方向与上述相反。捕获或重装载动作发生于下述2种情况下;(1)定时器2的寄存器TH2和TL2溢出时,这时若CP/=0时,则打开重装的三态缓冲器,把RCAP2H和RCAP2L的内容自动装载到TH2和TL2中。同时,溢出标志TF2置1,申请中断。(2)当EXEN2=1且T2EX(P1.1)引脚的信号有负跳变时,这时根据CP/是0还是1,将发生捕获操作或重装载操作,同时标志EXF2置1,申请中断。 若定时器/计数器2的中断是允许
13、的,则无论发生TF2=1还是EXF2=1,CPU都会响应中断,此中断向量的地址为2BH。响应中断后,应靠软件清除中断申请,以免无休止地发生中断。TF2和EXF2都是直接可寻址位,可采用CLRTF2和CLREXF2指令实现撤除中断申请的功能。图3-6定时/计数器2的捕捉模式图3-7定时器2的自动加载工作方式图3-8波特率发生器方式下的定时器/计数器2的逻辑图3.1.4 3.1.4 定时器定时器0/10/1应用举例应用举例 定时计数器需要完成的工作有:根据应用要求,通过程序初始化,正确设置控制字。正确计算和计算计数初值。编写中断服务程序,适时设置控制位。通常情况下,设置程序大致如下: (1) 工作
14、方式控制字(TMOD、T2CON)的设置; (2) 计数初值的计算并装入THx、TLx、RCAP2H、RCAP2L; (3) 中断允许位ETx、EA的设置,使主机允许中断; (4) 启停位TRx的设置等。 现以定时计数器0或1为例作一简要介绍。 51系列单片机系列单片机的定时器计数器0或1是加1计数器,因此,不能直接将实际的计数值作为计数初值送入计数寄存器THx、TLx中去,而必须将实际计数值以28、213、216为模求补,以其补码作为计数初值设置THx和TLx。 若实际计数值为x,计数器长度为n(8、13、16),则应装入计数器THx、TLx中的计数初值为2nx,式中2n为取模值。例如,工作
15、方式0的计数长度为13位,则n13,以213为模,工作方式1的计数长度为16,则n16,以216为模等等。所以,计数初值为(x)2nx。对于定时模式,是对机器周期计数,而机器周期与选定的时钟频率密切相关。因此,需根据应用系统所选定的时钟频率计算出机器周期值。若时钟为6MHz为例,机器周期为 一个机器周期=12/6M =2us实际定时时间为Tc=xTp 式中Tp为机器周期,Tc为所需定时时间。Tp和Tp一般为已知值,在求出Tp后即可求得所需计数值x,再将x求补码,即求得定时计数初值。 610612例31 设定时时间Tc=5ms,机器周期Tp=2us,可求得定时计数次数。设选用工作方式1,则n=1
16、6,则应设置的定时时间计数初值为:x=2500次 (x)补码216x655362500=63036,还需将它分解成两个8位十六进制数,分别求得低8位为3CH装入TLx,高8位为F6H装入THx中。工作方式0、1、2的最大计数次数分别为8192、65536和256。 对外部事件计数模式,只需根据实际计数次数求补后变换成两个十六进制码即可。例32 定时计数器应用编程,设某应用系统,选择定时计数器1定时模式,定时时间Tc=lms,主频频率为12MHz,每lms向主机请求处理。选定工作方式1。计算得计数初值:低8位初值为0F0H,高8位初值为0D8H。所谓初始化,一般在主程序中根据应用要求对定时计数器
17、进行功能选择及参数设定等预置程序,本例初始化程序如下START: ;主程序段MOV SP,#60H ;设置堆栈区域MOV TMOD,#10H ;选择T1,定时模式,工作方式1MOV TH1,0D8H ;设置高字节计数初值MOV TL1,#0F0H ;设置低字节计数初值SETB EA ;开中断SETB ET1 ;其他初始化程序SETB TR1 ;启动T1开始计时 . ;继续主程序中断服务程序INTT1: PUSH A ;现场保护 PUSH DPL ; PUSH DPH ;MOV TL1,#0F0H ;重新设置初值MOV TH1,#0D8H ; ;中断处理POP DPH ;现场恢复POP DPL
18、; POP A ;RETI ;返回INTTO MOV TMOD,09H ;设T0为定时方式1,GATE为1MOV TL0,#00H ; TH0,TL0清0MOV TH0,#00H ;CLR EX0 ;关 LOP1: JB P3.2,LOP1 ;等待 引脚低电平LOP2:JNB P3.2,LOP2 ;等待 引脚高电平SETB TR0 ;启动T0开始计数LOP3:JB P3.2,LOP3 ;等待 低电平CLR TR0 ;停止T0计数MOV A,TL0 ;低字节计数值送AMOV B,TH0 ;高字节计数值送BORG 0000HAJMP MAIN ;转主程序ORG 001BHLJMP INTER ;转
19、T1中断服务程序ORG 0100 ;主程序入口MAIN: MOV SP,#60H ;设置堆栈区 MOV TMOD,#60H ;设置定时/计数器1,计数方式2 MOV TL1,#0FFH ;设置计数常数 MOV TH1,#0FFH SETB EA ;开中断 SETB ET1 ;开定时/计数器1中断 SETB TR1 ;启动定时/计数器1计数 中断程序(具体处理程序略) ORG 1000H INTER: PUSH A PUSH DPL PUSH DPH POP DPH POP DPL POP A RETI ;返回 这是中断服务子程序的基本形式。51系列单片机的中断属于矢量中断,每一个矢量中断源只留
20、有8个字节单元,一般是不够用的,常需用转移指令转到真正的中断服务子程序区去执行。 例33 测外部输入的脉冲宽度。选择定时计数器2进行脉宽测试较方便,但也可选用定时计数器0或定时计数器1进行测宽操作。本例选用定时计数器0(T0)工作在定时器方式模式,工作方式1对INT0引脚上的正脉冲进行脉宽测试。图310 脉宽测试图设置GATE为1,机器周期Tp为1s。本例程序段编制如下:INTT0: MOV TMOD,#09H ;设T0为定时方式1,GATE为1 MOV TL0,#00H ;清TH0,TL0 MOV TH0,#00H CLREX0 ;禁止外中断0LOP1: JB P3.2,LOP1 ;等待P3
21、.2变低SETBTR0MOVA,TL0MOVB,TH0例34 利用定时计数器0或定时计数器1的Tx端口作为外部中断源输入端口的应用设计。在某些应用系统中常会出现两个外部中断源INT0和INTl不够用的情况,可将Tx用于增加的外部中断输入。现选择定时计数器1为计数方式2(自动再装入),设置计数初值为0FFH,则T1端口输入一个负跳变脉冲,计数器2立即溢出,置位对应的中断请求标志位TFl为1,向主机请求中断处理,从而达到了增加一个外部中断源的目的。应用定时计数器1(T1)的中断矢量进入中断服务程序处理。其程序如下:主程序段: ORG 0000H AJMP MAIN ;转主程序 ORG 001BH
22、LJMP INTER ;转T1中断服务程序 ORG 0100 ;主程序入口MAIN: MOV SP,#60H ;设置堆栈区 MOV TMOD,#60H ;设置定时/计数器1,计数方式2 MOV TL1,#0FFH ;设置计数常数 MOV TH1,#0FFH SETB EA ;开中断 SETB ET1 ;开定时/计数器1中断 SETB TR1 ;启动定时/计数器1计数 中断程序(具体处理程序略) ORG 1000HINTER: PUSH A ; PUSH DPL ; PUSH DPH ; POP DPH POP DPL ; POP A ; RETI 例35 某应用系统需通过P1.0和P1.1分别
23、输出周期为200s和400s的方波。为此,系统选用定时器计数器0(T0),定时方式3,主频为6MHz,经计算得定时常数为9CH和38H。 本例程序如下:初始化程序段 ORG 0000H SJMP PLT0 ORG 0001BH SJMP INT0P ORG 001BH SJMP INT1P PLT0:MOV TMOD,#03H ;设置T0定时方式3 MOV TL0,#9CH ;设置TH0初值 MOV TH0,#38H ;设置TH0初值SETB EASETB ET0SETB ET1SETB TR0 ;启动SETB TR1 ;启动 SJMP $ 中断服务程序段 INT0P:MOV TL0,#9CH
24、 ;重新设置初值 CPL P1.0 ;对P1.0输出信号相反 RETI ;返回INT1P: MOV TH0,#38H ;重新设置初值 CPL P1.1 ;对P1.1输出信号相反RETI ;返回在实际应用中应注意的问题如下。 (1)定时计数器的精度 启动定时计数器后,当计满时产生溢出向主机请求中断处理,由内部硬件自动进行。但从溢出请求中断到主机响应中断并作出处理存在时间延迟,且这种延时随中断请求时的现场环境的不同而不同,一 般需延时3个机器周期以上,这就给实时处理带来误差。大多数应用场合可忽略不计,但对某些要求实时性要求较高的场合,应采用补偿措施。 这种由中断响应引起的时间延时,对定时计数器工作
25、于方式0或1而言有两种含义:一是由于中断响应延时而引起的实时处理的误差;二是如需多次且连续不间断地定时计数,由于中断响应延时,则在中断服务程序中再置计数初值时已延误了若干个计数值而引起误差,特别是用于定时就更明显。例如选用定时方式1定时,由于上述原因就会产生实时误差。这种情况下采用动态补偿来减少系统误差。所谓动态补偿,即在中断服务程序中对THx、TLx重新置计数初值时,应将THx、TLx复位,重新从开始继续计数,读出的值并补偿到原计数初值中去进行重新设置。补偿的程序如下所示。CLR EA ;禁止中断MOV A,TLx ;读TLx中已计数值ADD A,#LOW ;LOW为原低字节计数初值MOV
26、TLx,A ;设置低字节初始值MOV A,#HIGH ;原高字节计数初值送AADDC A,THx ;高字节计数初值补偿MOV THx,A ;置高字节计数初值SETB EA ;开中断 . (2) 动态读取 运行中的计数值在动态读取运行中的定时计数器的计数值时,如果不加注意,就可能出错。这是因为不能在同一时刻同时读取THx和TLx中的计数值。比如,先读TLx后读THx,因为定时计数器处于运行状态,在读TLx时尚未产生向THx进位,而在读THx前已产生进位,这时读得的THx就不对了;同样,先读THx后读TLx也可能出错。 一种可避免读错的方法是:先读THx,后读TLx,将两次读得的THx进行比较;若
27、两次读得的值相等,则可确定读的值是正确的,否则重复上述过程,重复读得的值一般不会再错。此法程序如下:RDTM: MOV A, THx ;读取THx存A中 MOV R0, TLx ;读取TLx存R0中 CJNE A, THx,RDTM ;比较两次THx值,若相等,则读得的值正确,程序往下执行,否则重读 MOV R1, A ;将THx存于R1中3.1.4 AT89S513.1.4 AT89S51单片机的看门狗单片机的看门狗3 32 MCS-512 MCS-51的中断系统的中断系统 3.2.1 3.2.1 中断的响应过程中断的响应过程 当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿
28、一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常是固定的。51单片机也是采用的这种方法,五个中断源中,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应可以分为以下几个步骤:(1) 保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。(2) 寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。以上
29、工作是由计算机自动完成的,与编程者无关。在这5个入口地址处存放有中断处理程序。 (3) 执行中断处理程序。(4) 中断返回,行完中断指令后,就从中断处返回到主程序,继续执行。 CPU响应中断请求后,就立即转入执行中断服务程序。不同的中断源、不同的中断要求可能有不同的中断处理方法,但它们的处理流程一般都如下所述。1、现场保护和现场恢复 中断是在执行其它任务的过程中转去执行临时的任务,为了在执行完中断服务程序后,回头执行原先的程序时,程序原来在何处被打断的,各有关寄存器的内容如何,就必须在转入执行中断服务程序前,将这些内容和状态进行备份即保护现场。就象文章开头举的例子,在看书时,电话玲响需传去接电
30、话时,必须在书本上做个记号,以便在接完电话后回来看书时,知道从哪些内容继续往下看。计算机的中断处理方法也如此,中断开始前需将个有关寄存器的内容压入堆栈进行保存,以便在恢复原来程序时使用。中断服务程序完成后,继续执行原先的程序,就需把保存的现场内容从堆栈中弹出,恢复寄存器和存储单元的原有内容,这就是现场恢复。如果在执行中断服务程序时不是按上述方法进行现场保护和恢复现场,就会使程序运行紊乱,使单片机不能正常工作。2、中断允许与禁止 中断是否能够响应可通过软件进行设置,中断能够被响应时称为中断允许,当设置使中断不能被响应时称为中断禁止。3、中断服务程序 既然有中断产生,就必然有其具体的需执行的任务,
31、中断服务程序就是执行中断处理的具体内容,一般以子程序的形式出现,所有的中断都要转去执行中断服务程序,进行中断服务。4、中断返回 执行完中断服务程序后,必然要返回,中断返回就是使程序运行从中断服务程序转回到原来运行的程序上。在51系列单片机中,中断返回是通过一条专门的指令实现的,自然这条指令是中断服务程序的最后一条指令。3.2.3 MCS-513.2.3 MCS-51的中断源的中断源表35 SCON 寄存器各位的功能SCOND7D6D5D4D3D2D1D0-TIRI位地址 99H98HTCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH
32、8CH8BH8AH89H88H表35中(1) IE1为外部边沿触发中断1请求标志,其功能和操作类似于TF0。(2) IT1为外部中断1类型控制位,通过软件设置或清楚,用于控制外中断的触发信号类型。IT1=1,边沿触发。IT=0是电平触发。(3) IE0为外部边沿触发中断0请求标志,其功能和操作类似于IE1。 (4) IT0为外部中断0类型控制位,通过软件设置或清楚,用于控制外中断的触发信号类型。其功能和操作类似于IE1。SCON是串行口控制寄存器,字节地址为98H,SCON的低二位是串行口的发送和接收中断标志,其格式如下:(5) TI为51系列单片机串行口的发送中断标志,在串行口以方式0发送时
33、,每当发送完8位数据,由硬件置位。如果以方式1、方式2或方式3发送时,在发送停止位的开以方式0发送时,每当发送完8位数据,由硬件置位。如果以方式1、方式2或方式3发送时,在发送停止位的开始时TI被置1,TI=1表示串行发送器正向CPU发出中断请求,向串行口的数据缓冲器SBUF写入一个数据后就立即启动发送器继续发送。但是CPU响应中断请求后,转向执行中断服务程序时,并不清零TI,TI必须由用户的中断服务程序清“0”,即中断服务程序必须有“CLR TI”或“ANL SCON, #0FDH”等指令来清零TI。(6)为RI:串行口接收中断标志.若串行口接收器允许接收,并以方式0工作,每当接收到8位数据
34、时,RI被置1,若以方式1、2、3方式工作,当接收到半个停止位时,TI被置1,当串行口一方表36 IE寄存器各位的功能IED7D6D5D4D3D2D1D0EA-ESET1EX1ET0EX0位地址AFHACHABHAAHA9HA8H式2或3方式工作,且当SM2=1时,仅当接收到第9位数据RB8为1后,同时还要在接收到半个停止位时,RI被置1。RI为1表示串行口接收器正向CPU申请中断。同样RI标志位需由用户用软件清“0”。 IE寄存器的各控制位的功能EA为中断总控制位,EA=1,CPU允许中断。EA=0,CPU禁止所有中断;ES:串行口中断控制位,ES=1允许串行口中断,ES=0,屏蔽串行口中断
35、。ET1为定时/计数器T1中断控制位。ET1=1,允许T1中断,ET1=0,禁止T1中断。EX1为外中断1中断控制位,EX1=1,允许外中断1中断,EX1=0,禁止外中断1中断。ET0:定时/计数器T0中断控制位。ET1=1,允许T0中断,ET1=0,禁止T0中断。EX0为外中断0中断控制位,EX1=1,允许外中断0中断,EX1=0,禁止外中断0中断。图3-13 51系列单片机中断系统表37优先级寄存IP IPD7D6D5D4D3D2D1D0-PSPT1Px1PT0PX0位地址BCHBBHBAHB9HB8H表38 个中断源的服务程序入口地址中断源入口地址外中断00003H定时/计数器0000B
36、H外中断10013H定时/计数器0001BH串行口中断0023H表38 个中断源的服务程序入口地址3.3 3.3 串行通信接口串行通信接口 单片机与外界进行信息交换称之为通信。51系列单片机单片机的通讯方式有两种: 并行通讯:数据的各位同时发送或接收。 串行通讯:数据一位一位顺序发送或接收。它们数据发送或接收如图3-14(a),(b)所示(a)并行通讯 (b)串行通讯图3-14数据发送或接收 1 1、 串行通讯的方式:串行通讯的方式:异步通信:方式如图315(a)所示,数据格式如图316所示,它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:在一帧格式中,先是一个起始位0
37、,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后是停止位1。用这种格式表示字符,则字符可以一个接一个地传送。在异步通讯中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式可以由通讯的双方自由制定,但从通用、方便的角度出发,一般采用ASCII码。波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。 同步通信:方式如图315(b)所示,数据格式如图317所示,在异步通讯中,每个字符
38、要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。 (a) 异步通信方式 (b) 同步通信方式 图315 通信方式发 送 器接 收 器时钟时钟发 送 器接 收 器时钟1111100000起始位8 位 数 据停止位同 步同 步字 符 2字 符 1数据 图3-16 异步通信一禎数据格式 图3-17同步通信数据格式2 2、 数据通信的传输方式数据通信的传输方式 常用于数据通信的传输方式有单工、半双工、全双工和多工方式。 单工方式:数据
39、仅按一个固定方向传送。因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据传输。 半双工方式:数据可实现双向传送,但不能同时进行,实际的应用采用某种协议实现收/发开关转换。 全双工方式:允许双方同时进行数据双向传送,但一般全双工传输方式的线路和设备较复杂。 多工方式:以上三种传输方式都是用同一线路传输一种信号,为了充分地利用线路资源,可通过使用多路复用器或多路集线器,采用频分、时分或码分复用技术,即可实现在同一线路上资源共享功能,我们称之为多工传输方式。 51系列单片机的串行接口是一个全双工通信接口,即能同时进行发送和接收(若可以发送和接收,但不能同时进行,则称半双工;只能
40、发送或接受的称为单工)。串行口寄存器结构如图318所示,它可以作UART(通用异步接收和发送器)用,也可以作同步移位寄存器用。如果在串行口的输入输出引脚上加上电平转换器,就可方便地构成标准的RS-232接口。移位时钟RI(接收中断)TI(发送中断)TXD串行输出系统总线RXD串行输入发送SBUF(99H)输入移位寄存器接收SBUF(99H)图3-18 51系列单片机的串行口寄存器结构3 3、 数据缓冲寄存器数据缓冲寄存器SBUFSBUF 串行缓冲寄存器SBUF是可直接寻址的专用寄存器在物理上。它对应着两个寄存器,一个发送寄存器,一个接收寄存器。CPU和SBUF,发送数据就是修改发送寄存器;读S
41、BUF,就是读接收寄存器。接收器是双缓冲的,以避免在接收下一桢数据之前,CPU未能及时响应接收器的在中断,没有把上一个数据读走,而产生两个数据重叠的问题。对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生写重叠问题。3.3.13.3.1串行口控制寄存器串行口控制寄存器SCONSCON SCON用于控制和监视串行口的工作状态,它的各位定义如表3-9所示:表39中断控制寄存器SCON各位定义(SMB) (LSB) SMD SM1 SM2 REN TB8 RB8 T1 R1SM2(SCON.7)和SM1(SCON.6)为串行口操作模式选择位2个选择位对应于4种模
42、式,, SCON串行口操作模式选择如表310所示:其中fsoc是振荡器频率,UART为通用异步接收和发送器之英文缩写。 表3-10 串行口操作模式选择SM0 SM1模式功能波特率0101 10123同步移位寄存器8位UART9位UART9位UARTfsoc/12可变fsoc/64或fosc/32可变 SM2(SCON.5) 在模式2和3时为多处理机通信使能位。在模式2和3中,若SM2=1,且接收第9位数据是0,则RI (接收中断标志位)不会被激活。在模式1中,若SM2=1没有接收到有效的停止位,,则RI不会被激活。在模式0中,SM2必须为0。 REN(SCON.4)为允许接收位。由软件置位或清
43、除.REN=1时,允许接收。REN=0,禁止接收。TB8(SCON.3)为发送数据位8。该位是模式2和3中要发送的第9位数据。在许多通信协议中,该位是奇偶位。可以按需要由软件置位或清除。在51系列单片机多处理机通信中,这一位用于表示地址帧。 RB8(SCON.2)接收数据位8是模式2和3时已接收的第9位数据。(例如可能是奇偶位,或是奇偶/数据标识位)。在模式1中,若SM2=0,RB8是已接收的停止位。在模式0中,RB8未用。 TI(SCON.1)发送中断标志,在模式0中,在发送完第8位数据时,由硬件置位;在其它模式中,在发送停止之初由硬件置位。TI=1时申请中断,CPU响应中断后,发送下一帧数
44、据。在任何模式下,必须由软件来清除TI。 RI(SCON.0)接收中断标志,在模式0中接收第8位结束时由硬件置位。在其它模式中。在接收置位中间,由硬件置位R1=1,申请中断,要求CPU取走数据。但在模式1中,SM2=1时若未接收到有效的停止位,则不会对RI置位,必须靠软件清除RI。在系统复位时SCON中的所有位都被清除。模式模式0 0 在模式0下,串行口作同步移位寄存器用,其波特率是固定的为fsoc/12。这时数据由RXD(P3.0)端输入同步移位时钟由TXD(P3.1)端给出,发送或接收的是8位数据低位在先。执行任何一条把SBUF作为目的寄存器的指令时,就开始发送。当S6P2出现写SBUF信
45、号时,8位数据由内部总线被选通的三态缓冲器写入SBUF。同时此写信号还选通另一个三态缓冲器,使一个D触发器的S(置位)端为1,触发器置1,这个D触发器构成发送移位寄存器的第8位,因此在写信号作用下第9位变为1。写SBUF信号还同时接至发送控制器的启动(START)端开始发送。图3-19是串行口模式0的功能简图和有关的时序图。写信号有效后相隔一个机器周期,发送控制端的SEND端有效(=1),使与RXD端相连的与非门开锁,允许从RXD端送出数据,,同时使与TXD端相连的与非门开锁,允许从TXD端输出移位时钟。在每个机器周期的S3S4和S5状态内,移位时钟为低电平,在 S6 S1和 S2状态内,为高
46、电平。在SEND有效期间,每个机器周期的S6 P2时刻,由发送控制器的SHIFT端送出移位信号,使发送移位寄存器的内容右移1位。此移位信号同时接至作为移位寄存器第9位的D触发器的CL端,触发器的数据端D始终保持低电平,故发送移位寄存器的内容右移1位,即从左面添一个0。因此,当数据字节的最高位(第8位)移至移位寄存器的输出位置上时在其左面的恰好是开始时置入的第9位1,再往左的所有各位(共7位)全为零。左面7位零经零检测器,通知发送控制器作最后发送数据和移位时钟,并置TI为1并申请中断。这两个动作发生于写SBUFS信号有效后第10个机器周期的S1P1时刻,至此,就完成了发送1个数据的全过程。若允许
47、中断,就由0023H单元开始执行串行口中断服务程序。 在满足REN(SCON.4)=1(允许接收)和RI(SCO.0)=0的条件下,在下一个机器周期S6P2时刻,接收控制器向接收移位寄存器写入11 11 11 10,并在下一节拍(S1P1)使RECEIVE端有效,从而使TXD(P3.1)端的与非门开锁,移位时钟由TXD端输出。此时钟的波形与发送时的一样。每个机器周期的S3S4S5状态为低电平,S6S1和S2状态为高电平。在RECEIVE有效时,每个机器周期的S5P2,对RXD(P3.0)引脚上的数据进行采样,而在同一机器周期的S6P2,接受移位寄存器的内容左移一位,其右端就补上刚由RXD引脚采
48、样的数据。这样原先在接收移位寄存器中的1就逐位从左端输出,而RXD引脚上的数据就逐位从右端移入。当开始时装入到移位寄存器最右端的一个0移到最左端时,其右边已经接收了7位数据,这时将通知接收控制器进行最后一位移位,并把所接收的数据装入SBUF。在启动接收过程(写SCON清除RI位)后的第10个机器周期S1P1时刻,接受控制器的端被清除,SCON中的RI被置位,发出中断申请。至此,完成了一个数据的接收过程。若CPU响应中断,将执行由0023H作为入口的中断服务程序。串行口工作方式0工作原理及时序如图319所示。 工作方式0主要用于I/O扩展。其扩展方法见图3-20和图321。其中图320为扩展输出
49、口的方案,实际上是由串行数据变换为并行输出数据方案。51系列单片机的串口工作模式0的发送状态,串行数据由P3.0端送出,移位时钟由P3.1端送出。74LS164是串行输入位并行输出的移位寄存器,2个74LS164构成串级的16位并行输出的移位寄存器。这样就大大扩展了输出口线。从理论上讲,寄存器。这样就大大扩展了输出口线。从理论上讲,74LS164可以无限的串联上去进一步扩展能力,但这种扩展方法,并行输出的速度是不高的,移位时钟频率为fsoc/12,若fsoc=12MHz,则每位为1us。图321为输入口扩展方案。74LS165是8位并行输入/串行输出的移位寄存器,该方案是一个并行到串行的转换线
50、路,51系列单片机的串行口工作模式0的接收状态。串行数据由P3.0输入,移位时钟由P3.1输出。P1.0口线用于控制74LS165的工作状态。当此口线发出高电平时(P/S=1),平行数据进入74LS165,当口线发出低电平时,74LS165处于串行移位状态。这种方案,可以扩展大量的输入口。1234ABCD4321DCBATitleNumberRevisionSizeA4Date:30-Dec-2001Sheet of File:D:刘 电 霆 教 材 编 写 图 7-7,8.DDBDrawn By:EA/VP31X119X218RESET9RD17WR16INT012INT113T014T11