![]() |
|
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 |
Đệ tử 1 túi
Tham gia ngày: Apr 2011
Bài gửi: 11
: |
![]() mọi người ơi, đề bài của em như thế này Sử dụng ngắt timer 0 để quét led 7 đoạn hiển thị số lần bấm phím (được đo bởi ngắt ngoài) trong khoảng thời gian 1 phút (được định thời bởi ngắt timer 1) em viết chuơng trình mà mô phỏng không hiểu sao chưa tới 1 phút led 7 đoạn da set vê 00 rồi ạ, đáng lẽ ra theo bài toán thì 60s sau nó mới set lại lần đếm đúng ko anh, anh xem thử em sai đoạn nào, cảm ơn anh nha!!
#include<16f877a.h> #FUSES NOWDT,PUT,XT,NOPROTECT #use delay(clock=4000000) int maled[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0}; int16 dem,sln; int slb=0,sll,so,hc,hdv; #INT_EXT EXT_ISR() { slb++; if (slb>99) slb = 0; } #int_timer1 void ngat_timer1() { set_timer1(3036);//0,5s// { sln++; if(sln==360) sln=0; slb=0; //hc=slb/10,hdv=slb%10; }} #int_timer0 void ngat_timer0() { set_timer0(6);// 0,5ms// dem++; if(dem==5)//5*0,5=2ms { dem=0; // output_d(0x00); // T?t các LED hc=slb/10,hdv=slb%10; if(sll==0) { output_high(pin_d1); output_low(pin_d0); output_c(maled[hc]); } else { output_high(pin_d0); output_low(pin_d1); output_c(maled[hdv]); } sll++; if(sll>1) sll=0; } } void main() { set_tris_b(0xFF); set_tris_d(0x00); set_tris_c(0x00); enable_interrupts(int_timer0); enable_interrupts(int_EXT); enable_interrupts(int_timer1); ext_int_edge(H_TO_L); // Chon ngat theo suon am// setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); setup_timer_1(T1_internal|T1_div_by_8);//1:4// enable_interrupts(global); set_timer0(6); set_timer1(3036); while(1) { } } |
![]() |
![]() |
![]() |
|
|