我想用51单片机通过串口发送一系列数据,每次发送6个字节,keil和proteus波特率都是设置的9600,晶振11.0592MHZ,但是用串口调试助手有时接收到的数据长短不一致,有时不是6个字节,结果如下图:
keil程序代码:
#include <reg51.h>
unsigned char code MESSAGE[]={
0x80,0x8C,0x98,0xA5,0xB0,0xBC,0xC7,0xD1, //正弦数据表
0xDA,0xE2,0xEA,0xF0,0xF6,0xFA,0xFD,0xFF,
0xFF,0xFF,0xFD,0xFA,0xF6,0xF0,0xEA,0xE3,
0xDA,0xD1,0xC7,0xBC,0xB1,0xA5,0x99,0x8C,
0x80,0x73,0x67,0x5B,0x4F,0x43,0x39,0x2E,
0x25,0x1D,0x15,0x0F,0x09,0x05,0x02,0x00,
0x00,0x00,0x02,0x05,0x09,0x0E,0x15,0x1C,
0x25,0x2E,0x38,0x43,0x4E,0x5A,0x66,0x73
};
unsigned char a;
void delay(unsigned int delaytime)
{
unsigned char c;
for(;delaytime!=0;delaytime--)
for(c=0;c!=124;c++);
}
void main(void)
{
SCON = 0x50;//设置串行口工作方式1,接收控制打开
TMOD = 0x20;//定时器1设置工作方式2
TH1 = 0xFD;//设置波特率为9600,数据位8,停止位1,无校验位,晶振频率11.0592M
TL1 = 0xFD;
TR1 = 1;//启动定时器1
while(1)
{
a=0;
while(a!=64)
{
SBUF = 0x5A;
while(!TI);//等待发送中断标志为1
TI=0;//清除发送中断标志
SBUF = 0x43;
while(!TI);//等待发送中断标志为1
TI=0;//清除发送中断标志
SBUF = 0x48;
while(!TI);//等待发送中断标志为1
TI=0;//清除发送中断标志
SBUF = MESSAGE[a];//将一个字符放入串行数据缓冲器SBUF
while(!TI);//等待发送中断标志为1
TI=0;//清除发送中断标志
SBUF = 0x35;
while(!TI);//等待发送中断标志为1
TI=0;//清除发送中断标志
SBUF = 0x35;
while(!TI);//等待发送中断标志为1
TI=0;//清除发送中断标志
a++;//准备下一个字符
delay(1000);//延时
}
}
}
proteus仿真图如下:
找了很久都没发现问题,不知道哪里出了问题,想每次都固定发送6个字节的数据,大家帮忙看看