|
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 |
03-06-2013, 07:01 PM | #1 |
Đệ tử 3 túi
Tham gia ngày: Feb 2006
Bài gửi: 50
: |
Nhờ giúp đỡ delay bằng timer0
Chào các bạn !
Mình mới làm quen với timer của Pic. Mình có viết chương trình delay 1s bằng timer. Ý đồ chương trình là sau 1s thì PortB dịch trái, khi PortB dịch trái 5 lần thì PortC sẽ dịch trái. Lỗi của chương trình là chỉ chạy đúng lần đầu, có nghĩa là PortC chỉ dịch trái 1 lần sau đó ko dịch trái theo đúng ý đồ nữa. Dưới đây là code của mình, các bạn xem giúp mình với. Xin chân thành cám ơn! #include <16F877A.h> #include <def_877a.h> #fuses NOWDT,PUT,XT,NOPROTECT #use delay(clock=4000000) /* Cach tinh thoi gian delay cho timer t_delay = (he_so_Prescaler x 4) / f_thach_anh x (256 - gia_tri_khoi_dau) */ int16 count1,count2; int8 a,b; //Chuong trinh ngat TMR0 #int_timer0 void interrupt_timer0() { set_timer0(6); // set_timer0(gia_tri_khoi_dau = 6) ++count1; if(count1 == 2000) // 2000*500us = 500000us = 1s { rotate_left(&a,1); count2++; count1=0; if(count2 == 5) { rotate_left(&b,1); count2 == 0; } } } //Chuong trinh chinh void main() { set_tris_b(0); set_tris_c(0); enable_interrupts(int_timer0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); enable_interrupts(global); set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us a = 0x01; b = 0x01; count1 = 0; count2 = 0; while(true) { PORTB = a; PORTC = b; } } |
|
|