![]() |
Vấn đề ngắt ngoại vi portb
Chào các Pro!
Mình mới học pic nên có chút khó hiểu về ngắt ngoại vi port b. Chương trình của mình là dùng timer 0 để đếm đồng hồ hiển thị led 7 đoạn. Mình đã test ok. Nhưng khi mình thêm phần ngắt chân RB7 thì có vấn đề. Mình nối rb7 với 1 switch. Mình muốn khi rb7 mức 1 thì đồng hồ led 7 đoạn chạy bình thường. Còn khi rb7 mức 0 thì đồng hồ ngừng chạy. Nhưng khi mình test thì khi rb7 xuống mức 0 đồng hồ đứng luôn. Mặc dù mình điều khiển switch làm rb7 lên mức 1 lại vẫn không chạy lại được. Đây là chương trình. Mong các Pro quan tâm. Thanks nhiều. #include<stdlib.h> #include<math.h> #use delay(clock= 20000000) #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 #int_rb int gio,phut,giay; int gio_chuc,gio_donvi; int phut_chuc,phut_donvi; int giay_chuc,giay_donvi; int16 count; // CHUONG TRINH NGAT PORT B RB_ISR() { IF (pin_b7 ==0 ) { disable_interrupts(int_timer0); break; } if (pin_b7 ==1) { enable_interrupts(int_timer0); break; } } // CHUONG TRINH DEM THOI GIAN void dem_thoi_gian (int &gio, int &phut, int &giay) { giay++; if (giay==60) { giay = 0; phut++; } if (phut == 60) { phut = 0; gio++; } if (gio==24) { gio = 0; phut=0 ; giay=0 ; } } // CHUONG TRINH XUAT LED 7 DOAN int xuat_led(int x) { int value; switch(x) { case 0: value = 0x03; break; case 1: value = 0x9F; break; case 2: value = 0x25; break; case 3: value = 0x0D; break; case 4: value = 0x99; break; case 5: value = 0x49; break; case 6: value = 0x41; break; case 7: value = 0x1f; break; case 8: value = 0x01; break; case 9: value = 0x09; break; } return value; } // CHUONG TRINH NGAT TIMER 0 #int_timer0 void interrupts_timer0() { count++; if(count ==10000) { count = 0; dem_thoi_gian(gio,phut,giay); } } void main() { set_tris_b(0xff); set_tris_c(0); set_tris_d(0); gio=0; phut=0; giay=0; enable_interrupts(int_rb); enable_interrupts(global); enable_interrupts(int_timer0); setup_timer_0(RTCC_DIV_2|RTCC_INTERNAL); set_timer0(6); while (1) { gio_chuc = gio/10; gio_donvi= gio%10; phut_chuc = phut/10; phut_donvi= phut%10; giay_chuc = giay/10; giay_donvi= giay%10; portc=0xfb; portd=xuat_led(giay_donvi); delay_ms(1); portc=0xf7; portd=xuat_led(giay_chuc); delay_ms(1); portc=0xef; portd=xuat_led(phut_donvi); delay_ms(1); portc=0xdf; portd=xuat_led(phut_chuc); delay_ms(1); portc=0xbf; portd=xuat_led(gio_donvi); delay_ms(1); portc=0x7f; portd=xuat_led(gio_chuc); delay_ms(1); } } |
lổi ở đây có thể do bạn chưa đặt điều kiện nhận dữ liệu cho Port B
set_tris B(0xFF); thử xem |
Múi giờ GMT. Hiện tại là 04:47 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam