版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、I2C存儲(chǔ)器實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康?、了解I2C總線(xiàn)的工作原理2、掌握I2C總線(xiàn)驅(qū)動(dòng)程序的設(shè)計(jì)和調(diào)試方法3、掌握I2C總線(xiàn)存儲(chǔ)器的讀寫(xiě)方法實(shí)驗(yàn)儀器單片機(jī)開(kāi)發(fā)板、穩(wěn)壓電源、計(jì)算機(jī)實(shí)驗(yàn)原理1、I2C總線(xiàn)常識(shí)I2C總線(xiàn)采用一個(gè)雙線(xiàn)式漏極開(kāi)路接口,可在一根總線(xiàn)上支持多個(gè)器件和主控器。所連接的器件只會(huì)把總線(xiàn)拉至低電平,而決不會(huì)將其驅(qū)動(dòng)至高電平??偩€(xiàn)在外部通過(guò)一個(gè)電流源或上拉電阻器連接至一個(gè)正電源電壓。當(dāng)總線(xiàn)空閑時(shí),兩條線(xiàn)路均為高電平。在標(biāo)準(zhǔn)模式中,I2C總線(xiàn)上的數(shù)據(jù)傳輸速率高達(dá)100kbit/s,而在快速模式中則高達(dá)400kbit/s。I2C總線(xiàn)上的每個(gè)器件均由一個(gè)存儲(chǔ)于該器件中的唯一地址來(lái)識(shí)別,并可被用作一個(gè)發(fā)
2、送器或接收器(視其功能而定)。除了發(fā)送器和接收器之外,在執(zhí)行數(shù)據(jù)傳輸時(shí),還可把器件視作主控器或受控器。主控器是負(fù)責(zé)啟動(dòng)總線(xiàn)上的數(shù)據(jù)傳輸并生成時(shí)鐘信號(hào)以允許執(zhí)行該傳輸?shù)钠骷?。同時(shí),任何被尋址的器件均被視作受控器。CAT24WC01/02/04/08/16是一個(gè)1K/2K/4K/8K/16K位串行CMOSEEPROM,內(nèi)部含有128/256/512/1024/2048個(gè)8位字節(jié),CATALYST公司的先進(jìn)CMOS技術(shù)實(shí)質(zhì)上減少了器件的功耗,CAT24WC01有一個(gè)8字節(jié)頁(yè)寫(xiě)緩沖器,CAT24WC02/04/08/16有一個(gè)16字節(jié)頁(yè)寫(xiě)緩沖器,該器件通過(guò)I2C總線(xiàn)接口進(jìn)行操作,有一個(gè)專(zhuān)門(mén)的寫(xiě)保護(hù)功能
3、,并且器件能與400KHzI2C總線(xiàn)兼容。引腳名稱(chēng)和功能如圖1所示。圖1 24系例I2C存儲(chǔ)器引腳說(shuō)明通過(guò)器件地址輸入端A0、A1和A2可以實(shí)現(xiàn)將最多8個(gè)24WC01和24WC02器件4個(gè)24WC04器件,2個(gè)24WC08器件和1個(gè)24WC16器件連接到總線(xiàn)上。2、I2C總線(xiàn)協(xié)議(1)只有在總線(xiàn)空閑時(shí)才允許啟動(dòng)數(shù)據(jù)傳送。(2)在數(shù)據(jù)傳送過(guò)程中,當(dāng)時(shí)鐘線(xiàn)為高電平時(shí),數(shù)據(jù)線(xiàn)必須保持穩(wěn)定狀態(tài),不允許有跳變。時(shí)鐘線(xiàn)為高電平時(shí),數(shù)據(jù)線(xiàn)的任何電平變化將被看作總線(xiàn)的起始或停止信號(hào)。(3)起始信號(hào)時(shí)鐘線(xiàn)保持高電平期間,數(shù)據(jù)線(xiàn)電平從高到低的跳變作為I2C總線(xiàn)的起始信號(hào)。(4) 停止信號(hào)時(shí)鐘線(xiàn)保持高電平期間,數(shù)據(jù)
4、線(xiàn)電平從低到高的跳變作為I2C總線(xiàn)的停止信號(hào)。I2C總線(xiàn)時(shí)序:I2C總線(xiàn)時(shí)序圖I2C總線(xiàn)啟動(dòng)停止信號(hào)波形:SCL為高電平,SDA降沿為啟動(dòng)信號(hào);SCL為高電平,SDA上升沿為停止信號(hào)。I2C總線(xiàn)啟動(dòng)停止信號(hào)I2C總線(xiàn)寫(xiě)周期波形:SCL正脈沖鎖存數(shù)據(jù),或SCL為高電平數(shù)據(jù)有效。SCL高電平期間SDA數(shù)據(jù)應(yīng)保持不變。I2C總線(xiàn)寫(xiě)時(shí)序波形I2C總線(xiàn)應(yīng)答信號(hào)波形:I2C總線(xiàn)數(shù)據(jù)傳送時(shí),每成功地傳送一個(gè)字節(jié)數(shù)據(jù)后,接收器都必須產(chǎn)生一個(gè)應(yīng)答信號(hào)。應(yīng)答的器件在第9個(gè)時(shí)鐘周期時(shí)將SDA線(xiàn)拉低,表示其已收到一個(gè)8 位數(shù)據(jù)。I2C總線(xiàn)讀時(shí)序3、24C系列存儲(chǔ)器讀寫(xiě)操作(1)24系列常用存儲(chǔ)器器件地址安排24系例存
5、儲(chǔ)器器件地址安排(2)字節(jié)寫(xiě)操作在字節(jié)寫(xiě)模式下,主器件發(fā)送起始命令和從器件地址信息(R/W位置零)給從器件,在從器件產(chǎn)生應(yīng)答信號(hào)后,主器件發(fā)送CAT24WC01/02/04/08/16的1字節(jié)地址(存儲(chǔ)容量大的存儲(chǔ)器字節(jié)地址兩字節(jié)),主器件在收到從器件的另一個(gè)應(yīng)答信號(hào)后,再發(fā)送數(shù)據(jù)到被尋址的存儲(chǔ)單元。CAT24WC01/02/04/08/16再次應(yīng)答,并在主器件產(chǎn)生停止信號(hào)后,開(kāi)始內(nèi)部數(shù)據(jù)的擦寫(xiě),在內(nèi)部擦寫(xiě)過(guò)程中從器件不再應(yīng)答主器件的任何請(qǐng)求(10ms)。如圖所示。 字節(jié)寫(xiě)操作數(shù)據(jù)幀結(jié)構(gòu)(3)頁(yè)寫(xiě)操作(提高寫(xiě)入速度)根據(jù)頁(yè)緩沖區(qū)的大小,頁(yè)寫(xiě)的字節(jié)數(shù)不能超過(guò)緩沖區(qū)大小。如果在發(fā)送停止信號(hào)之前主器
6、件發(fā)送超過(guò)緩沖區(qū)大小,地址計(jì)數(shù)器將自動(dòng)翻轉(zhuǎn),先前寫(xiě)入的數(shù)據(jù)被覆蓋。如圖所示。頁(yè)寫(xiě)操作數(shù)據(jù)幀結(jié)構(gòu)(4)當(dāng)前地址讀操作當(dāng)讀取一個(gè)字節(jié)數(shù)據(jù)后,存儲(chǔ)器內(nèi)部地址計(jì)數(shù)器加1。當(dāng)讀到最后一字節(jié)時(shí),計(jì)數(shù)器將翻轉(zhuǎn)到0且繼續(xù)輸出數(shù)據(jù)。CAT24WC01/02/04/08/16接收到從器件地址信號(hào)后(R/W位置1),它首先發(fā)送一個(gè)應(yīng)答信號(hào),然后發(fā)送一個(gè)8位字節(jié)數(shù)據(jù)。主器件產(chǎn)生一個(gè)非應(yīng)答信號(hào)(這里是主器件發(fā)送的非應(yīng)答信號(hào)),再產(chǎn)生一個(gè)停止信號(hào)。如圖所示。當(dāng)前地址讀操作數(shù)據(jù)幀結(jié)構(gòu)(5)任意地址讀操作、連續(xù)讀操作任意地址讀、連續(xù)讀操作數(shù)據(jù)幀結(jié)構(gòu)4、I2C總線(xiàn)存儲(chǔ)讀寫(xiě)程序設(shè)計(jì)I2C總線(xiàn)存儲(chǔ)器讀寫(xiě)程序分為兩層:硬件接口程序和
7、存儲(chǔ)器讀寫(xiě)程序。其中硬件接口程序有:總線(xiàn)啟動(dòng)、停止、發(fā)數(shù)據(jù)、收數(shù)據(jù)、發(fā)響應(yīng)、發(fā)非響應(yīng)、讀從器件響應(yīng)狀態(tài)等。存儲(chǔ)器讀寫(xiě)程序有:?jiǎn)巫止?jié)寫(xiě)數(shù)據(jù)、頁(yè)寫(xiě)數(shù)據(jù)、當(dāng)前地址讀數(shù)據(jù)、任意地址讀數(shù)據(jù)、連續(xù)讀數(shù)據(jù)等。參考上面的時(shí)序圖設(shè)計(jì)硬件接口相關(guān)子程序。I2C總線(xiàn)接口程序流程圖I2C總線(xiàn)數(shù)據(jù)讀寫(xiě)流程圖存儲(chǔ)器讀寫(xiě)程序設(shè)計(jì)。這里以單字節(jié)讀、寫(xiě)程序?yàn)槔f(shuō)明,其它子程序由讀者自行設(shè)計(jì)。I2C存儲(chǔ)器單字節(jié)讀寫(xiě)流程圖實(shí)驗(yàn)參考程序:/* 普中科技-* 實(shí) 驗(yàn) 名 : 24C02EEPROM存儲(chǔ)試驗(yàn)* 實(shí)驗(yàn)說(shuō)明 : 使用LCD1602顯示寫(xiě)入的數(shù)據(jù)和讀出的數(shù)據(jù)* 連接方式 : 見(jiàn)連接圖* 注 意 : */#include#inc
8、ludei2c.h#includelcd.h/-定義使用的IO口-/數(shù)碼管IO#define GPIO_DIGP0sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;/按鍵IOsbit K1=P30;sbit K2=P31;sbit K3=P32;sbit K4=P33;/-定義全局變量-/unsigned char wordCode06 = write:;unsigned char wordCode16 = read:; /-聲明全局函數(shù)-/void At24c02Write(unsigned char ,unsigned char );unsigned char
9、At24c02Read(unsigned char );void Delay10ms(unsigned int c); /誤差 0us/* 函數(shù)名 : main* 函數(shù)功能 : 主函數(shù)* 輸入 : 無(wú)* 輸出 : 無(wú)*/void main()unsigned int num0 = 0,num1 = 0,n;LcdInit();LcdWriteCom(0x80);for(n=0; n6; n+)LcdWriteData(wordCode0n);LcdWriteCom(0x80 + 0x40);for(n=0; n6; n+)LcdWriteData(wordCode1n);while(1)if(
10、K1 = 0) /按鍵1按下Delay10ms(1);if(K1 = 0)At24c02Write(2,num0);while(n 50)&(K3=0)n+;Delay10ms(1);n=0;n=0;if(K2 = 0) /按鍵2按下Delay10ms(1);if(K2 = 0)num1 = At24c02Read(2);while(n 50)&(K2 = 0)n+;Delay10ms(1);n=0;if(K3 = 0) /按鍵3按下Delay10ms(1);if(K3 = 0)num0+;while(n 50)&(K3 = 0)n+;Delay10ms(1);n=0;if(num0=256)
11、num0=0;if(K4 = 0) /按鍵4按下Delay10ms(1);if(K4 = 0)num0 = 0;while(n 0;c-)for (b=38;b0;b-)for (a=130;a0;a-); /* 函 數(shù) 名 : void At24c02Write(unsigned char addr,unsigned char dat)* 函數(shù)功能 : 往24c02的一個(gè)地址寫(xiě)入一個(gè)數(shù)據(jù)* 輸 入 : 無(wú)* 輸 出 : 無(wú)*/void At24c02Write(unsigned char addr,unsigned char dat)I2C_Start();I2C_SendByte(0xa0
12、, 1);/發(fā)送寫(xiě)器件地址I2C_SendByte(addr, 1);/發(fā)送要寫(xiě)入內(nèi)存地址I2C_SendByte(dat, 0);/發(fā)送數(shù)據(jù)I2C_Stop();/* 函 數(shù) 名 : unsigned char At24c02Read(unsigned char addr)* 函數(shù)功能 : 讀取24c02的一個(gè)地址的一個(gè)數(shù)據(jù)* 輸 入 : 無(wú)* 輸 出 : 無(wú)*/unsigned char At24c02Read(unsigned char addr)unsigned char num;I2C_Start();I2C_SendByte(0xa0, 1); /發(fā)送寫(xiě)器件地址I2C_SendBy
13、te(addr, 1); /發(fā)送要讀取的地址I2C_Start();I2C_SendByte(0xa1, 1); /發(fā)送讀器件地址num=I2C_ReadByte(); /讀取數(shù)據(jù)I2C_Stop();return num;#includei2c.h/* 函 數(shù) 名 : Delay1us()* 函數(shù)功能 : 延時(shí)* 輸 入 : 無(wú)* 輸 出 : 無(wú)*/void I2C_Delay10us()uchar a, b;for(b=1; b0; b-)for(a=2; a0; a-);/* 函 數(shù) 名 : I2C_Start()* 函數(shù)功能 : 起始信號(hào):在I2C_SCL時(shí)鐘信號(hào)在高電平期間I2C_S
14、DA信號(hào)產(chǎn)生一個(gè)下降沿* 輸 入 : 無(wú)* 輸 出 : 無(wú)* 備 注 : 起始之后I2C_SDA和I2C_SCL都為0*/void I2C_Start()I2C_SDA = 1;I2C_Delay10us();I2C_SCL = 1;I2C_Delay10us();/建立時(shí)間是I2C_SDA保持時(shí)間4.7usI2C_SDA = 0;I2C_Delay10us();/保持時(shí)間是4usI2C_SCL = 0;I2C_Delay10us();/* 函 數(shù) 名 : I2C_Stop()* 函數(shù)功能 : 終止信號(hào):在I2C_SCL時(shí)鐘信號(hào)高電平期間I2C_SDA信號(hào)產(chǎn)生一個(gè)上升沿* 輸 入 : 無(wú)* 輸
15、 出 : 無(wú)* 備 注 : 結(jié)束之后保持I2C_SDA和I2C_SCL都為1;表示總線(xiàn)空閑*/void I2C_Stop()I2C_SDA = 0;I2C_Delay10us();I2C_SCL = 1;I2C_Delay10us();/建立時(shí)間大于4.7usI2C_SDA = 1;I2C_Delay10us();/* 函 數(shù) 名 : I2cSendByte(uchar num)* 函數(shù)功能 : 通過(guò)I2C發(fā)送一個(gè)字節(jié)。在I2C_SCL時(shí)鐘信號(hào)高電平期間,* * 保持發(fā)送信號(hào)I2C_SDA保持穩(wěn)定* 輸 入 : num ,ack* 輸 出 : 0或1。發(fā)送成功返回1,發(fā)送失敗返回0* 備 注
16、: 發(fā)送完一個(gè)字節(jié)I2C_SCL=0, 需要應(yīng)答則應(yīng)答設(shè)置為1,否則為0*/uchar I2C_SendByte(uchar dat, uchar ack)uchar a = 0,b = 0;/最大255,一個(gè)機(jī)器周期為1us,最大延時(shí)255us。for(a=0; a 7; /起始信號(hào)之后I2C_SCL=0,所以可以直接改變I2C_SDA信號(hào)dat = dat 4.7usI2C_SCL = 0;I2C_Delay10us();/時(shí)間大于4usI2C_SDA = 1;I2C_Delay10us();I2C_SCL = 1;while(I2C_SDA & (ack = 1)/等待應(yīng)答,也就是等待從
17、設(shè)備把I2C_SDA拉低b+;if(b 200) /如果超過(guò)200us沒(méi)有應(yīng)答發(fā)送失敗,或者為非應(yīng)答,表示接收結(jié)束I2C_SCL = 0;I2C_Delay10us();return 0;I2C_SCL = 0;I2C_Delay10us(); return 1;/* 函 數(shù) 名 : I2cReadByte()* 函數(shù)功能 : 使用I2c讀取一個(gè)字節(jié)* 輸 入 : 無(wú)* 輸 出 : dat* 備 注 : 接收完一個(gè)字節(jié)I2C_SCL=0*/uchar I2C_ReadByte()uchar a = 0,dat = 0;I2C_SDA = 1;/起始和發(fā)送一個(gè)字節(jié)之后I2C_SCL都是0I2C_
18、Delay10us();for(a=0; a8; a+)/接收8個(gè)字節(jié)I2C_SCL = 1;I2C_Delay10us();dat 0; c-) for (b=199;b0;b-) for(a=1;a0;a-); /* 函 數(shù) 名 : LcdWriteCom* 函數(shù)功能 : 向LCD寫(xiě)入一個(gè)字節(jié)的命令* 輸 入 : com* 輸 出 : 無(wú)*/#ifndef LCD1602_4PINS /當(dāng)沒(méi)有定義這個(gè)LCD1602_4PINS時(shí)void LcdWriteCom(uchar com) /寫(xiě)入命令LCD1602_E = 0; /使能LCD1602_RS = 0; /選擇發(fā)送命令LCD1602_
19、RW = 0; /選擇寫(xiě)入LCD1602_DATAPINS = com; /放入命令Lcd1602_Delay1ms(1);/等待數(shù)據(jù)穩(wěn)定LCD1602_E = 1; /寫(xiě)入時(shí)序Lcd1602_Delay1ms(5); /保持時(shí)間LCD1602_E = 0;#else void LcdWriteCom(uchar com) /寫(xiě)入命令LCD1602_E = 0; /使能清零LCD1602_RS = 0; /選擇寫(xiě)入命令LCD1602_RW = 0; /選擇寫(xiě)入LCD1602_DATAPINS = com;/由于4位的接線(xiàn)是接到P0口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms
20、(1);LCD1602_E = 1; /寫(xiě)入時(shí)序Lcd1602_Delay1ms(5);LCD1602_E = 0;/Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com 4; /發(fā)送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; /寫(xiě)入時(shí)序Lcd1602_Delay1ms(5);LCD1602_E = 0;#endif/* 函 數(shù) 名 : LcdWriteData* 函數(shù)功能 : 向LCD寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)* 輸 入 : dat* 輸 出 : 無(wú)*/ #ifndef LCD1602_4PINS void LcdWriteData(u
21、char dat)/寫(xiě)入數(shù)據(jù)LCD1602_E = 0;/使能清零LCD1602_RS = 1;/選擇輸入數(shù)據(jù)LCD1602_RW = 0;/選擇寫(xiě)入LCD1602_DATAPINS = dat; /寫(xiě)入數(shù)據(jù)Lcd1602_Delay1ms(1);LCD1602_E = 1; /寫(xiě)入時(shí)序Lcd1602_Delay1ms(5); /保持時(shí)間LCD1602_E = 0;#elsevoid LcdWriteData(uchar dat)/寫(xiě)入數(shù)據(jù)LCD1602_E = 0; /使能清零LCD1602_RS = 1; /選擇寫(xiě)入數(shù)據(jù)LCD1602_RW = 0; /選擇寫(xiě)入LCD1602_DATAPINS = dat;/
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球活塞連桿套件行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 家電維修合同協(xié)議書(shū)正規(guī)范本
- 垃圾桶項(xiàng)目采購(gòu)合同
- 出租車(chē)租賃合同模板
- 2025居間合同協(xié)議書(shū)范本
- 產(chǎn)品全國(guó)總代理合同范本年
- 宣傳欄制作安裝合同書(shū)
- 委托合同范文年
- 2025年中圖版八年級(jí)歷史上冊(cè)階段測(cè)試試卷
- 2024年高考政治(安徽卷)真題詳細(xì)解讀及評(píng)析
- 數(shù)字經(jīng)濟(jì)學(xué)導(dǎo)論-全套課件
- 動(dòng)物檢疫技術(shù)-動(dòng)物檢疫的對(duì)象(動(dòng)物防疫與檢疫技術(shù))
- 中考記敘文閱讀
- 《計(jì)算機(jī)應(yīng)用基礎(chǔ)》-Excel-考試復(fù)習(xí)題庫(kù)(含答案)
- 產(chǎn)科溝通模板
- 2023-2024學(xué)年四川省成都市小學(xué)數(shù)學(xué)一年級(jí)下冊(cè)期末提升試題
- GB/T 7462-1994表面活性劑發(fā)泡力的測(cè)定改進(jìn)Ross-Miles法
- GB/T 2934-2007聯(lián)運(yùn)通用平托盤(pán)主要尺寸及公差
- GB/T 21709.13-2013針灸技術(shù)操作規(guī)范第13部分:芒針
- 2022年青島職業(yè)技術(shù)學(xué)院?jiǎn)握姓Z(yǔ)文考試試題及答案解析
- 急診科進(jìn)修匯報(bào)課件
評(píng)論
0/150
提交評(píng)論