当前位置: 代码迷 >> C语言 >> [讨论]
  详细解决方案

[讨论]

热度:186   发布时间:2005-05-26 19:10:00.0
[讨论]
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循环吗?应该怎么解决? 谢谢了!
----------------解决方案--------------------------------------------------------
这个是什么东东
----------------解决方案--------------------------------------------------------


莫名其妙的贴子..
----------------解决方案--------------------------------------------------------
  相关解决方案