找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[求助]请教各位如何将串口接收到的数据中有用的部分分离出来?

[复制链接]
跳转到指定楼层
楼主
ID:17521 发表于 2010-1-5 21:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

请教各位前辈如何将串口接收到的数据中有用的部分分离出来?
我用的是51单片机,晶振:11.0592MHz,波特率:9600
串口接收到的数据如下:
0000000000002059205601OL1NN00717700000002102OL1NN00717600000002003OL1NN00717700000002004AL1NN00717

7505-0102005AL1NN00717250600002006AL1NN007179505-01020C0087

$GPGGA,065731.00,1053.990170,N,10530.862591,E,5,08,1.0,-

0000.871,M,00000.000,M,0.00,*5DD0000D0000D00000
   我想要把数据中 $GPGGA,065731.00,1053.990170,N,10530.862591,E,5,08,1.0,-

0000.871,M,00000.000,M,0.00,*5D 这一部分分离出来,再由串口发出去。请教各位怎样写C程序。我的邮箱:

630034911@126.com

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:17521 发表于 2010-1-8 00:53 | 只看该作者

感谢高手指教,这是我写的程序,但是有问题
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar dat[50];
uint i;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
     ES=0;
flag=0;
     for(i=2;i <7;i++)
     {
     SBUF=dat[ i];
     while(!TI);
     TI=0;
     }
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
dat[50]=SBUF;
flag=1;
}
不知为什么串口调试助手收到的是:00 00 00 00 00 请高手指教

回复

使用道具 举报

板凳
ID:20780 发表于 2010-1-8 12:25 | 只看该作者
 "SBUF=dat[ i]"  dat[50]里没内容啊!
回复

使用道具 举报

地板
ID:17521 发表于 2010-1-8 18:47 | 只看该作者

谢谢你的帮助,请问程序应该怎么改呀?

 

回复

使用道具 举报

5#
ID:20780 发表于 2010-1-9 10:42 | 只看该作者
将发送的内容放到dat[]中试试
回复

使用道具 举报

6#
ID:17521 发表于 2010-1-10 22:21 | 只看该作者
非常感谢您的指导,我的程序写好了,多谢
回复

使用道具 举报

7#
ID:801818 发表于 2020-7-12 22:44 | 只看该作者
l630034911 发表于 2010-1-10 22:21
非常感谢您的指导,我的程序写好了,多谢

请问你修改后是怎样的,我也在找这个问题
回复

使用道具 举报

8#
ID:801818 发表于 2020-7-12 22:45 | 只看该作者
l630034911 发表于 2010-1-10 22:21
非常感谢您的指导,我的程序写好了,多谢

你确定你的程序已经成功啦?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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