嵌入式課程設計doc_第1頁
嵌入式課程設計doc_第2頁
嵌入式課程設計doc_第3頁
嵌入式課程設計doc_第4頁
嵌入式課程設計doc_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論