maino17771
22-07-2011, 12:57 PM
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)
{
}
}
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)
{
}
}