久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機串口通訊問題求助 讀出來的數(shù)據(jù)總不對

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:382944 發(fā)表于 2022-3-4 07:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
讀一個傳感器,串口通訊,讀出來的數(shù)據(jù)總不對
cpu stc9c52  晶振11.0592   
接口定義 URAT        

端口名
接口用途
端口 1
接電源負極 (-)
端口 2
接電源正極 (+)
端口 3
A( RX
端口 4
B( TX
通訊協(xié)議
波特率
9600bps
數(shù)據(jù)位
8
停止位
1
校驗位
串口數(shù)據(jù)流格式

B1
B2
B3
B4
B5
B6
模塊地址
TVOC 高
TVOC 低
滿量程高
滿量程低
校驗和
2Ch
   0XXh
    0XXh
    03h   
    0FFh
    0XXh

說明: B1 的內(nèi)容 2Ch 是模塊固定地址。校驗和(B6)=unit_8(B1+B2+B3+B4+B5)
污染氣體濃度值(mg/m3)=(TVOC 濃度高(B2)*256+TVOC 濃度低(B3))


程序:
void uart_init(u8 baud)
{
        TMOD|=0X20;        //設(shè)置計數(shù)器工作方式2
        SCON=0X50;        //設(shè)置為工作方式1
        PCON=0X00;        
        TH1=0XFD;        //計數(shù)器初始值設(shè)置
        TL1=0XFD;
        ES=1;                //打開接收中斷
        EA=1;                //打開總中斷
        TR1=1;                //打開計數(shù)器               
}


void uart() interrupt 4 //串口通信中斷函數(shù)
{
        u8 rec_data;

        RI = 0;                        //清除接收中斷標(biāo)志位
        rec_data=SBUF;        //存儲接收到的數(shù)據(jù)
         
        if (0x2c != rec_data)      --》這里0x2c是設(shè)備的地址,固定值,目前一直讀不到這個值 ,每次都能都出6個數(shù)值,但一直沒有0x2c
                {
                  
                        return;
                }
        uart_co2[uart_cou++]=rec_data;
        if (uart_cou == 6)
        {
                if(uart_co2[5]==uart_co2[0]+uart_co2[1]+uart_co2[2]+uart_co2[3]+uart_co2[4])
                                  temp_co2 = uart_co2[1]*256+uart_co2[2];
                 uart_cou = 0;
                 co2_ok = 1;
         }
         else
         {
                  uart_cou = 0;
         }                        
}

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

使用道具 舉報

沙發(fā)
ID:311903 發(fā)表于 2022-3-4 08:44 | 只看該作者
那你就看看這6個值,每次來一幀報文時,第一個字節(jié)是不是都是一樣的;
此外,你這個串口接收代碼邏輯不對,不應(yīng)該每次都判斷是否為0x2c,不是就退出
回復(fù)

使用道具 舉報

板凳
ID:123289 發(fā)表于 2022-3-4 09:06 | 只看該作者
1、不要在【void uart() interrupt 4】進行數(shù)據(jù)處理。數(shù)據(jù)處理放在中斷外進行。
2、【void uart() interrupt 4】只管下載數(shù)據(jù),且來者不拒,來一個收一個。建立一個緩沖區(qū),收到這此數(shù)據(jù)。
這時處理的好處是:【void uart() interrupt 4】耗時最小,占用主程序的時間就少,卡機的可能性就小。
分析緩沖區(qū)中的數(shù)據(jù),就能知道問題在哪里了,如果沒有問題,也不影響你計算目標(biāo)值。
回復(fù)

使用道具 舉報

地板
ID:213173 發(fā)表于 2022-3-4 10:10 | 只看該作者
建議定義一個接收完成標(biāo)志,接收與解析分開處理
  1. void uart() interrupt 4 //串口通信中斷函數(shù)
  2. {
  3.         static uchar i=0;        //靜態(tài)計數(shù)變量
  4.         RI=0;                                //接收中斷請求標(biāo)志位清0
  5.         uart_co2[i]=SBUF;        //接收到的數(shù)據(jù)串保存在緩存數(shù)組
  6.         if(uart_co2[0]==0x2c)//驗證數(shù)據(jù)頭(起始位)否則被后續(xù)數(shù)據(jù)覆蓋
  7.         {
  8.                 i++;
  9.                 if(i>=6)
  10.                 {
  11.                         flag=1;                        //接收完成標(biāo)志置1
  12.                         i=0;                        //計數(shù)變量清0
  13.                 }
  14.         }
  15. }

  16. void parsing()//解析函數(shù)放在主函數(shù)中調(diào)用
  17. {
  18.         uchar i;       
  19.         if(flag)
  20.         {
  21.                 flag=0;
  22.                 if(uart_co2[5]==uart_co2[0]+uart_co2[1]+uart_co2[2]+uart_co2[3]+uart_co2[4])//驗證
  23.                         temp_co2 = uart_co2[1]<<8|uart_co2[2];//獲取有效數(shù)據(jù)
  24.                 for(i=0;i<6;i++)
  25.                         uart_co2[i]=0;//清除緩存數(shù)組
  26.         }                     
  27. }
復(fù)制代碼
回復(fù)

使用道具 舉報

5#
ID:121859 發(fā)表于 2022-3-4 10:27 | 只看該作者
可能是波特率有問題,主從雙方不一致,或者波特率誤差較大所致,將晶振改為11.0592MHz試試。
回復(fù)

使用道具 舉報

6#
ID:382944 發(fā)表于 2022-6-17 23:33 | 只看該作者
wulin 發(fā)表于 2022-3-4 10:10
建議定義一個接收完成標(biāo)志,接收與解析分開處理

感謝大神指點,問題已解決,波特率設(shè)置問題。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美黄色网 | 日韩欧美三区 | 成人深夜小视频 | 国产熟熟| 久久不射电影网 | 亚洲综合色网 | 精品91久久 | 国产成人精品久久二区二区91 | 欧美精品1区2区 | 4hu最新网址 | 日韩美女在线看免费观看 | 日韩电影免费在线观看中文字幕 | 久久久av| 久久久亚洲综合 | 二区av | 91精品久久久久久久久久入口 | 国产一区二区 | 成人免费在线视频 | 国产精品自产拍在线观看蜜 | 亚洲精品久久久久国产 | 久久久久国产精品一区二区 | 午夜视频一区二区 | 亚洲视频二区 | 日本在线免费视频 | 亚洲性人人天天夜夜摸 | 国产精品3区 | 91久久久久久久久久久 | 7777久久| 亚洲精品国产第一综合99久久 | 色综合色综合网色综合 | 久久国产精品视频观看 | 99re在线视频观看 | 国产精品一区二区三 | 狠狠骚| 手机av在线 | 孕妇一级毛片 | 久久国产精品一区二区 | 色婷婷一区 | 欧美一区二区三区 | 黄网站涩免费蜜桃网站 | 日韩中文字幕 |