关于51单片机串口通信接收多位数据

用51的RXTX口实现串口通信,接受32位数据,取第一位数据放到P2通过二极管显示自己做了一个中断#include<reg52.h>unsignedcharreceive... 用51的RX TX口实现串口通信,接受32位数据,取第一位数据放到P2 通过二极管显示

自己做了一个中断
#include<reg52.h>
unsigned char receive[];

void timer0_init()
{
TMOD=0x20;
SCON=0x50;
PCON&=0x00;
TH1=0xFD;
TL1=0xFD;
TR1=1;
EA=1,ES=1;
}

void serial(void) interrupt 4
{

unsigned char i;
RI=0;
receive[i++]=SBUF;
P2=receive[0];
}
void main()
{
timer0_init();
while(1)
{
}
}
是错的 但没整明白 新手没财富 大家见谅
展开
 我来答
百度网友44448fd
2013-09-03 · TA获得超过351个赞
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:125万
展开全部
是你串口中断接收数据溢出了。应该改为
if(RI)
{
receive[i]=SBUF;
i++; //此处的i需要定义为全局变量,不然你每次都会被清零,也就是数据永 远都是recive[0]=SBUF;

if(i>?) //此处填写你的数据最大长度,主程序中数据分析完自后要对i清零。
{
i=0;

}

}
if(TI)
{
TI=0;

........//发送程序
}
blakli123
2013-09-02 · TA获得超过272个赞
知道小有建树答主
回答量:235
采纳率:0%
帮助的人:248万
展开全部
unsigned char receive[];你没定义范围大小

unsigned char receive[10];
还有中断里定义的 i 跟没定义一样,没设置初始值,很容易造成receive溢出,应该设置成全局再主函数里初始化,同时保证 i 不会溢出到receive外。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zxqzlh
2013-09-02 · 超过14用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:30.7万
展开全部
你干嘛不直接传1个字符8位就好了。
再加上单片机串口通信的字符串接收也不是这样写的,
分太少,给个想法
设置个变量检测是否接收完数据,否则继续接收,接收完成后再将指针指向字符数组的首地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
紫色眼眸C3e34
2013-09-02
知道答主
回答量:19
采纳率:0%
帮助的人:12.2万
展开全部
这肯定不对啊,单片机串口通信要有发送函数,接收函数,和串口中断初始化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式