I2C每一位信號(hào)的時(shí)序流程,而I2C通信在字節(jié)級(jí)的傳輸中,也有固定的時(shí)序要求。I2C通信的起始信號(hào)(Start)后,首先要發(fā)送一個(gè)從機(jī)的地址,這個(gè)地址一共有 7位,緊跟著的第 8 位是數(shù)據(jù)方向位(R/W),“0”表示接下來(lái)要發(fā)送數(shù)據(jù)(寫(xiě)),‘“1”表示接下來(lái)是請(qǐng)求數(shù)據(jù)(讀)。
我們知道,打電話的時(shí)候,當(dāng)撥通電話,接聽(tīng)方撿起電話肯定要回一個(gè)“喂”,這就是告訴撥電話的人,這邊有人了。同理,這個(gè)第九位 ACK 實(shí)際上起到的就是這樣一個(gè)作用。當(dāng)我們發(fā)送完了這 7 位地址和 1 位方向后,如果發(fā)送的這個(gè)地址確實(shí)存在,那么這個(gè)地址的器件應(yīng)該回應(yīng)一個(gè) ACK(拉低 SDA 即輸出“0”),如果不存在,就沒(méi)“人”回應(yīng) ACK(SDA將保持高電平即“1”)。
那我們寫(xiě)一個(gè)簡(jiǎn)單的程序,訪問(wèn)一下我們板子上的 EEPROM 的地址,另外再寫(xiě)一個(gè)不存在的地址,看看它們是否能回一個(gè) ACK,來(lái)了解和確認(rèn)一下這個(gè)問(wèn)題。
我們板子上的 EEPROM 器件型號(hào)是 24C02,在 24C02 的數(shù)據(jù)手冊(cè) 3.6 節(jié)中可查到,24C02的 7 位地址中,其中高 4 位是固定的 0b1010,而低 3 位的地址取決于具體電路的設(shè)計(jì),由芯片上的 A2、A1、A0 這 3 個(gè)引腳的實(shí)際電平?jīng)Q定,來(lái)看一下我們的 24C02 的電路圖,它和24C01 的原理圖完全一樣,如圖 14-4 所示。
圖 14-4 24C02 原理圖
從圖 14-4 可以看出來(lái),我們的 A2、A1、A0 都是接的 GND,也就是說(shuō)都是 0,因此 24C02的 7 位地址實(shí)際上是二進(jìn)制的 0b1010000,也就是 0x50。我們用 I2C 的協(xié)議來(lái)尋址 0x50,另外再尋址一個(gè)不存在的地址 0x62,尋址完畢后,把返回的 ACK 顯示到我們的 1602 液晶上,大家對(duì)比一下。
/***************************Lcd1602.c 文件程序源代碼*****************************/
#include
#define LCD1602_DB P0
sbit LCD1602_RS = P1^0;
sbit LCD1602_RW = P1^1;
sbit LCD1602_E = P1^5;
/* 等待液晶準(zhǔn)備好 */
void LcdWaitReady(){
unsigned char sta;
LCD1602_DB = 0xFF;
LCD1602_RS = 0;
LCD1602_RW = 1;
do {
LCD1602_E = 1;
sta = LCD1602_DB; //讀取狀態(tài)字
LCD1602_E = 0;
} while (sta & 0x80); //bit7 等于 1 表示液晶正忙,重復(fù)檢測(cè)直到其等于 0 為止
}
/* 向 LCD1602 液晶寫(xiě)入一字節(jié)命令,cmd-待寫(xiě)入命令值 */
void LcdWriteCmd(unsigned char cmd){
LcdWaitReady();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = cmd;
LCD1602_E = 1;
LCD1602_E = 0;
}
/* 向 LCD1602 液晶寫(xiě)入一字節(jié)數(shù)據(jù),dat-待寫(xiě)入數(shù)據(jù)值 */
void LcdWriteDat(unsigned char dat){
LcdWaitReady();
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_E = 1;
LCD1602_E = 0;
}
/* 設(shè)置顯示 RAM 起始地址,亦即光標(biāo)位置,(x,y)-對(duì)應(yīng)屏幕上的字符坐標(biāo) */
void LcdSetCursor(unsigned char x, unsigned char y){
unsigned char addr;
if (y == 0){ //由輸入的屏幕坐標(biāo)計(jì)算顯示 RAM 的地址
addr = 0x00 + x; //第一行字符地址從 0x00 起始
}else{
addr = 0x40 + x; //第二行字符地址從 0x40 起始
}
LcdWriteCmd(addr | 0x80); //設(shè)置 RAM 地址
}
/* 在液晶上顯示字符串,(x,y)-對(duì)應(yīng)屏幕上的起始坐標(biāo),str-字符串指針 */
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){
LcdSetCursor(x, y);//設(shè)置起始地址
while (*str != ‘’){ //連續(xù)寫(xiě)入字符串?dāng)?shù)據(jù),直到檢測(cè)到結(jié)束符
LcdWriteDat(*str++);
}
}
/* 初始化 1602 液晶 */
void InitLcd1602(){
LcdWriteCmd(0x38); //16*2 顯示,5*7 點(diǎn)陣,8 位數(shù)據(jù)接口
LcdWriteCmd(0x0C); //顯示器開(kāi),光標(biāo)關(guān)閉
LcdWriteCmd(0x06); //文字不動(dòng),地址自動(dòng)+1
LcdWriteCmd(0x01); //清屏
}
/*****************************main.c 文件程序源代碼******************************/
#include
#include
#define I2CDelay() {_nop_();_nop_();_nop_();_nop_();}
sbit I2C_SCL = P3^7;
sbit I2C_SDA = P3^6;容-源-電-子-網(wǎng)-為你提供技術(shù)支持
本文地址:http://www.jssjbk.com/dz/22/15755085833520.shtml
本文標(biāo)簽:
猜你感興趣:
運(yùn)用單片機(jī)便是了解單片機(jī)硬件結(jié)構(gòu),以及內(nèi)部資源的運(yùn)用,在匯編或C語(yǔ)言中學(xué)會(huì)各種功用的初始化設(shè)置,以及完成各種功用的程序編制。 運(yùn)用按鈕輸入信號(hào),發(fā)光二極管顯現(xiàn)輸出
關(guān)鍵詞:51單片機(jī)PIC單片機(jī)單片機(jī) 所屬欄目:設(shè)計(jì)編程
現(xiàn)場(chǎng)總線技術(shù)已經(jīng)廣泛應(yīng)用于工業(yè)控制中,尤其是CAN(Controler Area Nerwork)總線由于具有可靠性高、成本低、容易實(shí)現(xiàn)等優(yōu)點(diǎn),在現(xiàn)場(chǎng)總線實(shí)際工程應(yīng)用中占有了較大份額。
關(guān)鍵詞:單片機(jī) 所屬欄目:設(shè)計(jì)編程
我的答案是:不可以原因如下:一、軟件仿真多用于教學(xué),把更多精力用在軟件的實(shí)現(xiàn)上由于學(xué)生學(xué)習(xí)時(shí)間寶貴,焊接一套單片機(jī)實(shí)驗(yàn)板又比較花時(shí)間,并且實(shí)驗(yàn)項(xiàng)目太多,所以為了
關(guān)鍵詞:PIC單片機(jī)51單片機(jī)單片機(jī) 所屬欄目:設(shè)計(jì)編程
對(duì)于新手來(lái)說(shuō),首先根據(jù)自己學(xué)的什么樣單片機(jī)就選什么類(lèi)型的單片機(jī),熟悉什么類(lèi)型的單片機(jī)就選什么類(lèi)型的單片機(jī)。因?yàn)閱纹瑱C(jī)不僅要設(shè)計(jì)電路,還要設(shè)計(jì)控制軟件。選自己熟悉的單片機(jī)上手最快,也最容易獲得成功。下面介紹如何選擇最適合的單片機(jī)。
關(guān)鍵詞: 所屬欄目:設(shè)計(jì)編程
單片機(jī)晶振的作用是什么
在初學(xué)單片機(jī)的時(shí)候,總是伴隨很多有關(guān)于晶振的問(wèn)題,其實(shí)晶振就是如同人的心臟,是血液的脈搏,把單片機(jī)的晶振問(wèn)題搞明白了,51單片機(jī)的其他問(wèn)題
關(guān)鍵詞:51單片機(jī)PIC單片機(jī)單片機(jī) 所屬欄目:設(shè)計(jì)編程
Keil單片機(jī)編程軟件Keil C51是單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。Keil提供了包括C編譯器、宏匯
關(guān)鍵詞:51單片機(jī)PIC單片機(jī) 所屬欄目:設(shè)計(jì)編程
詳解51單片機(jī)運(yùn)行過(guò)程 注:1.ROM:只讀存儲(chǔ)器,單片機(jī)的只讀存儲(chǔ)區(qū)大多用于存儲(chǔ)程序固又稱(chēng)程序存儲(chǔ)器。51單片機(jī)是EPROM,所謂的EPROM是可擦除的只
關(guān)鍵詞: 所屬欄目:設(shè)計(jì)編程
pic單片機(jī)和c51有什么區(qū)別(區(qū)別1)總線結(jié)構(gòu):MCS-51單片機(jī)的總線結(jié)構(gòu)是馮-諾依曼型,計(jì)算機(jī)在同一個(gè)存儲(chǔ)空間取指令和數(shù)據(jù),兩者不能同時(shí)進(jìn)行;而PIC單片機(jī)的總線結(jié)構(gòu)是哈佛結(jié)構(gòu)
關(guān)鍵詞:單片機(jī)PIC單片機(jī)51單片機(jī) 所屬欄目:設(shè)計(jì)編程
實(shí)例分析51單片機(jī)出現(xiàn)故障及解決辦法。詳細(xì)如下:
故障現(xiàn)象:做了一個(gè)單片機(jī)溫度監(jiān)測(cè)系統(tǒng),仿真機(jī)上一切正常,燒寫(xiě)芯片無(wú)法工作。相關(guān)電路框圖: 用51做處理器,外圍電路如
關(guān)鍵詞:單片機(jī)51單片機(jī) 所屬欄目:設(shè)計(jì)編程
PIC單片機(jī)匯編語(yǔ)言指令詳解
pic單片機(jī)為最常用單片機(jī)之一,許多程序均基于pic單片機(jī)進(jìn)行開(kāi)發(fā)。因此,熟練pic單片機(jī)編程尤為重要。為保證大家能準(zhǔn)確、熟練掌握pic單片機(jī)的使
關(guān)鍵詞:PIC單片機(jī)單片機(jī) 所屬欄目:設(shè)計(jì)編程
三種51單片機(jī)程序下載方法介紹
一般只能通過(guò)三種方式下載程序到單片機(jī)中:1.JTAG 2.ISP 3.IAP1.JTAG要使用JTAG方式下載程序,不管是使用J-LINK、ULINK、ST-LINK,只需要把
關(guān)鍵詞:PIC單片機(jī)51單片機(jī)單片機(jī) 所屬欄目:設(shè)計(jì)編程
越來(lái)越多的測(cè)量?jī)x器提供GPIB(General Purpose Intefface Bus)總線接口,通過(guò)該總線可以方便快捷地連接帶有GPIB接口的儀器及計(jì)算機(jī),組成一個(gè)GPlB網(wǎng)絡(luò)。GPIB設(shè)備與計(jì)算機(jī)連
關(guān)鍵詞:PIC單片機(jī)51單片機(jī)單片機(jī) 所屬欄目:設(shè)計(jì)編程
每個(gè)單片機(jī)系統(tǒng)里都有晶振,全程是叫晶體震蕩器,在單片機(jī)系統(tǒng)里晶振的作用非常大,他結(jié)合單片機(jī)內(nèi)部的電路,產(chǎn)生單片機(jī)所必須的時(shí)鐘頻率,單片機(jī)的一切指令的執(zhí)行都是建立
關(guān)鍵詞:51單片機(jī)PIC單片機(jī)單片機(jī) 所屬欄目:設(shè)計(jì)編程
引言變頻調(diào)速作為交流電機(jī)調(diào)速的主要手段已經(jīng)在工業(yè)領(lǐng)域中應(yīng)用的十分廣泛,其具有的調(diào)速范圍寬、穩(wěn)速精度高、動(dòng)態(tài)響應(yīng)快、適用范圍廣、運(yùn)行可靠等技術(shù)性能,已逐步取代直流
關(guān)鍵詞:單片機(jī)變頻器 所屬欄目:設(shè)計(jì)編程
電子密碼鎖按照輸入密碼方式的不同可分為好多種,其中最常用的一種是用數(shù)字鍵盤(pán)輸入密碼的電子密碼鎖。這一講主要介紹用ATmega8和LCD1602液晶顯示器等組成的電子密碼鎖,這
關(guān)鍵詞:單片機(jī) 所屬欄目:設(shè)計(jì)編程
1.實(shí)驗(yàn)任務(wù)如圖所示,監(jiān)視開(kāi)關(guān)K1(接在P3.0端口上),用發(fā)光二極管L1(接在單片機(jī)P1.0端口上)顯示開(kāi)關(guān)狀態(tài),如果開(kāi)關(guān)合上,L1亮,開(kāi)關(guān)打開(kāi),L1熄滅。2.電路原理圖3.系統(tǒng)
關(guān)鍵詞:單片機(jī)LEDLED電路圖 所屬欄目:設(shè)計(jì)編程
近日,有媒體報(bào)道稱(chēng),北京微電子技術(shù)研究所日前成功研制出國(guó)內(nèi)首個(gè)自主可控的宇航用千萬(wàn)門(mén)級(jí)高性能高可靠FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)芯片。FPGA一直是國(guó)內(nèi)的短板,市場(chǎng)基本被
關(guān)鍵詞:單片機(jī) 所屬欄目:設(shè)計(jì)編程
怎么學(xué)單片機(jī)?也常看到有人說(shuō)學(xué)了好幾個(gè)月可就是沒(méi)有什么進(jìn)展。當(dāng)然,受限于每個(gè)人受到的教育水平不同和個(gè)人理解能力的差異,學(xué)習(xí)起來(lái)會(huì)有快慢之分,但我感覺(jué)最重的就是學(xué)
關(guān)鍵詞:單片機(jī) 所屬欄目:設(shè)計(jì)編程
在單片機(jī)中有一些獨(dú)立的存儲(chǔ)單元是用來(lái)控制這些器件的,被稱(chēng)之為特殊功能寄存器(SFR)。 <特殊功能寄存器地址映象表(一)> <特殊功能寄存器地址映象表(二)> <
關(guān)鍵詞:單片機(jī)寄存器 所屬欄目:設(shè)計(jì)編程
倒立擺作為一種典型的控制系統(tǒng)實(shí)驗(yàn)裝置,具有非線性、自然不穩(wěn)定等特性,常用來(lái)作為檢驗(yàn)?zāi)撤N控制理論或方法是否合理的典型方案。一階倒立擺系統(tǒng)能用多種理論和方法來(lái)實(shí)現(xiàn)其
關(guān)鍵詞:單片機(jī) 所屬欄目:設(shè)計(jì)編程