根据您提供的信息,STC15W204S串口在发送数据时出现异常,表现为当通过外部传递的数值进行发送时,接收端始终接收到0x8F。而直接赋值给SBUF时则正常,这表明问题可能出在数据传递过程中或与寄存器状态控制有关。
首先,检查代码逻辑是否正确。您在SendData函数中使用了busy标志位来判断串口是否空闲,但未对busy变量进行初始化。若该变量初始值为非零,可能导致程序误判串口状态,从而引发发送异常。建议在main()函数开始处对busy进行初始化:
复制代码
其次,波特率设置部分可能存在错误。您使用了T2L和T2H来配置定时器2的重载值,但未明确定义FOSC和BAUD的值。如果这些宏定义不正确,将导致波特率计算错误,进而影响串口通信的稳定性。请确保FOSC为实际使用的晶振频率(如11.0592MHz),并合理设置BAUD值(如9600)。
此外,SCON寄存器配置为0x50,表示串口工作在方式1(8位异步串行通信),但需确认是否启用了串口中断。您在代码中设置了ES = 1;,但未启用全局中断EA = 1;,这可能导致中断无法触发,进而影响数据发送。建议在main()中添加:
复制代码
最后,检查外部传递的数据是否被正确处理。若传递的数值在函数内部被修改或未正确传递,可能导致发送数据异常。建议在SendData函数中添加调试输出,验证传入的dat值是否正确。
综上所述,建议您检查busy变量初始化、波特率配置、中断使能以及数据传递逻辑,以解决串口通信异常的问题。
[本文内容由国芯人工智能辅助生成,仅供参考] |