编程语言应用

注册

 

发新话题 回复该主题

C语言单片机编程08单片机的定时器中断 [复制链接]

1#
北京治疗白癜风费一般是多少钱 http://www.znlvye.com/bybl/zbyf/m/
01:11

定时器中断,顾名思义就是在规定的时间内发送中断请求,要实现定时器中断,单片机需要能够正确地计算时间,单片机是如何进行计时的呢?

51单片机内部有两个16位可编程的定时器/计数器T0和T1,每个定时器/计数器由高8位和低8位寄存器组成,TL0为T0的低8位寄存器,TH0为T0的高8位寄存器,TL1为T1的低8位寄存器,TH1为T1的高8位寄存器。

T0和T1的主要作用就是计数,单片机加电或复位后,T0和T1都初始化为零,单片机一旦设置开启定时功能后,T0和T1便在晶振的作用下自动开始计数,当T0或T1计数溢出后,通过特定电路产生内部中断,向单片机发送定时器中断请求,T0或T1会自动清零。T0和T1计数加1的操作需要一个机器周期,假设单片机的时钟周期(晶振频率)为12MHZ,12个时钟周期为一个机器周期,一个机器周期的时间就是1μs(微秒),因此计满T0或T1需要2^16-1个数,需要μs,约为65.5ms。若希望定时器每间隔50ms发送1次中断请求,就需要给T0或T1一个初始值,初始值为μs与μs的差值,T0或T1在初值的基础上再计个数后,T0或T1溢出并发送中断请求,刚好是50ms,T0和T1清零后再次赋初值给T0和T1,准备下一次中断请求。

定时器的内部结构如下图所示:

TH1和TL1是T1的高位寄存器和低位寄存器,TH0和TL0是T0的高位寄存器和低位寄存器,每个寄存器的长度是8位,在机器周期的作用下,计数从低位寄存器开始,当低位寄存器计满后向高位寄存器进一位,直到把高位寄存器也计满,此时T0或T1溢出,设置TCON控制寄存器的TF0或TF1位为1,并发送定时器中断请求。

订阅解锁TA的全部专属内容
分享 转发
TOP
发新话题 回复该主题