这里说说定时器/计数器中断
一,CPU时序相关知识:
1,震荡周期:一次震荡时间。比如我们常用的12M HZ的晶振,表示1s震荡12M次,即1s钟震荡12 x 1000 000 次,那么震荡一次需要的时常为(1 / 12000000 )s,这样(1/12000000 )s就是12M晶振的一个震荡周期。
2,状态周期:两个震荡周期的时长为一个状态周期。比如12M晶振下为(2 / 12000000 )s
3,机器周期:1个机器周期包含6个状态周期,也就是12个震荡周期。比如12M晶振下为(12 / 12000000 )s
4,指令周期:完成一条指令所占用的时间,它是以机器周期为单位
二,定时计数器:
51单片机有两组定时计数器
定时器/计数器和单片机CPU是相互独立的,工作是自动完成,CPU不会参与
定时器/计数器会根据机器内部时钟/外部脉冲对寄存器数据进行加1 操作。
定时器/计数器可以在CPU之外独立工作,减轻CPU负担。
工作方式:定时计数器工作时候,会随着机器时钟/外部脉冲进行+1操作,有两个计数器(比如计时器0中的TL0,TH0)计数,两个字节一共16位,如果计数器全部为1的时候,再输入一个脉冲,计数器就会清零,同时计数器使对应的中断标志位(比如TF0)置为1,然后向CPU发起中断请求,中断函数响应。定时模式下的中断发生,表示时间到了;计数模式下的中断发生,表示计数值已满。
如果需要进行计时操作;为了精准控制,就需要我们对计数器的初始值(比如TH0,TL0)进行准确设置。
三,TMOD寄存器
TMOD寄存器可以控制T0和T1的启动,停止,也可以设置溢出标志。
TMOD寄存器一共8位它的结构:
GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 <-TMOD
左边高4位控制T1,低四位控制T0
TMOD门控位,如果位0时候控制定时器启动是否受外部中断信号影响,这时候只要软件设置TR0 / TR1为1就可以启动计时器。如果GATE为1,要软件设置TR0/TR1为1,
同时INT0/1引脚也是高电平,才可以启动计时器。所以平时简单设置,都是用0;
C/T:定时模式选择,0表示定时模式,1表示计数模式
M1 M0:工作方式选择。00,13位定时器/计数器;01,16位定时器/计数器;10,8位自动重装定时器/计数器;11,T0分成两个独立的8位定时器/计数器
四,TCON寄存器
也是8位:
TF1 | TR1 | TF0 | TR0 | | | | <-TCON
TF1: T1中断请求标记
TR1:T1启动停止控制位
TF0:T0中断请求标记
TR0:T0启动停止控制位
五,代码流程:
1,设置TMOD,确定控制方式
2,设置TH0,TL0或者TH1,TL1初始值
3,设置IE寄存器,允许中断发生
4,设置TR0/TR1启动/关闭计时器