51单片机串口接收一个数组

希望串口接收一组8位数。现在遇到的问题是,程序在结束完毕后没法在LED上显示。下面是部分程序:while(RI);//接收数据,若字符未接受完,一直等待{RI=0;tem... 希望串口接收一组8位数。现在遇到的问题是,程序在结束完毕后没法在LED上显示。
下面是部分程序:
while(RI); //接收数据,若字符未接受完,一直等待
{
RI=0;
temp[num]=SBUF;
num++;
endmark=1;
}
if (temp[1]==0x31)
{
LS138A=1; LS138B=0; LS138C=0;P0=0x5b; delay(150);
}
下面的IF用于检验是不是接收到了数据,以及检测数据内容。但实际上P0的数据并未在LED上显示。
其中temp[]是个数组。请高手给解释一下。谢谢。
展开
 我来答
百度网友5ffd0d3
推荐于2016-05-21 · TA获得超过718个赞
知道小有建树答主
回答量:386
采纳率:100%
帮助的人:242万
展开全部
while(RI); //接收数据,若字符未接受完,一直等待
{
RI=0;
temp[num]=SBUF;
num++;
endmark=1;
/***************************************************************************************************************
假如你波特率为9600,那么接收一个位时间大概为100us,假如你的单片机执行一条语句1us,
那么你用查询的方式有可能会是你只接收到第一个字节后,就会推出这个while循环.
***************************************************************************************************************/
}

建议你用串口中断的方式来接收多个字节的数据,下面是我之前写过的程序
/******************************************************************************************
串口中断函数
ReData[]: 里是一个字节类型的数组,这里一次只接收4个字节数据.
********************************************************************************************/
void Usart_isr() interrupt 4 using 2
{
if(RI)
{
ReData[ReceiveCount++] = SBUF;
if(ReceiveCount > 3)
{
ReceiveCount = 0;
}
RI = 0;
}
}
卷境锅1776
2018-03-02 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:54
采纳率:71%
帮助的人:13万
展开全部
1、在temp[num]=SBUF增加一个点灯的代码 ,这样可以判定是串口是否收到数据;
2、串口中断里面要作数组越界判断,具体是在num++;之后判定 这个num是否已经超过了你定义的temp[]这个数组的界限;
3、由于在板子上电时,串口上可能有浪涌数据(这个数据是一个随机的值),所以可能导致你串口收到的数据里面0x31数据并不是在temp[1]中,最好让串口收到数据后立即也将数据发回到电脑
4、检查你串口初始化时波特率是否设置正确,串口收发端的波特率是否是匹配的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
户哲茂5B
推荐于2018-03-03 · TA获得超过817个赞
知道小有建树答主
回答量:781
采纳率:59%
帮助的人:134万
展开全部
1.你先显示num这个变量试试,看你是否接收到了数据。
2. 把显示数值换成一个常数,试试你的显示是否正常
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无畏无知者

2018-03-02 · TA获得超过4.5万个赞
知道大有可为答主
回答量:2.1万
采纳率:86%
帮助的人:5203万
展开全部
1)num没有赋初值,是在循环外赋值了吧;
2)RI 放在循环里,会不断被清零,那么其在哪里,什么条件下,值被改变;
3)if (temp[1]==0x31) 语句中,如果接收的数据没有符合条件的,自然的,就不会执行其下面的输出语句了;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
壕铭爽
2013-09-18 · 超过23用户采纳过TA的回答
知道答主
回答量:127
采纳率:0%
帮助的人:49.4万
展开全部
程序发完吧,看上去是RI那里有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式