PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Những câu hỏi thường gặp (http://www.picvietnam.com/forum/forumdisplay.php?f=54)
-   -   help set timer 0 (http://www.picvietnam.com/forum/showthread.php?t=10266)

maino17771 22-07-2011 12:57 PM

help set timer 0
 
Mình muốn sao mỗi giây thì tăng giá trị của Port D lên 1 lần.

Sao mình mô phỏng trên protues thì lâu hơn 1 giây nó mới tăng lên 1 lần.Không lẽ mình giá trị của set_Timer0 không đúng.
Ai giúp mình với.

#include <16F877A.h>
#include <DEF_877a.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTB = 0x06

int16 count;
int8 a,b;
int8 c;
//Chuong trinh ngat TMR0
#int_timer0
void interrupt_timer0()
{
set_timer0(6);
++count;
if(count == 2000) // 2000*500us = 500000us = 1s
{
count=0;
a++;
if(a ==10)
{
a=0;
b++;
if(b==6)
b=0;
}
c=b<<4;
c=c+a;
PORTD = c;
}
}
//Chuong trinh chinh
void main(void)
{
set_tris_d(0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(int_timer0|global);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
a=0;
b=0;
c=0;
while(true)
{
}
}

pstin 22-07-2011 05:59 PM

Cái này trên mạch thật tui thấy cũng có sai chút ít về thời gian!!!!!!!!. Đoán là trong CCS nó bị trễ vài chu kỳ lệnh ở chổ nào đó!!!!!!!!!.
Chơi cùi là tính toán nhập lại giảm giá tri của count hoặc set lại giá trị ban đầu của timer0 sao cho nó đúng 1S là OK thôi!!!!!!!!!!!!!

dinhthem 11-08-2011 12:19 PM

Không phải đâu, thời gian trong Protues bị sai đó!
Mình đã làm rồi, nếu không tin thì bạn xài realtime của nó, chạy chậm hơn 5 - 6s / 1 phút
Góp ý thêm cho bạn là dùng timer1, 16bit + 3bit prescale = 19 bit rồi, sẽ hạn chế nhiều chu kì lệnh, thời gian sẽ chính xác hơn. (khi đó biến count của bạn = 2 là đủ)

onkhacdokh 15-03-2012 02:33 PM

có bạn nào hiểu tường tận về timer và counter không giúp mình với và minh còn có một thắc mắc nữa là làm thế nào để tăng thêm cổng nhập dữ liệu cho pic nhỉ


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