PDA

View Full Version : Hỏi cách cài đặt timer0 chính xác


Botroword
31-03-2016, 04:57 PM
Em mới làm quen với PIC và CCS, em viết thử 1 đoạn chương trình nhỏ với timer0 và cho mô phỏng trong proteus thì thấy kết quả không như mong muốn.

Ở đây em tạo chế độ bật tắt chân A4 sau 0,5s nhưng khi mô phỏng thì thấy thời gian này không chính xác, bị kéo dài hơn.

Không biết em làm sai chỗ nào, rất mong được mọi người chỉ giúp.

#include <16F1938.h>
#use delay(crystal=32000000)

int8 t_check;
int16 tcount;

#INT_TIMER0
//Fosc=32.000.000
//Fcy=Foso/4=8.000.000
//TCy=1/(Fcy/8)=1us
void TIMER0_isr(void)
{
set_timer0(205);//(255-205)*1=50us overflow
tcount++;
IF ( tcount >= 10000)//500ms
{
tcount = 0;
output_toggle(PIN_A4);
}
t_check=get_timer0(); //206
}

void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit) ; //256,0 us overflow
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
while(TRUE)
{
//TODO: User Code
}
}

buikhacbinh1996
02-04-2016, 11:14 AM
// 20 mhz clock, no prescaler, set timer 0

// to overflow in 35us



set_timer0(81); // 256-(.000035/(4/20000000))

theo mình thấy thì trong help ccs như thế này khác với bạn

Botroword
04-04-2016, 12:25 PM
Công thức của ccs cũng giống cách tính của em thôi, em diễn giải ra nhìn cho dễ đọc.
Fosc=2.000.000
Fcy=Fosc/4=20Mhz/4=5Mhz
Tcy=1/Fcy=1/5Mhz=0.2us
35us cần 175Tcy
Timeset=256-175=81