I2C總線上接兩個AT24C02讀寫實例Word版_第1頁
I2C總線上接兩個AT24C02讀寫實例Word版_第2頁
I2C總線上接兩個AT24C02讀寫實例Word版_第3頁
I2C總線上接兩個AT24C02讀寫實例Word版_第4頁
I2C總線上接兩個AT24C02讀寫實例Word版_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、傳播優(yōu)秀word版文檔 ,希望對您有幫助,可雙擊去除!i2c總線上接兩個at24c02讀寫實例、本例對i2c總線上關節(jié)兩個at24c02進行讀寫操作,想將數(shù)據(jù)0xaa寫入第一個at24c02的指定地址,再將該數(shù)據(jù)讀出后存入第二個at24c02的指定地址,最后讀出該數(shù)據(jù)并送p1口用8位led顯示驗證 2、實現(xiàn)方法:1)兩個器件地址的確定由于第一個at24c02的3位地址位(a0a1a2)均接地(低電平),第二個at24c02的三個地址位(a0a1a2)均接電源(高電平),因此第一個at24c02的地址為000,第二個at24c02的地址為111.在寫命令時,指名要操作的器件地址,即可對

2、不同的at24c02進行操作 3、在keil c51中新建工程ex54,編寫如下程序代碼,編譯并生成ex54.hex文件傳播優(yōu)秀word版文檔 ,希望對您有幫助,可雙擊去除!/對i2c總線上掛接多個at24c02的讀寫操作#include <reg51.h>         /  包含51單片機寄存器定義的頭文件#include <intrins.h>       /包含_nop_()函數(shù)定義的頭文件#defin

3、e op_read1 0xa1  / 器件1地址以及讀取操作,0xa1即為1010 0001b#define op_write1 0xa0  / 器件1地址以及寫入操作,0xa1即為1010 0000b#define op_read2 0xaf  / 器件2地址以及讀取操作,0xa1即為1010 1111b#define op_write2 0xae  / 器件2地址以及寫入操作,0xa1即為1010 1110bsbit sda=p34; 

4、60;           /將串行數(shù)據(jù)總線sda位定義在為p3.4引腳sbit scl=p33;             /將串行時鐘總線sda位定義在為p3.3引腳/*函數(shù)功能:延時1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒*/void delay1ms()   unsigned char i,

5、j;   for(i=0;i<10;i+)   for(j=0;j<33;j+)    ;    /*函數(shù)功能:延時若干毫秒入口參數(shù):n*/ void delaynms(unsigned char n)    unsigned char i; for(i=0;i<n;i+)    delay1ms(); /*函數(shù)功能:開始數(shù)據(jù)傳送*/void start()/ 開始位 sda =

6、 1;    /sda初始化為高電平“1” scl = 1;    /開始數(shù)據(jù)傳送時,要求scl為高電平“1” _nop_();    /等待一個機器周期 _nop_();    /等待一個機器周期 sda = 0;    /sda的下降沿被認為是開始信號 _nop_();    /等待一個機器周期 _nop_();    /等

7、待一個機器周期 _nop_();    /等待一個機器周期 _nop_();    /等待一個機器周期 scl = 0;    /scl為低電平時,sda上數(shù)據(jù)才允許變化(即允許以后的數(shù)據(jù)傳遞) _nop_();    /等待一個機器周期/*函數(shù)功能:結束數(shù)據(jù)傳送*/void stop()/ 停止位 sda = 0;     /sda初始化為低電平“0” _nop_();

8、60;    /等待一個機器周期 _nop_();     /等待一個機器周期 scl = 1;     /結束數(shù)據(jù)傳送時,要求scl為高電平“1” _nop_();     /等待一個機器周期 _nop_();     /等待一個機器周期 _nop_();     /等待一個機器周期 _nop_();

9、60;    /等待一個機器周期 _nop_();     /等待一個機器周期 _nop_();     /等待一個機器周期 sda = 1;    /sda的上升沿被認為是結束信號 /*函數(shù)功能:從at24cxx讀取數(shù)據(jù)出口參數(shù):x*/unsigned char readdata()/ 從at24cxx移入數(shù)據(jù)到mcu unsigned char i; unsigned char x; 

10、;          /儲存從at24cxx中讀出的數(shù)據(jù) for(i = 0; i < 8; i+)   scl = 1;                /scl置為高電平  x<<=1;        

11、;          /將x中的各二進位向左移一位  x|=(unsigned char)sda;  /將sda上的數(shù)據(jù)通過按位“或“運算存入x中  scl = 0;               /在scl的下降沿讀出數(shù)據(jù)  return(x);    

12、60;           /將讀取的數(shù)據(jù)返回/*函數(shù)功能:向at24cxx的當前地址寫入數(shù)據(jù)入口參數(shù):y (儲存待寫入的數(shù)據(jù))*/在調用此數(shù)據(jù)寫入函數(shù)前需首先調用開始函數(shù)start(),所以scl=0bit writecurrent(unsigned char y) unsigned char i; bit ack_bit;            

13、0;  /儲存應答位 for(i = 0; i < 8; i+)  / 循環(huán)移入8個位      sda = (bit)(y&0x80);   /通過按位“與”運算將最高位數(shù)據(jù)送到s                        /因為傳送時高位

14、在前,低位在后  _nop_();              /等待一個機器周期       scl = 1;              /在scl的上升沿將數(shù)據(jù)寫入at24cxx         &

15、#160;_nop_();              /等待一個機器周期    _nop_();               /等待一個機器周期             scl = 0; &

16、#160;            /將scl重新置為低電平,以在sc線形成傳送數(shù)據(jù)所需的個脈沖  y <<= 1;              /將y中的各二進位向左移一位  sda = 1;     / 發(fā)送設備(主機)應在時鐘脈沖的高電平期間(scl=1)釋放sda

17、線,                 /以讓sda線轉由接收設備(at24cxx)控制 _nop_();        /等待一個機器周期  _nop_();        /等待一個機器周期  scl = 1;     

18、;  /根據(jù)上述規(guī)定,scl應為高電平 _nop_();       /等待一個機器周期  _nop_();       /等待一個機器周期  _nop_();       /等待一個機器周期  _nop_();       /等待一個機器周期  ack_bit = sda; /接受設備(at24c

19、xx)向sda送低電平,表示已經接收到一個字節(jié)                /若送高電平,表示沒有接收到,傳送異常 scl = 0;       /scl為低電平時,sda上數(shù)據(jù)才允許變化(即允許以后的數(shù)據(jù)傳遞) return  ack_bit;/ 返回at24cxx應答位/*函數(shù)功能:向第一個at24cxx中的指定地址寫入數(shù)據(jù)入口參數(shù):add (儲存指定

20、的地址);dat(儲存待寫入的數(shù)據(jù))*/void writeset1(unsigned char add, unsigned char dat)/ 在指定地址addr處寫入數(shù)據(jù)writecurrent start();                  /開始數(shù)據(jù)傳遞 writecurrent(op_write1);  /選擇要操作的第一個at24cxx芯片,并告知要對其寫入數(shù)據(jù) wri

21、tecurrent(add);        /寫入指定地址 writecurrent(dat);        /向當前地址(上面指定的地址)寫入數(shù)據(jù) stop();                   /停止數(shù)據(jù)傳遞 delaynms(4);&#

22、160;           /1個字節(jié)的寫入周期為1ms, 最好延時1ms以上/*函數(shù)功能:向第二個at24cxx中的指定地址寫入數(shù)據(jù)入口參數(shù):add (儲存指定的地址);dat(儲存待寫入的數(shù)據(jù))*/void writeset2(unsigned char add, unsigned char dat)/ 在指定地址addr處寫入數(shù)據(jù)writecurrent start();         

23、         /開始數(shù)據(jù)傳遞 writecurrent(op_write2);  /選擇要操作的at24cxx芯片,并告知要對其寫入數(shù)據(jù) writecurrent(add);        /寫入指定地址 writecurrent(dat);        /向當前地址(上面指定的地址)寫入數(shù)據(jù) stop(); &

24、#160;                 /停止數(shù)據(jù)傳遞 delaynms(4);            /1個字節(jié)的寫入周期為1ms, 最好延時1ms以上/*函數(shù)功能:從第一個at24cxx中的當前地址讀取數(shù)據(jù)出口參數(shù):x (儲存讀出的數(shù)據(jù)) */unsigned char readcurrent1() 

25、unsigned char x; start();                   /開始數(shù)據(jù)傳遞 writecurrent(op_read1);   /選擇要操作的第一個at24cxx芯片,并告知要讀其數(shù)據(jù) x=readdata();           

26、;  /將讀取的數(shù)據(jù)存入x stop();                   /停止數(shù)據(jù)傳遞 return x;                 /返回讀取的數(shù)據(jù)傳播優(yōu)秀word版文檔 ,希望對您有幫助,可雙擊去除!傳播優(yōu)秀wo

27、rd版文檔 ,希望對您有幫助,可雙擊去除!/*函數(shù)功能:從第二個at24cxx中的當前地址讀取數(shù)據(jù)出口參數(shù):x (儲存讀出的數(shù)據(jù)) */unsigned char readcurrent2() unsigned char x; start();                   /開始數(shù)據(jù)傳遞 writecurrent(op_read2);    /選擇要

28、操作的第二個at24cxx芯片,并告知要讀其數(shù)據(jù) x=readdata();              /將讀取的數(shù)據(jù)存入x stop();                    /停止數(shù)據(jù)傳遞 return x;   

29、               /返回讀取的數(shù)據(jù)/*函數(shù)功能:從第一個at24cxx中的指定地址讀取數(shù)據(jù)入口參數(shù):set_addr出口參數(shù):x */unsigned char readset1(unsigned char set_addr)/ 在指定地址讀取 start();              

30、0;       /開始數(shù)據(jù)傳遞 writecurrent(op_write1);       /選擇要操作的第一個at24cxx芯片,并告知要對其寫入數(shù)據(jù) writecurrent(set_addr);       /寫入指定地址 return(readcurrent1();        /從第一個at24cxx芯片指定地址讀出數(shù)據(jù)并返回/*函數(shù)功能:從第二個at24cxx中的指定地址讀取數(shù)據(jù)入口參數(shù):set_addr出口參數(shù):x */unsigned char readset2(unsigned char set_addr)/ 在指定地址讀取 start();                  &#

溫馨提示

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

評論

0/150

提交評論