Timer0是一個8位的定時計數(shù)器,具有一個可編程的8位預(yù)分頻器(prescaler)。硬件結(jié)構(gòu)如下圖所示:
三個與之相關(guān)的寄存器: 如果需要用到計數(shù)模式,T0CKI應(yīng)設(shè)為輸入方式,即TRISA中的相應(yīng)位置1 TMR0即Timer0的初值,比如TMR0為250,那么經(jīng)過251,252......255(FF),下一個值為0,此時稱為Timer0溢出,T0IF(Timer0溢出標志位)會被置為1,并且可以產(chǎn)生中斷,當然需要GIE(總中斷允許),T0IE(Timer0中斷允許),T0IF需要用軟件置0才能進行下次中斷。PIC16F877只有一個中斷入口,當進入某個中斷時,GIE會自動置0,等此中斷跳出GIE才自動回到1,這樣的作用是防止多個中斷沖突。T0CS為1則是計數(shù)方式,時鐘來源于T0CKI引腳,0則為定時方式,時鐘源來源于內(nèi)部時鐘(機器周期),4Mhz晶振為1us,T0SE則是計數(shù)方式的觸發(fā)方式,1為下降沿觸發(fā),0為上升沿觸發(fā)。PSA是預(yù)分頻器作用的對象,1為看門狗(WDT),0為Timer0,PS2,PS1,PS0設(shè)置分頻比
分頻的好處即可以延長定時時間,如1:128,即最大可計256X128;最后要強調(diào)的是PIC16F877的Timer0沒有啟?刂莆,上電就開始工作。
|