PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Nhờ giúp đỡ delay bằng timer0 (http://www.picvietnam.com/forum/showthread.php?t=32382)

Hieu98DT 03-06-2013 07:01 PM

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;
}
}

Hieu98DT 03-06-2013 07:22 PM

Đã khắc phục được lỗi. Nhờ Admin xóa bài dùm, xin cám ơn rất nhiều !


Múi giờ GMT. Hiện tại là 03:28 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