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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2981|回復: 21
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主


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



主機的框架




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

使用道具 舉報

沙發
ID:123289 發表于 2022-10-12 17:06 | 只看該作者
先構思一下,如何將數據整理成:你所認為的不亂,而后再按你整理的次序進行收發。
回復

使用道具 舉報

板凳
ID:401564 發表于 2022-10-12 17:59 | 只看該作者
感覺這就是Modbus,沒什么亂不亂的
按照協議寫就行
回復

使用道具 舉報

地板
ID:94031 發表于 2022-10-12 18:18 | 只看該作者
把讀空調機狀態,讀空調傳感器命令格式及回答格式搞清楚,就不會覺得亂。
回復

使用道具 舉報

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

使用道具 舉報

6#
ID:401564 發表于 2022-10-12 19:30 | 只看該作者
gaima 發表于 2022-10-12 19:04
感謝各位大佬回復。我是按照0101,延時等待回復;0104,延時等待回復;0103,延時等待回復,0102,延時等待 ...

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

使用道具 舉報

7#
ID:94031 發表于 2022-10-12 19:36 | 只看該作者
gaima 發表于 2022-10-12 19:04
感謝各位大佬回復。我是按照0101,延時等待回復;0104,延時等待回復;0103,延時等待回復,0102,延時等待 ...

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

使用道具 舉報

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

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

使用道具 舉報

9#
ID:384109 發表于 2022-10-12 21:32 | 只看該作者
這是協議設計的問題,你現在的通訊協議不合適,或者可以說不算是通訊協議
回復

使用道具 舉報

10#
ID:1046624 發表于 2022-10-12 22:50 | 只看該作者
人中狼 發表于 2022-10-12 21:32
這是協議設計的問題,你現在的通訊協議不合適,或者可以說不算是通訊協議

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

使用道具 舉報

11#
ID:384109 發表于 2022-10-12 23:16 | 只看該作者
協議不是這樣定義的,可以借用MODBUS協議
回復

使用道具 舉報

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

使用道具 舉報

13#
ID:94031 發表于 2022-10-13 09:50 | 只看該作者
gaima 發表于 2022-10-12 20:07
對,就這個意思,我該怎么寫,收到這個回復?光是加長delay,沒效果。

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

使用道具 舉報

14#
無效樓層,該帖已經被刪除
15#
ID:390416 發表于 2022-10-13 12:19 | 只看該作者
回復

使用道具 舉報

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

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

使用道具 舉報

17#
ID:1046624 發表于 2022-10-14 09:08 | 只看該作者
人人學會單片機 發表于 2022-10-13 12:19
參考這個  http://m.raoushi.com/bbs/dpj-214747-1.html

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

使用道具 舉報

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

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

使用道具 舉報

19#
ID:1034262 發表于 2022-10-14 10:19 | 只看該作者
串口時序都是固定的,怎么會亂?亂的是你的波特率或數據格式不對,導致亂碼。
回復

使用道具 舉報

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

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

使用道具 舉報

21#
ID:1046624 發表于 2022-10-18 22:50 | 只看該作者
Y_G_G 發表于 2022-10-14 16:32
不管是發送還是接收,正常來說,都不會用Delay(200)這種函數的
不管是發送/接收的數據是多少個字節的,都是 ...

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

使用道具 舉報

22#
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就再沒有接收到新的數據了
回復

使用道具 舉報

23#
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 單片機教程網

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