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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2420|回復: 21
收起左側

STC15單片機串口通信,時序太亂,怎么改程序?

[復制鏈接]
ID:1046624 發表于 2022-10-12 15:28 | 顯示全部樓層 |閱讀模式
221012151255.jpeg

這是485的報文,黑色是主機發的,按01 01,01 04 ,01 03 ,01 02 逐條發,藍色是從機回答。


221012152514.jpeg
主機的框架
221012152246.jpeg



回復

使用道具 舉報

ID:123289 發表于 2022-10-12 17:06 | 顯示全部樓層
先構思一下,如何將數據整理成:你所認為的不亂,而后再按你整理的次序進行收發。
回復

使用道具 舉報

ID:401564 發表于 2022-10-12 17:59 | 顯示全部樓層
感覺這就是Modbus,沒什么亂不亂的
按照協議寫就行
回復

使用道具 舉報

ID:94031 發表于 2022-10-12 18:18 | 顯示全部樓層
把讀空調機狀態,讀空調傳感器命令格式及回答格式搞清楚,就不會覺得亂。
回復

使用道具 舉報

ID:1046624 發表于 2022-10-12 19:04 | 顯示全部樓層
感謝各位大佬回復。我是按照0101,延時等待回復;0104,延時等待回復;0103,延時等待回復,0102,延時等待。收到回復判斷驗證下,再發去5A A5。現在第一條,0104的指令發出,后才收到0101的回答指令。順序亂了,影響我準確性。我加長延時也沒用。還有0104、0103、0102的指令還有幾率發不出被吞。
485單獨測試從機,幾乎不會漏發,響應時間也就30ms左右。
回復

使用道具 舉報

ID:401564 發表于 2022-10-12 19:30 | 顯示全部樓層
gaima 發表于 2022-10-12 19:04
感謝各位大佬回復。我是按照0101,延時等待回復;0104,延時等待回復;0103,延時等待回復,0102,延時等待 ...

你先去看一下,是不是Modbus
如果是,就不是你這種時序了
應該是接收和發送同時進行的
每接收一個字節的數據就保存一次,30mS沒有接收到下一個字節,就認為是數據結束了
接收是要開啟中斷進行接收的,你不知道什么時候來數據的
單片機發送是另外一個程序,跟接收不一樣的,你只管發送就行
回復

使用道具 舉報

ID:94031 發表于 2022-10-12 19:36 | 顯示全部樓層
gaima 發表于 2022-10-12 19:04
感謝各位大佬回復。我是按照0101,延時等待回復;0104,延時等待回復;0103,延時等待回復,0102,延時等待 ...

明顯0101收到,在你的等待時間沒有回復你,所以你得要求對方收到馬上回復你,你收到0101回復后再通知下一位,這樣才不會亂。
回復

使用道具 舉報

ID:1046624 發表于 2022-10-12 20:07 | 顯示全部樓層
xuyaqi 發表于 2022-10-12 19:36
明顯0101收到,在你的等待時間沒有回復你,所以你得要求對方收到馬上回復你,你收到0101回復后再通知下一 ...

對,就這個意思,我該怎么寫,收到這個回復?光是加長delay,沒效果。
回復

使用道具 舉報

ID:384109 發表于 2022-10-12 21:32 | 顯示全部樓層
這是協議設計的問題,你現在的通訊協議不合適,或者可以說不算是通訊協議
回復

使用道具 舉報

ID:1046624 發表于 2022-10-12 22:50 | 顯示全部樓層
人中狼 發表于 2022-10-12 21:32
這是協議設計的問題,你現在的通訊協議不合適,或者可以說不算是通訊協議

因為從機也是我瞎編的,都還沒加入crc檢驗,協議按自己想的簡單的來。我希望先架好框架,通訊正常順暢,采集到的數據直接轉到串口屏上去。
回復

使用道具 舉報

ID:384109 發表于 2022-10-12 23:16 | 顯示全部樓層
協議不是這樣定義的,可以借用MODBUS協議
回復

使用道具 舉報

ID:1046624 發表于 2022-10-13 08:47 | 顯示全部樓層
用的是串口中斷,我用485轉usb試驗,延時200,8字節數據才能完整的收到。懷疑是延時200里,已經接收到數據了。用max485,發送轉接收,這主機接收完全沒反應。用自動收發的485芯片,才看到我要的接收反饋5A A5。我只想做到基本的一問一答,主機和從機都是我寫的,還扯不到rtu協議吧。
回復

使用道具 舉報

ID:94031 發表于 2022-10-13 09:50 | 顯示全部樓層
gaima 發表于 2022-10-12 20:07
對,就這個意思,我該怎么寫,收到這個回復?光是加長delay,沒效果。

在規定時間沒有收到回復,說明這一路有故障放棄,然后通知下一路,同樣過程。
回復

使用道具 舉報

ID:390416 發表于 2022-10-13 12:19 | 顯示全部樓層
回復

使用道具 舉報

ID:401564 發表于 2022-10-13 13:18 | 顯示全部樓層
gaima 發表于 2022-10-12 22:50
因為從機也是我瞎編的,都還沒加入crc檢驗,協議按自己想的簡單的來。我希望先架好框架,通訊正常順暢, ...

如果你用串口屏,那就應該用跟串口屏一樣的協議,這樣一來,串口屏和空調控制就可以用相同的函數了
不用再自己搞一個什么協議
一般串口屏都有協議的
回復

使用道具 舉報

ID:1046624 發表于 2022-10-14 09:08 | 顯示全部樓層
人人學會單片機 發表于 2022-10-13 12:19
參考這個  http://www.zg4o1577.cn/bbs/dpj-214747-1.html

感謝,有樣例,我學習最快了。
回復

使用道具 舉報

ID:1046624 發表于 2022-10-14 09:15 | 顯示全部樓層
Y_G_G 發表于 2022-10-13 13:18
如果你用串口屏,那就應該用跟串口屏一樣的協議,這樣一來,串口屏和空調控制就可以用相同的函數了
不用再 ...

欣瑞達或者迪文串口屏,它就是8字節指令,所以發送函數用的同一個。但是接收函數就不行了,空調機一個指令就有43個字節。我給定義了一個接收長度。懷疑發送delay時,接收中斷已經啟動,但是接收長度還使用的上一個長度。
回復

使用道具 舉報

ID:1034262 發表于 2022-10-14 10:19 | 顯示全部樓層
串口時序都是固定的,怎么會亂?亂的是你的波特率或數據格式不對,導致亂碼。
回復

使用道具 舉報

ID:401564 發表于 2022-10-14 16:32 | 顯示全部樓層
gaima 發表于 2022-10-14 09:15
欣瑞達或者迪文串口屏,它就是8字節指令,所以發送函數用的同一個。但是接收函數就不行了,空調機一個指 ...

不管是發送還是接收,正常來說,都不會用Delay(200)這種函數的
不管是發送/接收的數據是多少個字節的,都是同時進行的
中斷中要檢測是發送還是接收中斷,只在中斷中緩存數據
所有的數據又不是同步的,有時候你還沒發送完,就接收到一個數據了
回復

使用道具 舉報

ID:1046624 發表于 2022-10-18 22:50 | 顯示全部樓層
Y_G_G 發表于 2022-10-14 16:32
不管是發送還是接收,正常來說,都不會用Delay(200)這種函數的
不管是發送/接收的數據是多少個字節的,都是 ...

感謝大佬回復,是考慮到指令發出,處理,再接收,中間這段時間不可控。主機用while(count),那萬一沒收到信號,就要無限死機了,再加定時器的話,不是跟Delay(200)的延時一樣的嘛。這問題困擾我好久了。
回復

使用道具 舉報

ID:401564 發表于 2022-10-19 14:01 | 顯示全部樓層
gaima 發表于 2022-10-18 22:50
感謝大佬回復,是考慮到指令發出,處理,再接收,中間這段時間不可控。主機用while(count),那萬一沒收 ...

增加一個全局變量 T0_1ms_uart

這個變量在定時器中斷中++
//定時器中斷
{
if(T0_1ms_uart<250)T0_1ms_uart++;//串口時間++}

這個變量在串口中斷中,每次接收到一個字節數據就清除
//串口中斷
{

T0_1ms_uart=0//接收完一個字節數據,重新計時

}

你就可以在while中增加一個   T0_1ms_uart>某個時間   這樣的判斷
只要T0_1ms_uart的值大于你設定的值,比如200mS,就說明:在串口接收完一個字節的數據之后,超過200mS就再沒有接收到新的數據了
回復

使用道具 舉報

ID:1046624 發表于 2022-10-22 16:51 | 顯示全部樓層
Y_G_G 發表于 2022-10-19 14:01
增加一個全局變量 T0_1ms_uart

這個變量在定時器中斷中++

感謝各位大佬回復。終于搞清楚了,是從機模塊,接收發送切換太快,主機的接收漏收了。從機加了延時好了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本a在线| 亚洲精品中文字幕在线观看 | 人人射人人草 | 精品国产乱码久久久久久果冻传媒 | 美女视频黄色的 | av在线成人 | 三级在线观看 | 日日操日日干 | 极情综合网| 日韩亚洲视频在线 | 中文精品视频 | 久久男人天堂 | 日韩一级欧美一级 | 五月婷六月丁香 | 国产在线网站 | 日韩精品中文字幕在线 | 中文字幕亚洲精品 | 国产69久久精品成人看动漫 | 一区网站 | 日韩高清电影 | 一级视频在线免费观看 | 国产一级淫片a直接免费看 免费a网站 | 久久99蜜桃综合影院免费观看 | 99成人在线视频 | 81精品国产乱码久久久久久 | 精品久久久久久亚洲精品 | 日韩有码一区二区三区 | 国产精品欧美一区二区三区 | 神马影院一区二区三区 | 综合一区| 国产一区二区三区视频 | 二区精品 | 国产精品成人国产乱一区 | 特级黄一级播放 | 免费在线观看一区二区 | 免费的黄色片子 | 不卡一区二区三区四区 | 天堂网色 | 日韩在线播放中文字幕 | 好姑娘影视在线观看高清 | 成人av激情 |