各位大侠,帮忙看看什么原因,我用STC12C5A60S2定时,发现时间跳变间隔很长,本来是1秒钟跳变一次,现在感觉是4秒钟才变一次。可是我把定时器IF判断语句放到中断中,时间不在变化。程序如下:
void dis_time()
{
uchar d0,d1,d2,d3,d4,d5,d6,d7;
d0='t';
d1='=';
d2=fen/100; //fen百位
d3=fen%100/10; //fen十位
d4=fen%100%10; //fen个位
d5=':';
d6=miao/10;
d7=miao%10;
delay_1ms(1);
write_cmd(0x80+4);
write_dat('t');
write_dat('=');
write_dat(d2+0x30);
write_dat(d3+0x30);
write_dat(d4+0x30);
write_dat(':');
write_dat(d6+0x30);
write_dat(d7+0x30);
}
void T0_1s(void)interrupt 1
{
TH0=(65636-50000)/256;
TL0=(65636-50000)%256;
}
main()
{
TMOD=0x01; // 设置定时器0为方式1
TH0=(65636-50000)/256;
TL0=(65636-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
lcd_init();
while(1);
{
if(++count_T0==20)
{
count_T0=0;
miao++;
if(miao==60)
{ miao=0;
fen++;
}
}
// dis_temp(ReadTemperature());
// ReadTemperature();
dis_time();
// dis_dianya();
// dis_dianliu();
// dis_gonglv();
// dis_yaqiang();
// delay_1ms(500);
}
}
改过后没有显示的程序,
void T0_1s(void)interrupt 1
{
char count_T0=0;
TH0=(65636-50000)/256;
TL0=(65636-50000)%256;
if(++count_T0==20)
{
count_T0=0;
miao++;
if(miao==60)
{ miao=0;
fen++;
if(fen==60)
{ fen++;
}
}
}
}
main()
{
// P1M0=0x03; // 设置高阻
// P1M1=0x00;
// ADC_Init()
char count_T0=0;
TMOD=0x01; // 设置定时器0为方式1
TH0=(65636-50000)/256;
TL0=(65636-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
lcd_init();
while(1)
{
/* if(++count_T0==20)
{
count_T0=0;
miao++;
if(miao==60)
{ miao=0;
fen++;
if(fen==60)
{ fen++;
}
}
} */
// dis_temp(ReadTemperature());
// ReadTemperature();
dis_time();
// dis_dianya();
// dis_dianliu();
// dis_gonglv();
// dis_yaqiang();
// delay_1ms(500);
|