请教一下
我的定时器50ms计数一次,但是我写while语句中有一个判断次数的语句,但是呢这个语句之前为了显示1602的内容,耗费的时间是70多毫秒,这样就会出现一个很大的问题,假如我判断计数为200,就会出现,我还没有到判断的时候,计数的值已经加到了两百,我这个判断语句就没用了;
求大神解答啊
while(1)
{
adwr=1;
_nop_();
adwr=0;//启动AD转换
_nop_();
adwr=1;
if(dy <127)
{
write_com(0x80+0x40);
write_data(table2[11]);
write_data(table2[qian]); delay(5);
write_data(table2[bai]); delay(5);
write_data(table2[shi]); delay(5);
write_data(table2[ge]); delay(5);
}
else
{
write_com(0x80+0x40);
write_data(table1[0]);
write_com(0x80+0x41);
write_data(table2[qian]); delay(5);
write_data(table2[bai]); delay(5);
write_data(table2[shi]); delay(5);
write_data(table2[ge]); delay(5);
}
P1=0xff; //读取P1口之前先给其写全1
adrd=1; //选通ADCS
_nop_();
adrd=0; //AD读使能
_nop_();
dy=P1;//AD数据读取赋给P1口
adrd=1;
//rdy1=(float)dy*5000/255;
//qian=rdy1/1000;
//bai=rdy1%1000/100;
//shi=rdy1%100/10;
//ge=rdy1%10;
rdy=(float)dy*4800/255+100;
if(dy <127)
{
rdy1=(2500-rdy)/4;
}
qian=rdy1/1000;
bai=rdy1%1000/100;
shi=rdy1%100/10;
ge=rdy1%10;
//if((num1<380)&&(rdy1!=0))
//{
////num1=0;
//}
if(num1==197)//测电压为零持续10S,蜂鸣器警告
{
FM=0; delay(1000);
FM=1;
}
if(num1==296)
{
FM=0; delay(1000);
FM=1;
}
//if(((num1<488)&&(num1>411))&&(rdy1!=0))
//{
//num1=0;
//}
//if(num1==497)
//{
//FM=0; delay(1000);
//}
}
}
void T0_time()interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
if(dy==0)
{
num1++;
}
else if(dy!=0)
{
num1=0;
}
}
因为1602显示时间过长,大于中断的时间,是的计数的判断语句没用,求解决这个问题啊
我的定时器50ms计数一次,但是我写while语句中有一个判断次数的语句,但是呢这个语句之前为了显示1602的内容,耗费的时间是70多毫秒,这样就会出现一个很大的问题,假如我判断计数为200,就会出现,我还没有到判断的时候,计数的值已经加到了两百,我这个判断语句就没用了;
求大神解答啊
while(1)
{
adwr=1;
_nop_();
adwr=0;//启动AD转换
_nop_();
adwr=1;
if(dy <127)
{
write_com(0x80+0x40);
write_data(table2[11]);
write_data(table2[qian]); delay(5);
write_data(table2[bai]); delay(5);
write_data(table2[shi]); delay(5);
write_data(table2[ge]); delay(5);
}
else
{
write_com(0x80+0x40);
write_data(table1[0]);
write_com(0x80+0x41);
write_data(table2[qian]); delay(5);
write_data(table2[bai]); delay(5);
write_data(table2[shi]); delay(5);
write_data(table2[ge]); delay(5);
}
P1=0xff; //读取P1口之前先给其写全1
adrd=1; //选通ADCS
_nop_();
adrd=0; //AD读使能
_nop_();
dy=P1;//AD数据读取赋给P1口
adrd=1;
//rdy1=(float)dy*5000/255;
//qian=rdy1/1000;
//bai=rdy1%1000/100;
//shi=rdy1%100/10;
//ge=rdy1%10;
rdy=(float)dy*4800/255+100;
if(dy <127)
{
rdy1=(2500-rdy)/4;
}
qian=rdy1/1000;
bai=rdy1%1000/100;
shi=rdy1%100/10;
ge=rdy1%10;
//if((num1<380)&&(rdy1!=0))
//{
////num1=0;
//}
if(num1==197)//测电压为零持续10S,蜂鸣器警告
{
FM=0; delay(1000);
FM=1;
}
if(num1==296)
{
FM=0; delay(1000);
FM=1;
}
//if(((num1<488)&&(num1>411))&&(rdy1!=0))
//{
//num1=0;
//}
//if(num1==497)
//{
//FM=0; delay(1000);
//}
}
}
void T0_time()interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
if(dy==0)
{
num1++;
}
else if(dy!=0)
{
num1=0;
}
}
因为1602显示时间过长,大于中断的时间,是的计数的判断语句没用,求解决这个问题啊