找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1436|回复: 4
打印 上一主题 下一主题
收起左侧

GPS单片机每次发送少一到两个字符怎么回事

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次(中奖概率 10%)
跳转到指定楼层
楼主
ID:268520 发表于 2018-1-5 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:97438 发表于 2018-1-5 21:29 来自手机 | 只看该作者
你这程序能实现功能吗?每次接受到一个数值,标志位置1了,就跑去发送了。
回复

使用道具 举报

板凳
ID:272378 发表于 2018-1-6 16:46 | 只看该作者
标志位置1了,就跑去发送了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:272479 发表于 2018-1-6 19:57 | 只看该作者
你应该设置一个判断,判断你要串口读出来的字符都读出来后,然后标志位置1.

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:272479 发表于 2018-1-6 19:58 | 只看该作者
你应该设置一个判断,判断你的所有字符都发送完毕后,再将标志位置1,其实是否可以不加标志位呢!?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表