![]() |
cac anh vao xem giup code ngat_timer0 giup e voi
2 Attachment(s)
e làm về ngắt timer0 de nhay led don.sau 1s thì led sang tăng dần lên nhưng nó chạy rất chậm.không đúng 1s.không biết có phải sai code hay tính toán sai.các anh vào xem giúp.
dưới đây là code và mô phỏng ạ #include <18f4520.h> #fuses nowdt,hs,put,xt,noprotect #device *=16 adc=8 #use delay(clock=4000000) #byte portb=0xf81 int16 count; int8 a; //chuong trinh ngat timer0 #int_timer0 void interrupt_timer0() { set_timer0(6); count++; if(count==20) //20*500us=0.01s nhung no chay rat cham khoang hon 1s->khong dung { count=0; rotate_left(&a,1); } } void main() { set_tris_b(0x00); enable_interrupts(int_timer0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); enable_interrupts(global); set_timer0(6); //T_dingthi=2*(256-6)*1us=500us a=0xfe; while(true) { portb=a; } } |
huhu.ai vào xem giúp em với
|
em cũng thử rùi mà k phát hiện
|
Bạn có mấy chổ khai báo không hợp lý. Ví dụ bạn xài thạch anh 4M mà khai báo fuses la hs,rồi lại còn xt nữa chứ. xài cái nao thì xài 1 cái thoy.từ 4M trở xuống thì xài "xt",lớn hơn 4M thì xài "hs".ngoài ra thì biến count xài phung phí wa'.
Thứ 2 là sau khi kiểm tra đúng như trên mà vẫn chạy sai thì koi trong Proteus thử chổ xài khai báo thạch anh có đặt đúng giá trị như trong code chưa? |
àh quên nửa.trong Pic 18 thì timer0 gồm 2mode là 8bit và 16bit có thể mặc định code của bạn là 16bit nên chạy tầm bậy.để chuyên sang chế độ 8bit thi bạn thêm : setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2|RTCC_8_BIT) ; kiểm tra hết mọi thứ như vậy thì sẽ chạy bình thường thoy.
|
Múi giờ GMT. Hiện tại là 02:16 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam