![]() |
|
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 |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Aug 2010
Bài gửi: 8
: |
![]() 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); } } |
![]() |
![]() |
|
|