单片机接收串口数据

接收一串数据的时候只能接收头一个数据比如发送12单片机只能接收到1的ascii码... 接收一串数据的时候 只能接收头一个数据
比如 发送 12
单片机只能接收到 1的ascii码
展开
 我来答
zhxiufan
推荐于2018-03-29 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38386
国家科技进步奖

向TA提问 私信TA
展开全部
你通过串口助手要接受字符串或一组数据需要在单片机端开辟一个缓冲区,否则可能丢失数据。
以下程序是较为通用的串口收发例程,开辟一个16字节的缓冲区,两个指针,一个存数指针,一个取数指针,两指针相等,证明没有新的接收数据。
#include<reg51.h>
#define uchar unsigned char
uchar buf[16],getptr,putptr;
void uart_isr() interrupt 4
{
if(RI)
{
RI=0;
buf[putptr]=SBUF;
putptr++;
putptr&=0x0f;
}
}
main()
{
TMOD=0x20;
SCON=0x50;
TH1=TL1=0xfd;
TR1=1;
ES=1;
EA=1;
putptr=0;
getptr=0;
while(1)
{
if(getptr!=putptr) //取数指针和存数指针如果不等
{
SBUF=buf[getptr];
getptr++;
getptr&=0x0f;
while(!TI);
TI=0;
}
}
}
追问
用定时器2  也这样么?!
追答
T2初始化如下:
MOV T2CON,#34H
MOV SCON,#0C0H
MOV TH2,#0FFH
MOV TL2,#0DCH ;波特率=11059200/(2*16*(65536-RLDH,RLDL))
MOV RLDH,#0FFH
MOV RLDL,#0DCH ;波特率=11059200/(2*16*(65536-RLDH,RLDL)) 9600bps
之之zzzzzz
2012-09-19
知道答主
回答量:18
采纳率:0%
帮助的人:8.5万
展开全部
串口出现问题,大多是时钟不精确。请先检查。若正确,请检查接收程序中,是否有等到系统不忙的判定再接收数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Glassdean1
2012-09-19 · TA获得超过167个赞
知道答主
回答量:135
采纳率:0%
帮助的人:88.8万
展开全部
是不是串口接收程序对接收结束的判断没处理好?
串口助手发送的是以字符格式发送的,不同的操作系统对字符串结束的标志形式不一样。
windows和linux对字符串的结束标志就不同,具体是怎么样的,我也记不清了,\n和\r的区别吧!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yanzuo55
2012-09-19
知道答主
回答量:13
采纳率:0%
帮助的人:7万
展开全部
接收串行数据是靠时序实现的,不是接收1的ascii码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式