版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
bitCheck_Acknowledge(void)/*發(fā)送完一個字節(jié)后檢驗設備的應答信號*/voidWriteI2CByte(charb)reentrant/*向I2C總線寫一個字節(jié)*/charReadI2CByte(void)reentrant/*從I2C總線讀一個字節(jié)*/voidWrite_One_Byte(charaddr,charthedata)/*字節(jié)寫入函數(shù)*/voidWrite_A_Page(char*buffer,charaddr)/*頁寫入函數(shù)*/charRead_One_Byte(charaddr)/*隨機讀函數(shù)*/voidRead_N_Bytes(char*buffer,charn,charaddr)/*順序讀函數(shù)*/(2)主函數(shù)main()主函數(shù)是程序的主流程,首先定義使用到的常數(shù)、全局變量及函數(shù)原型說明,然后初始化圖形系統(tǒng),調(diào)用函數(shù)Write_One_Byte(charaddr,charthedata)完成字節(jié)寫入,調(diào)用Write_A_Page(char*buffer,charaddr)完成頁寫入,調(diào)用Read_One_Byte(charaddr)完成隨機讀,調(diào)用Read_N_Bytes(char*buffer,charn,charaddr)/*完成順序讀*/。voidmain(){
inti;
charmybyte;
charmyarray[8];
charmyarray2[8];
charrdarray[16];
for(i=0;i<8;i++)
{
myarray[i]=i;
myarray2[i]=i+0x08;
}
Write_One_Byte(0x20,0x28);
Write_A_Page(myarray,0x10);
Write_A_Page(myarray2,0x18);
mybyte=Read_One_Byte(0x20);
Read_N_Bytes(rdarray,16,0x10);}3.源程序/****************************************************************/#include<string.h>#include<reg52.h>#include<intrins.h>#defineDELAY_TIME60/*經(jīng)實驗,不要小于50!否則可能造成時序混亂*/
#defineTRUE1#defineFALSE0sbitSCL=P1^7;/*假設由P1.7和P1.6控制*/
sbitSDA=P1^6;/**********FunctionDefinition函數(shù)定義************/voidDELAY(unsignedintt)/*延時函數(shù)*/
{while(t!=0)t--;
}voidI2C_Start(void)
{/*啟動I2C總線的函數(shù),當SCL為高電平時使SDA產(chǎn)生一個負跳變*/
SDA=1;
SCL=1;
DELAY(DELAY_TIME);
SDA=0;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}voidI2C_Stop(void)
{/*終止I2C總線,當SCL為高電平時使SDA產(chǎn)生一個正跳變*/
SDA=0;
SCL=1;
DELAY(DELAY_TIME);
SDA=1;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);}voidSEND_0(void)
/*設置時鐘*/
{
/*發(fā)送0,在SCL為高電平時使SDA信號為低*/
SDA=0;
SCL=1;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}voidSEND_1(void)
{/*發(fā)送1,在SCL為高電平時使SDA信號為高*/
SDA=1;
SCL=1;
DELAY(DELAY_TIME);
SCL=0;
DELAY(DELAY_TIME);
}bitCheck_Acknowledge(void)
{/*發(fā)送完一個字節(jié)后檢驗設備的應答信號*/
SDA=1;
SCL=1;
DELAY(DELAY_TIME/2);
F0=SDA;
DELAY(DELAY_TIME/2);
SCL=0;
DELAY(DELAY_TIME);
if(F0==1)
returnFALSE;
returnTRUE;
}voidWriteI2CByte(charb)reentrant
{/*向I2C總線寫一個字節(jié)*/
chari;
for(i=0;i<8;i++)
if((b<<i)&0x80)
SEND_1();
Else
SEND_0();
}charReadI2CByte(void)reentrant
{/*從I2C總線讀一個字節(jié)*/
charb=0,i;
for(i=0;i<8;i++)
{
SDA=1;
/*釋放總線*/
SCL=1;
/*接受數(shù)據(jù)*/
DELAY(10);
F0=SDA;
DELAY(10);
SCL=0;
if(F0==1)
{b=b<<1;
b=b|0x01;}Else
b=b<<1;}
returnb;}/**********以下為讀寫函數(shù)**********/
voidWrite_One_Byte(charaddr,charthedata)
{
bitacktemp=1;
/*writeabytetomem*/
I2C_Start();
WriteI2CByte(0xa0);
acktemp=Check_Acknowledge();
WriteI2CByte(addr);/*address*/
acktemp=Check_Acknowledge();
WriteI2CByte(thedata);/*thedata*/
acktemp=Check_Acknowledge();
I2C_Stop();}voidWrite_A_Page(char*buffer,charaddr){
bitacktemp=1;
bitwrtmp;
inti;
/*writeapagetoat24c02*/
I2C_Start();
WriteI2CByte(0xa0);
acktemp=Check_Acknowledge();
WriteI2CByte(addr);/*address*/
acktemp=Check_Acknowledge();
for(i=0;i<7;i++)
{
WriteI2CByte(buffer[i]);
if(!Check_Acknowledge())
{I2C_Stop();
}
}
I2C_Stop();}charRead_One_Byte(charaddr){
bitacktemp=1;
charmydata;
/*readabytefrommem*/
I2C_Start();
WriteI2CByte(0xa0);
acktemp=Check_Acknowledge();
WriteI2CByte(addr);/*address*/
acktemp=Check_Acknowledge();
I2C_Start();
WriteI2CByte(0xa1);
acktemp=Check_Acknowledge();
mydata=ReadI2CByte();
acktemp=Check_Acknowledge();
returnmydata;
I2C_Stop();}voidRead_N_Bytes(char*buffer,charn,charaddr){
bitacktemp=1;
inti=0;
/*read8bytesfrommem*/
I2C_Start();
WriteI2CByte(0xa0);
acktemp=Check_Acknowledge();
WriteI2CByte(addr);/*address*/
acktemp=Check_Acknowledge();
I2C_Start();
WriteI2CByte(0xa1);
acktemp=Check_Acknowledge();
for(i=0;i<n;i++)
{
buffer[i]=ReadI2CByte();
if(i!=n-1)
SEND_0();
/*發(fā)送應答*/
Else
SEND_1();
/*發(fā)送非應答*/
}
I2C_Stop();}voidmain(){
inti;
charmybyte;
charmyarray[8];
charmyarray2[8];
charrdarray[16];
for(i=0;i<8;i++)
{
myarray[i]=i;
myarray2[i]=i+0x08;
}
Write_One_Byte(0x20,0x28);
Write_A_Page(myarray,0x10);
Write_A_Page(myarray2,0x18);
mybyte=Read_One_Byte(0x20);
Read_N_Bytes(rdarray,16,0x10);}七.設計心得體會對于這次課程設計,我的感受很深,并且也收獲挺多的。在搞課程設計的過程中,遇到的問題還真不少。首先,時間的分配方面,由于現(xiàn)在離考研的日子越來越近了,所以白天根本沒時間可以用來搞課程設計,于是晚上11點后則成了我搞課程設計的時間,說實在話,在那樣艱苦的環(huán)境下,我更感到任務的艱巨。其次,在知識方面,對于I2C協(xié)議我很陌生,而且就連EEFROM也不是很熟悉,所以在這樣的情況下,要完成它頓感困難重重,但是,我并沒有放棄,通過在圖書館查閱資料,并綜合老師給的資料和網(wǎng)上搜索的部分資料,我大概弄懂了I2C協(xié)議的基本工作原理,同時對于EEFROM讀寫功能的軟件實現(xiàn)基本上弄明白了。最后,關于這個程序的調(diào)試,由于現(xiàn)在水平和時間的限制,一時還無法實現(xiàn),但是對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024的廣東省室內(nèi)環(huán)境質(zhì)量保證合同C款(家具購買)
- 2024建筑合同法全文
- 鋼結構施工承包合同范本
- 2024個人住房裝修合同書協(xié)議
- 收藏品贈送合同范本
- 面包店轉讓協(xié)議書模板
- 建筑工程監(jiān)理服務合同
- 建筑設備出租合同范本
- 普通合伙人合同協(xié)議書范文
- 證券交易云平臺運營協(xié)議
- 中國人民解放軍空成立紀念日課件模板
- 2024秋期國家開放大學《公共政策概論》一平臺在線形考(形考任務1至4)試題及答案
- 2025年考研政治政治理論時政熱點知識測試題庫及答案(共三套)
- 大學生生涯發(fā)展展示 (修改)
- 電氣工程師生涯人物訪談報告
- 康復評定技術說課課程匯報
- 矩陣論同步學習輔導 張凱院 西北工業(yè)大學出版社
- 應急聯(lián)防聯(lián)動協(xié)議
- D600變頻器說明書
- 上海英皇明星城初步設計(圖文)
- 卓越日語課程班(中日班)合作計劃書
評論
0/150
提交評論