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