深入解析51单片机定时器/计数器:从工作原理到实战编程
定时器接口从原理到应用1. 引言2. 基本概念2.1软件定时2.2硬件定时2.3可编程定时3. 主要特性4. 结构及原理5. 方式寄存器和控制寄存器5.1TMOD5.1TCON6. 结构图6.1方式0机构图6.2方式1机构图6.3方式2机构图6.4方式3机构图7. 编程及应用7.1 初始化编程7.1 应用案例8. 总结1. 引言在单片机系统中定时器/计数器Timer/Counter是最基础、最核心的外设之一。计算机系统需要为CPU和外部设备提供定时控制和外部事件进行技术如分时系统的程序切换、向外部设备输出周期性定时控制型号心跳数据、对外部事件个数进行统计等。2. 基本概念定时/计数的本质是计数。实现定时的方法有3种软件定时硬件定时可编程定时2.1软件定时利用CPU执行指令需要若干指令周期的原理运用软件编程然后循环执行一段程序而产生延时再配合简单输出接口可以向外送出定时控制型号。优点不需要增加硬件或者说硬件很简单只需要编制相应的延时程序以备调用即可。缺点执行延时程序会占用CPU时间所以定时时间不谊太长。2.2硬件定时通过硬件电路多谐振荡器或单稳态器件实现定时其成本较低但定时参数的调整不太灵活使用起来不方法。2.3可编程定时结合了软件定时使用灵活和硬件定时独立的特点它以大规模集成电路未基础通过编程即可改变定时时间或工作方式也不占用CPU的执行时间。51系列单片机内部就基础了可编程的定时/计数器。3. 主要特性51系列单片机有两个16位可编程定时/计数器。52有3个多一个T2每个定时/计数器既可以对系统时钟实现定时也可以对外部信号计数实现计数功能这些功能都是编程实现。定时/计数器有多种工作方式T0:4种,T1,T2:3种定时/计数器在定时计数时间到时将溢出溢出位置位。溢出可通过查询或中断方式来处理。4. 结构及原理由加法计数器、方式寄存器TMOD、控制寄存器TCON等组成T0:Timer/Counter0定时/计数器T0TH0:Timer 0 High Byte定时/计数器0的高8位TL0:Timer 0 Low Byte定时/计数器0的低8位T1:Timer/Counter1定时/计数器T1TH1:Timer 1 High Byte定时/计数器1的高8位TL1:Timer 1 Low Byte定时/计数器1的低8位TMOD: Timer/Counter Mode Register定时/计数器工作方式寄存器TCON:Timer/Counter Mode Register定时/计数器控制寄存器控制启停。用于定时时甲方计数器对捏爆机器周期Tcy进行计数。由于机器周期时间是定值因此对Tcy的计数是定时如Tcy1μs,计数100定时100μs。用于计数时加法计数器对单片机芯片引脚T0(P3.4)或T1(P3.5)上的输入脉冲进行计数每来一个输入脉冲甲方计数器加1。当由全1再加1变成全0时产生溢出使溢出位TF0或TF1置位。如果中断允许则向CPU提出定时/计数中断如果中断不允许则只有通过查询方式使用溢出位。初值计算方式初值X最大计数值(满值)M - 计数值N。计数判定方式再每一个机器周期的S5P2时刻对T0(P3.4)或T1(P3.5)上的信号采样一次如果上一个机器周期采样到高电平下一个而激情周期采样到低电平则计算器再下一个机器周期的S3P2时刻加1计数一次。负跳变计数5. 方式寄存器和控制寄存器5.1TMODM1、M0:工作方式选择位。M1M0工作方式说明00013位定时/计数器方式01116位定时/计数器方式1028位自动重置定时/计数器方式113两个8位定时/计数器方式只有T0有C/T: 定时或计数方式选择位。当C/T1时工作余计数方式;当C/T0时工作于定时方式。GATE门控位。GATE0,定时/计数器的启动与外部中断请求型号引脚INT0(P3.2)或INT1(P3.2)无关。GATE1,定时/计数器的启动与外部中断请求型号引脚INT0(P3.2)或INT1(P3.2)有关。为高电平时才开始启动。5.1TCONTF1/TF0:定时/计数器T1/T0的溢出标志位。T1/T0计满时由硬件使其置位如中断允许触发T1/T0中断。进入中断处理后由内部硬件电路自动清除。TR1/TR0:定时/计数器T1/T0的启动位可由软件置位或清零。当TR1时启动TR0时停止。6. 结构图6.1方式0机构图16位的加法计数器只用了13位。TLx 的低5位高3位未用计满值 213 8192 。如果计数值为N置入的初值XX8192-N。重复计数计满溢出时应用户重新置入初值。兼容老式13位定时器的单片而设立的方式06.2方式1机构图与方式0的结构相同仅仅TLx为8位计满值 216 65536 。如果计数值为N置入的初值XX65536-N。重复计数计满溢出时应用户重新置入初值。6.3方式2机构图计满值 28 256。如果计数值为N置入的初值XX256-N。重复计数计满溢出时自动重新置入初值。6.4方式3机构图计满值 28 256。如果计数值为N置入的初值XX256-N。重复计数计满溢出时应用户重新置入初值。7. 编程及应用7.1 初始化编程根据要求确定是定时还是计数。根据要求计算定时/计数器的计数值确定方式控制写入方式控制寄存器。根据所选方式和计数值求得初值写入初值寄存器。根据需要开发定时/计数器中断写中断服务程序。设置定时/计数器控制寄存器TCON的值启动定时/计数器开始工作。待定时/计数时间到溢出标志置位执行中断服务程序。7.1 应用案例统计外部事件的次数【例子】用定时/计数器T0编程实现统计外部事件的次数当外部事件的计数脉冲来10次后通过P1.0链接的指示灯输出1s的提示信息。概念图中断方式处理的程序#includereg51.h#defineucharunsignedchar#defineuintunsignedintsbit P1_0P1^0;voiddelay(uint k){uint i;for(;k0;k--){for(i0;i110;i);}}voidmain(){unsignedchari;TMOD0x06;TH00xf6;TL00xf6;P1_00;EA1;ET01;TR01;while(1){iTL0;ii-0xf6;P2i;}}voidtime0_int(void)interrupt1{P1_01;delay(1000);P1_00;}查询方式处理的程序#includereg51.h#defineucharunsignedchar#defineuintunsignedintsbit P1_0P1^0;voiddelay(uint k){uint i;for(;k0;k--){for(i0;i110;i);}}voidmain(void){uchar i;P1_00;TMOD0x06;TH00xf6;TL00xf6;TR01;for(;;){if(TF0){TF00;P1_01;delay(1000);P1_00;}iTL0;ii-0xf6;P2i;}}运行效果8. 总结单片机定时器/计数器接口是嵌入式系统开发中的核心技能。掌握其工作原理和编程方法能够显著提高系统的时间控制精度和可靠性。

相关新闻