3線雙向零等待IO通訊機制

2021-06-18 04:16:03 字數 2116 閱讀 2712

許多裝置需要通過io通訊互動資料,怎樣才做到速度最快,通訊可靠,所用資源又少呢? 下面介紹乙個我編寫的通訊協議:

它沒有1線,2線那樣節省io資源,但是它的通訊速度絕對最快,無需延時,且不用中斷,還可以對等傳輸.實際情況是在51平台上實現了50us傳輸乙個位元組,折合160kbps左右,晶振 22m。

特點如下:

1)使用3根普通io通訊

2)不使用中斷,雙方都可以主動發起資料通訊,也都可以被動接收資料,即可以對等傳輸.有傳送和接收的檢查等待機制,傳送方知道對方什麼時候收了資料,接收方知道傳送方什麼時候發了資料.無需進行資料延時,最大可能地加快了通訊速度.

3)cpu閒的時候通訊速率可以最快.忙的時候又可以無限等待.保證絕對同步,不會出錯.雙方cpu工作速度可以任意,即使是51和p4通訊,也能保證正確無誤.

ask w1 w2    w3    w4    w5   w6    w7    w8

mclk ┐┌──┐      ┌──┐      ┌──┐      ┌──┐      ┌───

└┘      └──┘      └──┘      └──┘      └──┘

sdt ___┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐________

└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘

sclk ┐   ┌──┐      ┌──┐      ┌──┐      ┌──┐    ┌─

└─┘      └──┘      └──┘      └──┘      └──┘

res  r1    r2   r3    r4    r5   r6     r7    r8

1.主機發起通訊申請到從機

主機檢測mclk是否為0,為0的話是對方在申請通訊,退出函式.

主機檢測到mclk=1,表示通訊空閒.

主機將mclk=0,表示申請通訊. 之後檢測sclk是否為0(是否響應通訊)

2.從機響應通訊,從機在閒時檢測mclk是否為0,發現為0則主機向它發起了通訊申請.

從機將sclk=0,表示接受申請,之後檢測mclk是否變為1,如果是1則主機已經發出了第乙個bit的資料.

3.主機發現sclk=0,知道從機已經開始準備接受資料.

4.主機傳送第乙個bit到sda.

5.主機將mclk=1,表示已經傳送第乙個bit到sda.

6.從機發現mclk=1,知道主機已經發出第乙個資料

7.從機收第乙個bit的資料.

8.從機將sclk=1,表示已經收了第乙個bit.之後等待mclk是否變0,如果變0,則主機已經發出了第二個bit

9.主機發現sclk=1,知道從機已經開始準備接受第二個資料.

10.主機傳送第二個bit到sda.

11.主機將mclk=0,表示已經傳送第二個bit到sda.

12.從機發現mclk=0,知道主機已經發出第二個資料

13.從機收第二個bit的資料.

14.從機將sclk=0,表示已經收了第二個bit.之後等待mclk是否變1,如果變1,則主機已經發出了第三個bit

15.再重複3-14,3遍,傳完8bit資料.

16.主機發現sclk=0,知道從機已經收完8位資料

17.主機將mclk=1,準備下一輪通訊

18.從機發現mclk=1,知道主機已經收起mclk

19.從機將sclk=1,準備下一輪通訊

附源**:

sbit mclk=p3^5;

sbit sclk=p3^6;

sbit sda=p3^7;

uchar bdata data;

sbit bit0=data^0;

sbit bit7=data^7;

// 傳送乙個資料

putbytespi(uchar ch)

while(sclk); //檢測從機收完

mclk=1;

while(!sclk);//等待從機準備好

sda=1;

}//接收乙個資料

//呼叫之前最好檢測mclk是否為0(對方是否申請資料通訊)再進入,否則裡面是死等此訊號!

uchar getbytespi()

while(!mclk); //檢測主機發完

sclk=1;

return(data);

}

ln火線零線 ln線哪個是火線零線

我們在接線的時候,首先需要區分零線和火線以及地線,而不同的電線會與不同的介面相連線。在連線插座的時候,上面會有不同的接線柱子,分別有不同的字母表示,比如有l還有n,那麼l和n哪個是火線?哪個又是零線?一 l n線哪個是火線 可以通過兩個不同的字母來區分,l它代表的是live,也就是說是火線的意思。而...

零線火線 powerline

時間限制 1 sec 記憶體限制 128 mb 題目描述 左手抓零線,右手抓火線,卒不卒?某物理老師激情講課 花生 一直很喜歡玩零線和火線。然而大家都知道,玩電線是十分危險的,若同時接觸零線和火線,電流將直接通過心臟,非常危險。所以 花生 一直都帶著橡膠手套玩電線。但是帶著橡膠手套玩起來很沒有手感啊...

火線零線地線

1.三相 三根正弦交流電相位相差120度。通常稱這樣的一根導線為相線 火線 通常電力傳輸是以3相四線的方式 三根相線一根零線。三相電的跟頭稱為相線,三相電的三根尾連線在一起稱為中性線,也叫 零線 因為三相平衡時刻中性線中沒有電流通過了,或者它直接或間接連線到大地了,跟大地電壓也接近0。地線是把裝置或...