通信波特率为9600
晶振为11.0592 ,但是晶振不稳定,有时是11.0143 ,有时是11.0164 ,有时
又是11.0184,不知道数据出错跟这个有没有关系
下面是我的发送程序
#define BUF_MAX 200 //设置发送数组的大小
uchar TXD_MAX = 0; //发送数据的个数
uchar TXD_Counter = 0; //发送数据的计数
uchar *TXD_POINT ; //指向要发送的数组的指针
xdata uchar TXD_RXD_BUF[BUF_MAX] ;//接收串行数据的数组
void Send_Message(uchar *mssg,uchar count)
{
TXD_POINT = mssg;
TXD_MAX = count;
SBUF = TXD_POINT[0];
TXD_Counter = 1;
}
void UART_Interrupt() interrupt 4 //串行中断处理程序
{
if(TI)
{
TI = 0;
if((TXD_Counter < TXD_MAX) && (TXD_Counter < BUF_MAX)) //发送的数据不能超过数组最大值
{
SBUF = TXD_POINT[TXD_Counter];
TXD_Counter++;
}
else
{
TXD_Counter = 0;
TXD_MAX = 0;
}
}
}
错误描述:
在一个2~3秒循环发送一次的循环中,当发送的以16进制显示的200个数据(0~199)时,刚开机第一次发送,电脑接收数据显示会发生跳过发送0x14(第21个数据,都是固定这个被跳过)的现象,然后从第二次发送开始,数据一切正常。
如果是以字符发送数据,电脑显示的字符是出现几次乱码,然后再出现一次正常的情况,有时又是几次乱码,几次正常。
我分析过上面的程序,实在想不到哪里会发生发送错误了,如果真的是程序有问题,那为什么能出现正确发送的情况呢??
现在我能分析到的只有晶振问题了,我现在所在的地方没有条件更换晶振,所以没法验证是不是晶振问题。
请各位前辈驻足一下下,帮忙分析一下,可能是哪里出现问题呢,谢谢了!!! |