久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機—再論IIC—軟件通用包(匯編、c語言)—03

51單片機—再論IIC—軟件通用包(匯編、c語言)—03

作者: 時間:2016-11-25 來源:網絡 收藏
感覺心有不甘,呵呵,小小整理一下。

我們知道51單片機中具有IIC總線接口的畢竟是少數(其實我就不知道那款~~)如果是是不帶IIC總線的單片機,并不必擴展IIC總線接口,只是需要通過軟件模擬,這無疑會給IIC總線的應用提供更廣泛的空間。通常大多數的單片機應用系統中只有一個CPU,這種單主系統如果采用IIC總線技術,則總線上只有單片機對IIC總線從器件的訪問,沒有總線的競爭問題。這是后只需要模擬主發送和主接收時序。基于上述考慮,(這才是重點,呵呵),提供在這種使用情況下的時序模擬軟件,使IIC總線的使用不受單片機必須帶有IIC總線接口的限制。

本文引用地址:http://cqxgywz.com/article/201611/321507.htm

下面的9個例子可以作為一個軟件包,這個軟件放入單片機系統的程序程序存儲器中,以便用來調用。

1、IIC總線典型信號時序及模擬子程序(其實上一篇已經介紹過了,不過我這里有點補充,順便小小介紹一下吧)

IIC總線上數據傳送時,有起始位,停止位,應答位,非應答位等信號。按照典型IIC總線傳送速率的要求,如圖:



對于IIC總線的典型信號,可以用指令操作來模擬其時序過程。

若89C51單片機的系統時鐘為12MHz,相信的單周期指令為1us,則起始位(START)、停止位(STOP)、發送應答位(MACK)、發送非應答位(MNACK)的5個模擬子程序如下:

1)啟動IIC總線子程序START(先是匯編,然后是c語言的)

;--------------------------------------------------------
;發開始信號子程序
START:SETBSDA
SETBSCL;起始條件建立大于4.7us
NOP
NOP
NOP
NOP
NOP
CLRSDA;起始條件鎖定大于4us
NOP
NOP
NOP
NOP
NOP
CLRSCL;鉗住總線,準備好發送數據
NOP
RET

//----------------------------------------------------------
//開始信號函數
void IIC_start()
{
sda=1;
_nop_();
scl=1;//開始信號建立時間大于4.7us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
sda=0; //開始信號鎖定大于4us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
scl=0;//鉗住IIC總線,準備發送或者接收數據
_nop_();
_nop_();
}

2)停止IIC總線程序STOP(先是匯編,后是c語言)

;--------------------------------------------------------
;發結束信號子程序
STOP:CLRSDA
NOP
SETBSCL;結束總時間大于4us
NOP
NOP
NOP
NOP
NOP
SETBSDA
NOP ;保證一個終止信號和其實信號的空閑時間大于4.7us
NOP
NOP
NOP
NOP
RET

//---------------------------------------------------------------
//結束信號函數
void IIC_stop()
{
sda=0;
_nop_();
scl=1; //結束時間大于4us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
sda=1;//保證一個終止信號和其實信號的空閑時間大于4.7us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}


上一頁 1 2 3 4 下一頁

評論


技術專區

關閉