《AT24C02 連讀連寫 流水燈測試 存儲設(shè)備C51 原創(chuàng)的已通過》由會員分享,可在線閱讀,更多相關(guān)《AT24C02 連讀連寫 流水燈測試 存儲設(shè)備C51 原創(chuàng)的已通過(16頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、/* 時時序,還還是時序序 在模模擬時序序時不能能出錯* 寫寫一個字字節(jié)數(shù)據(jù)據(jù)是ATT24CC02自自動才生生一個應(yīng)應(yīng)答,我我們只要要檢測到到就行。然然后發(fā)送送下一字字節(jié)* 讀讀一個字字節(jié)后我我們要寫寫另一個個應(yīng)答 通通知ATT24CC02,。它它接收我我們的信信號才會會發(fā)下一一個字節(jié)節(jié),不然然我們不不能進行行連讀*/#inccludde#inccludde#inccludde / P1為為流水燈燈。實實驗用來來顯示 數(shù)據(jù)是是否能夠夠正常讀讀寫/實驗驗板上AA0 AA1 AA2 全全部接地地 而且且SDAA SSCL沒沒有接上上拉電阻阻#deffinee SSDA PP2_00#deffine
2、e SSCL PP2_11#deffinee WW_sllavee 0XXA0#deffinee RR_sllavee 0xxa1 typeedeff uunsiigneed ccharr uuchaar ;typeedeff uunsiigneed iint uuintt ;bit ackk=0;uchaar ccodee sstr_1=00x011,0xx02,0x003,00x300,0xx35,0x336,00x377,0xx38,0x339,00x300;uchaar gget_strr_18;/*AT224C002初始始化*/voidd ATT24CC02_Iniit(vvoidd
3、);/* AAT244C022 起起動*/stattic voiid AAT244C022_Sttartt();/* AAT244C022 停止止* _nnop_()為為一個單單指令周周期 *11.05992MHHZ一個個單指令令周期為為1.008uss*/stattic voiid AT224C002_EEnd() ; /* 寫寫應(yīng)答*/stattic voiid AAT244C022_Wrritee_ACCK() ;/* 讀讀應(yīng)答*/stattic voiid AAT244C022_Reead_ACKK();/*發(fā)送一一個字節(jié)節(jié)*/stattic voiid AAT244C022_Seen
4、d_Chaar(uuchaar cch);/*接送一一個字節(jié)節(jié)*/stattic uchhar AT224C002_GGet_Chaar();/*AT224C002延時時*/stattic voiid fflassh(vvoidd) ;/* 發(fā)關(guān)關(guān)一個字字節(jié)*/stattic voiid AT224C002_WWritte_OOne(uchhar adddresss,uuchaar ddat);/*接收一一個字節(jié)節(jié)*/stattic uchhar ATT24CC02_Reaad_OOne(uchhar adddresss);/*連續(xù)寫寫N個字字節(jié)*/voidd AAT244C022_Wrrit
5、ee_Sttr(uuchaar aaddrresss,uccharr * strr,uccharr nuum);/* 連連讀N個個字節(jié)*/voidd AAT244C022_Reead_Strr(uccharr adddreess,uchhar *sttr,uuchaar nnum);/*MAAIN()*/voidd mmainn(vooid) / uchhar tammplee=0xx00; uuchaar xx=0;/ uccharr *_strr; AAT244C022_Innit();/ ATT24CC02_Wriite_Onee(0xx20,0xaa0); /ttestt . 寫寫后立
6、即即讀寫需需要時間間延時,我我這里用用最小的的1mss可以,比比/ deelayy1mss(1); /這更小小的還沒沒有進行行測試,但但是沒有有延時讀讀取失敗敗。/ whhilee(1) ATT24CC02_Wriite_Strr(0xx00,strr_1,8); deelayy1mss(1000); AAT244C022_Reead_Strr(0xx00,gett_sttr_11,8); wwhille(xx+8) P1=gett_sttr_11x; dellay11ms(6000); P1=0X555; wwhille(11);/* AAT244C022 起起動* _nnop_()為為一個
7、單單指令周周期 *11.05992MHHZ一個個單指令令周期為為1.008uss*/stattic voiid AT224C002_SStarrt() SSDA=1; fflassh(); SSCL=1; fflassh(); SSDA=0; fflassh(); SSCL=0; fflassh();/* AAT244C022 停止止* _nnop_()為為一個單單指令周周期 *11.05992MHHZ一個個單指令令周期為為1.008uss*/stattic voiid AT224C002_EEnd() SSDA=0; fflassh(); SSCL=1; fflassh(); fflassh
8、(); SDDA=11; fflassh(); fflassh(); SSCL=0; /* 寫寫應(yīng)答*/stattic voiid AAT244C022_Wrritee_ACCK() uuchaar ii=0; SSDA=1; fflassh(); SSCL=1; fflassh(); / _nnop_(); / _nnop_(); wwhille(SDAA=11)&i0;xx-) ttampple=11; SSDA=CY; fflassh(); SSCL=1; fflassh(); SSCL=0; fflassh(); /*接 收收一個字字節(jié)*/stattic uchhar AT224C00
9、2_GGet_Chaar() uuchaar ttampple=0X000; uuchaar xx; SSCL=0; fflassh(); SSDA=1; fflassh(); ffor(x=00;x8;xx+) ttampple=11; SSCL=1; fflassh(); iif(SSDA=1) ttampple|=1; eelsee ttampple &=00xfee; SSCL=0; fflassh(); rretuurn tammplee;/*AT224C002初始始化*/voidd ATT24CC02_Iniit(vvoidd) SSDA=1; fflassh(); SSCL=1;
10、 fflassh();/*AT224C002延時時*/stattic voiid fflassh(vvoidd) _nopp_(); _nopp_(); _nopp_(); _nopp_(); _nopp_(); _nopp_();/* 發(fā)關(guān)關(guān)一個字字節(jié) aaddrresss為寫入入字節(jié)的的地址* ddat 為要寫寫入的字字節(jié)*/voidd AAT244C022_Wrritee_Onne(uuchaar aaddrresss,uccharr daat) AAT244C022_Sttartt(); AAT244C022_Seend_Chaar(WW_sllavee);/電路路圖上的的AT224C
11、002 AAT244C022_Wrritee_ACCK(); AAT244C022_Seend_Chaar(aaddrresss);/存儲儲內(nèi)容起起始地此此 AAT244C022_Wrritee_ACCK(); AAT244C022_Seend_Chaar(ddat);/寫一個個數(shù)據(jù) / AAT244C022_Wrritee_ACCK(); AAT244C022_Ennd(); / AAT244C022_Ennd(); /*接收一一個字節(jié)節(jié) adddreess為為要讀取取數(shù)據(jù)的的地址*/uchaar AT224C002_RReadd_Onne(uuchaar aaddrresss) uucha
12、ar _datta; AAT244C022_Sttartt(); AAT244C022_Seend_Chaar(WW_sllavee);/電路路圖上的的AT224C002 AAT244C022_Wrritee_ACCK(); AAT244C022_Seend_Chaar(aaddrresss);/存儲儲內(nèi)容起起始地此此 AAT244C022_Wrritee_ACCK(); AAT244C022_Sttartt(); AAT244C022_Seend_Chaar(RR_sllavee);/電路路圖上的的AT224C002 AAT244C022_Wrritee_ACCK(); _datta=AAT
13、244C022_Geet_CCharr(); /只讀讀一個字字節(jié)。不不用應(yīng)答答 表表示結(jié)束束 AAT244C022_Ennd() ; rretuurn _daata;/* *連續(xù)寫寫N個字字節(jié)* aaddrresss為要寫寫入的地地址* sstr為為要連續(xù)續(xù)寫入的的數(shù)據(jù)的的首地址址* nnum 為正數(shù)數(shù)X,表表示我們們這字符符串寫入入前X位位。后XX位不寫寫入*/voidd AAT244C022_Wrritee_Sttr(uuchaar aaddrresss,uccharr * strr,uccharr nuum) AAT244C022_Sttartt(); AAT244C022_Seend_
14、Chaar(WW_sllavee);/電路路圖上的的AT224C002 AAT244C022_Wrritee_ACCK(); AAT244C022_Seend_Chaar(aaddrresss);/存儲儲內(nèi)容起起始地此此 AAT244C022_Wrritee_ACCK(); wwhille(nnum-) AAT244C022_Seend_Chaar(*strr);/寫一一個數(shù)據(jù)據(jù) / sstr+; AAT244C022_Wrritee_ACCK(); AT224C002_EEnd() ;/* 連讀讀N個字字節(jié)* aaddrresss為讀取取數(shù)據(jù)的的首地址址* nnum 第一一次連讀讀的話只只能
15、讀寫寫一頁也也就是八八個字節(jié)節(jié) 所以以要寫入入多個字字節(jié)吧,aaddrresss要怎樣樣呢?* 若若為正常常X,則則讀取包包括該地地址在內(nèi)內(nèi)的之后后X個數(shù)數(shù)據(jù)*/本來來我在子子程序中中定義了了兩個指指針 使兩兩指針 地址址相同,一一個用來來保存接接收字節(jié)節(jié)的首地地址。 另個用用來接收收數(shù)年然然后地址址+/ 但但是行不不通/采用用以下寫寫法。程程序中數(shù)數(shù)據(jù)才被被檢測到到。真真的無語語了voidd AAT244C022_Reead_Strr(uccharr adddreess,uchhar *sttr,uuchaar nnum) /uccharr *_datta_fflagg=sttr; nnum
16、=numm; /如果果要使程程序不產(chǎn)產(chǎn)報錯,加加這句,即即使沒有有傳NUUM也沒沒關(guān)系。 AAT244C022_Sttartt(); AAT244C022_Seend_Chaar(WW_sllavee);/電路路圖上的的AT224C002 AAT244C022_Wrritee_ACCK(); AAT244C022_Seend_Chaar(aaddrresss);/存儲儲內(nèi)容起起始地此此 AAT244C022_Wrritee_ACCK(); AAT244C022_Sttartt(); AAT244C022_Seend_Chaar(RR_sllavee);/電路路圖上的的AT224C002 AAT244C022_Wrritee_ACCK(); / *_datta+=ATT24CC02_Gett_Chhar(); wwhille(nnum-) /AAT244C022_Reead_ACKK() ; *strr=ATT24CC02_Gett_Chhar(); sstr+; /deelayy1mss(5000); AT224C002_RReadd_ACCK() ; fllashh(); ATT24CC02_Endd() ; / reeturrn _datta_fflagg;