完整word版,51單片機讀寫AT24C02源代碼詳細注釋_第1頁
完整word版,51單片機讀寫AT24C02源代碼詳細注釋_第2頁
完整word版,51單片機讀寫AT24C02源代碼詳細注釋_第3頁
完整word版,51單片機讀寫AT24C02源代碼詳細注釋_第4頁
完整word版,51單片機讀寫AT24C02源代碼詳細注釋_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、51單片機讀寫AT24C02源代碼(詳細注釋)在 P1 口上接八個 led 燈,結果就顯示在這八個燈上面。AT24C02的接線方式見程序的頂部的定義。以下是 源代碼 : #include ;/ 包含頭文件typedef unsigned char uchar;typedef unsigned int uint;#define write_c02 0xa0 #define read_c02 0xa1 sbit sda = P 2八0;sbit scl = P 2八1;void delay() /delay:5us/i2c:init void i2c_init() sda = 1;delay();

2、scl = 1;delay();/delayms: void delayms(uint xms) uchar x, y;for(x = xms; x ; 0; x-)for(y = 110; y ; 0; y-);/start: sda = 1;void start() /啟動 i2cscl = 1;delay();/ 延時必須大于 4.7us ,此約為五微秒sda = 0; / 在 scl 為高電平時, sda 一個下降沿為啟動 信號delay();/stop:void stop() /停止 i2csda = 0;scl = 1;delay();sda = 1; / 在 scl 為高電平時,

3、 sdasda 一個上升沿為停 止信號delay();/ack:void ack() /應答信號 0uchar i = 0; /等待變量scl = 1;/ 在 scl 為高電平期間等待應答若為應答 0 即退出,從delay();while(sda = 1) & i 250)/機向主機發(fā)送應答信號i+;/ 等待一段時間scl = 0; /應答之后將 scl 拉低delay();/nack:void nack() /非應答scl = 1;/ 在 scl 為高電平期間,由主機向從機發(fā)送一個1,非應答信 delay();sda = 1;scl = 0; / 應答之后將 scl 拉低delay();寫一

4、個字節(jié)/send byte: void send_byte(uchar date)/sda 上uchar i, temp;temp = date; / 存入要寫入的數(shù)據(jù),即要發(fā)送到 的數(shù)據(jù)for(i = 0; i 8; i+) / 發(fā)送 8 位temp = 1; /to CY將數(shù)據(jù)的最高位移入到 PSW中的CY位中scl = 0;/只有在 scl 為低電平時,才允許 sda 上的數(shù)據(jù)變化delay();sda = CY; /將CY里的數(shù)據(jù)發(fā)送到sda數(shù)據(jù)線上delay(); /可以延時scl = 1; / 在 scl 為高電平時,不允許 sda 上的數(shù)據(jù)變 化,使數(shù)據(jù)穩(wěn)定delay();scl

5、 = 0;/允許 sda 數(shù)據(jù)線的數(shù)據(jù)變化,等待下一個數(shù) 據(jù)的傳輸delay();/wait ack: 發(fā)送完一個字節(jié)數(shù)據(jù)后要主機要等待從機的 應答,第九位scl = 0;/ 允許 sda 變化delay();sda = 1;/wait:ack, sda 拉高等待應答,當 sda=0 時, 表示從機的應答delay();/read: byte uchar read_byte() / 讀一個字節(jié)數(shù)據(jù)uchar i, j, k;scl = 0; / 讀之前先允許 sda 變化delay(); /等待數(shù)據(jù)for(i = 0; i 8; i+)scl = 1; /不允許 sda 變化delay();

6、/使 sda 數(shù)據(jù)穩(wěn)定后開始讀數(shù)據(jù)j = sda; /讀出 sda 上的數(shù)據(jù)k = (k 1)| j; /將數(shù)據(jù)通過 | 運算存入 k 中scl = 0;/允許 sda 變化等待下一位數(shù)據(jù)的到來delay();/delay();/可不用延時return k;/返回讀出的數(shù)據(jù)/write:at24c02 在 at24c02中的指定地址寫入數(shù)據(jù)void write_at24c02(uchar address, uchar date)start(); /啟動 i2csend_byte(write_c02);/寫入期間地址和寫操作ack(); / 從機應答 0send_byte(address); /

7、寫入寫數(shù)據(jù)的單元地址ack(); /ack0 send_byte(date); / 在指定地址中寫入數(shù)據(jù)stop();ack(); / 從機應答 0/ 停止 i2c/read: at24c02在 at24c02 的指定地址中讀出寫入的數(shù)據(jù)uchar read_at24c02(address)uchar dat;/ 用來存儲讀出的數(shù)據(jù)start(); /啟動 i2csend_byte(write_c02);/ 寫入 at24c02 器件地址和寫操stop(); / 停止 i2cack(); / 從機應答send_byte(address);/寫入要讀取AT24C02的數(shù)據(jù)的單元地址ack(); / 從機應答start(); /再次啟動i2csend_byte(read_c02); / 寫入 AT24C02器件地址和讀操 ack();/ 從機應答 ‘0’dat = read_byte();/ 讀出指定地址中的數(shù)據(jù)nack(); / 主機發(fā)出非應答 ‘1’return dat;/ 返回讀出的數(shù)據(jù)/main: void main() uchar i;i2c_init();start

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論