色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>單片機>at24c01程序(讀寫程序)

at24c01程序(讀寫程序)

2008-08-13 | rar | 545 | 次下載 | 10積分

資料介紹

AT24C01~AT24C256讀寫通用程序(只做了少許改動),附件里面有關(guān)于AT24系列讀寫資料

/* 以下為AT24C01~AT24C256的讀寫程序,各人可根據(jù)自己的需要應(yīng)用。
在buf1中填入需要寫入的內(nèi)容,buf2的大小可根據(jù)需要定義。
addr可根據(jù)使用的芯片選擇,可從任何位置讀寫,只要在該芯片的范圍內(nèi)。
enumer=ATxxx,根據(jù)使用的芯片賦值。各函數(shù)中的形式參數(shù)不需改變。
本程序只要在調(diào)用的程序中定義實際參數(shù)即可,下述各子程序不必改動。*/

#include
#include
#define??ERROR 10? ???//允許ERROR的最大次數(shù)? ?? ?
sbit? ???SDA=P3^0;
sbit? ???SCL=P3^1;
enum??eepromtype {AT2401,AT2402,AT2404,AT2408,AT2416,AT2432,AT2464,AT24128,AT24256};/*器件的型號*/
enum??eepromtype enumer;? ?//定義一個枚舉變量
unsigned char code buf1 []={1,3,5,7,9,10,11,12,13,15}; /* 發(fā)送緩沖區(qū) */
unsigned char buf2 [10]; /* 接收緩沖區(qū) */

/* 一個通用的24C01-24C256共9種EEPROM的字節(jié)讀寫操作程序,
此程序有五個入口條件,分別為讀寫數(shù)據(jù)緩沖區(qū)指針,
進行讀寫的字節(jié)數(shù),EEPROM首址,EEPROM控制字節(jié),
以及EEPROM類型。此程序結(jié)構(gòu)性良好,具有極好的容錯性,程序機器碼也不多:
DataBuff為讀寫數(shù)據(jù)輸入/輸出緩沖區(qū)的首址
Length 為要讀寫數(shù)據(jù)的字節(jié)數(shù)量
Addr 為EEPROM的片內(nèi)地址 AT24256為0~32767
Control 為EEPROM的控制字節(jié),具體形式為(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W=1,
表示讀操作,R/W=0為寫操作,A2,A1,A0為EEPROM的頁選或片選地址;
enumer為枚舉變量,需為AT2401至AT24256中的一種,分別對應(yīng)AT24C01至AT24C256;
函數(shù)返回值為一個位變量,若返回1表示此次操作失效,0表示操作成功;
ERROR為允許最大次數(shù),若出現(xiàn)ERRORCOUNT次操作失效后,則函數(shù)中止操作,并返回1
SDA和SCL由用戶自定義,這里暫定義為P3^0和P3^1; */
/*對于1K位,2K位,4K位,8K位,16K位芯片采用一個8位長的字節(jié)地址碼,對于32K位以上
的采用2個8位長的字節(jié)地址碼直接尋址,而4K位,8K位,16K位配合頁面地址來尋址*/


/* -----??AT24C01~AT24C256 的讀寫程序 ------ */
bit? ?RW24xx(unsigned char *DataBuff,unsigned char Length,unsigned int Addr,
? ?? ?? ?? ?? ?? ?? ?unsigned char Control,enum eepromtype enumer)
{ void Delay(unsigned char DelayCount);??/*? ?延時? ?*/
??void Start(void);??/*? ?啟動總線? ?*/
??void Stop(void);? ?/*? ?停止IIC總線? ?*/
??bit??RecAck(void); /*? ?檢查應(yīng)答位? ?*/
??void NoAck(void);??/*? ?不對IIC總線產(chǎn)生應(yīng)答? ?*/
??void Ack(void);? ? /*? ?對IIC總線產(chǎn)生應(yīng)答? ?*/
??unsigned char Receive(void); /*? ?從IIC總線上讀數(shù)據(jù)子程序??*/
??void Send(unsigned char sendbyte); /*? ?向IIC總線寫數(shù)據(jù)? ?*/
??unsigned char data j,i=ERROR;
??bit errorflag=1;??/*? ?出錯標志? ?*/
??while(i--)
??{ Start();??/*? ?啟動總線? ?*/
? ? Send(Control & 0xfe); /*? ?向IIC總線寫數(shù)據(jù),器件地址 */
? ? if(RecAck()) continue; /*? ?如寫不正確結(jié)束本次循環(huán)? ?*/
? ? if(enumer > AT2416)
? ? { Send((unsigned char)(Addr >> 8));//把整型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù):棄高取低,只取低8位.如果容量大于32K位,使用16位地址尋址,寫入高八位地址
? ?? ?if(RecAck())??continue;
? ? }
? ? Send((unsigned char)Addr); /*? ?向IIC總線寫數(shù)據(jù)? ?*/
? ? if(RecAck())??continue; /*? ?如寫正確結(jié)束本次循環(huán)? ?*/
? ? if(!(Control & 0x01))? ?//判斷是讀器件還是寫器件
? ? { j=Length;
? ?? ?errorflag=0;? ?? ?? ?/* 清錯誤特征位 */
? ?? ?while(j--)
? ?? ?{ Send(*DataBuff++); /*? ?向IIC總線寫數(shù)據(jù)? ?*/
? ?? ???if(!RecAck()) continue; /*? ?如寫正確結(jié)束本次循環(huán)? ?*/
? ?? ???errorflag=1;
? ?? ???break;
? ?? ?}
? ?? ?if(errorflag==1) continue;
? ?? ?break;
? ? }
? ? else
? ? { Start();??/*? ?啟動總線? ?*/
? ?? ?Send(Control); /*? ?向IIC總線寫數(shù)據(jù)? ?*/
? ?? ?if(RecAck()) continue;//器件沒應(yīng)答結(jié)束本次本層循環(huán)
? ?? ?while(--Length)??/*? ?字節(jié)長為0結(jié)束? ?*/
? ?? ?{ *DataBuff ++= Receive();
? ?? ???Ack();? ?/*? ?對IIC總線產(chǎn)生應(yīng)答? ?*/
? ?? ?}
? ?? ?*DataBuff=Receive(); /* 讀最后一個字節(jié) */
? ?? ?NoAck();??/*? ?不對IIC總線產(chǎn)生應(yīng)答? ?*/
? ?? ?errorflag=0;
? ?? ?break;
? ? }
??}
??Stop();??/*? ?停止IIC總線? ?*/
??if(!(Control & 0x01))
??{ Delay(255); Delay(255); Delay(255); Delay(255);
??}
??return(errorflag);
}


/* * * * * 以下是對IIC總線的操作子程序 * * * * */
/* * * * * * 啟動總線 * * * * */
void Start(void)
{ SCL=0; /* SCL處于高電平時,SDA從高電平轉(zhuǎn)向低電平表示 */
??SDA=1; /* 一個"開始"狀態(tài),該狀態(tài)必須在其他命令之前執(zhí)行 */
??SCL=1;
??_nop_(); _nop_(); _nop_();
??SDA=0;
??_nop_(); _nop_(); _nop_(); _nop_();
??SCL=0;
??SDA=1;? ???
}



/* * * * * 停止IIC總線 * * * * */
void Stop(void)
{ SCL=0; /*SCL處于高電平時,SDA從低電平轉(zhuǎn)向高電平 */
??SDA=0; /*表示一個"停止"狀態(tài),該狀態(tài)終止所有通訊 */
??SCL=1;
??_nop_(); _nop_(); _nop_(); /* 空操作 */
??SDA=1;
??_nop_(); _nop_(); _nop_();
??SCL=0;
}


/* * * * * 檢查應(yīng)答位 * * * * */
bit RecAck(void)
{ SCL=0;
??SDA=1;
??SCL=1;
??_nop_(); _nop_(); _nop_(); _nop_();
??CY=SDA;? ???/* 因為返回值總是放在CY中的 */
??SCL=0;
??return(CY);
}


/* * * * *對IIC總線產(chǎn)生應(yīng)答 * * * * */
void Ack(void)
{ SDA=0; /* EEPROM通過在收到每個地址或數(shù)據(jù)之后, */
??SCL=1; /* 置SDA低電平的方式確認表示收到讀SDA口狀態(tài) */
??_nop_(); _nop_(); _nop_(); _nop_();
??SCL=0;
??_nop_();
??SDA=1;
}


/* * * * * * * * * 不對IIC總線產(chǎn)生應(yīng)答 * * * * */
void NoAck(void)
{ SDA=1;
??SCL=1;
??_nop_(); _nop_(); _nop_(); _nop_();
??SCL=0;
}

/* * * * * * * * * 向IIC總線寫數(shù)據(jù) * * * * */
void Send(unsigned char sendbyte)
{ unsigned char data j=8;
??for(;j>0;j--)
??{ SCL=0;
? ? sendbyte <<= 1; /* 使CY=sendbyte^7; */
? ? SDA=CY; /* CY 進位標志位 */
? ? SCL=1;
??}
??SCL=0;
}

/* * * * * * * * * 從IIC總線上讀數(shù)據(jù)子程序 * * * * */
unsigned char Receive(void)
{ register receivebyte,i=8;
??SCL=0;
??while(i--)
??{ SCL=1;
? ? receivebyte = (receivebyte <<1 ) | SDA;
? ? SCL=0;
??}
??return(receivebyte);
}

/* * * * * * * * 一個簡單延時程序 * * * * * * * * * * * * */
void Delay(unsigned char DelayCount)
{ while(DelayCount--);
}

/* -----??AT24C01~AT24C256 的讀寫程序 ------ */

void main()
{ unsigned char Control,*p1,*p2;
??unsigned char Length;
??unsigned int addr ; /* 24Cxx片內(nèi)地址 */
??p1=buf1;p2=buf2;
??addr=0; /* 片內(nèi)地址 AT24C256為0~32767 */
??Length=8; /* 讀寫長度 */
??enumer=AT24256; /* 讀寫AT24C256 */
??Control=0xa0; /* 寫操作 */
??RW24xx(p1,Length,addr,Control,enumer); /* 寫 */
??Control=0xa1; /* 讀操作 */
??RW24xx(p2,Length,addr,Control,enumer); /* 讀 */
}
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關(guān)電源基礎(chǔ)知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計與實現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費
  11. 651單片機窗簾控制器仿真程序
  12. 1.93 MB  |  2次下載  |  免費
  13. 751單片機大棚環(huán)境控制器仿真程序
  14. 1.10 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 国产99久久九九免费精品无码| 欧洲xxxxx| 免费国产成人高清在线看软件 | 亚洲精品网址| 先锋资源久久| 亚洲欧美综合中文| 18禁黄无遮挡禁游戏在线下载| 欧美高清vivoesond在线播放| 欧美GAY猛男GAYA片18禁| 色婷婷欧美在线播放内射| 无码人妻精品一区二区蜜桃色欲| 亚洲黄色录像片| 中文无码热在线视频| caoporen超碰在线视频| 国产国拍亚洲精品永久软件| 国产真实夫妇交换视频| 久久影院毛片一区二区| 日本电影小姐| 亚洲男同tv| se01短视频在线观看| 国产亚洲高清视频| 美女被j进去动态| 天天躁日日躁狠狠躁午夜剧场| 野花香在线观看免费高清播放视频| 999久久免费高清热精品| 国产成人a视频在线观看| 久久精品无码一区二区日韩av| 欧美男女爱爱| 亚洲精品国产精品麻豆99| 97色伦97色伦国产| 国产美女久久久久久久久久久| 久久婷五月综合色啪首页| 色狠狠色综合吹潮| 曰本真人00XX动太图| 大学生第一次破女在线观看| 久久99综合国产精品亚洲首页| 秋霞电影伦网理最新在线看片| 亚洲国产女人aaa毛片在线| a视频免费在线观看| 挤奶门事件完整照片| 日本无修肉动漫在线观看|