1. 程式人生 > >N76E003的定時器/計數器 0和1

N76E003的定時器/計數器 0和1

時鐘周期 14. 波特率 翻轉 離開 kcon In IV 進行

定時器/計數器 0和1
N76E003系列定時器/計數器 0和1是2個16位定時器/計數器。每個都是由兩個8位的寄存器組成的16位計數寄存器。

對於定時器/計數器0,高8位寄存器是TH0、 低8位寄存器是TL0。

同樣定時器/計數器1也有兩個8位寄存器, TH1 和TL1。

技術分享圖片

技術分享圖片

TCON 和 TMOD 可以配置定時器/計數器0和1的工作模式。

技術分享圖片

技術分享圖片

通過TMOD中的 技術分享圖片位來選擇定時器或計數器功能。

技術分享圖片

每個定時器/計數器都有選擇位,TMOD的第2位選擇定時器/計數器0功能,TMOD的第6位選擇定時器/計數器1功能。

技術分享圖片

將它們設置為定時器後,定時器將對系統時鐘周期計數。

定時器0通過設置T0M(CKCON.3)位,定時器1通過設置T1M(CKCON.4)位,來選擇定時器時鐘是系統時鐘(FSYS)的12分頻或直接是系統時鐘。

技術分享圖片

在計數器模式下,每當檢測到外部輸入腳T0上的下降沿,計數寄存器的內容就會加一。如果在一個時鐘周期采樣到高電平,在下一個時鐘周期采樣到低電平,那麽T0或T1引腳就會確認為一個由高到低的跳變。

當有定時器溢出發生,定時器0和1能配置引腳T0/T1自動翻轉輸出。

技術分享圖片

這個功能通過設P2S寄存器的T0OE和T1OE來設置,分別對應於定時器0和定時器1。當打開這個功能,輸出端口在第一個定時溢出之前輸出邏輯1。為確保此模式功能, 技術分享圖片位應該被清除並且選擇系統時鐘作為定時器的時鐘源。

註意:TH0(TH1)和TL0(TL1)是獨立分開訪問。需要特別註意,在模式0或模式1下時,當讀/寫TH0(TH1)和TL0(TL1)之前,必須清除TR0(TR1)來停止計時。否則將產生不可預料的結果。

模式0(13位定時器)
在模式 0, 定時器/計數器是13位的計數器。13位的計數器由TH0 (TH1) 和TL0 (TL1)的低五位組成。TL0 (TL1)的高三位被忽略。當TR0 (TR1)置位且GATE是0或 技術分享圖片是1時,定時器/計數器使能。GATE設置為1可以通過定時器來計算外部輸入引腳技術分享圖片上輸入脈沖的寬度。當13位的定時器計數值從1FFFH變為0000H後,定時器溢出標誌TF0 (TF1) 置位,如果中斷打開,此時會產生一個定時器中斷。

技術分享圖片

#define TH0_INIT        0xFC //5.0ms@XTAL=12MHz, Period = (10.85/2) ms@XTAL=22.1184MHz
#define TL0_INIT        0x0F
#define
TH1_INIT 0xE0 //2.5ms@XTAL=12MHz, Period = (5.425/2) ms@XTAL=22.1184MHz #define TL1_INIT 0x00
TMOD = 0XFF;
    Set_All_GPIO_Quasi_Mode;
    TIMER0_MODE0_ENABLE;                        //Timer 0 and Timer 1 mode configuration
    TIMER1_MODE0_ENABLE;
    
    clr_T0M;
    clr_T1M;
    
    TH0 = TH0_INIT;
    TL0 = TL0_INIT;
    TH1 = TH1_INIT;
    TL1 = TL1_INIT;
    
//    set_ET0;                                    //enable Timer0 interrupt
    set_ET1;                                    //enable Timer1 interrupt
    set_EA;                                     //enable interrupts
    
    set_TR0;                                    //Timer0 run
//    set_TR1;                                    //Timer1 run
TMOD = 0XFF;

技術分享圖片

技術分享圖片

 

Set_All_GPIO_Quasi_Mode; 設置引腳模式

#define P14_OpenDrain_Mode P1M1|=SET_BIT4;P1M2|=SET_BIT4
    TIMER0_MODE0_ENABLE;                        //Timer 0 and Timer 1 mode configuration

#define TIMER0_MODE0_ENABLE TMOD&=0xF0

技術分享圖片

//-------------------- Timer1 function define --------------------
#define        TIMER0_MODE0_ENABLE        TMOD&=0xF0
#define        TIMER0_MODE1_ENABLE        TMOD&=0xF0;TMOD|=0x01
#define        TIMER0_MODE2_ENABLE        TMOD&=0xF0;TMOD|=0x02
#define        TIMER0_MODE3_ENABLE        TMOD&=0xF0;TMOD|=0xF3

    clr_T0M;
    clr_T1M;
#define clr_PWMCKS  CKCON   &= ~SET_BIT6
#define clr_T1M     CKCON   &= ~SET_BIT4
#define clr_T0M     CKCON   &= ~SET_BIT3
#define clr_CLOEN   CKCON   &= ~SET_BIT1

技術分享圖片

    TH0 = TH0_INIT;
    TL0 = TL0_INIT;
    TH1 = TH1_INIT;
    TL1 = TL1_INIT;
#define TH0_INIT        0xFC //5.0ms@XTAL=12MHz, Period = (10.85/2) ms@XTAL=22.1184MHz
#define TL0_INIT        0x0F
#define TH1_INIT        0xE0 //2.5ms@XTAL=12MHz, Period = (5.425/2) ms@XTAL=22.1184MHz
#define TL1_INIT        0x00
 
    set_ET1;                                    //enable Timer1 interrupt

#define set_ET1 ET1 = 1

    set_EA;                                     //enable interrupts

技術分享圖片

    
    set_TR0;                                    //Timer0 run
 技術分享圖片

中斷服務函數:

void Timer0_ISR (void) interrupt 1          //interrupt address is 0x000B
{
    TH0 = TH0_INIT;
    TL0 = TL0_INIT;    
    P12 = ~P12;                                                            // GPIO toggle when interrupt
}

模式1(16位定時器)

模式1與模式0 非常相似,只是模式1下定時器/計數器為16位的,就是說是用THx和TLx的全部16位用來計數。當
計數值由FFFFH向0000H翻轉後,定時器相應的溢出標誌TF0(TF1)置1,如果中斷使能則將產生中斷。

技術分享圖片

模式2(8位自動重裝載定時器)
模式2下定時器/計數器為自動重裝模式。此模式下TL0(TL1)是一個8位的計數器,TH0(TH1)保存重裝計數
值。當TL0(TL1)溢出後,TCON中的TF0(TF1)標誌置位且TH0(TH1)中內容重裝至TL0(TL1),然後繼續計數過
程。重裝過程中TH0(TH1)內的值保持不變.該特征最好地適用於UART波特率發生器,不需要連續軟件介入。

技術分享圖片

技術分享圖片

模式3(兩組獨立8位定時器)
定時器0和定時器1的模式3有著不同的工作方式。對定時器/計數器1來說模式3會將其停用;對定時器/計數器0來
說,模式3下TL0和TH0是2個獨立的8位計數寄存器。模式3下TL0使用定時器0的控制位:如 技術分享圖片GATE, TR0,

(TMOD.2)來決定。TH0 只能對時鐘周期計和 TF0。TL0也可以用來對T0 腳上的1到0 跳變計數,由 技術分享圖片

數,並使用定時器/計數器1的控制位(TR1和TF1)。當需要額外的8位定時器時可以使用模式3 。當定時器0配
置為模式3時,定時器1可以通過配置其進入或離開模式3的方式來打開或關閉自己。定時器1依然可以工作在模
式0、1、2下,但它的靈活性受到限制。雖然基本功能得以維持,但已不能對TF1和TR1進行控制。此時定時器1
依然可以使用GATE技術分享圖片腳、T1M。它同樣可以用作串行口的波特率發生器或其他不需要中斷的應用。

技術分享圖片

N76E003的定時器/計數器 0和1