找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机串口如何接收数组?不理解

[复制链接]
跳转到指定楼层
楼主
ID:891306 发表于 2021-4-2 16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手机发送数组后,单片机能接收该数组,并将该数组通过蜂鸣器音乐盒的方式播放出音乐我现在不理解的是,串口如何接收数组,恳请各位大佬指点一二。。。。谢谢



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

使用道具 举报

沙发
ID:47286 发表于 2021-4-2 19:16 | 只看该作者
建立个数组 从0位开始 收一个就存一个进去 然后计数变量+1 就是下一个数组位号 以此类推直到存完所有接收的数据
回复

使用道具 举报

板凳
ID:686782 发表于 2021-4-2 19:23 | 只看该作者
数组不就是多个同类型的集合吗,你字符串不也相当于char数组吗,不是照样能发送 一个道理啊
比如一个char数组8个元素,你想办法让给他分八次发送不就行了  不知道大小的可以用sizeof求元素数目
如果你要同时发声的话应该够呛,不太好协调 这种什么频率音符的数组一般也比较大,串口通讯速率感觉会不太行。
你如果数组都能全部接到了,直接存下来不就行了,然后调用你的音乐播放函数。
回复

使用道具 举报

地板
ID:891306 发表于 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的时候是接收数组模式。但是不知道哪里有问题,恳请大佬指点一下
回复

使用道具 举报

5#
ID:824490 发表于 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)

//处理接收到的有效数据



回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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