Tôi sử dụng timer 0 để tạo delay 1 giây, khi chưa khai báo xung PWM thì Pic chạy đúng 1 giây,nhưng khi khai báo thì timer 0 chạy sai đi. Mất khoảng 5 giây để tăng 1 đơn vị.
Đây là code:
#include <main.h>
#include <var.h>
#include "lcd.c"
#include "timer.c"
int8 counter,t;
//==============================================
//delay timer 1s
#INT_TIMER0
void timer0_interrupt(void)
{
set_timer0(12);
counter++;
if(counter>79)
counter=0;
if(counter==79) // 1s
{
t++;
}
}
//==============================================
//chong trình chính
void main()
{
unsigned char str[20];
LCD_Init();
setup_timer_2(T2_DIV_BY_1,59,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(50);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
set_timer0(12);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
LCD_Clear();
// vong lap
while(TRUE){
sprintf(str,"%u",t); //print t(s)
LCD_Gotoxy(0,0);
LCD_Puts(str);
}
}
Đây là code:
#include <main.h>
#include <var.h>
#include "lcd.c"
#include "timer.c"
int8 counter,t;
//==============================================
//delay timer 1s
#INT_TIMER0
void timer0_interrupt(void)
{
set_timer0(12);
counter++;
if(counter>79)
counter=0;
if(counter==79) // 1s
{
t++;
}
}
//==============================================
//chong trình chính
void main()
{
unsigned char str[20];
LCD_Init();
setup_timer_2(T2_DIV_BY_1,59,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(50);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
set_timer0(12);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
LCD_Clear();
// vong lap
while(TRUE){
sprintf(str,"%u",t); //print t(s)
LCD_Gotoxy(0,0);
LCD_Puts(str);
}
}
