timer0 pic
DESCRIPTION
noTRANSCRIPT
-
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);
}
}