本帖最后由 STCAI-32位8051 于 2024-4-12 14:36 编辑
我使用的单片机是STC8H1K08
内存编译后情况如下
Program Size: data=9.2 xdata=606 const=0 code=6498
我的代码基本功能就是接受串口2的数据,然后进行和校验,校验通过后通过串口1输出数据
代码如下
- u8 Co2Analysis(void)
- {
- u8 i,check;
- u16 CO2_PPM;
-
- if(COM2.RX_TimeOut > 0) //超时计数
- {
- if(--COM2.RX_TimeOut == 0)
- {
- if(COM2.RX_Cnt > 0)
- {
- check = FunCheckSum(RX2_Buffer,9); //收到的数据进行校验
-
-
- if(check == RX2_Buffer[8])//如果校验通过就通过串口1 输出数据
- {
- CO2_PPM = RX2_Buffer[4]*256+RX2_Buffer[5];
- /**/
- RS485_MODE_TX;
- RX1_Buffer[0] = CO2_PPM>>8;
- RX1_Buffer[1] = CO2_PPM&0xFF;
- for(i=0; i<2; i++)
- {
- TX1_write2buff(RX1_Buffer[i]); //使用串口1发送数据
- }
- delay_ms(100);
- /**/
- }
- /**问题代码块**/
- //使用串口2发送数据
- // for(i=0; i<COM2.RX_Cnt; i++)
- // {
- // TX2_write2buff(RX2_Buffer[i]); //收到的数据原样返回
- // }
- /**问题代码块**/
- }
- COM2.RX_Cnt = 0;
- }
- }
- return 0;
- }
复制代码
现在遇到的问题就是,
1、如果屏蔽掉问题代码块,那么串口1就不会有数据输出
2、如果不屏蔽问题代码块,即使进行和校验判断,那么串口1也会正常输出数据
3、如果屏蔽掉问题代码块,也屏蔽掉“if(check == RX2_Buffer[8])//如果校验通过就通过串口1 输出数据”,这个和校验判断,串口1也会正常输出数据
问题代码块也就是一个串口2的数据输出,似乎影响到了RX2_Buffer里面的数据,
现在搞不明白,请大家指导
|