View Single Post
Old 03-06-2013, 07:01 PM   #1
Hieu98DT
Đệ 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;
}
}
Hieu98DT vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn