资源预览内容
第1页 / 共49页
第2页 / 共49页
第3页 / 共49页
第4页 / 共49页
第5页 / 共49页
第6页 / 共49页
第7页 / 共49页
第8页 / 共49页
第9页 / 共49页
第10页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
单片机应用技术1/49第8章 定时/计数器 8.1 STC12C5410AD8.1 STC12C5410AD单片机的定时单片机的定时/ /计数器计数器 8.2 8.2 STC12C5410ADSTC12C5410AD的的PCA/PWMPCA/PWM模块模块单片机应用技术2/49在计算机控制中可供选择的定时方法 (1)软件定时 执行一个循环程序来实现。 (2)硬件定时定时全部由硬件电路完成,不占用CPU时间,但需要通 过改变电路的元件参数来调节定时时间,在使用控制上不 够方便,同时增加了开发成本。 (3)可编程定时器定时 由单片机内部的定时模块单元完成。 STC12C5410AD单片机内部有两个16位的定时/计数器四路可编程计数器阵列(Programmable Counter Array, PCA )/脉宽调制(Pulse Width Modulation,PWM)。单片机应用技术3/498.1 STC12C5410AD单片机的定时/计数器 1、定时/计数器的结构及工作原理 定时/计数器的核心是一个加1计数器,加1计数器的脉冲有两 个来源,一个是外部脉冲源,另一个是系统的时钟振荡器。计数 器对两个脉冲源之一进行输入计数,每输入一个脉冲,计数值加1 。当计数到计数器为全1时,再输入一个脉冲就使计数值回零,同 时从最高位溢出一个脉冲使特殊功能寄存器TCON(定时器控制寄 存器)的某一位TF0或TF1置1,作为计数器的溢出中断标志。 单片机应用技术4/49单片机中的微处理器、寄存器TCON和TMOD与定时/ 计数器T0、T1之间的关系 单片机应用技术5/492、定时/计数器方式和控制寄存器定时器工作方式控制寄存器TMOD M0M1C/GATEM0M1C/GATE00H定时器0定时器189H复位值D0D1D2D3D4D5D6D7地址M1 M0工作方式功能说说明 0 0013位计计数器 0 1116位计计数器 1 02可自动动装入的8位计计数器 1 13定时时器0:分成两个8位计计数器 定时时器1:停止计计数1)M1和M0:方式选择控制位。 2)C/:功能选择选择 位。用于“计数器”或“定时器”功能的选择。3)GATE:门控位。GATE用于选通控制。单片机应用技术6/49定时器控制寄存器 TCON00HIT0IE0IT1IE1TR0TF0TR1TF188H复位值D0D1D2D3D4D5D6D7地址1)TF1:定时器/计数器1溢出标志位。 2)TR1:定时器T1的运行控制位。 3)TF0:定时器/计数器0溢出标志位。 4)TR0:定时器T0的运行控制位。TCON的03位与外部中断有关。单片机应用技术7/49AUXR:辅助寄存器000000XXB-ELVDIESPIEADCIUART_M0x6T1x12T0x128EH复位值D0D1D2D3D4D5D6D7地址1)T0x12:定时器0速度控制位。0:定时器0的速度是传统8051单片机定时器的速度,即12分频。1:定时器0的速度是传统8051单片机定时器速度的12倍,即不分频。2)T1x12:定时器1速度控制位。0:定时器1的速度是传统8051单片机定时器的速度,即12分频。1:定时器1的速度是传统8051单片机定时器速度的12倍,即不分频。UART_M0x6用于设置UART模式0的速度,详细内容请见“串行通信”一章。单片机应用技术8/493、定时/计数器的工作方式 方式0 方式1 单片机应用技术9/49方式2 方式3单片机应用技术10/49当工作于定时时状态时态时 ,定时时/计计数器是对时钟对时钟 周期进进行计计数,若对时对时 钟进钟进 行12分频频,则对则对 每12个时钟时钟 周期计计数。当晶振频频率为为6MHz,采用 12分频时频时 ,计计数的单单位时间间时间间 隔为为 单单位时间间时间间 隔Tu=定时时间为:TC=XTu。其中,Tu为单位时间间隔,TC为定时时间。4、定时/计数器量程的扩展 STC12C5410AD单片机中提供的定时/计数器可以使用户很方便地实现定 时和对外部事件计数。但是在实际应用中,需要的定时时间或计数值可能超 过定时/计数器的定时或计数能力,特别是当单片机的系统时钟频率较高时 ,定时能力就更为有限。为了满足需要,有时需要对单片机的定时计数能力 进行扩展。定时能力和计数能力扩展的方法相同,在此主要对定时能力的扩 展进行讨论,计数能力的扩展可参考定时能力扩展的方法进行。=s=2sSTC12C5410AD单片机的定时器/计数器0或1是对脉冲进行不断加1 进行计数的,因此,不能直接将实际的计数值作为计数初值送入计数寄 存器THX、TLX中,而必须将实际计数值以28、213、216为模求补,以补 码作为计数初值设置THX和TLX。即应装入计数/定时器的初值为: n=8,13或16单片机应用技术11/49系统时钟频率为6MHz,进行12分频时,定时器的最大定时能力 T(216 0)2s131072s131.072ms16T(213 0)2s16384s16.384ms13T(28 0)2s512s8最大定时能力位数扩展方法: (1)软件扩展方法扩展方法是在定时器中断服务程序中对定时器中断请求进行 计数,当中断请求的次数达到要求的值时才进行相应的处理。例 如,某事件的处理周期为1s,但由于受到最大定时时间的限制, 无法一次完成定时,此时可以将定时器的定时时间设为以10ms 为一个单位,启动定时器后的每一次定时器溢出中断产生10ms 的定时,进入中断服务程序后,对定时器的中断次数进行统计, 每100次定时器溢出中断进行一次事件的处理,然后再以同样的 方式进入下一个周期的事件处理。 单片机应用技术12/49(2)硬件扩展方法硬件扩展方法可以使用外接通用定时器芯片对单片机的定时 能力进行扩展,如使用定时/计数器芯片8253,也可以利用单片机 自身的资源对定时能力进行扩展。 由于单片机的定时器没有对外输出引脚,所以两个16位的定 时/计数器不能直接连在一起,可以通过单片机的端口P0P3实 现连接。下图给出了一种具体的连接方法。 1)T0设置为16位定时器方式,当T0溢出时,执行T0的中断服务 程序。在T0的中断服务程序中将P1.0取反。这样在P1.0将输出一个方波 ,其周期为T0定时时间的2倍。设T0的定时时间为TIME,则由P1.0输 出的方波的周期为2TIME。2)T1设置为16位计数器方式,将P1.0输出的方波接到T1的定时器 外部输入端T1(P3.5),作为定时/计数器1的外部计数脉冲,其每个周 期的下降沿使T1加1。设计数器T1的计数脉冲数为COUNT,则当T1溢 出时,总定时时间T为:T = 2TIMECOUNT。 单片机应用技术13/495、定时/计数器编程举例定时/计数器的应用编程主要有两点:一是能正确初始化,包括写入控制字,进行时间常数的计算并装入;二是中断服务程序的编写,即在中断服务程序中编写实现定时完成的任务代码。一般情况下,定时/计数器初始化部分的步骤大致如下: (1)设置工作方式,将控制字写入TMOD寄存器。(2)设置分频方式,将控制字写入AUXR寄存器。默认的情况是12分频(兼容传统8051单片机),因此,如果使用传统8051单片机模式,可以不进行设置。(3)把定时/计数初值装入TLX、THX寄存器。(4)置位ETX允许定时/计数器中断(如果需要)。(5)置位EA使CPU开放中断。(6)置位TRX以启动定时/计数。单片机应用技术14/49【例8-l】 设计利用定时计数器T0、T1端作为外部中断源输入线进行外部中断源扩充 的程序。解:为了扩充外部中断源,可以利用定时计数器工作于计数状态时,T0(P3.4) 或T1(P3.5)引脚上发生负跳变,计数器增1这一特性,把P3.4、P3.5作为外部中断源 请求输入线,使计数器的计数值为-1(即0FFH),则外部T0、T1输入一个脉冲即计数溢 出,从而置位相应的中断请求标志,以此来申请中断,则相当于扩充了一根/INT线。编程时,将T0置为方式2计数,计数初值0FFH,计数输入端T0(P3.4)发生一次负 跳变,计数器加1并产生溢出标志向CPU申请中断,中断处理程序使累加器A内容减1,送 P1口,然后返回主程序。汇编语言程序清单如下: $include (STC12.INC) ;包含STC12C5410AD单片机寄存器定义文件 ORG 0000H LJMP MAIN ;转主程序 ORG 000BH ;定时器T0中断服务程序入口地址 LJMP T0_ISR ;转中断服务程序 ORG0100H;主程序的存放起始地址MAIN:MOV SP,#60H ;给栈指针赋初值 MOV TMOD,#06H ;定时器T0工作于方式2 MOV TL0,#0FFH ;送时间常数 MOV TH0,#0FFH SETB ET0 ;允许T0中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0计数器 HERE: LJMP HERE ;等待 T0_ISR:DEC A ;T0中断服务程序MOV P1,A ;累加器A内容减1送P1口RETI END 单片机应用技术15/49对应的C语言程序如下: #include “stc12.h” /包含STC12C5410AD单片机寄存器定义文件 unsigned char cnt; void timer0_ISR (void) interrupt 1 /T0中断函数 cnt = cnt- -; /在C语言程序中,使用变量cnt代替汇编语言中的累加器AP1 = cnt; void main(void) cnt=0xff;TMOD=0x06; /定时器0工作于方式2TL0=0xff;TH0=0xff;TR0=1;ET0=1;EA =1;while(1); /等待中断 单片机应用技术16/49【例8-2】 设系统时钟频率为6MHz,利用定时器T0定时,每隔1s将 P1.0的状态取反。 思路:将定时器的定时时间设为50ms,在中断服务程序中对定时器溢 出中断请求进行计数,当计够20次时,将P1.0的状态取反,否则直接 返回主程序。 选择定时器T0的工作方式:软件启动、定时方式、16位定时器, 方式字为01H。由于系统时钟频率为6MHz,12分频时,计数单位为2s 。定时器T0的装入初值为单片机应用技术17/49汇编语言程序代码如下: $include (STC12.INC) ;包含STC12C5410AD单片机寄存器定义文件ORG 0000HLJMP MAIN ;转主程序ORG 000BH ;T0中断服务程序入口地址LJMP T0_ISRORG 0100H MAIN: MOV SP,#60H ;设置堆栈指针MOV TMOD,#01H ;T0初始化MOV TL0,#58HMOV TH0,#9EHMOV A,#20 ;累加器A置20SETB TR0 ;启动T0计数SETB ET0 ;允外T0中断SETB EA ;CPU开中断SJMP $ ;等待 T0_ISR: MOV TL0,#58H MOV TH0,#9EHDEC A ;累加器A内容减1JNZ EXIT CPL P1.0MOV A,#20 ;累加器A重载20 EXIT: RETIEND 单片机应用技术18/49对应的C语言程序如下: #include “st
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号