那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

雙CPU通過普通IO口通信3線雙向零等待通信的詳細概述

Wildesbeast ? 來源:福星電子網 ? 作者:佚名 ? 2019-11-09 11:08 ? 次閱讀

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

許多設備需要通過IO通訊交互數據,怎樣才做到速度最快,通訊可靠,所用資源又少呢?

下面介紹一個我編寫的通訊協議:

它沒有1線,2線那樣節省IO資源,但是它的通訊速度絕對最快,無需延時,且不用中斷,還可以

對等傳輸。

實際情況下C51編寫,實現了50us傳輸一個字節,折合160Kbps左右,晶振22M。

特點如下:

使用3根普通IO通訊

不使用中斷

雙方都可以主動發起數據通訊,也都可以被動接收數據,即可以對等傳輸。

有發送和接收的檢查等待機制,發送方知道對方什么時候收了數據,接收方知道發送方什么時

候發了數據。

無需進行數據延時,最大可能地加快了通訊速度。

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)

{

uchar i;

uint c;

if(!MCLK)return; //

MCLK=0; //申請通訊

DATA=ch;

for(i=4;i!=0;i--)

{

while(SCLK); //檢測從機響應

SDA=BIT0; //放一個bit到SDA

MCLK=1;

DATA=DATA》》1; //準備下一個bit

while(!SCLK); //檢測從機響應

SDA=BIT0; //放一個bit到SDA

MCLK=0;

DATA=DATA》》1; //準備下一個bit

}

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

MCLK=1;

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

SDA=1;

}

//接收一個數據

//調用之前最好檢測MCLK是否為0(對方是否申請數據通訊)再進入,否則里面是死等此信

號!

uchar getbytespi()

{

uchar i;

while(MCLK);

SCLK=0; //接受通訊請求

for(i=4;i!=0;i--)

{

DATA=DATA》》1; //準備收下一個bit

while(!MCLK); //檢測主機放數據

BIT7=SDA;//收一個bit

SCLK=1;

DATA=DATA》》1; //準備收下一個bit

while(MCLK); //檢測主機放數據

BIT7=SDA; //收一個bit

SCLK=0;

}

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

SCLK=1;

return(DATA);

}

責任編輯 LK

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • IO
    IO
    +關注

    關注

    0

    文章

    461

    瀏覽量

    39376
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10905

    瀏覽量

    213034
  • 通信
    +關注

    關注

    18

    文章

    6072

    瀏覽量

    136433
收藏 人收藏

    評論

    相關推薦

    請問有關于STM32普通IO模擬操作SMBus通信的相關實踐經驗嗎?

    求助啊,哪位有關于STM32普通IO模擬操作SMBus通信的相關實踐經驗?分享下,多謝。普通IO
    發表于 10-22 08:43

    AT32F403A 224K RAM 和非等待區關系詳解

    等待區(ZW)使用,96K劃給用戶使用作為RAM使用256K的非等待區里可以通過軟件配置將其中的128K劃出來給用戶作為RAM使用,那么此時用戶就有96+128K RAM可以使用,這
    發表于 11-20 21:25

    普通IO做模擬通信設計的方法

    給從機的目的。(因沒有使用到從機給主機發數據,所以沒有設計)二、使用過程設計在比較熟悉Iic、Spi通信協議,了解時鐘、數據之后,便可以嘗試使用
    發表于 02-09 06:50

    怎樣通過IO端口模擬實現單片機與從設備的SPI通信

    IO模擬SPI根據SPI通信規范,與IO模擬I2C類似,通過
    發表于 02-17 07:19

    CH32V307等待區和非等待區的區別是什么?

    and non-0waiting areas),分為了等待區和非等待區,那么請問:1、這個非等待
    發表于 05-13 06:52

    如何提升非等待區Flash效能

    部分 AT32 帶有非等待區,當代碼超過等待區后,且時鐘不高于 72MHz,讀取Flash 的效能會降低。此時不改變外圍時鐘,如何快速修改程序以提高 Flash 效能?
    發表于 10-20 08:26

    閃存等待(ZW)和非等待(NZW)說明

    閃存等待區(ZW)和非等待區(NZW)有何區別?請說明。
    發表于 10-20 07:01

    如何利用AT32系列MCU存儲器中的等待區(ZW)

    本應用筆記詳細描述了如何利用AT32系列MCU存儲器中的等待區(ZW),實現在擦除或者編程過程中保證CPU重要內容正常運行,免受MCU失速影響。
    發表于 10-24 08:17

    基于RAM的LonWorks智能通信節點設計

    介紹一種基于RAM 的LonWorks 現場總線智能通信節點的設計方法,并給出詳細的設計步驟、硬件及軟件實現。通過此LonWorks 智
    發表于 04-15 10:17 ?23次下載

    基于RAM的CPU并行通信的研究與實現

    本文從現代通信系統的要求出發,詳細研究了利用RAM 來實現CPU 之間高速的并行數據
    發表于 08-26 11:56 ?40次下載

    基于RAM的LonWorks智能通信節點設計

    ?摘要:介紹一種基于RAM的LonWorks現場總線智能通信節點的設計方法,并給出詳細的設計步驟、硬件及軟件實現。通過此LonWor
    發表于 03-24 12:46 ?1298次閱讀
    基于<b class='flag-5'>雙</b><b class='flag-5'>口</b>RAM的LonWorks智能<b class='flag-5'>通信</b>節點設計

    3雙向等待IO通訊機制

    許多設備需要通過IO通訊交互數據,怎樣才做到速度最快,通訊可靠,所用資源又少呢?下面介紹一個我編寫的通訊協議
    發表于 09-28 17:53 ?977次閱讀

    3雙向等待IO通訊機制

    許多設備需要通過IO通訊交互數據,怎樣才做到速度最快,通訊可靠,所用資源又少呢?下面介紹一個我編寫的通訊協議:它沒有1,2那樣節省IO
    發表于 12-21 09:48 ?17次下載
    <b class='flag-5'>3</b><b class='flag-5'>線</b><b class='flag-5'>雙向</b><b class='flag-5'>零</b><b class='flag-5'>等待</b><b class='flag-5'>IO</b>通訊機制

    IO模擬SPI

    IO模擬SPI根據SPI通信規范,與IO模擬I2C類似,通過
    發表于 12-22 19:17 ?20次下載
    <b class='flag-5'>IO</b><b class='flag-5'>口</b>模擬SPI

    關于stm32單片機準雙向IO配置

    我們在開始學習51內核的單片機的時候就知道,p0的引腳都是雙向IO,P1,P2,P3IO
    發表于 12-24 19:19 ?19次下載
    關于stm32單片機準<b class='flag-5'>雙向</b><b class='flag-5'>IO</b><b class='flag-5'>口</b>配置
    真人百家乐官网赌注| 澳门百家乐必胜| 百家乐投注规则| 百家乐官网庄闲点数| 庞博百家乐的玩法技巧和规则| 百家乐官网赌场策略大全| 金利娱乐城代理| 邯郸百家乐园怎么样| 百家乐官网投注心态| 大发888虎牌官方下载| 百家乐增值公式| 太阳城百家乐官网杀猪吗| 大发888送58彩金| 百家乐黑牌靴| 百家乐官网英皇娱乐城| 和记网上娱乐| 职业赌百家乐技巧| 百家乐官网号游戏机| 皇冠网小说微博| 百家乐14克粘土筹码| K7百家乐官网的玩法技巧和规则 | 吉利百家乐官网的玩法技巧和规则| 德令哈市| 威尼斯人娱乐场cqsscgw88| 做生意的怎样招财| 百家乐官网棋牌游戏正式版| 德州扑克 英文| 电脑打百家乐怎么赢| 吉利百家乐官网的玩法技巧和规则 | 足球百家乐投注计算| 大发888娱乐城 健账号| 真钱轮盘游戏| 百家乐官网百家乐官网论坛| 新花园百家乐官网的玩法技巧和规则 | 百家乐娱乐城游戏| 百家乐官网赌博技巧大全| 蒙自县| 澳门顶级赌场娱乐场| 济州岛百家乐的玩法技巧和规则 | 百家乐娱乐官方网| 乐天堂百家乐官网娱乐平台|