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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12988|回復(fù): 12
收起左側(cè)

原創(chuàng),使用普通IO口自定義協(xié)議實現(xiàn)兩個51單片機互相通訊 附源碼與資料下載

  [復(fù)制鏈接]
ID:284106 發(fā)表于 2018-4-15 16:19 | 顯示全部樓層 |閱讀模式
因為想使兩個51單片機通訊,又不能使用串口,因為STC89C52單片機只有一個串口,己被占用了,沒有串口可以用。所以編寫了這個程序。

使用仿真軟件進(jìn)行測試,工作正常。
01.gif


在電路上實際測試,運行正常。
對控制線,進(jìn)行短接干擾,測試,都按照預(yù)想的結(jié)果運行。

20180415_134318.jpg

測試代碼:
發(fā)送端不停的發(fā)送自定義數(shù)據(jù)幀,每發(fā)送一次,將第數(shù)據(jù)幀中的2個字節(jié)數(shù)加 1,再發(fā)送。
接收端使用LCD1602 將接收的據(jù)據(jù)幀中的第2個字節(jié),顯示出來。
對兩根控制線進(jìn)行斷線,和對地短路干擾測試,也按照預(yù)想,干擾消除后,恢復(fù)正常工作。

下面是說明文檔,附件源代碼,和仿真電路圖下載。

雙單片機通信協(xié)議說明文檔
一、通信協(xié)議的作用
     功能:實現(xiàn)兩片51單片機互相通信,4根線單向通信,8根線雙向通信。
     工作方式:使用普通IO口,不斷輪詢方式通訊。 (不使用單片機的中斷,不使用串口)
     適用場景:電路上兩片51單片機,需要互相通訊。
     傳輸速度:使用Porfessional和keil聯(lián)調(diào),在單片機的晶振頻率為11.0592MHZ,單片機型號AT89C 51。兩片單片機的時間全部用在輪詢,測試約27MS接受完成16個字節(jié)數(shù)據(jù)。
     (注:測試時發(fā)現(xiàn)的問題,Porfessional和keil聯(lián)調(diào),調(diào)試那個CPU就需要把正在調(diào)試的CPU改為U1,不然另一個CPU里面的代碼沒有運行,沒有反應(yīng)不能調(diào)試)。
image001.jpg
image002.jpg




定義數(shù)據(jù)幀的格式


image004.jpg





傳輸1個字節(jié)的流程




   image005.jpg
image006.jpg
image007.jpg
image008.jpg
image009.jpg
image010.jpg

分析運行時的步驟
協(xié)議在運行時,發(fā)送端控制C1,D1,D2三根線的電平狀態(tài),接收端控制C2一根線的電平狀態(tài)。發(fā)送端不斷在輪詢C2的狀態(tài),接收端也同時在不斷輪詢C1的狀態(tài)。這兩根線我們把他稱為控制線,也稱為握手線。D1和D2我們把他稱為數(shù)據(jù)線,兩根線的電平可以表示4種狀態(tài),狀態(tài)的表示如下:
  
D1
  
D2
狀態(tài)
0
0
一個字節(jié)傳輸開始
0
1
0
1
0
1
1
1
一個字節(jié)傳輸結(jié)束


為什么需要有(一個字節(jié)傳輸開始和一個字節(jié)傳輸結(jié)束)這兩種狀態(tài),直接傳送0和1不就可以了嗎?我舉一個例子:現(xiàn)在我們要把4個字節(jié)的數(shù)據(jù)發(fā)送給對方。如:01100110  01100110  01100110 01100110,按照正常的接收,接收端依次讀取8個比特然后存入1字節(jié),依次讀完36比特存入4字節(jié)。但是通訊協(xié)議的設(shè)計應(yīng)該要考慮到異常情況,如果由于某種原因受到干擾,這36比特中間少傳或者多傳了1比特。接收端接下來再以每8比特為1字節(jié)的取,接下來的數(shù)據(jù)就會全部錯位。使用開始位和結(jié)束位來標(biāo)識,就解決了這個問題。
發(fā)送和接收1比特數(shù)據(jù)的步驟如下:
初始狀態(tài):四根線的電平都為高電平1, 51單片機的IO口默認(rèn)也是高電平。接收端在不斷輪詢C1的狀態(tài)。
步驟一:發(fā)送端,發(fā)送1比特數(shù)據(jù),在代碼里,首先將D1和D2置為需要表達(dá)的電平,然后將C1置為底電平,等待接收端C2的底電平響應(yīng)。(因為CPU執(zhí)行指令是需要時間的,如果發(fā)送端先將C1置為底電平,然后再置D1和D2的電平,接收端恰好在C1剛為底電平時,檢測到并且讀取了D1和D2的狀態(tài)。發(fā)送端還沒來的及對D1和D2置需要的電平,這時就讀到了錯誤的數(shù)據(jù)。雖然概率很小,但是這樣可以避免。)
步驟二:接收端,檢測到C1的狀態(tài)是0時,表示發(fā)送端在發(fā)送1比特數(shù)據(jù),接收端讀取D1,D2的電平狀態(tài)接收后,C2置為底電平,表示己接收。然后等待接收端將C1恢復(fù)為高電平
步驟三:發(fā)送端,檢測到C2被置為底電平,表示接收端收到了數(shù)據(jù),于是C1恢復(fù)為高電平等待C2恢復(fù)為高電平
步驟四:接收端,檢測到C1恢復(fù)為高電平,將C2恢復(fù)為高電平。
步驟五:發(fā)送端,檢測到C2恢復(fù)為高電平,繼續(xù)發(fā)送下一個比特。跳到步驟一(循環(huán))。


分析協(xié)議在傳輸數(shù)據(jù)過程中受到干擾會發(fā)生的狀態(tài)
在正常工作的情況下,數(shù)據(jù)會由發(fā)送端發(fā)送,接收端完成接收,一直運行。但是設(shè)計協(xié)議需要考慮到抗干擾性,受到干擾之后,協(xié)議能夠恢復(fù)正常工作,繼續(xù)傳輸數(shù)據(jù),而不是停在某個狀態(tài)。(例如:發(fā)送端在等待接收端響應(yīng),接收端同時也在等在發(fā)送端響應(yīng),一直停在這樣的狀態(tài))。
現(xiàn)在我們來分類別分析發(fā)送端和接收端的等待情況,檢查看能否發(fā)生同時等待的現(xiàn)象,造成死鎖,數(shù)據(jù)傳輸停在這個狀態(tài)。
發(fā)送端發(fā)生等待的2種情況:
(1)    發(fā)送端C1置底電平,等待接收端C2底電平響應(yīng)     (在第一步)
(2)    發(fā)送端C1置高電平,等待接收端C2高電平響應(yīng)     (在第五步)  
接收端發(fā)生等待的2種情況:
(1)    接收端C2是高電平,等待發(fā)送端C1的底電平          (在第一步)         
(2)    接收端C2置底電平,等待發(fā)送端C1高電平響應(yīng)     (在第二步)
分析控制線的狀態(tài):如果有一個條件符合,其中的一端控制線的電平就會發(fā)生改變,不會發(fā)生死鎖。如果沒有條件符合,就會發(fā)生死鎖。
分析1:發(fā)送端(1)和接收端(1)相結(jié)合,總有一個條件符合,不會發(fā)生死鎖。
分析2:發(fā)送端(1)和接收端(2)相結(jié)合,總有一個條件符合,不會發(fā)生死鎖。
分析3:發(fā)送端(2)和接收端(1)相結(jié)合,總有一個條件符合,不會發(fā)生死鎖。
分析4:發(fā)送端(2)和接收端(2)相結(jié)合,總有一個條件符合,不會發(fā)生死鎖。
結(jié)論:不會發(fā)生死鎖
現(xiàn)在我們再來分類別分析發(fā)送端和接收端的異常情況,數(shù)據(jù)在傳輸時,會發(fā)生的情況。
1、接收端和發(fā)送端兩片單片機不是同時啟動分兩種情況
(1)發(fā)送端先啟動,接收端后啟動,結(jié)果:接收端啟動后開始檢測C1的電平,接收比特數(shù)據(jù),不影響。
(2)接收端先啟動,發(fā)送端后啟動,結(jié)果:發(fā)送端啟動后,如果有數(shù)據(jù),置C1為底電平,開始發(fā)送比特數(shù)據(jù),不影響。
2、接收端在接收比特數(shù)據(jù)的時候死機重啟分2種情況
      (1)在步驟一,接收端死機重啟后,接收端檢測到C1為0,開始接收數(shù)據(jù)。如果不是開始位,丟棄接收到的比特,直到收到開始位。結(jié)果:會丟棄不完整數(shù)據(jù),繼續(xù)接收,恢復(fù)通訊。
     (2)在步驟三,接收端死機重啟后,接收端默認(rèn)置C2為高電平,發(fā)送端檢測到C2為高電平,認(rèn)為接收端響應(yīng),繼續(xù)發(fā)送下1比特數(shù)據(jù)。接收端開始接收比特數(shù)據(jù)。結(jié)果:會丟棄不完整數(shù)據(jù),繼續(xù)接收,恢復(fù)通訊。
    (3)在步驟五,接收端死機重啟后,結(jié)果和(步驟三)一樣。
3、發(fā)送端在發(fā)送比特數(shù)據(jù)的時候死機重啟分 3種情況
(1)在步驟二,發(fā)送端死機重啟后,發(fā)送端恢復(fù)到初始狀態(tài),開始發(fā)送1比特,置C1為0。接收端在等待C1為1,等不到。但是接收端檢測到C2被接收端己置為0,發(fā)送端認(rèn)為接收端己收到數(shù)據(jù),發(fā)送端響應(yīng),置C1 為1,接著正常執(zhí)行后面的步驟。結(jié)果:發(fā)送端發(fā)送的這1比特丟失,會丟棄不完整的數(shù)據(jù),繼續(xù)接收,恢復(fù)通訊。
(2)在步驟二,發(fā)送端死機重啟后,發(fā)送端恢復(fù)到初始狀態(tài),開始發(fā)送1比特,置C1為0的過程中。在發(fā)送端重啟過程中,C1有一段時間為高電平,接收端正好收到,并響應(yīng)。接收端進(jìn)入步驟四。
(3)在步驟四,發(fā)送端死機重啟后,發(fā)送端恢復(fù)到初始狀態(tài),開始發(fā)送1比特,置C1為0。接收端己完成1比特接收,沒有等待,繼續(xù)接收數(shù)據(jù)。結(jié)果:會丟棄不完整的數(shù)據(jù),繼續(xù)接收,恢復(fù)通訊。
4、在發(fā)送數(shù)據(jù)的1個初始狀態(tài)和5個步驟過程中,控制線電平受到干擾分類別分析
(1)在初始狀態(tài),發(fā)送端沒有數(shù)據(jù)需要發(fā)送:C1,C2全部為高電平,這時,接收端在等待C1的底電平到來然后接收比特數(shù)據(jù)。C1,C2受到干擾,由高電平變?yōu)榈纂娖健?/div>
接收端的代碼如果正好執(zhí)行到檢測C1位置,接收端響應(yīng),進(jìn)入步驟二,等待C1恢得為高電平。干擾消除后,C1恢復(fù)為高電平,接收端進(jìn)入步驟四完成1比特數(shù)據(jù)接收,繼續(xù)接收下1比特數(shù)據(jù)。結(jié)果:接收1比特錯誤數(shù)據(jù),續(xù)續(xù)接收,恢復(fù)通訊。
接收端的代碼如果沒有執(zhí)行到檢測C1位置,干擾消除。結(jié)果:無影響。
初始狀態(tài),發(fā)送端沒有檢測C2狀態(tài),受到干擾,無影響。
(2)在步驟1,發(fā)送端發(fā)送1比特數(shù)據(jù),置C1為底電平,發(fā)送端等待C2的底電平來到來。C2受到干擾,由高電平變?yōu)榈纂娖健?/div>
     發(fā)送端的代碼如果正好執(zhí)行到檢測C2位置,發(fā)送端認(rèn)為接收端己接收到1比特數(shù)據(jù)并響應(yīng),發(fā)送端進(jìn)入步驟三,置C1為高電平,等待C2恢復(fù)為高電平。干擾消除后,C2恢復(fù)為高電平。發(fā)送端進(jìn)入到步驟五。結(jié)果:接收端少收到1比特數(shù)據(jù),恢復(fù)通訊。
發(fā)送端的代碼如果正好執(zhí)行到檢測C2位置,同時,接收端檢測到C1為底電平,接收1比特數(shù)據(jù)并響應(yīng)C2為底電平。結(jié)果:接收端正確收到1比特數(shù)據(jù),無影響。
發(fā)送端的代碼如果沒有執(zhí)行到檢測到C2的位置,干擾消除。結(jié)果:無影響。
(3)在步驟2,接收端收到1比特數(shù)據(jù),置C2為底電平,接收端等待C1的高電平到來。C1受到干擾,由底電平變?yōu)楦唠娖健?/div>
     接收端代碼正好執(zhí)行到檢測C1位置,接收端認(rèn)為發(fā)送端響應(yīng),接收端完成1比特數(shù)據(jù)接收,進(jìn)入步驟四,恢復(fù)C2為高電平。干擾消除后,繼續(xù)接收發(fā)送端的數(shù)據(jù)。結(jié)果:收到錯誤的1  比特數(shù)據(jù),恢復(fù)通訊。
     接收端代碼沒有執(zhí)行到檢測C1的位置,干擾消除。結(jié)果:無影響。
(4)在步驟3,發(fā)送端等待C2為高電平。受到干擾,C2變?yōu)楦唠娖健?/div>
發(fā)送代碼正好執(zhí)行到檢測C2位置,發(fā)送端認(rèn)為接收端響應(yīng),跳到步驟五。如果此時接收端正好響應(yīng),則完成1比特數(shù)據(jù)發(fā)送。結(jié)果:無影響。
發(fā)送端等待C2為高電平。受到干擾,C2變?yōu)楦唠娖健0l(fā)送代碼正好執(zhí)行到檢測C2位置,發(fā)送端認(rèn)為接收端響應(yīng),跳到步驟五,然后又跳到步驟一,發(fā)送到下1比特數(shù)據(jù)。此時接收端在等待C1的高電平,然而C1是底電平,接收端繼續(xù)等待。但是C2被接收端置為底電平,發(fā)送端認(rèn)為接收端己接收1比特數(shù)據(jù)響應(yīng)。進(jìn)入步驟三,置C1為1,接收端響應(yīng),完成1比特數(shù)據(jù)接收。結(jié)果:接收端少收到1比特數(shù)據(jù)。
(5)在步驟4,接收端己完成接收,接收端在檢測C1的底電平到來,接收數(shù)據(jù)。
       C1受到干擾,由高電平變?yōu)榈纂娖剑缓蟾蓴_消除恢復(fù)為高電平。接收端會多收到1比特數(shù)據(jù)。當(dāng)然這比特數(shù)據(jù)是錯誤的數(shù)據(jù)。結(jié)果:收到錯誤的1比特數(shù)據(jù),恢復(fù)通訊。
        C2受到干擾,由高電平變?yōu)榈纂娖剑蓴_消除后恢復(fù)為高電平。因為發(fā)送端在這一步驟在等待接收端C2的高電平,然后發(fā)送數(shù)據(jù),結(jié)果:干擾消除后發(fā)送端開始發(fā)送數(shù)據(jù),無影響。
(6)在步驟5,實際就是初始狀態(tài)。受到干擾發(fā)生的情況,也一樣,就不再重復(fù)。

結(jié)論:受到干擾有三種結(jié)果:1,多收到1比特數(shù)據(jù)(數(shù)據(jù)是錯誤的)。2,少收到1比特數(shù)據(jù)。3,收到1比特錯誤數(shù)據(jù)。所以通信協(xié)議在受到干擾的情況下,不能保證數(shù)據(jù)的完整性,但是干擾消除,能夠恢復(fù)通訊。這個通信方式,設(shè)計的時候,是盡可能的讓數(shù)據(jù)傳輸,需要上層的通信協(xié)議來識別數(shù)據(jù)是否正確。
image003.jpg
0.png 0.jpg

全部資料51hei下載地址(源碼+資料):
四根線進(jìn)行通訊協(xié)議設(shè)計.rar (2.21 MB, 下載次數(shù): 159)


評分

參與人數(shù) 2黑幣 +115 收起 理由
perfect123 + 15 目前用不到,但是先贊一個
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:98767 發(fā)表于 2018-4-16 01:03 | 顯示全部樓層
這個不錯,謝謝分享
回復(fù)

使用道具 舉報

ID:79034 發(fā)表于 2018-12-5 11:16 | 顯示全部樓層
這個應(yīng)該頂一下
回復(fù)

使用道具 舉報

ID:46999 發(fā)表于 2018-12-6 09:54 | 顯示全部樓層
這種資料很少。感謝樓主的分享!
回復(fù)

使用道具 舉報

ID:71233 發(fā)表于 2019-3-5 15:41 | 顯示全部樓層
厲害厲害,只是需要的連線偏多,但速度一定棒!
回復(fù)

使用道具 舉報

ID:526585 發(fā)表于 2019-5-12 13:44 | 顯示全部樓層
源代碼看不了
回復(fù)

使用道具 舉報

ID:519089 發(fā)表于 2020-10-30 20:31 | 顯示全部樓層
8根線有點太多了,2根IO線就足夠全雙工通信了
回復(fù)

使用道具 舉報

ID:615192 發(fā)表于 2020-11-7 15:50 | 顯示全部樓層
單工通訊是不是一根IO就可以啦
回復(fù)

使用道具 舉報

ID:387856 發(fā)表于 2020-11-9 10:38 | 顯示全部樓層
這個實用性不強吧,IO占用太多了,還不如采用紅外線協(xié)議做通訊呢
回復(fù)

使用道具 舉報

ID:349362 發(fā)表于 2021-5-5 14:30 | 顯示全部樓層
這個不錯測試下看
回復(fù)

使用道具 舉報

ID:519089 發(fā)表于 2021-7-14 19:11 | 顯示全部樓層
單總線就可以 了
回復(fù)

使用道具 舉報

ID:953589 發(fā)表于 2021-7-27 08:18 | 顯示全部樓層
這個很不錯
回復(fù)

使用道具 舉報

ID:87000 發(fā)表于 2021-7-27 14:42 | 顯示全部樓層
1根線應(yīng)該可以吧?

單總線模式
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜免费福利影院 | 日本超碰| 精品久久久999 | 一区二区高清 | 一区二区三区日 | 亚洲欧美日韩久久 | 亚洲一区中文 | 婷婷国产一区二区三区 | 污书屋 | 久久中文字幕电影 | 亚洲精品区 | 欧美日韩一区二区三区四区 | 日本精品一区二区三区视频 | 国产免费高清 | 婷婷毛片 | 激情欧美一区二区三区中文字幕 | 国产精品久久久久久吹潮日韩动画 | 99久久夜色精品国产亚洲96 | 在线中文字幕亚洲 | 日韩精品在线一区二区 | 久久久不卡网国产精品一区 | 在线成人免费av | 一区二区三区日韩精品 | 日日干日日操 | 粉嫩粉嫩芽的虎白女18在线视频 | 亚洲高清在线 | 日本电影网站 | 免费精品在线视频 | 久久麻豆精品 | 国产精品一级在线观看 | 日日操夜夜操天天操 | 免费看a | 九久久| 国产一区二区免费在线 | 日本不卡免费新一二三区 | 日本特黄a级高清免费大片 国产精品久久性 | 欧美人成在线视频 | 丝袜 亚洲 欧美 日韩 综合 | 性高湖久久久久久久久3小时 | 一级在线观看 | 国产一区二区三区在线免费观看 |