标题:
51单片机串口如何接收数组?不理解
[打印本页]
作者:
zzzzz2
时间:
2021-4-2 16:23
标题:
51单片机串口如何接收数组?不理解
手机发送数组后,单片机能接收该数组,并将该数组通过蜂鸣器音乐盒的方式播放出音乐我现在不理解的是,串口如何接收数组,恳请各位大佬指点一二。。。。谢谢
作者:
dzbj
时间:
2021-4-2 19:16
建立个数组 从0位开始 收一个就存一个进去 然后计数变量+1 就是下一个数组位号 以此类推直到存完所有接收的数据
作者:
OHHO
时间:
2021-4-2 19:23
数组不就是多个同类型的集合吗,你字符串不也相当于char数组吗,不是照样能发送 一个道理啊
比如一个char数组8个元素,你想办法让给他分八次发送不就行了 不知道大小的可以用sizeof求元素数目
如果你要同时发声的话应该够呛,不太好协调 这种什么频率音符的数组一般也比较大,串口通讯速率感觉会不太行。
你如果数组都能全部接到了,直接存下来不就行了,然后调用你的音乐播放函数。
作者:
zzzzz2
时间:
2021-4-3 10:09
void Usart() interrupt 4 //进入中断服务函数
{
if(form==2)
{
if(SBUF=='v')
{
form=0;
SBUF=form;
timer0h=0;
timer0l=0;
time=1;
sec = 0;
num = 0;
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
if((form==2)&&(SBUF!='@'))//数组接收截止标志 //串口接收
{
if((RI==0)&&(form==2))
{
array[n]=SBUF;
SBUF=array[n];
RI=0;
n++;
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
}
}
这是我写的接收数组的程序,form==2的时候是接收数组模式。但是不知道哪里有问题,恳请大佬指点一下
作者:
名字不是重点
时间:
2021-4-3 15:06
1:定义一个接收计数器 RX_COUNT=0
2:定义一个接收数组 RX_BUF【64】,最多一次接收64B
3:接收中断中:
i
{
Res =USART_ReceiveData(USART1); //接收一个B
UART1_SendByte(Res);//有需要则反弹数据
RX_BUF[RX_COUNT]=Res;//数据入组
if ((RX_BUF[RX_COUNT]==0X0A)&&(RX_BUF[RX_COUNT-1]==0X0D)) // 判断接收到结束符
{
RX_COUNT=0;//清除接收计数
uart_cmd=1;//置全局标志,接收到完整 的一组数据
}
else RX_COUNT++;//没有结束符,继续等下一个字节
if (RX_COUNT>64)
{
RX_COUNT=0;//计数溢出
UART1_SendByte(Over_flag);//发送出溢出标志,让对方重新发送
}
}
}
4:在Mian()中
while(uart_cmd)
{
//处理接收到的有效数据
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1