8051單片機定時器工作原理及用法
TMOD : 控制定時器的工作方式。8個bit,高四位 bit 控制 T1,、低四位 bit 控制 T0。因為定時器有4種工作方式;TMOD = 0x00(工作方式0),TMOD = 0x01(工作方式0),TMOD = 0x02(工作方式2),TMOD = 0x03(工作方式3)。以上是控制低4位的,所以是對應著T0。
TR0:T0定時器 使能開關,TR0 = 1,開始工作; =0停止工作。
ET0:T0定時器中斷開關,定時時間一到,就會跑去中斷程序。ET0=1,中斷使能,=0失能。
EA : 中斷總開關,你可以想象成電路的總電閘,EA=1,中斷使能; =0,中斷失能。
TH0,TL0 : T0定時器計數寄存器,組成16位的計數,0x0000--0xFFFF(0--65535),只要TH0TL0=0xFFFF(65535),程序就會跑去中斷程序,在中斷程序中,我們要重新給TH0,TL0重新賦值的。
假如說,我們定時50毫秒,TH0,TL0對應著什麼值呢? 上面我們說了,TH0,TL0,組成的16位計數器計數範圍是 0---65535 。50ms = 50 000us,我們只要讓 TH0 TL0 從(65535 - 50000)開始計數,TH0,TL0就會不停的+1,直到TH0,TL0=65535,就是計數了50000次,時間就是過了50ms。我們只要在中斷程序裡面,重新賦值給TH0,TL0=(65535 - 50000),定時器就會不停得每50ms中斷一次了。
所以,TH0=(65535-50000)/256; TL0 = (65535-50000)%256 ;
好吧,T0程序例子,定時20ms的程序 :
TO 20ms 例子程序
說完了TO,T1該怎麼辦? 我開始的時候說了,TO,T1是一對雙胞胎。大家把上面T0例子程序:
(TMOD = 0x01, ET0 ,TR0,TH0,TL0 ,interrput 1) 改為
(TMOD = 0x10, ET1 ,TR1,TH1,TL1 ,interrput 3) 這樣就變成了T1,定時器的程序。
8051單片機定時器工作原理及用法
TMOD : 控制定時器的工作方式。8個bit,高四位 bit 控制 T1,、低四位 bit 控制 T0。因為定時器有4種工作方式;TMOD = 0x00(工作方式0),TMOD = 0x01(工作方式0),TMOD = 0x02(工作方式2),TMOD = 0x03(工作方式3)。以上是控制低4位的,所以是對應著T0。
TR0:T0定時器 使能開關,TR0 = 1,開始工作; =0停止工作。
ET0:T0定時器中斷開關,定時時間一到,就會跑去中斷程序。ET0=1,中斷使能,=0失能。
EA : 中斷總開關,你可以想象成電路的總電閘,EA=1,中斷使能; =0,中斷失能。
TH0,TL0 : T0定時器計數寄存器,組成16位的計數,0x0000--0xFFFF(0--65535),只要TH0TL0=0xFFFF(65535),程序就會跑去中斷程序,在中斷程序中,我們要重新給TH0,TL0重新賦值的。
假如說,我們定時50毫秒,TH0,TL0對應著什麼值呢? 上面我們說了,TH0,TL0,組成的16位計數器計數範圍是 0---65535 。50ms = 50 000us,我們只要讓 TH0 TL0 從(65535 - 50000)開始計數,TH0,TL0就會不停的+1,直到TH0,TL0=65535,就是計數了50000次,時間就是過了50ms。我們只要在中斷程序裡面,重新賦值給TH0,TL0=(65535 - 50000),定時器就會不停得每50ms中斷一次了。
所以,TH0=(65535-50000)/256; TL0 = (65535-50000)%256 ;
好吧,T0程序例子,定時20ms的程序 :
TO 20ms 例子程序
說完了TO,T1該怎麼辦? 我開始的時候說了,TO,T1是一對雙胞胎。大家把上面T0例子程序:
(TMOD = 0x01, ET0 ,TR0,TH0,TL0 ,interrput 1) 改為
(TMOD = 0x10, ET1 ,TR1,TH1,TL1 ,interrput 3) 這樣就變成了T1,定時器的程序。