求助:stc串口程序遇到00后面的数据丢失

  • 程序
  • hunyungjw
  • LV0工程师
  • |      2016-05-26 10:11:38
  • 浏览量 649
  • 回复:3
请教各位高手,我的程序2为什么从机接受数据遇到0x00后,后面的数据接受不到了?急!急!急! void main(){ uint i = 0;//定时器0初始化 Timer0Init();// 调整输入函数的加载值可以改变串口波特率 Uart1Init(0,1,253);//初始化串口1,设置波特率115200 Uart2Init(1,0,1,220);//初始化串口2,设置波特率9600 Uart2SendStr("AT1#/r"); //主机发送Hex41 54 31 23,从机应答Hex41 54 44 011A 03 1E 23//3字节高位为00时就不正常只能显示4154 44 char Uart2Init(char s2_p4,char s2smod,charbrtx12,unsigned char reload){ S2CON= 0X50; BRT = reload; if(s2_p4== 1) { AUXR1|= S2_P4; //S2_P4 = 1;//将串口2映射到P4,1:RXD2(P4.2)TXD2(P4.3) } elseif(s2_p4 == 0) { AUXR1&= (~S2_P4); //S2_P4 = 0; } else { return-4; } if(s2smod== 1) { AUXR|= S2SMOD; //S2SMOD = 1;//波特率倍速位 } elseif(s2smod == 0) { AUXR&= (~S2SMOD); //S2SMOD = 0;//取消波特率倍速位 } else { return-1; } if(brtx12== 1) { AUXR|= BRTx12;//BRTx12 = 1;1T模式 } elseif(brtx12 == 0) { AUXR&= (~BRTx12);//BRTx12 = 0;12T模式 } else { return-2; } AUXR|= BRTR;//开启波特率发生器 //设置串口2中断优先级 IP2H|= PS2H; //设置串口2优先级为3(最高) IP2|= PS2; if(UART2_PRIO & 0x02) { IP2H|= PS2H; } else { IP2H&= ~PS2H; } if (UART2_PRIO & 0x01) { IP2|= PS2; } else { IP2&= ~PS2; } IE2|= ES2;// ES2 = 1; //允许串口2中断 EA= 1; //开总中断 return0; } void Uart2SendHex(uchar i){ while(uart2Sending== 1); uart2Sending= 1; S2BUF= i;//装入数据 } void Uart2SendStr(char* data_at){ while(*data_at) { Uart2SendHex(*data_at++); }} void Uart2InterruptReceive(void) interrupt8{ unsignedchar tmp = 0; uchari = 0; ucharm = 0; IE2&= (~ES2); //关闭串口2中断//ES2 = 0; if(S2CON& S2RI) //if(S2RI == 1) { S2CON&= (~S2RI);//S2RI = 0; tmp= S2BUF; #ifdef UART1_DEBUG //将接收到的数据放入DebugBuf_U2,在定时器内,DebugBuf_U2会被串口1发送给PC机。 //这样GSM发送给单片机的数据也可以在电脑上观察到了。 //H1005071 1597422124 2000-01-01 01:01:01 0a0d DebugBuf_U2= tmp; Debug2RcvCnt++; if(Debug2RcvCnt>=MAXBUF-1) { Debug2RcvCnt= 0; }#endif GsmRcv= tmp; GsmRcvCnt++; if(GsmRcvCnt> MAXRCV) { GsmRcvCnt= 0; GsmAtFlag2= 1; } } if(S2CON& S2TI) { S2CON&= ~S2TI; uart2Sending= 0; } IE2|= ES2;//ES2 = 1; } void Timer0Init(void){TMOD=0x01; //设置定时器0为工作方式1//AUXR|=T0x12;TH0=T0H; //放入初值,11.0592M,1msTL0=T0L;// 设置定时器0中断优先级(优先级1)IPH &= ~PT0H;PT0 = 1;EA=1; ET0=1; TR0=1; } void timer0() interrupt 1{uchar i = 0;TH0=T0H;TL0=T0L; #ifdef UART1_DEBUG//发送数据用于调试。timer0_debug_cnt++;if(timer0_debug_cnt == 20){timer0_debug_cnt = 0;for(i=0; i = 0; }Debug2RcvCnt = 0;Uart2SendStr(DebugBuf_U1);for(i=0; i = 0; }Debug1RcvCnt = 0; } #endiftimer0_cnt++;if(timer0_cnt == 1000){timer0_cnt = 0;sec_cnt++;}}
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:3
SingleYork 2016-05-30
我去,程序太长了,建议发悬赏,估计人家会上心一点,呵呵……
0   回复
举报
发布
qiuqiu 2016-05-30
不会啊,帮顶咯
0   回复
举报
发布
残存地丢 2016-05-26
这样贴代码,不管是谁都没心情帮你看.
1   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子