iic通訊的內容(只看重點)
1.iic通訊主要依靠兩根線:scl和sda.
2.高位在先,低位在後。
3.有ack和nak之說。
4.起始訊號和終止訊號時,scl在高電平時變化。資料訊號時,scl為低電平期間變化,scl高電平讀取。
5.「整體上來說器件都是有乙個最快速度的限制,而沒有乙個最慢速度的限制,所以在換用高速的微控制器後,通常都是靠在個步驟步驟之間,插入軟體延時來滿足最慢時序的要求」對這句話有深刻理解的話,就會大體上掌握時序。
eeprom
eeprom有好幾個系列:24x01/02/04/08/16,觀察發現最後兩位是01等等,代表容量為1k bit。其他也是這個道理。
我們需要閱讀at2402的手冊,在此之前,需要補充一些知識。
<1>8-byte page(1k,2k),16-byte page(4k,8k,16k)(1k和2k的頁數是8位元組,其餘的幾頁都是16位元組)
<2>1k/2k的硬體位址有3個,言外之意可以乙個匯流排掛8個1k/2k的iic器件。而4k兩個位址位最多掛4個,8k乙個位址位最多掛兩個,16k只能乙個匯流排掛乙個。
正式進入手冊,跟之前認識溫度感測器是類似的,還是需要讀和寫的操作,但與iic結合使用,又會有很多的不同。
還是要先看原理圖:
在這些腳中,我們寫程式只用scl和sda 兩個引腳。
接下來,看著說明書寫程式。
第一步:先來看看一張圖有乙個整體的把握。
第二步:先寫開始和停止的子函式。
void iicstrat()//1 iic的起始訊號
void iicstop()//2 iic的停止訊號
這裡需要說明的是,起始命令時,scl和sda都是由高到低的。而停止命令時,與之相反。
第三步:寫的命令。在寫之前,看一張儲存位址的圖。
void iicwrite(uchar add,uchar dat)//3 寫資料,定義乙個位址,定義乙個資料
void writebyte(uchar dat)//4 寫位元組
scl=0;//必須置0,因為要給乙個返回的訊號 }
uchar ack()//5 響應訊號的程式
else //返回是1的時候,才會回到寫資料的函式中
}void iicdelay(uchar m)//6 特殊的延遲,此處定義了5個時鐘週期
while(m--);
}
第四步:讀的命令。
uchar iicread(uchar add)//7 讀的操作
uchar iicreadbyte()//8 寫位元組
scl=0;
} return dat;
}
藍橋盃國賽 串列埠通訊
出錯點if rx buffer date 0 a rx buffer date 1 b rx buffer date 2 c 乙個字元用單引號,字串才用多引號 分析找到stcf1的例程,定時器2串列埠1或者定時器1串列埠1 只有串列埠1可以用來進行通訊 建議使用定時器1作為波特率發生器,定時器2作為...
藍橋杯微控制器 賽後資料整理(三) IIC匯流排
模板 at24c02 本文適用於ct107d競賽板 iap15轉接板 a1a2三個引腳決定,在ct107d中fcp8591的位址是0x90,at24c02的位址是0xa0。讀 寫標誌位 器件位址的後一位為讀寫標誌位,1為讀操作,0為寫操作。fcp8591是乙個用於數模相互轉換的晶元。位說明 70置零...
藍橋杯 遞迴與迴圈
致謝藍橋杯 有些語言沒有迴圈語句,只能使用遞迴 我們來個案例,非常簡單列印 從0到9 我們用迴圈很容易解決 當然遞迴也不難 for int i 0 i 9 i 先上遞迴 public static void f int n 我們這樣理解,上級來了乙個任務 我要安排下級,但是我也要做一些事情 列印 但...