/*************************串口初始化*******************************************/
void Inituart()
{
IE=0x90; //打开中断总开关及串口中断开关
SCON = 0x50;//设定串行口工作方式1 允许接受
TMOD = 0x20; //定时器1,自动重载, 产生波特率
// PCON=0x80; // 加上他后波特率是19200 SMOD为1
TL1 = 0xfa;
TH1 = 0xfa; //波特率为9600 ,22.1184MHz
TR1 = 1;
}
/**************************接收上位机传送数据***************************************/
void uart_js() interrupt 4 //RI==1时执行串口中断
{
static uchar i = 0;
if(RI==1)
{
RX_BUF[i]=SBUF; //保存数据
RI=0;
i++;
}
if(i==10)
{
i=0;
RXend = 1;
LED0=0; //LED长亮
}
}
void main()
{
uchar j;
Inituart();
while(1)
{
while(RXend==0); //waiting receive end
RXend=0;
for(j=0;j<10;j++)
{
TxBuf[j] = RX_BUF[j]; //将需发送数据存入无线发送缓冲区
}
}
}
这个程序有什么问题么,为什么我用串口助手发送是个字节,接收不到呢?
不行啊,串口发十个字节,灯不亮,串口也接收不到发送的字节
追答你可以试试,多发一个看看,是不是有数据丢失,没被接收到
追问我用串口助手,一次发一个字节,连续发十次,单片机可以接收到十个字节,但是如果我一次性把十个字节都写入串口助手发送,就不行。而且如果我把串口助手设置为连续发送一个字节,连续十次也是ok,但就是不能一次发十个给串口助手
追答刚才在另一个问题处我说过了这应该是数据丢失造成的,因为串口助手没有握手,很容易丢失数据的。不知道你用的是什么单片机,22.1184M晶振是不是高了点,如果是STC的话,不同的晶振,还要注意参数的设置是不同的。
追问STC1104E的,晶振22.1184,设置的参数是9600波特的
追答看看你程序下载时选择的是外部晶振还是内部晶振,实在不行你可以换一个晶振试试,比如换11.0592M的试试。
本回答被提问者和网友采纳哦,我改为
static uchar i ;然后串口助手发十个字节,灯没亮