单片机定时器 计数器的工作原理,及如何实现定时 计数功能

单片机定时器 计数器的工作原理 , 及如何实现定时 计数功能原理: 16位的定时器/计数器实质上就是一个加1计数器 , 其控制电路受软件控制、切换 。当定时器/计数器为定时工作方式时 , 计数器的加1信号由振荡器的12分频信号产生 , 即每过一个机器周期 , 计数器加1 , 直至计满溢出为止 。
显然 , 定时器的定时时间与系统的振荡频率有关 。因一个机器周期等于12个振荡周期 , 所以计数频率fcount=1/12osc 。
两个字节最大数据为65536(十进制) , 或者0FFFFH(十六进制)
高字节为TH0=(65536-X)/256 , 就是除以256后的整数部分;
低字节为TL0=(65536-X)%256 , 减去高字节后余下的部分;
定时/计数器
定时/计数器T0和T1分别是由两个8位的专用寄存器组成 , 即定时/计数器T0由TH0和TL0组成 , T1由TH1和TL1组成 。此外 , 其内部还有2个8位的特殊功能寄存器TMOD和TCON , TMOD负责控制和确定T0和T1的功能和工作模式 , TCON用来控制T0和T1启动或停止计数 , 同时包含定时/计数器的状态 。
以上内容参考:百度百科-定时器中断
单片机定时器的使用方法第一步:设置特殊功能寄存器 TMOD , 配置好工作模式 。
第二步:设置计数寄存器 TH0 和 TL0 的初值 。
第三步:设置 TCON , 通过 TR0 置 1 来让定时器开始计数 。
第四步:判断 TCON 寄存器的 TF0 位 , 监测定时器溢出情况 。
写程序之前 , 我们要先来学会计算如何用定时器定时时间 。我们的晶振是 11.0592M , 时钟周期就是 1/11059200 , 机器周期是 12/11059200 , 假如要定时 20ms , 就是 0.02 秒 , 要经过x 个机器周期得到 0.02 秒 , 我们来算一下 x*12/11059200=0.02 , 得到 x= 18432 。16 位定时器的溢出值是 65536(因 65535 再加 1 才是溢出) , 于是我们就可以这样操作 , 先给 TH0 和 TL0一个初始值 , 让它们经过 18432 个机器周期后刚好达到 65536 , 也就是溢出 , 溢出后可以通过检测 TF0 的值得知 , 就刚好是 0.02 秒 。那么初值 y = 65536 - 18432 = 47104 , 转成 16 进制就是 0