EEPROM器件讀寫例程設計課件_第1頁
EEPROM器件讀寫例程設計課件_第2頁
EEPROM器件讀寫例程設計課件_第3頁
EEPROM器件讀寫例程設計課件_第4頁
EEPROM器件讀寫例程設計課件_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、武漢理工大學計算機硬件課程設計說明書EEPROM器件讀寫例程設計1問題描述本次課設是EEPROM器件讀寫例程的設計,即在電可擦除存儲器件上實現(xiàn)數(shù)據(jù)的讀和寫。硬件方面,使用AT24C02芯片作為EEPROM器件,并為了達到實驗結果的可見性,以便測試軟件代碼的正確性,實驗中使用了LED數(shù)碼顯示芯片CH451來控制顯示AT24C02芯片中寫/讀數(shù)據(jù)。軟件代碼方面,需要實現(xiàn)的功能是通過實驗平臺上的按鍵來引發(fā)中斷,并通過I2C總線向AT24C02寫入或讀出某個數(shù)據(jù),同時將該數(shù)據(jù)顯示在數(shù)碼管上。設計主要的要求有以下幾點:(1) 能正常操作LED 數(shù)碼顯示(2) 能通過中斷方式接收按鍵信息(3) 能正確讀寫

2、EEPROM 芯片2需求分析2.1硬件條件程序設計中涉及到的所有硬件設備的明細表如表所示。表2.1 硬件設備明細表序號名稱1PC 機一臺;ZG-211 單片機系統(tǒng)實驗板一塊2實驗連接線若干3并口編程線一根4配套電源1 個5CH451,89S52,CD4052,AT24C02各一個2.2軟件要求本次設計涉及到的軟件主要有以下幾個:(1) 操作系統(tǒng):windows XP(HardWare)(2) 軟件代碼開發(fā)環(huán)境:KEILC UVISION2 集成開發(fā)環(huán)境(3) 聯(lián)機下載軟件:中格電子在線編程V102.3程序設計內容概述程序設計中主要分4個模塊來實現(xiàn),包括初始化模塊、EEPROM數(shù)據(jù)讀寫操作模塊、

3、數(shù)據(jù)顯示模塊以及總體模塊。初始化模塊主要是用來對硬件部分進行初始化。如對MCU進行初始化,選擇4052的通道號,為了提示硬件開始運行,在初始化模塊設計中特意加入了蜂鳴器的工作,蜂鳴聲響起則表示硬件開始工作。其中使用并行可編程芯片8255控制蜂鳴器的開關,所以這里還要實現(xiàn)對芯片8255的初始化。EEPROM數(shù)據(jù)讀寫操作模塊則是用來實現(xiàn)對AT24C02進行數(shù)據(jù)讀寫操作的,由于設計中的數(shù)據(jù)讀寫操作都是通過I2C總線來實現(xiàn)的,所以操作過程要遵循I2C總線協(xié)議。首先要發(fā)送啟動信號,然后再發(fā)送從器件地址,收到響應信號之后再開始從I2C總線上讀/寫數(shù)據(jù),最后還要發(fā)送一個結束信號,表示數(shù)據(jù)操作的結束。數(shù)據(jù)顯示

4、模塊則是將每次操作的數(shù)據(jù)在LED上顯示,以便測試代碼的正確性,該模塊的設計中不僅要包含對數(shù)據(jù)的顯示功能的實現(xiàn),還要實現(xiàn)對按鍵中斷的功能,即時刻檢測實驗平臺上5個按鍵的狀態(tài),以便對不同狀態(tài)做出不同的操作。最后是總體模塊的設計,即將上述的所有模塊聯(lián)系起來,達到相應的設計要求,如對按鍵進行檢測,如果有相應按鍵按下,則產生中斷,將某個數(shù)據(jù)寫入到AT24C02芯片中(或者從AT24C02中讀出一個數(shù)據(jù)),并將該數(shù)據(jù)顯示出來。3接口芯片介紹3.1 AT24C02芯片介紹AT24C02是一個2K位串行CMOS EEPROM,內部含有256個8位字節(jié),CATALYST公司的先進CMOS技術實質上減少了器件的功

5、耗。AT24C02有一個16字節(jié)頁寫緩沖器。該器件通過I2C總線接口進行操作,有一個專門的寫保護功能。AT24C02支持I2C總線數(shù)據(jù)傳送協(xié)議,總線協(xié)議規(guī)定任何將數(shù)據(jù)傳送到總線的器件作為發(fā)送器。任何從總線接收數(shù)據(jù)的器件為接收器。數(shù)據(jù)傳送是由產生串行時鐘和所有起始停止信號的主器件控制的。主器件和從器件都可以作為發(fā)送器或接收器,但由主器件控制傳送數(shù)據(jù)(發(fā)送或接收)的模式,通過器件地址輸入端A0、A1和A2可以實現(xiàn)將最多8個AT24C02器件連接到總線上。其芯片引腳圖如下圖所示。圖3.1 AT24C02引腳圖3.2 AT89S52芯片介紹AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8

6、K在系統(tǒng)可編程Flash 存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業(yè)80C51產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提 供高靈活、超有效的解決方案。AT89S52具有以下標準功能:8k字節(jié)Flash,256字節(jié)RAM, 32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結構,全雙工串行口,片內晶振及時鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下

7、,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。其芯片引腳圖如下圖所示。圖3.2 AT89S52引腳圖 DIP封裝3.3 CH451芯片介紹CH451 是一個整合了數(shù)碼管顯示驅動和鍵盤掃描控制以及P監(jiān)控的多功能外圍芯片。CH451內置RC振蕩電路,可以動態(tài)驅動8位數(shù)碼管或者64位LED,具有BCD譯碼、閃爍、移位等功能;同時還可以進行64鍵的鍵盤掃描;CH451通過可以級聯(lián)的串行接口與單片機等交換數(shù)據(jù);并且提供上電復位和看門狗等監(jiān)控功能。CH451是一個多功能外圍芯片,通過可以級

8、聯(lián)的4線串行接口與單片機、DSP、微處理器等控制器交換數(shù)據(jù)。CH451 包含三個功能:數(shù)碼管顯示驅動、鍵盤掃描控制、P監(jiān)控,三個功能之間相互獨立,控制器可以通過操作命令分別啟用、關閉、設定CH451的任何一個功能。CH451的串行接口是由硬件實現(xiàn)的,控制器可以頻繁地通過串行接口進行高速操作,而絕對不會降低CH451 的工作效率。其芯片引腳圖如下圖所示。 圖3.3 CH451引腳圖3.4 CD4052芯片介紹CD4052 是一個差分4通道數(shù)字控制模擬開關,有A0、A1 兩個二進制控制輸入端和INH 輸入,具有低導通阻抗和很低的截止漏電流。幅值為4.520V的數(shù)字信號可控制峰峰值至20V 的模擬信

9、號。例如,若VDD5V,VSS0,VEE13.5V,則05V的數(shù)字信號可控制13.54.5V的模擬信號。這些開關電路在整個VDDVSS和VDDVEE電源范圍內具有極低的靜態(tài)功耗,與控制信號的邏輯狀態(tài)無關。當INH 輸入端“1”時,所有的通道截止。二位二進制信號選通4通道中的一通道,可連接該輸入端至輸出。其芯片引腳圖如下圖所示。 圖3.4 CD4052引腳圖3.5 AT24C02芯片數(shù)據(jù)讀寫原理3.5.1 AT24C02芯片工作原理AT24C02芯片可存儲256 個字節(jié),重復擦寫1000000次,數(shù)據(jù)保存100 年以上。該芯片通過I2C 總線接口進行操作,并且符合I2C總線的協(xié)議。其原理圖如下圖

10、所示: 圖3.5 AT24C02 原理圖AT24C02各引腳的功能如下表所示:表3.1 AT24C02引腳說明管腳名稱功能A0,A1,A2器件地址選擇SDA串行數(shù)據(jù)地址/數(shù)據(jù)SCL串行時鐘WP寫保護VCC+1.86.0工作電壓VSS地 3.5.2 I2C總線I2C總線協(xié)議: 1、只有在總線空閑時才允許啟動數(shù)據(jù)傳送。 2、在數(shù)據(jù)傳送過程中當時鐘線為高電平時數(shù)據(jù)線必須保持穩(wěn)定狀態(tài)不允許有跳變時鐘線為高電平時數(shù)據(jù)線的任何電平變化將被看作總線的起始或停止信號。起始信號:時鐘線保持高電平期間數(shù)據(jù)線電平從高到低的跳變?yōu)镮2C總線的起始信號。停止信號:時鐘線保持高電平期間數(shù)據(jù)線電平從低到高的跳變?yōu)镮2C總線

11、的停止信號。時序圖根據(jù)總線的協(xié)議規(guī)則,設計如下圖所示的總線時序圖。 圖3.6 總線時序圖根據(jù)總線的時序要求設計總線的讀寫周期時序如下圖所示。圖3.7 總線寫時序圖3.8 立即讀時序在總線的讀寫時序中反映了起始信號和停止信號。在寫周期時序中,STOP CONDITION表示在SCL是高電平的時候SDA由低電平到高電平的轉變表示停止信號;START CONDITION表示在SCL是高電平的時候SDA由高電平到低電平的轉變表示其實信號。圖3.9 起始/停止信號時序在進行I2C 總線操作時,請將所有中斷關閉,以防中斷程序,打亂其時序,操作完成再將中斷恢復。4硬件設計根據(jù)各芯片的接口特性和功能,設計了如

12、下所示的硬件連線原理圖。在實驗板上主要涉及到如下幾個要接線模塊:J1_4052、J4_24C64、J5_89S52、J23_CH451。圖4.1是AT89S52與AT24C02和CD4052的連線圖。圖4.2是AT89S52與CH451的連線圖。硬件的設計共需連接7根導線,圖中雙箭頭表示為需要接線的地方。圖4.1 AT89S52與AT24C02和CD4052的連線圖圖4.2是AT89S52與CH451的連線圖圖4.3 實物電路連接5軟件模塊設計5.1 初始化模塊設計初始化模塊設計中主要包括芯片初始化和蜂鳴器的啟動,其實現(xiàn)代碼如下所示:初始化MCUvoid InitMCU()TMOD = 0x2

13、1;TCON = 0x00;PCON = 0x80;SCON = 0x50;IE = 0x90;毫秒級延時程序,主要用在執(zhí)行一條對硬件進行操作的語句之后,給硬件工作以緩沖時間。確保相應操作有足夠時間完成。void delay_1ms(unsigned int _1ms)unsigned char i,j;for(; _1ms>0; _1ms-)for(i=0; i<10; i+)for(j=0; j<30; j+);CD4052選擇通道,設計中選擇的是2號通道void chang_4052(unsigned char i)switch(i) case 0:EXA=0;EXB=

14、0;break; case 1:EXA=1;EXB=0;break; case 2:EXA=0;EXB=1;break;case 3:EXA=1;EXB=1;break;default:EXA=0;EXB=0;break; 初始化芯片8255void set_8255()delay_1ms(1000);COMM8255 = 0x82;PA8255 = 0x80;PC8255 = 0xfc;打開蜂鳴器void speak_on()PC8255 &= 0xF7;/將8255PC口的第3位置0關閉蜂鳴器void speak_off()PC8255 |= 0x08;/將8255PC口的第3位置

15、1蜂鳴器的開關是由芯片8255的C口第三位來控制的。當將該位置0時,蜂鳴器開始工作;當置1時,蜂鳴器停止工作。這樣就可以提示硬件馬上開始工作。5.2 EEPROM數(shù)據(jù)讀寫操作模塊該模塊的設計主要是實現(xiàn)對AT24C02芯片的讀寫操作,代碼如下所示。從AT24C02讀數(shù)據(jù)的函數(shù)代碼如下所示:char AT24C02Read(unsigned char * _data,unsigned char addr,unsigned char leng)/參數(shù)_data表示數(shù)據(jù)存放的緩沖區(qū)地址,addr表示偏移地址,leng表示數(shù)據(jù)長度unsigned char n;chang_4052(2); /選擇405

16、2芯片的通道2/判斷向I2C總線發(fā)送開始信號和從地址之后,有無響應信號if (AT24C02DummyWrite(addr)=NOK) return NOK;AT24C02Start();/向I2C總線發(fā)送一個開始信號if (AT24C02Nack()=NOK) /檢查從器件是否接受一BYTE的數(shù)據(jù)return NOK;/開始從I2C總線上接受數(shù)據(jù)for (n=0;n<leng; n+) _datan = AT24C02GetByte();AT24C02Ack();/向I2C總線發(fā)送一個數(shù)據(jù)接受完成信號AT24C02Stop();/向I2C總線發(fā)送一個停止信號delay_1ms(30);

17、/操作完成后調用延時程序,延時30msreturn OK;向AT24C02寫入數(shù)據(jù)的函數(shù)實現(xiàn)代碼如下所示:char AT24C02Write(unsigned char * _data,unsigned char addr,unsigned char leng)/參數(shù)_data表示數(shù)據(jù)存放的緩沖區(qū)地址,addr表示偏移地址,leng表示數(shù)據(jù)長度unsigned char n;chang_4052(2);/選擇4052芯片的2號通道AT24C02WP=0;/打開寫保護if (AT24C02DummyWrite(addr)=NOK) return NOK;/開始向I2C總線上發(fā)送數(shù)據(jù)for (n=

18、0; n<leng; n+)AT24C02OutByte(_datan);if (AT24C02Nack()=NOK)/ 檢查從器件是否接受一BYTE的數(shù)據(jù)return NOK; AT24C02Stop();/向I2C總線發(fā)送一個停止信號AT24C02WP = 1;/關閉寫保護delay_1ms(30);return OK;5.3數(shù)據(jù)顯示模塊數(shù)據(jù)顯示模塊的設計就是將操作的數(shù)據(jù)顯示出來,以便觀察,來確定數(shù)據(jù)操作過程是否正確。其實現(xiàn)代碼如下所示。4052芯片運行之前先要對其進行初始化,實現(xiàn)函數(shù)如下所示:void disp_initialize()chang_4052(1);/選擇40522號

19、通道 DIN=0; DIN=1; DCLK=1; LOAD=1; DOUT=1;send_disp_data( CH451_SETSYS, 0x03);/設定系統(tǒng)參數(shù)send_disp_data( CH451_SETDIS, 0x80);/設定顯示參數(shù)數(shù)碼顯示過程就是向4052發(fā)送命令的過程,其中命令包括兩部分,一部分是命令體,確定在那個LED上顯示;另一部分是命令參數(shù)部分,確定要顯示的數(shù)據(jù)值,其實現(xiàn)函數(shù)如下所示:void send_disp_data(unsigned char comm, unsigned char _data)/參數(shù)comm指定命令體,參數(shù)_data指定命令參數(shù)unsig

20、ned char i; /送8BIT數(shù)據(jù)for(i=0;i<8;i+)DIN = (_data>>i)&0x01;DCLK = 1;DCLK = 0;DCLK = 1;/送4BIT命令for(i=0;i<4;i+)DIN = (comm>>i)&0x01;DCLK = 1;DCLK = 0;DCLK = 1;LOAD=1;LOAD=0;LOAD=1;在實際操作中,傳送的都是一個整數(shù),所以必須實現(xiàn)LED顯示整數(shù)的功能,在這里用三個LED來顯示一個8位二進制數(shù)。其實現(xiàn)函數(shù)如下所示:void display_int(unsigned int m)/

21、顯示整數(shù)m/用LOAD1、LOAD2和LOAD3來顯示數(shù)send_disp_data( CH451_LOAD0, 0x10);send_disp_data( CH451_LOAD1, 0x10);send_disp_data( CH451_LOAD2, 0x10);if (m/10000)send_disp_data( CH451_LOAD3, m/10000);elsesend_disp_data( CH451_LOAD3, 0x10);if (!(m/1000)%10)&&(!(m/10000)send_disp_data( CH451_LOAD4, 0x10);elses

22、end_disp_data( CH451_LOAD4, (m/1000)%10);send_disp_data( CH451_LOAD5, (m/100)%10);send_disp_data( CH451_LOAD6, (m/10)%10);send_disp_data( CH451_LOAD7, m%10);除了上述對數(shù)據(jù)的操作實現(xiàn)之外還要實現(xiàn)對按鍵中斷的操作,key_data變量用來記錄有按下操作的按鍵對應的值,這樣就可以通過不同的按鈕按下實現(xiàn)不同的數(shù)據(jù)操作,KEY1-KEY5 的鍵值分別為:0X40,0X49,0X52,0X5B,0X64。按鍵中斷實現(xiàn)代碼如下所示。void key()

23、 interrupt 0 unsigned char i,temp;EX0 = 0;/關中斷key_data = 0;temp = 0;send_comm(CH451_KEY);for(i=0; i<7; i+) temp = DOUT;key_data = key_data|(temp<<(6-i);DCLK=1;DCLK=0;DCLK=1;EX0 = 1;/中斷5.4 總體模塊總體模塊的設計就是講之前的所有模塊整合起來,共同完成設計所要求的功能。其代碼實現(xiàn)如下所示。unsigned char key_data = 0;/記錄有按下操作的按鍵對應的值main()unsign

24、ed char eep_temp2;unsigned char temp = 0;/MCU初始化InitMCU();set_8255();/初始化8255/開關蜂鳴器,表示開始工作speak_on();delay_1ms(1000);/蜂鳴器發(fā)音延時speak_off();Display_TEST();/顯示測試數(shù)據(jù)“12345678”eep_temp1 = 0x02;while(1)if(key_data!=0)/若有鍵按下eep_temp0 = 0x01;/測試值temp = key_data;key_data = 0;switch(temp)case 0x40:/如果是KEY1按下/將測

25、試值寫入EEPROMAT24C02Write(eep_temp, 0, 1);/并將測試值顯示在LED上display_int(int)(eep_temp0);break;case 0x49:/如果是KEY2按下AT24C02Read(eep_temp, 0, 1);/從EEPROM中讀出數(shù)據(jù)display_int(int)(eep_temp0);/并將讀出的數(shù)據(jù)顯示在LED上break;case 0x52:/如果是KEY3按下AT24C02Write(eep_temp, 1, 1);display_int(int)(eep_temp1);break;case 0x5B:/如果是KEY4按下A

26、T24C02Read(eep_temp, 1, 1);display_int(int)(eep_temp1);break;default:break;5.5程序流程圖開始初始化MCU蜂鳴器開和關顯示初始化數(shù)據(jù)鍵按下? 否 是KEY4KEY3KEY2KEY1是 是 是 是向AT24C02寫入eep_temp1中的內容從AT24C02讀出數(shù)據(jù),放入eep_temp1中的內容從AT24C02讀出數(shù)據(jù),放入eep_temp0中的內容向AT24C02寫入eep_temp0中的內容圖5.1程序流程圖6 調試過程與測試結果6.1調試過程6.1.1 程序編輯過程進入KEILC開發(fā)環(huán)境。首先根據(jù)I2C協(xié)議內容,

27、編寫I2C 函數(shù),由于AT24C02的I2C 接口最大頻率是400KHZ,所以在程序中對一個IO口操作完后,請延時2.5us(實驗板上CPU 晶振為11.0592MHZ,一個指令周期為1.08us)。寫好I2C讀寫函數(shù)后,可以對AT24C02進行操作。AT24C02 的寫從地址為0XA0,寫時WP 要置0(打開寫保護),寫完后置為1;讀從地址為0XA1。先將CD4052 的通道選為2,連接CPU 與AT24C02。將上述軟件設計中的各模塊設計編寫成C文件,并添加到KEILC工程文件中,進行調試,如果有錯誤,則會在構造顯示框中提示,找到錯誤并修改完成之后,編譯成功后就會提示正在從“ExpBoar

28、d”產生HEX文件,并提示沒有出錯信息,則說明代碼編寫成功。圖6.1 KEILC開發(fā)環(huán)境6.1.2程序下載程序成功編譯成功生產HEX文件之后,打開聯(lián)機下載軟件,將HEX文件下載到89S52中,觀看程序運行結果。圖6.2 聯(lián)機下載6.2 測試結果如果程序編寫正確,當將程序下載到89S52中后,則應該出現(xiàn)如下結果:首先會聽到蜂鳴器發(fā)音,之后8個LED就會顯示預先加入的測試數(shù)據(jù)“12345678”,短暫顯示之后就全部復位到0;如果按下KEY1,則LOAD1LOAD3會顯示數(shù)001(這時相應的操作就是將eep_temp0中的數(shù)寫入到AT24C02中)。如果按下KEY2,LOAD1LOAD3同樣應該顯示數(shù)001(這里相應的操作是從AT24C02中讀出一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論