51單片機(jī)定時(shí)器工作原理及用法
TMOD : 控制定時(shí)器的工作方式。8個(gè)bit,高四位 bit 控制 T1,、低四位 bit 控制 T0。因?yàn)槎〞r(shí)器有4種工作方式;TMOD = 0x00(工作方式0),TMOD = 0x01(工作方式0),TMOD = 0x02(工作方式2),TMOD = 0x03(工作方式3)。以上是控制低4位的,所以是對(duì)應(yīng)著T0。
TR0:T0定時(shí)器 使能開關(guān),TR0 = 1,開始工作; =0停止工作。
ET0:T0定時(shí)器中斷開關(guān),定時(shí)時(shí)間一到,就會(huì)跑去中斷程序。ET0=1,中斷使能,=0失能。
EA : 中斷總開關(guān),你可以想象成電路的總電閘,EA=1,中斷使能; =0,中斷失能。
TH0,TL0 : T0定時(shí)器計(jì)數(shù)寄存器,組成16位的計(jì)數(shù),0x0000--0xFFFF(0--65535),只要TH0TL0=0xFFFF(65535),程序就會(huì)跑去中斷程序,在中斷程序中,我們要重新給TH0,TL0重新賦值的。
我們都知道通信從大的方面有兩種:串行和并行。串行的最大優(yōu)點(diǎn)是占用總線少,但是傳輸速率低;并行恰恰相反,占用總線多,傳輸速率高。市面上有很多這樣的芯片,有串入并出的(通俗講就是 一個(gè)一個(gè)進(jìn),最后一塊出來),有并入串出的(相對(duì)前者而言)。具體用哪種類型要根據(jù)我們得實(shí)際情況。比如利用單片機(jī)顯示數(shù)碼管單純的顯示一個(gè)數(shù)碼管如果僅僅是為了顯示 那么動(dòng)用單片機(jī)一個(gè)端口(如P0或P1/P2/P3)那沒有什么,當(dāng)然這里我說的數(shù)碼管是8段的(如果利用BCD類型 16進(jìn)制數(shù)碼管那么只需四個(gè)即可)就拿51類型的單片機(jī)來說,總共32個(gè)I/O口,一般如果不是做太大的工程是完全夠用的,但有些時(shí)候你會(huì)恨單片機(jī)怎么不多長(zhǎng)幾條“腿”,怎么省還是不夠用。這個(gè)時(shí)候就需要用到并轉(zhuǎn)串或者串轉(zhuǎn)并芯片來進(jìn)行IO口的擴(kuò)展,74HC165就是一種并行轉(zhuǎn)串行的芯片。
假如說,我們定時(shí)50毫秒,TH0,TL0對(duì)應(yīng)著什么值呢? 上面我們說了,TH0,TL0,組成的16位計(jì)數(shù)器計(jì)數(shù)范圍是 0---65535 。50ms = 50 000us,我們只要讓 TH0 TL0 從(65535 - 50000)開始計(jì)數(shù),TH0,TL0就會(huì)不停的+1,直到TH0,TL0=65535,就是計(jì)數(shù)了50000次,時(shí)間就是過了50ms。我們只要在中斷程序里面,重新賦值給TH0,TL0=(65535 - 50000),定時(shí)器就會(huì)不停得每50ms中斷一次了。
所以,TH0=(65535-50000)/256; TL0 = (65535-50000)%256 ;
好吧,T0程序例子,定時(shí)20ms的程序 :
TO 20ms 例子程序
說完了TO,T1該怎么辦? 我開始的時(shí)候說了,TO,T1是一對(duì)雙胞胎。大家把上面T0例子程序:
(TMOD = 0x01, ET0 ,TR0,TH0,TL0 ,interrput 1) 改為
(TMOD = 0x10, ET1 ,TR1,TH1,TL1 ,interrput 3) 這樣就變成了T1,定時(shí)器的程序。