足球比分直播

定时器84297.doc

返回
定时器84297.doc_第1页
第1页 / 共8页
定时器84297.doc_第2页
第2页 / 共8页
定时器84297.doc_第3页
第3页 / 共8页
定时器84297.doc_第4页
第4页 / 共8页
定时器84297.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述:
5.2 用 Keil C51 开发定时器/计数器基本的 MCS-51单片机内部有两个 16位可编程的定时器/计数器 T0和 T1。它们各自具有 4种工作状态,其控制字和状态均在相应的特殊功能寄存器中,可以通过软件对控制寄存器编程设置,使其工作在不同的定时状态或计数状态。现在,许多厂家生产的 8051兼容单片机上,还加入了定时器/计数器 2,使单片机的应用更为灵活,适应性更强。很多 8051单片机的书籍都对定时器/计数器有详细的介绍,我们在此不再详细地讨论。但因为编写或或阅读程序时经常要查阅定时器/计数器的设置情况,因此我们仅对一些编程时经常要用到的较重要的寄存器和设置方式进行简要简介。5.2.1 定时器/计数器简介8051单片机的定时器/计数器基本结构如图 5-2所示,定时器 T0由两个 8位计数器 TH0和 TL0构成,定时器 T1也由两个 8位计数器 TH1和 TL1构成,TMOD寄存器控制定时器的工作方式,TCON 寄存器控制定时器的启动和停止以及定时器的状态。图 5-2 定时器/计数器结构在作定时器使用时,输入的时钟脉冲是由晶体振荡器的输出经 12分频后得到的。实际上,定时器就是单片机机器周期的计数器。因为每个机器周期包含晶体振荡器的 12个振荡周期,而每一个机器周期定时器加 1,故其频率为晶振频率的 1/12。如果晶振频率为 12MHz,则定时器每接收一个输入脉冲的时间为 1μs。选择计数器工作方式时,计数脉冲来自相应的外部输入引脚 T0(P3.4)或 T1(P3.5)。在这种情况下,当检测到输入引脚上的电平由高跳变到低时,计数器就加 1。5.2.2 控制和状态寄存器(1)定时器控制寄存器(TCON)TCON为定时器/计数器的控制寄存器,同时也锁存外部中断请求标志,各位定义如下。? TF1定时器 /计数器 1 中断请求标志位。当定时器计数满溢出回零时,由硬件置位,并可申请中断。当 CPU 响应中断并进入中断服务程序后,TF1 自动清零。? TR1定时器/计数器 1 运行控制位,靠软件置位或清除。置位时,定时器/计数器 1 接通工作,清除时停止工作。? TF0定时器 /计数器 0 中断请求标志位,其功能和操作情况类同于 TF1。? TR0定时器/计数器 0 运行控制位,其功能和操作情况类同于 TR1。? IEl外部中断 1 的中断申请标志,检测到在 INT 引脚上出现的外部中断信号的下降沿时,由硬件置位,申请中断。进入中断服务程序后被硬件自动清除。? IT1外部中断 1 的类型控制位。 IT11,由下跳沿触发;IT1=0,由低电平触发。可以由软件来设置或清除。? IE0外部中断 0 的中断申请标志。其功能和操作情况类同于 IE1。? IT0外部中断 0 的类型控制位。其功能和操作情况类同于 IT1。(2)工作方式寄存器(TMOD)。TMOD 确定定时器的工作方式及功能选择,不能位寻址。其中,高 4位用于控制定时器 1,低 4位用于控制定时器 0。TMOD各位的定义如下。? GATE门控位,当 GATE=1 时,只有ˉIˉNˉTˉ0 或ˉIˉNˉTˉ1 引脚为高电平,且 TR0或 TR1 置 1 时,定时器/计数器才工作。当 GATE=0 时,定时器/计数器仅受 TR0 或 TR1的控制,而不管ˉIˉNˉTˉ0 或 ˉIˉNˉTˉ1 引脚的电平是高还是低。? C/ˉT定时器/计数器功能选择位, C/ˉT=0 时,设置为定时功能;C/ˉT=1 时,设置为计数功能。? M1 M0 工作方式选择位。由 M1M0 共 2 位形成 4 种编码,对应以下 4 种工作方式。n M1M0=00工作方式 0(13 位方式)。n M1M0=01工作方式 1(16 位方式)。n M1M0=10工作方式 2(8 位自动装入时间常数方式)。n MlM0=11工作方式 3(2 个 8 位方式 仅对 T0)。5.2.3 定时器/计数器设置实例以定时器/计数器 T0为例,在方式 0下,TL0 的低 5位和 TH0的 8位构成 13位计数器,因此计数工作方式时,计数值的范围是1~8192(2 13)。当设定为定时工作方式时,定时时间的计算公式为(2 13-计数初值) 晶振周期12 或 (2 13-计数初值)机器周期这样,我们可以算出,若单片机系统的外接晶振频率为 6MHz,则该系统的最小定时时间为[213-(2 13-1)][1/(610 6)]12=210 -6 =2(μs )最大定时时间为(2 13-0)[1/(610 6)]12=1638410 -6 =16384(μs )16.384(ms)或最小定时单位10 13=16384(μs)16.384(ms)【例】某单片机系统的外接晶振频率为 6MHz,使用定时器 1,以方式 0定时,从 P1.0输出 2ms方波的计算和设置方法如下① 计算计数初值。欲产生 2ms的等宽正方波脉冲,只需在 P1.0端以 1ms为周期交替输出高低电平即可实现,为此定时时间应为 1ms。使用 6MHz晶振,则机器周期为机器周期12/晶振频率12/ (610 6)2(μs)方式 0为 13位计数结构。设待求的计数初值为 X,则(2 13-X)210 -6=110 -3求解得X=7692化为二进制数表示为 1111000001100。用十六进制表示,高 8位为 F0H,放入 TH1;低 5位为 0CH,放入 TL1。② TMOD 寄存器初始化。为把定时器/计数器 1设定为方式 0,设置 M1M0=00;为实现定时功能,应使 C/ˉT =0;为实现定时器/计数器 1的运行控制,设置 GATE=0。定时器/计数器 0不用,有关位设定为 0。因此 TMOD寄存器应初始化为 00H。③ 由定时器控制寄存器 TCON中的 TR1位控制定时的启动和停止,TR1=1 启动,TR1=0 停止。若使其工作在方式 1,定时器/计数器为 16 位定时器/计数器,即加法计数器由 TH0 全部 8位和 TL0全部 8位构成 16位,其余与方式 0完全相同,因此计算 TH0和 TL0初值的方法也和工作方式 0类似,只是需注意原来 13位的地方现在要换成 16位。5.2.4 定时器/计数器 28051单片机中,有一部分型号有三个定时器/计数器,如 Intel的 8032、Atmel的 89C52、89C55、Philips 的 89C51RC、89C58,等等。这些单片机的第三个定时器/计数器叫 T2,其控制寄存器是 T2CON,它的各位定义如下? TF2定时器 2 溢出标志。定时器溢出时置位,并申请中断,只能靠软件清除。当 RCLK 或 TCLK 1 时 TF2 将不会置位。? EXF2定时器 2 外部标志。当 N2 为 1,且 T2EX 引脚上出现负跳变产生捕获或重装时 EXF2 置位,申请中断。若已允许定时器 2 中断,EXF21 将使 CPU 从中断向量处执行定时器 2 中断子程序。 EXF2 位必须用软件清零。当定时器/计数器 2 工作在向上递增或向下递减计数器模式(方式控制寄存器 T2MOD 的 DCEN 位1)时,EXF2 不能激活中断。? RCLK接收时钟标志。靠软件置位或清除。RCLK1 时,用定时器 2 溢出脉冲作为串行口(工作于方式 1 或 3 时)的接收时钟。 RCLK0 时,用定时器 1 的溢出脉冲作为接收时钟。? TCLK发送时钟标志。靠软件置位或清除。TCLK1 时,用定时器 2 溢出脉冲作为串行口(工作于方式 1 或 3 时)的发送时钟。 TCLK0 时,用定时器 1 的溢出脉冲作为发送时钟。? N2定时器 2 外部允许标志。靠软件置位或清除。当 N21 时,如果定时器 2未用作串行口的波特率发生器,在 T2EX 端出现负跳变脉冲时,激活定时器 2 捕获或重装,并置 EXF2 标志为 1,请求中断。N20 时,T2EX 端的外部信号无效。? TR2定时器 2 启动/停止控制位。靠软件置位或清除。TR21 时,启动定时器 2,否则停止。? C/ˉTˉ2定时器 2 定时方式或计数方式控制位。C/ˉTˉ20,选择定时方式;C/ˉTˉ21 时,选择对外部计数方式(下降沿触发)。? CP/ˉRˉLˉ2捕获/重装载选择。CP/ˉRˉLˉ21 时,如果 N21,且 T2EX 端出现负跳变脉冲时发生捕获操作,即把 TH2 和 TL2 的内容传递给 RCAP2H 和 RCAP2L。CP/ˉRˉLˉ20 时,若定时器 2 溢出或 N21,T2EX 端出现负跳变脉冲,会出现重装载操作,即把 RCAP2H 和 RCAP2L 的内容传递给 TH2 和 TL2。当 RCLK1 或 TCLK1 时,该位无效,在定时器 2 溢出时强制其自动重装载。通过软件设置 T2CON,可使定时/计数器以三种基本工作方式之一工作。第一种为捕捉方式。设置为捕捉方式时,和定时器 0 或定时器 1 一样以 16 位方式工作。这种方式通过复位 N2来选择。当置位 N2时,如果 T2EX有负跳变电平,将把当前的数锁存在(RCAP2H 和 RCAP2L)中。这个事件可用来产生中断。第二种工作方式为自动重装方式,其中包含了两个子功能,由 N2来选择,当 N2复位时,16 位定时器溢出将触发一个中断并将 RCAP2H 和 RCAP2L 中的数装入定时器中。当 N2 置位时,除上述功能外,T2EX 引脚的负跳变将产生一次重装操作。最后一种方式用来产生串行口通信所需的数据传输率,这通过同时或分别置位RCLK 和 TCLK来实现。在这种方式中,每个机器周期都将使定时器加 1,而不像定时器 0 和 1 那样,需要 12个机器周期。这使得串行通信的数据传输率更高。定时器 2还有一个不可寻址的方式控制寄存器 T2MOD,其内容如下? 保留位。? T2OE定时器 2 输出允许位。? DCNE置位时,允许定时器 2 作为向上/ 向下计数器。5.2.5 编程实例【例 1】这是一个简单的定时器程序,由一个循环组成,在点亮接在 P1.0 口的LED之后,延时一段时间,再灭掉 LED,又延时一段时间,之后循环到前面。按全速运行,可以看到 P1.0口上接的 LED 灯不断地闪烁。include //包括一个 52 标准内核的头文件sbit P10 P10; //要控制的 LED 灯sbit K1 P32; //按键 K1//用定时器中断闪烁 LEDvoid mainvoid //主程序{TMOD0 x01; //定时器 0,16 位工作方式TR01; //启动定时器ET01; //打开定时器 0 中断EA1; //打开总中断 while1 //程序循环{; //主程序在这里就不断自循环,实际应用中,这里是做主要工作}}//定时器 0 中断timer0 interrupt 1 // 定时器 0 中断是 1 号{TH00 x00; //写入定时器 0 初始值 0 x0005TL00 x06;P10P10; //反转 LED 灯的亮和灭}程序中,使用了定时器 0,工作在方式 1,即 16位工作方式。For循环后面直接一个分号,表示这个循环里面什么事情也不做,就等循环完成指定的次数就退出来。这也是指令循环延时的最常见的 C 写法。【例 2】这是一个跑马灯程序,使用了定时器 2。include //包括一个 52 标准内核的头文件sbit P10 P10; //头文件中没有定义的 IO 就要自己来定义了sbit P11 P11;sbit P12 P12; sbit P13 P13; bit ldelay0; //长定时溢出标记,预置是 0//定时器中断方式的跑马灯void mainvoid //主程序{unsigned char code ledp[4]{0 xfe,0 xfd,0 xfb,0 xf7};//预定的写入 P1 的值unsigned char ledi; //用来指示显示顺序RCAP2H 0 x10; //赋 T2 的预置值 0 x1000,溢出 30 次就是 1 秒钟RCAP2L 0 x00; TR21; //启动定时器ET21; //打开定时器 2 中断EA1; //打开总中断while1 //主程序循环{ ifldelay //发现有时间溢出标记,进入处理{ldelay0; //清除标记P1ledp[ledi]; //读出一个值送到 P1 口ledi; //指向下一个ifledi4ledi0; //到了最后一个灯就换到第一个}}}//定时器 2 中断timer2 interrupt 5 {static unsigned char t;TF20;t; ift30 //T2 的预置值 0 x1000,溢出 30 次就是 1 秒钟,晶振 22118400HZ{t0;ldelay1; //每次长时间的溢出,就置一个标记,以便主程序处理}}
展开阅读全文
收藏
下载资源

加入会员免费下载





足球比分直播