找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3438|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)串口如何接收數(shù)組?不理解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:891306 發(fā)表于 2021-4-2 16:23 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
手機(jī)發(fā)送數(shù)組后,單片機(jī)能接收該數(shù)組,并將該數(shù)組通過蜂鳴器音樂盒的方式播放出音樂我現(xiàn)在不理解的是,串口如何接收數(shù)組,懇請(qǐng)各位大佬指點(diǎn)一二。。。。謝謝



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

5#
ID:824490 發(fā)表于 2021-4-3 15:06 | 只看該作者
1:定義一個(gè)接收計(jì)數(shù)器 RX_COUNT=0
2:定義一個(gè)接收數(shù)組 RX_BUF【64】,最多一次接收64B
3:接收中斷中:
i
{
    Res =USART_ReceiveData(USART1);    //接收一個(gè)B
  UART1_SendByte(Res);//有需要?jiǎng)t反彈數(shù)據(jù)
  RX_BUF[RX_COUNT]=Res;//數(shù)據(jù)入組
    if ((RX_BUF[RX_COUNT]==0X0A)&&(RX_BUF[RX_COUNT-1]==0X0D)) // 判斷接收到結(jié)束符
        {
         RX_COUNT=0;//清除接收計(jì)數(shù)
         uart_cmd=1;//置全局標(biāo)志,接收到完整 的一組數(shù)據(jù)
        }
     else RX_COUNT++;//沒有結(jié)束符,繼續(xù)等下一個(gè)字節(jié)
    if (RX_COUNT>64)

    {
      RX_COUNT=0;//計(jì)數(shù)溢出
      UART1_SendByte(Over_flag);//發(fā)送出溢出標(biāo)志,讓對(duì)方重新發(fā)送

    }

    }
   
}
4:在Mian()中
  while(uart_cmd)

//處理接收到的有效數(shù)據(jù)



回復(fù)

使用道具 舉報(bào)

地板
ID:891306 發(fā)表于 2021-4-3 10:09 | 只看該作者
void Usart() interrupt 4        //進(jìn)入中斷服務(wù)函數(shù)
{
        if(form==2)
        {
     if(SBUF=='v')
                {
                        form=0;
                        SBUF=form;
                                timer0h=0;
                                timer0l=0;
                                time=1;
                                sec = 0;
                                num = 0;       
                  while(!TI);                         //等待發(fā)送數(shù)據(jù)完成
            TI=0;                                                 //清除發(fā)送完成標(biāo)志位
                }
                if((form==2)&&(SBUF!='@'))//數(shù)組接收截止標(biāo)志                                             //串口接收
                {       
    if((RI==0)&&(form==2))
   {
                 array[n]=SBUF;
                 SBUF=array[n];
     RI=0;
     n++;
           while(!TI);                         //等待發(fā)送數(shù)據(jù)完成
           TI=0;                                                 //清除發(fā)送完成標(biāo)志位
          }
        }
        }


這是我寫的接收數(shù)組的程序,form==2的時(shí)候是接收數(shù)組模式。但是不知道哪里有問題,懇請(qǐng)大佬指點(diǎn)一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:686782 發(fā)表于 2021-4-2 19:23 | 只看該作者
數(shù)組不就是多個(gè)同類型的集合嗎,你字符串不也相當(dāng)于char數(shù)組嗎,不是照樣能發(fā)送 一個(gè)道理啊
比如一個(gè)char數(shù)組8個(gè)元素,你想辦法讓給他分八次發(fā)送不就行了  不知道大小的可以用sizeof求元素?cái)?shù)目
如果你要同時(shí)發(fā)聲的話應(yīng)該夠嗆,不太好協(xié)調(diào) 這種什么頻率音符的數(shù)組一般也比較大,串口通訊速率感覺會(huì)不太行。
你如果數(shù)組都能全部接到了,直接存下來不就行了,然后調(diào)用你的音樂播放函數(shù)。
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:47286 發(fā)表于 2021-4-2 19:16 | 只看該作者
建立個(gè)數(shù)組 從0位開始 收一個(gè)就存一個(gè)進(jìn)去 然后計(jì)數(shù)變量+1 就是下一個(gè)數(shù)組位號(hào) 以此類推直到存完所有接收的數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表