timer0 pic

8
Tài li u môn h c Vi x lý 2 Biên so n: Gi n Qu c Anh H S ph m K thu t Nam nh Jan. 4 1 Timer0 Các c tr ng c a timer0 - là b timer/counter 8 bit - có th c/ghi c - l a ch n ngu n xung n i hay ngoài - t c ng t khi chuy n t 0xFF v 0x0 - l a ch n s n xung i v i xung ngoài (bit T0SE: timer0 source edge select bit) - chia t n s kh trình ( 3 bit PS2-PS0 t h p thành 8 tr ng thái t ng ng v i 8 t l chia) Ho t ng: Timer0 là b m ho t ng nh m t b nh th i gian (timer) khi m xung dao ng bên trong ho c nh mt b m (counter) khi m xung bên ngoài. - Ch c n ng timer: Bit T0CS (Timer0 Clock Source select bit) c xóa v 0. Giá tr c a Timer0 t ng m t n v t ng ng v i m i chu k l nh (trong tr ng h p không có prescaler). M t chu k l nh b ng 1/4 t n s oscillator. Khi ghi m t giá tr vào thanh ghi TMR0, trong 2 chu k l nh ti p theo, giá tr c a timer0 không t ng. - Ch c n ng counter: Bit T0CS c t b ng 1. Giá tr c a timer0 t ng m t n v khi có s chuy n i t m c cao xu ng m c th p ho c m c th p lên m c cao i chân RA4/T0CKI. m t i s n lên hay s n xu ng do bit T0SE (Timer0 Source Edge select bit) xác l p. N u T0SE=0, m t i s n lên, n u T0SE=1, m t i s n xu ng. chia t n (prescaler) c chia s gi a timer0 và watchdog. Prescaler c gán cho timer0 hay watchdog b i ph n m m. Bit PSA (Prescaler Assignment bit)=1,

Upload: si-anh-nguyen

Post on 25-Nov-2015

26 views

Category:

Documents


1 download

DESCRIPTION

no

TRANSCRIPT

  • Ti liu mn hc Vi x l 2

    Bin son: Gin Quc Anh H S phm K thut Nam nh

    Jan. 4

    1

    Timer0

    Cc c trng ca timer0

    - l b timer/counter 8 bit

    - c thc/ghi c

    - la chn ngun xung ni hay ngoi

    - t c ngt khi chuyn t 0xFF v 0x0

    - la chn sn xung i vi xung ngoi (bit T0SE: timer0 source edge select bit)

    - chia tn s kh trnh ( 3 bit PS2-PS0 t hp thnh 8 trng thi tng ng vi 8 t l chia)

    Hot ng:

    Timer0 l bm hot ng nh mt bnh thi gian (timer) khi m xung dao ng bn trong hoc nh mt bm (counter) khi m xung bn ngoi.

    - Chc nng timer: Bit T0CS (Timer0 Clock Source select bit) c xa v 0. Gi tr ca Timer0 tng mt n v tng ng vi mi chu k lnh (trong trng hp khng c prescaler). Mt chu k lnh bng 1/4 tn s oscillator. Khi ghi mt gi tr vo thanh ghi TMR0, trong 2 chu k lnh tip theo, gi tr ca timer0 khng tng.

    - Chc nng counter: Bit T0CS c t bng 1. Gi tr ca timer0 tng mt n v khi c s chuyn i t mc cao xung mc thp hoc mc thp ln mc cao Wi chn RA4/T0CKI. m ti sn ln hay sn xung do bit T0SE (Timer0 Source Edge select bit) xc lp. Nu T0SE=0, m ti sn ln, nu T0SE=1, m ti sn xung.

    % chia tn (prescaler) c chia s gia timer0 v watchdog. Prescaler c gn cho timer0 hay watchdog bi phn mm. Bit PSA (Prescaler Assignment bit)=1,

  • Ti liu mn hc Vi x l 2

    Bin son: Gin Quc Anh H S phm K thut Nam nh

    Jan. 4

    2

    prescaler c gn cho watchdog, bit PSA=0 prescaler c gn cho timer0. Gi tr chia tn c la chn bng 3 bit PS2-PS0.

    Ngt Timer0

    Ngt Timer0 c to ra khi c chuyn i ni dung thanh ghi TMR0 t 0xFF Y 0. Khi timer0 m trn, bit T0IF (INTCON ) c t bng 1. Ngt ny c th che bng cch xa bit cho php ngt timer0 T0IE (INTCON). Bit T0IF phi c xa bng phn mm trong chng trnh phc v ngt tng ng cho php ngt tr Oi.

    Ngt timer0 khng th kch hot hot ng ca vi x l trong ch sleep do timer0 ngng hot ng trong ch sleep.

    Prescaler (b chia tn s)

    Ch c mt b chia tn trc prescaler dng chung gia timer0 v Watchdog timer. Khi prescaler c gn cho timer, watchdog khng th s dng prescaler ny v ngc li. Prescaler khng c, ghi c.

    PSA v PS2:PS0 l cc bit (trong thanh ghi OPTION_REG) xc nh s dng prescaler cho timer hay watchdog v t s chia tn ca prescaler.

    Khi gn cho timer0, tt c cc lnh vit ti thanh ghi TMR0 s xa sm ca prescaler. Khi gn prescaler cho watchdog, lnh xa watchdog cng xa ni dung ca prescaler.

    Cc thanh ghi:

    1. Thanh ghi OPTION_REG

    - Bit T0CS (Timer0 Clock Surcrce Select bit): la chn ngun dao ng. Khi T0CS=1, dao ng ly t chn T0CKI (chn RA4(chn s 6)). T0CS= 0 dao ng ni c a ti b timer0.

    - Bit T0SE (Timer0 Sourec Edge select bit) bit la chn sn xung. T0SE=1, timer0 tng khi c chuyn i t mc cao xung mc thp ti chn T0CKI. T0SE=0, timer0 tng khi c chuyn i t mc thp ln mc cao ti chn T0CKI.

    - Bit PSA (Prescaler Assignment bit) l bit gn b chia dao ng cho timer0 hay watchdog. C timer0 v watchdog s dng chung b chia dao ng.

    - Ba bit PS2:PS0 la chn t s chia tn ca b chia dao ng trc khi a ti timer v watchdog. Khi bit PSA=1 (gn prescaler cho watchdog), t s chia dao ng 1:1 s dng cho timer0.

  • Ti liu mn hc Vi x l 2

    Bin son: Gin Quc Anh H S phm K thut Nam nh

    Jan. 4

    3

    2. Thanh ghi INTCON:

    - Bit TMR0IE (Timer0 Overflow Interrupt Enable bit) cho php ngt timer0 m trn. TMR0IE=1: cho php ngt timer0 m trn. TMR0IE=0: cm ngt timer0.

    - Bit TMR0IF (Timer0 Overflow Interrupt Flag bit) bit c timer0 m trn.

  • Ti liu mn hc Vi x l 2

    Bin son: Gin Quc Anh H S phm K thut Nam nh

    Jan. 4

    4

    3. Thanh ghi TMR0: TMR0 l thanh ghi 8 bit cha sm ca timer0. Thanh ghi ny c thc ghi

    c.

    Cc hm ca CCS C iu khin hot ng ca timer

    1. Hm xc lp ch hot ng ca timer: setup_timer_x()

    V d 1: setup_timer_0(T0_INTERNAL|T0_DIV_2);

    Hm xc lp cho timer0 hot ng chc nng timer, dao ng chia hai (tn s dao ng : 8) trc khi n b timer.

  • Ti liu mn hc Vi x l 2

    Bin son: Gin Quc Anh H S phm K thut Nam nh

    Jan. 4

    5

    Cc tham s c th l: T0_INTERNAL (chc nng timer), T0_EXTERNAL (chc Qng counter), T0_EXT_L_TO_H 32, T0_EXT_H_TO_L , T0_DIV_x (x=2, 4, 8, 16, 32, 64, 128)

    2. Hm xc lp sm ban u cho timer: set_timer(tham s)

    V d: set_timer0(6);

    Xc lp sm ban u cho timer0 bng 6. Tham s bin thin trong khong 0-255.

    3. Hm c ni dung cua timer: get_timerx()

    x=get_timer0();

    Hm c gi tr hin thi ca timer0 (c ni dung thanh ghi TMR0).

    4. Hm cho php ngt timer: enable_interrupts()

    V d: enable_interrupts(INT_Timer0)

    Cho php ngt timer0.

    5. Khai bo chng trnh con phc v ngt: INT_timerx

    V d:

    V d 1: Chng trnh hin th sm dao ng ni s dng timer0, chia tn 128, hin th sm t 0-199 trn cc led n ni vi PORTC

    #include "16F877A.h"

    void main()

    {

    int8 x;

    set_tris_C(0);

    setup_timer_0(T0_INTERNAL|T0_DIV_128);

    set_timer0(0); //xac lap so dem ban dau cho timer0

    while(1)

    {

    x=get_timer0(); //doc noi dung hien thoi cua timer0

    output_B(x);

    if(x>=200) set_timer0(0);

    }

    }

    V d 2:

  • Ti liu mn hc Vi x l 2

    Bin son: Gin Quc Anh H S phm K thut Nam nh

    Jan. 4

    6

    //============================================================

    //Ten chuong trinh: hien thi giay tu 0-59 tren 2 led 7 doan

    //Nguoi viet: Quoc Anh

    //Ngay hoan thanh: 02/01/2012

    //Phien ban: 1.0

    //Mo ta phan cung:

    // Su dung vi dieu khien PIC 16F877A

    // Tan so thach anh su dung: 4Mhz

    // PORTC noi song song voi 2 led 7 doan: RC0=a, RC1=b, RC2=c,

    // RC3=d, RC4=e, RC5=f, RC6=g, RC7=h

    // RB0 dong mo transistor thuan noi voi chan Anode cua led hang don vi

    // RB1 dong mo transistor thuan noi voi chan Anode cua led hang don vi

    //------------------------------------------------------------

    //Chu thich:

    // Chuong trinh su dung timer0

    // De tao thoi gian 1 giay timer tuong duong voi 10^6 chu ky may

    // Goi so dem trong 1 lan tran la x

    // So lan tran la y

    // Chia tan z thi x*y*z=1.000.000 chu ky may

    // Chon z=64, x=125 thi y=125

    //============================================================

    #include "16f877a.h"

    #use delay(clock=4Mhz)

    //khai bao bang ma

    const char ma7doan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//tich cuc muc thap

    char lantran=0,giay=0;

    //chuong trinh phuc vu ngat timer0

    #int_TIMER0

  • Ti liu mn hc Vi x l 2

    Bin son: Gin Quc Anh H S phm K thut Nam nh

    Jan. 4

    7

    void ngat_timer0(void)

    {

    lantran++;

    set_timer0(-125);

    if(lantran==125)

    {

    lantran=0;

    giay++;

    if(giay==60) giay=0;

    }

    }

    //chuong trinh chinh

    void main(void)

    {

    //xac lap timer0

    setup_timer_0(T0_internal|T0_DIV_64);

    set_timer0(-125);

    //cho phep ngat timer0 dem tran

    enable_interrupts(Global);

    enable_interrupts(int_timer0);

    clear_interrupt(int_timer0);

    //xac lap cho PORTC va PIN_B0,PIN_B1 la dau ra

    set_tris_c(0);

    output_drive(pin_B0);

    output_drive(pin_B1);

    while(true)

    {

    output_C(ma7doan[giay/10]);

  • Ti liu mn hc Vi x l 2

    Bin son: Gin Quc Anh H S phm K thut Nam nh

    Jan. 4

    8

    output_high(PIN_B0);

    output_low(PIN_B1);

    delay_ms(20);

    output_high(PIN_B1);

    output_C(ma7doan[giay%10]);

    output_low(PIN_B0);

    delay_ms(20);

    output_high(PIN_B0);

    }

    }