如何使用定时计数器:
1. 首先明确一般的51单片机有两个定时/计数器,为T0和T1,
TH0/TL0 用于 T0,TH1/TL1 用于 T1。
比如我们的定时器设置成 16 位的模式,那么每经过一个机器周期,TL1加 1 一次,当 TL1 加到 255 后,再加 1,TL1 变成 0,TH1 会加 1 一次,如此一直加到 TH1和 TL1 都是 255(即 TH1 和 TL1 组成的 16 位整型数为 65535)以后,再加 1 一次,就会溢出了,TH1 和 TL1 同时都变为 0,只要一溢出,TF1 马上自动变成 1,告诉我们定时器溢出了
2.下面了解定时器的使用,定时器是通过寄存器来配置的,需要配置的寄存器有TCON和TMOD。
3.首先是通过特殊功能寄存器TCON来启动定时计数器,然后是设计定时计数器的工作模式 ,通过TMOD特殊功能寄存器。
下面看一下寄存器TCON
低四位与外部中断有关的。先不管 B0-B4,我们现在只看B4-B7。B4、B5是控制定时器0,以定时器0为例:TF0位是中断标志位,当TH0和TL0位溢出后,就自动将TF0位置1,这时就发出中断请求,发生中断后,硬件置0,也就是不需要我们软件将它清0,但如果不发生中断,也就是我们只是让它产生一个定时,定时到后不进入中断,那么这一位就不会自动清0,此时,就需要软件将它清0。TR0是定时器运行控制位,当它置1时,开始计数,置0时,禁止计数,就是像一个开关。
所以我们现在来总结一下,对于TCON,我们使用定时器➕中断时,只需配置TR位。是不是很简单。
接下来看一下定时器模式寄存器TMOD
不可位寻,只能用十六进制赋值
GATE默认是0,一般设置为0就可
C/T:默认是0,0是定时器、1是计数器
4、5位是控制定时器T1,0、1是控制定时器T0
以定时器T0为例,M0和M1有四种组合,对应四种工作模式,其中要重点掌握模式一和模式二,模式一为16为定时/计数模式,即TH和TL组成16位定时器,最大数为65535,超出后就将溢出,会使TF位置1。
下面尝试计算为TH和TL赋值
十六位定时器溢出是65535
我们可以给给 TH0 和 TL0一个初始值,让它们经过 18432 个机器周期后刚好达到 65536
初值 y = 65536 - 18432 = 47104
转成 16 进制就是 0xB800,也就是 TH0 = 0xB8,TL0 = 0x00。
定时器讲完了 我们来讲讲中断
8051单片机提供5个中断源,包括两个外部中断源
INT0和INT1 ,两个定时器/计数器中断源T0和T1,以及一个串口中断源。
与中断有关的定时器有三个,分别为TCON、IE和IP。
先来讲讲TCON,记不记得我们之前在配置定时器时曾使用过这个寄存器,其中第四位我们没有用,因为那是和中断有关的寄存器位
IE0和IE1时外部中断允许标志位,IT是用来控制两个外部中断的触发方式 ,以IT1为例,IT1为1时,触发方式为下降沿触发,为0时,是低电平触发,当发生中断时,会将IE1置1,相当于之前讲过的TF位。
第二个寄存器IE
EA为总开关
其余几个相当于各个中断的小开关,当EA位0时,整个中断被禁止,当EA位1时,再看各个小开关
第三个寄存器IP
下面讲讲中断函数的编程格式
下面是中断的基本配置方式和代码