|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
14-11-2013, 10:48 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: Nov 2013
Bài gửi: 3
: |
[thắc mắc] không thực hiện hàm ngắt TIMER0 khi tràn TIMER0.
mình đang viết code cho mạch đếm xung ngoài dùng PIC18F4620, sử dụng TIMER0 để đếm xung ngoài và TIMER1 để định thời.
tuy nhiên trong quá trình viết thì mình mắc phải 1 lỗi mà không hiểu tại sao, đó là khi timer0 tràn rồi nhưng lại không thực hiện hàm ngắt. mọi người xem qua code giúp mình và chỉ cho mình biết mình sai chỗ nào với. mình mới tập tành với PIC nên kiến thức còn nhiều thiếu sót. #include <main.h> #include "lcd_driver.c" #use FAST_IO(A) int8 count=0, enable=0, count_t1=0, i=0; int16 FREQ=0; #INT_TIMER0 // TIMER0 dem xung ngoai void TIMER0_isr(void) // Trinh phuc vu ngat tran TIMER0 { set_timer0(245); // set gia tri ban dau cho TIMER0 (set TIMER0 = 245 de TIMER0 mau tran, test code) count=count+1; // tang bien dem tran TIMER0 } #INT_TIMER1 // TIMER 1 dinh thoi 1s void tao_tre_1s() // Trinh phuc vu ngat tran TIMER1 { setup_timer_1(T1_DISABLED); // khong cho phep TIMER1 hoat dong disable_interrupts(GLOBAL); // khong cho phep ngat toan cuc count_t1++; // tang bien dem len 1 if(count_t1==35) // Tao khoang thoi gian 1s { freq= count*255 + get_timer0(); // tinh so xung dem duoc count = 0; // set bien dem tran vong lap TIMER0 ve 0 count_t1 = 0; // set bien dem tran vong lap TIMER1 ve 0 enable = 1; // set bien cho phep vong lap while hoat dong len 1 } set_timer1(15536); // set gia tri ban dau cho TMR1 setup_timer_1(T1_INTERNAL|T1_DIV_BY_2); // cho phep TIMER1 hoat dong lai } void main() { set_tris_a(0b010000); // set RA4 la chan input set_tris_b(0); set_tris_c(0b00001111); // set PORTC output set_tris_d(0); // set PORTD output setup_timer_0(T0_EXT_L_TO_H); // cau hinh cho TIMER0 nhan xung ngoai setup_timer_1(T1_INTERNAL|T1_DIV_BY_2); // Cau hinh bo chia cho TIMER1 setup_timer_2(T2_DISABLED,0,1); // khong cho phep TIMER2 hoat dong enable_interrupts(INT_TIMER0); // cho phep ngat tran TIMER0 enable_interrupts(INT_TIMER1); // cho phep ngat tran TIMER0 enable_interrupts(GLOBAL); // cho phep ngat toan cuc set_timer0(245); // set gia tri dau cho TIMER0 (set TIMER0 = 245 de TIMER0 mau tran, test code) lcd_init(); // khoi tao LCD lcd_gotoxy(1,1); lcd_putc(" CODE DEM XUNG "); lcd_gotoxy(1,2); lcd_putc(" PIC18F4620 "); delay_ms(500); while(true) // vong lap luon dung { /************************************************** ***********************************/ /* vong lap ben duoi dung de kiem tra ham ngat khi tran TIMER0 co hoat dong khong */ /************************************************** ***********************************/ i=get_timer0(); // cho i = gia tri xung dem duoc lcd_gotoxy(1,1); // dinh dong xuat LCD printf(lcd_putc,"so xung = %u ",i); // xuat gia tri xung dang dem (de biet khi nao TIMER0 tran) lcd_gotoxy(1,2); // dinh dong xuat LCD printf(lcd_putc,"so lan tran = %u ",count); // xuat bien dem so lan TIMER 0 tran (kiem tra ham ngat khi tran TIMER0 co hoat dong khong) } } |
|
|