51單片機 EEPROM 24c02 讀取存儲多字節(jié)
除了代碼里定義的連線外還要把p0連接到8位數(shù)碼管的8針上。
本文引用地址:http://m.butianyuan.cn/article/201611/318337.htm1 /*--2 名稱:IIC協(xié)議 EEPROM24c023 內(nèi)容:此程序用于檢測EEPROM性能,測試方法如下:寫入24c02一些數(shù)據(jù),然后在內(nèi)存中清除這些數(shù)據(jù),4 掉電后主內(nèi)存將失去這些信息,然后從24c02中調(diào)入這些數(shù)據(jù)??词欠衽c寫入的相同。5 函數(shù)是采用軟件延時的方法產(chǎn)生SCL脈沖,固對高晶振頻率要作 一定的修改....(本例是1us機器6 周期,即晶振頻率要小于12MHZ)7 */ 8 #include//頭文件的包含9 #include 10 11 #define _Nop() _nop_() //定義空指令12 13 // 常,變量定義區(qū)14 unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,15 0x77,0x7c,0x39,0x5e,0x79,0x71};// 顯示段碼值0~F16 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應(yīng)相應(yīng)的數(shù)碼管點亮,即位碼17 18 sbit LATCH1=P2^2;19 sbit LATCH2=P2^3;20 21 sbit SDA=P2^1; //模擬I2C數(shù)據(jù)傳送位22 sbit SCL=P2^0; //模擬I2C時鐘控制位23 24 bit ack; //應(yīng)答標(biāo)志位25 26 void DelayUs2x(unsigned char t);//函數(shù)聲明 27 void DelayMs(unsigned char t);28 /*29 uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值30 unsigned char 是定義無符號字符變量,其值的范圍是31 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時32 長度如下 T=tx2+5 uS 33 */34 void DelayUs2x(unsigned char t)35 { 36 while(--t);37 }38 /*39 mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值40 unsigned char 是定義無符號字符變量,其值的范圍是41 0~255 這里使用晶振12M,精確延時請使用匯編42 */43 void DelayMs(unsigned char t)44 {45 46 while(t--)47 {48 //大致延時1mS49 DelayUs2x(245);50 DelayUs2x(245);51 }52 }53 /*54 啟動總線55 */56 void Start_I2c()57 {58 SDA=1; //發(fā)送起始條件的數(shù)據(jù)信號59 _Nop();60 SCL=1;61 _Nop(); //起始條件建立時間大于4.7us,延時62 _Nop();63 _Nop();64 _Nop();65 _Nop(); 66 SDA=0; //發(fā)送起始信號67 _Nop(); //起始條件鎖定時間大于4μ68 _Nop();69 _Nop();70 _Nop();71 _Nop(); 72 SCL=0; //鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)73 _Nop();74 _Nop();75 }76 /*77 結(jié)束總線78 */79 void Stop_I2c()80 {81 SDA=0; //發(fā)送結(jié)束條件的數(shù)據(jù)信號82 _Nop(); //發(fā)送結(jié)束條件的時鐘信號83 SCL=1; //結(jié)束條件建立時間大于4μ84 _Nop();85 _Nop();86 _Nop();87 _Nop();88 _Nop();89 SDA=1; //發(fā)送I2C總線結(jié)束信號90 _Nop();91 _Nop();92 _Nop();93 _Nop();94 }95 /*-96 字節(jié)數(shù)據(jù)傳送函數(shù) 97 函數(shù)原型: void SendByte(unsigned char c);98 功能: 將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對99 此狀態(tài)位進行操作.(不應(yīng)答或非應(yīng)答都使ack=0 假) 100 發(fā)送數(shù)據(jù)正常,ack=1; ack=0表示被控器無應(yīng)答或損壞。101 */102 void SendByte(unsigned char c)103 {104 unsigned char BitCnt;105 106 for(BitCnt=0;BitCnt<8;BitCnt++) //要傳送的數(shù)據(jù)長度為8位107 {108 if((c<
評論