[讨论]
void readmeter(void)
{ uint xdata text,delay,count,counts,i;
lcd_init();
tptr=&hzk[5][0]; show_hz(2,13,tptr);
tptr=&hzk[6][0]; show_hz(2,16,tptr);
count=0;
counts=2;
keybuf=0;
while(keybuf!=ESC)
{ while(keybuf==STOP) wait(8);
func_a=0x10; /*设置第一字节*/
byte_send_cnt=10; /*计算出总共应发送的字节数8+2*/
tr_rc_dat_lgth=byte_send_cnt; /*保存数据包长度*/
func_c=0x00; /*不对继电器操作*/
send_buf[10]=0x09;
send_buf[9]=0xaf;
send_buf[8]=func_a; /*send_buf[8]*/
send_buf[7]=func_c;
send_buf[6]=snoh;
send_buf[5]=snol;
send_buf[4]=0xaa;
send_buf[3]=0xaa;
cal_chk_sum();
send_buf[2]=chk_sum_bak_h; /*send_buf[2]*/
send_buf[1]=chk_sum_bak_l; /*send_buf[1]*/
count++;
counts++;
if(count>13)
{ count=1;
wait(30);
lcd_init();
tptr=&hzk[5][0]; show_hz(2,13,tptr);
tptr=&hzk[6][0]; show_hz(2,16,tptr);
counts=3;
}
text=text_s+counts*30;
wr_two(text&0x00ff,text>>8,0x24);
wr_non(0xb0);
auto_wr((snoh/0x10)+0x10);
auto_wr((snoh%0x10)+0x10);
auto_wr((snol/0x10)+0x10);
auto_wr((snol%0x10)+0x10);
auto_wr(0x00); auto_wr(0x00);
TMOD=0x01; /*定时器0 工作于模式1(16位计数器)*/
TCON=0x11; /*定时器0 启动工作,外部中断0由下降沿触发*/
TH0=0xce;
IE=0x87;
tx_rx_byte='S'; /*置为可发送状态*/
tmr_init=0xff;
rx_tx=0;
t_end_bit=0;
t_nor_bit=0;
bit_send_cnt=0x30;
delay=0;
i=0;
do{ r_lamp=1;
t_lamp=0;
delay++;
if(delay==30000)
{ i++;
delay=0;
}
if(i==2)
{ r_lamp=1;
t_lamp=1;
break;
}
}while(tx_rx_byte!=0||t_end_bit!=1);
r_status(1);
wr_non(0xb2);
now4++; /*实现表号循环抄表*/
if(now4<10) goto r_read5;
now4=0;
now3++;
if(now3<10) goto r_read5;
now3=0;
now2++;
if(now2<10) goto r_read5;
now2=0;
now1++;
if(now1<10) goto r_read5;
now1=0;
r_read5: if(now1>last1) goto r_read3;
else if(now1==last1)
{ if(now2>last2) goto r_read3;
else if(now2==last2)
{ if(now3>last3) goto r_read3;
else if(now3==last3)
{ if(now4>last4) goto r_read3;
}
}
}
goto r_read4;
r_read3:
now1=first1;
now2=first2;
now3=first3;
now4=first4;
r_read4: snoh=now1*16+now2;
snol=now3*16+now4;
};
EA=1;
}
*************************************************************
void monitor(void)
{ uint xdata text,i,count,counts,delay;
lcd_init();
tptr=&hzk[25][0]; show_hz(2,10,tptr); /*线路监视*/
tptr=&hzk[26][0]; show_hz(2,13,tptr);
tptr=&hzk[23][0]; show_hz(2,16,tptr);
tptr=&hzk[24][0]; show_hz(2,19,tptr);
keybuf=0;
count=0;
counts=2;
while(keybuf!=ESC)
{ r_lamp=1;
for(i=0;i<=29;i++) /*清空收\发数组*/
{ rec_buf[i]=0x00;
send_buf[i]=0x00;
}
no_answer=0;
wdg=!wdg;
count++;
counts++;
if(count>13)
{ wait(30);
count=1;
lcd_clrscr();
tptr=&hzk[25][0]; show_hz(2,10,tptr);
tptr=&hzk[26][0]; show_hz(2,13,tptr);
tptr=&hzk[23][0]; show_hz(2,16,tptr);
tptr=&hzk[24][0]; show_hz(2,19,tptr);
counts=3;
}
text=text_s+counts*30;
wr_two(text&0x00ff,text>>8,0x24);
wr_non(0xb0);
r_status(0);
wr_non(0xb2);
if(no_answer==1)/*只有收到信号才显示*/
{ count--;
counts--;
}
no_answer=0;
while(keybuf==STOP)
{ wait(8);}
};
}
这两子程序在测试时,对“ESC”响应很慢
请问各位大虾,它们问题是出在do while循环吗?应该怎么解决?
谢谢了!