标题: GPS单片机每次发送少一到两个字符怎么回事 [打印本页]

作者: xupcb1983    时间: 2018-1-5 21:11
标题: GPS单片机每次发送少一到两个字符怎么回事
nclude<reg52.h>
#include<string.h>
unsigned char cntRxd = 1;
unsigned char cmdArrived = 0;
unsigned char bufRxd[69]; //串口接收缓冲区
void ConfigUART(unsigned int baud)//串口配置函数,baud为波特率
{
SCON = 0x50;//配置串口为模式1
TMOD &= 0x0F;//清零T1的控制位
TMOD |= 0x20;//配置T1为模式2
TH1 = 256 - (11059200/12/32) / baud;//计算T1重载值
TL1 = TH1;//初值等于重载值
ET1 = 0;//禁止T1中断
ES= 1;//使能串口中断
TR1 = 1;//启动T1
}
void UartWrite(unsigned char *buf) //串口发送函数
{
unsigned char i;
for(i = 0;i<cntRxd;i++)//发送数据
{
SBUF = *buf;
buf++;
}
}
void main ()
{
EA = 1;//开总中断
ConfigUART(4800); //配置波特率为4800
while(1)
{
if (cmdArrived) //有命令到达时,读取处理该命令
{
cmdArrived = 0;
UartWrite(bufRxd);
cntRxd = 0;
}
}
}
void InterruptUART() interrupt 4//UART中断服务函数
{
if(RI)
{
bufRxd[cntRxd++] = SBUF; //保存接收字节
while(!RI);
RI = 0;//手动清零接收中断标志位
cmdArrived = 1;
}
if (TI)//字节发送完毕
{
TI = 0;
}
}

作者: luoluoluo136    时间: 2018-1-5 21:29
你这程序能实现功能吗?每次接受到一个数值,标志位置1了,就跑去发送了。
作者: 635306791    时间: 2018-1-6 16:46
标志位置1了,就跑去发送了。
作者: mike1    时间: 2018-1-6 19:57
你应该设置一个判断,判断你要串口读出来的字符都读出来后,然后标志位置1.
作者: mike1    时间: 2018-1-6 19:58
你应该设置一个判断,判断你的所有字符都发送完毕后,再将标志位置1,其实是否可以不加标志位呢!?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1