欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2090|回復: 4
收起左側

單片機串口數據接收程序問題

[復制鏈接]
ID:1060138 發表于 2023-1-20 17:51 | 顯示全部樓層 |閱讀模式
想要實現串口從上位機接收到的數據一個一個存入數組中,
但是經過測試,數據只能存到數組的第一位中,而且RI=0所在位置不同,存入內容長短不同


void UART1_Isr() interrupt 4
{
        if(RI==1)
        {
                Data=SBUF;
                if(Data!='\0')
                {Sbuf[i++]=Data;}
               
                uart_send(Sbuf[0]);
                uart_string(Sbuf);RI=0;

回復

使用道具 舉報

ID:232462 發表于 2023-1-21 20:11 | 顯示全部樓層
你的程序不完整。而且發送的程序不要在中,有可能造成數據沒發送完又收到新的數據,會丟數據。
中斷只負責把數據送人緩沖區,其他處理在主函數。
回復

使用道具 舉報

ID:883242 發表于 2023-1-23 11:18 | 顯示全部樓層
代碼不全無法分析,i怎么定義的,代碼后面如何處理i的?
回復

使用道具 舉報

ID:824490 發表于 2023-1-26 18:01 | 顯示全部樓層
Sbuf[i++],,這個i是全局變量,該不會是被其它函數修改了吧?
全局變量最好能起個有意義的、個性的名字,不然有可能會被誤操作,我看用rxd_count就不錯
接收數據的數組Sbuf,盡量不要用系統關鍵字SBUF,雖然KEIL大小寫不一樣,你無法保證會不會被誤操作,你看rxd_arr[]如何?
起名字是個學問~~好聽、好拼寫、還要有意義,英文簡寫或漢語拼音都可以啊。不用這么懶吧?
回復

使用道具 舉報

ID:401564 發表于 2023-2-9 23:58 | 顯示全部樓層
當初學ModBus的時候寫的,代碼不怎么好,但也算是正確,你參考一下
void Uart1_Isr() interrupt 4                                                //串口1中斷函數
{
        static unsigned RX_Count=0;                                                //接收到的字節數
        if(TI)                                                                                          //發送中斷
                   {                          
                         TI=0;                                          
                        busy=0;                  
                }
        //────────────────────────────────────────────────────
        if(RI)                                                                                        //接收中斷
                {       
                        RI=0;                                               
                        if((New_Cmd))                                                        //新命令
                           {
                                        New_Cmd=0;                                                //新命令標志位清除       
                                        TR0 = 1;                                                //接收到串口信號后,定時器0開始計時       
                                        RX_Count=0;                                                //重新指定指針位置
                                        Buffer0.cnt_Byte=0;                                //接收字節數清除                                                                       
                                }
                        Buffer0.buf_uart[RX_Count]=SBUF;                //把接收到的數據保存
                        RX_Count++;                                                                //數組指針加1
                        Buffer0.cnt_Byte++;                                                //接收字節數+1
                        T0_1ms_uart=0;                                                        //接收完一個字節數據,重新計時                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                }
        //───────────────────────────────────────────────────────────                                                       
}

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表