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

下載本文檔

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

文檔簡介

1、 學 號: 課 程 設 計題 目eeprom器件讀寫例程設計學 院專 業(yè)班 級姓 名指導教師年月日課程設計任務書學生姓名: 專業(yè)班級: 指導教師: 工作單位:計算機科學與技術學院題 目: eeprom器件讀寫例程設計初始條件:1. 課程設計使用zg211硬件綜合實驗平臺(8051單片機),使用at24c01接口芯片和輔助芯片以及器件;2. zg211有程序設計集成開發(fā)環(huán)境,程序設計語言為c語言;3. zg211硬件綜合實驗平臺使用說明書;要求完成的主要任務: (包括課程設計工作量及其技術要求,撰寫說明書具體要求)1. 學習使用zg211硬件綜合實驗平臺,程序設計集成開發(fā)環(huán)境;2. 根據課程設計

2、題目,進行需求分析,搞清楚課程設計需要設計需求和需要解決的設計內容。3. 查閱和學習課程設計題目需要的接口芯片資料,掌握i2c接口芯片的使用方法和編程要領。查閱和學習課程設計題目需要的輔助芯片以及器件資料。4. 設計接口芯片和輔助芯片以及器件與8051單片機連接硬件電路原理圖。5. 設計與硬件電路原理圖對應的c語言程序(或8051匯編語言)。給出程序流程圖。在集成開發(fā)環(huán)境中調試程序。給出程序的詳細注釋。能夠解釋使用程序模擬電路時序信號和數據。6. 撰寫課程設計報告,1)詳細陳述以上的設計過程;2)詳細陳述電路的調試過程。時間安排:第17周:1. 熟悉zg211硬件綜合實驗平臺,keilc uv

3、ision2 集成開發(fā)環(huán)境;查閱接口芯片資料,熟悉接口芯片和它的使用方法。2. 設計硬件電路原理圖,。第18周:1. 使用c語言或匯編語言設計和調試接口程序。2. 撰寫計算機硬件綜合設計報告。指導教師簽名: 年 月 日系主任(或責任教師)簽名: 年 月 日eeprom器件讀寫例程設計1 實驗目的 掌握io 口操作,掌握顯示及鍵盤芯片的運用,掌握i2c 總線操作2 實驗設備 pc 機一臺;zg-211 單片機系統實驗板一塊 實驗連接線若干 并口編程線一根 串口通訊線一根 配套電源1 個 芯片:ch451, 89s52,cd40523 實驗要求 能正常操作led 數碼顯示,能通過中斷方式接收按鍵信

4、息,能正確讀寫eeprom 芯片。4 實驗平臺及開發(fā)環(huán)境介紹4.1 zg211 實驗板介紹 該實驗板采用了功能模塊化的設計思路,實驗者可單獨設計和調試各個功能模塊,也可將各個模塊綜合起來,組成一個復雜的單片機應用系統。整個實驗板具備了多種總線方式,如并行總線,串行總線,i2c 總線,單總線等,各總線都有獨立插孔,可與單片機,8255,gal 等多個芯片相連,采用何種總線技術,可由實驗者自己選擇。實驗板通過并口下載線與pc 機相聯,實現在線編程。程序在電腦模擬仿真后,下載到實驗板上,通過觀察數碼管顯示器及相應的變化,便可確認程序運行是否正常。4.2 實驗板模塊示意圖4.3 實驗板模塊布局圖 4.

5、4 keilc uvision2 集成開發(fā)環(huán)境4.5 中格電子在線編程軟件5 實驗原理 單片機系統常用 eeprom 芯片在掉電情況下保存一些重要數據。本實驗板采用的芯片是 at24c02,可存儲 256 個字節(jié),重復擦寫 1,000,000 次,數據保存 100 年以上。該芯片通過 i2c 總線接口進行操作。i2c 協議原理:i2c 總線用兩條線(sda 和scl)在芯片和模塊間傳遞信息。sda 為串行數據線,scl為串行時鐘線。 1只有在總線空閑時才允許啟動數據傳送。 2在數據傳送過程中,當時鐘線為高電平時,數據線必須保持穩(wěn)定狀態(tài)不允許。有跳變時鐘線為高電平時,數據線的任何電平變化將被看作

6、總線的起始或停止信號。 起始信號: 時鐘線保持高電平期間,數據線電平從高到低的跳變作為i2c 總線的起始信號。 停止信號: 時鐘線保持高電平期間,數據線電平從低到高的跳變作為 i2c 總線的停止信號??偩€時序寫周期時序起始/停止時序器件尋址: 主器件通過發(fā)送一個起始信號啟動發(fā)送過程,然后發(fā)送它所要尋址的從器件的地址。8位從器件地址的高4位固定為1010。 接下來的3 位a2 a1 a0 為器件的地址位,用來定義哪個器件以及器件的哪個部分被主器件訪問。 從器件8 位地址的最低位,作為讀寫控制位?!?” 表示對從器件進行讀操作, “0” 表示對從器件進行寫操作。在主器件發(fā)送起始信號和從器件地址字節(jié)

7、后, pcf8563 監(jiān)視總線并當其地址與發(fā)送的從地址相符時響應一個應答信號(通過sda線) 。pcf8563 再根據讀寫控制位(r/w)的狀態(tài)進行讀或寫操作。 應答信號: i2c 總線數據傳送時每成功地傳送一個字節(jié)數據后,接收器都必須產生一個應答信號,應答的器件在第9 個時鐘周期時將sda 線拉低,表示其已收到一個8 位數據。 pcf8563在接收到起始信號和從器件地址之后響應一個應答信號,如果器件已選擇了寫操作,則在每接收一個8 位字節(jié)之后響應一個應答信號。 當pcf8563工作于讀模式時, 在發(fā)送一個8 位數據后釋放sda 線并監(jiān)視一個應答信號,一旦接收到應答信號,pcf8563繼續(xù)發(fā)送

8、數據,如主器件沒有發(fā)送應答信號,器件停止傳送數據并等待一個停止信號主器件。應答時序圖從器件地址位其中a0、a1 和a2 對應24c02的管腳1、2 和3,pcf8563的從地址讀操作時為0a3h,寫操作時為0a2h。 寫操作: 1.字節(jié)寫 在字節(jié)寫模式下,主器件發(fā)送起始命令和從器件地址信息(r/w位置零)給從器件,在從器件產生應答信號后,主器件發(fā)送pcf8563的字節(jié)地址,主器件在收到從器件的另一個應答信號后,再發(fā)送數據到被尋址的存儲單元。pcf8563再次應答,并在主器件產生停止信號后開始內部數據的擦寫,在內部擦寫過程中pcf8563不再應答主器件的任何請求。字節(jié)寫時序圖2頁寫 用頁寫,pc

9、f8563可以一次寫入16 個字節(jié)的數據,頁寫操作的啟動和字節(jié)寫一樣,不同在于傳送了一字節(jié)數據后并不產生停止信號。主器件被允許發(fā)送p(pcf8563:p=15;)個額外的字節(jié)。每發(fā)送一個字節(jié)數據后pcf8563產生一個應答位并將字節(jié)地址低位加1, 高位保持不變。 如果在發(fā)送停止信號之前主器件發(fā)送超過p+1個字節(jié),地址計數器將自動翻轉,先前寫入的數據被覆蓋。 接收到p+1字節(jié)數據和主器件發(fā)送的停止信號后, 芯片啟動內部寫周期將數據寫到數據區(qū),所有接收的數據在一個寫周期內寫入pcf8563。頁寫時序圖應答查詢: 可以利用內部寫周期時禁止數據輸入這一特性, 一旦主器件發(fā)送停止位指示主器件操作結束時,

10、pcf8563啟動內部寫周期,應答查詢立即啟動,包括發(fā)送一個起始信號和進行寫操作的從器件地址。如果pcf8563正在進行內部寫操作,不會發(fā)送應答信號。如果pcf8563已經完成了內部自寫周期,將發(fā)送一個應答信號,主器件可以繼續(xù)進行下一次讀寫操作。 寫保護: 寫保護操作特性可使用戶避免由于不當操作而造成對存儲區(qū)域內部數據的改寫,當wp 管腳接高時整個寄存器區(qū)全部被保護起來而變?yōu)橹豢勺x取。 讀操作: pcf8563讀操作的初始化方式和寫操作時一樣,僅把(r/w) 位置為1,有三種不同的讀操作方式:立即地址讀、選擇讀和連續(xù)讀。 1. 立即地址讀: pcf8563的地址計數器內容為最后操作字節(jié)的地址加

11、1。也就是說,如果上次讀/寫的操作地址為n,則立即讀的地址從地址n+1開始。如果n=e(這里對24c02,e=255;對pcf8563,e=16) , 則計數器將翻轉到0且繼續(xù)輸出數。 pcf8563接收到從器件地址信號后 (r/w位置1) , 它首先發(fā)送一個應答信號,然后發(fā)送一個8 位字節(jié)數據。主器件不需發(fā)送一個應答信號,但要產生一個停止信號。立即地址時序圖2. 選擇性讀: 操作允許主器件對寄存器的任意字節(jié)進行讀操作,主器件首先通過發(fā)送起始信號、從器件地址和它想讀取的字節(jié)數據的地址執(zhí)行一個偽寫操作。在pcf8563應答之后,主器件重新發(fā)送起始信號和從器件地址,此時r/w 位置1, pcf85

12、63響應并發(fā)送應答信號,然后輸出所要求的一個8 位字節(jié)數據,主器件不發(fā)送應答信號但產生一個停止信號。選擇讀時序圖3. 連續(xù)讀: 連續(xù)讀操作可通過立即讀或選擇性讀操作啟動。在pcf8563發(fā)送完一個8 位字節(jié)數據后,主器件產生一個應答信號來響應,告知pcf8563主器件要求更多的數據,對應每個主機產生的應答信號pcf8563將發(fā)送一個8 位數據字節(jié)。當主器件不發(fā)送應答信號而發(fā)送停止位時結束此操作。從pcf8563輸出的數據按順序由n到n+1輸出。讀操作時地址計數器在pcf8563整個地址內增加,這樣整個寄存器區(qū)域在可在一個讀操作內全部讀出。當讀取的字節(jié)超過e(對于pcf8563,e=16;對24

13、c02, e=255)計數器將翻轉到零并繼續(xù)輸出數據字節(jié)。連續(xù)讀時序圖at24c02原理圖如下: at24c02原理圖管腳名稱功能a0,a1,a2器件地址選擇sda串行數據/地址scl串行時鐘wp寫保護vcc +1.86.0v工作電壓vss地at24c02引腳說明5實驗步驟5.1 硬件連接將并口線插在實驗板與pc 機的并口插座上;按圖2-28 連接實驗線路(ch451 與cpu 連接實驗線路見圖2-2);仔細檢查無誤后,接通電源。(圖中箭頭表示需要接線的地方);5.2 軟件設計進入keilc 開發(fā)環(huán)境。首先根據 234 i2c 協議 內容,編寫i2c 函數,由于at24c02的i2c 接口最大

14、頻率是400khz,所以在程序中對一個io 口操作完后,請延時2.5us(實驗板上cpu 晶振為11.0592mhz,一個指令周期為1.08us)。寫好i2c 讀寫函數后,可以對at24c02進行操作。at24c02 的寫從地址為0xa0,寫時wp 要置0(打開寫保護),寫完后置為1;讀從地址為0xa1。先將cd4052 的通道選為2,連接cpu 與at24c02。向at24c02 中地址為0x00 到0x07 的單元,寫入數據0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 后,再從at24c02 中讀出,進行比較。如果一致則顯示1,錯誤則顯示0。顯示、鍵盤實

15、驗看2.1 節(jié)。5.3 編譯下載程序編譯成功后,打開聯機下載軟件,將hex文件下載到89s52中,觀看程序運行結果。如有問題則修改程序,再次下載。(請注意:at24c02的擦寫次數有限,頻繁擦寫會影響其使用壽命。)調試成功后,請將i2c 讀寫程序、at24c02 讀寫程序,寫成函數,以供其他模塊調用。6 實驗成功標志按下1 號按鍵,顯示“001”,同時向at24c02 中指定位置寫入數據;按下2 號按鍵,從at24c02 中指定位置讀出數據并顯示,應與寫入數據一致。7 程序源碼設計7.1 main函數程序說明main函數的主要功能是:1、初始化mcu;2、開關蜂鳴器,表示開始工作;3、設定不同

16、鍵值對應的操作。若按下1號按鍵,顯示測試值,同時向 at24c02 中指定位置寫入數據; 若按下2號按鍵,從 at24c02 中指定位置讀出數據并顯示,應與寫入數據一致。詳細代碼及說明如下: main()unsigned char eep_temp2;unsigned char temp = 0;/mcu初始化initmcu();set_8255();/開關蜂鳴器,表示開始工作speak_on();delay_1ms(50);speak_off();display_test();eep_temp0 = 0x01;/測試值while(1)if(key_data!=0)/若有鍵按下temp = k

17、ey_data;key_data = 0;switch(temp)case 0x40:/若按下1號按鍵/將測試值寫入eepromat24c02write(eep_temp, 0, 1);/顯示測試值display_int(int)(eep_temp0);break;case 0x49:/若按下2號按鍵/從eeprom中讀數據at24c02read(eep_temp, 0, 1);/顯示測試值是否與輸入一致display_int(int)(eep_temp0);break;default:break;7.2 i2c讀寫程序說明7.2.1向i2c總線發(fā)送一個開始信號void at24c02star

18、t()at24c02sda = 1;/初始設置p11接口為1delay_1ms(1);/延時at24c02scl = 1; /初始設置p10接口為1delay_1ms(1); /延時at24c02sda = 0; /初始設置p11接口為0delay_1ms(1); /延時at24c02scl = 0; /初始設置p11接口為0delay_1ms(1); /延時7.2.2向i2c總線發(fā)送一個停止信號void at24c02stop()at24c02sda = 0; /設置p11接口為0delay_1ms(1); /延時at24c02scl = 1; /設置p10接口為1delay_1ms(1);

19、 /延時at24c02sda = 1; /設置p11接口為1delay_1ms(1); /延時at24c02scl = 0; /設置p10接口為0delay_1ms(1); /延時7.2.3向i2c總線接受1bit數據unsigned char at24c02clock()unsigned char sda_value;delay_1ms(1); /延時at24c02scl = 1; /設置p10接口為1delay_1ms(1); /延時sda_value = at24c02sda;/向i2c總線接受數據delay_1ms(1); /延時at24c02scl = 0; /設置p10接口為0de

20、lay_1ms(1); /延時return(sda_value);7.2.4向i2c總線發(fā)送一個數據接受完成信號void at24c02ack()at24c02sda = 0; /設置p11接口為0at24c02clock();/向i2c總線接受1bit數據7.2.5檢查從器件是否接受1byte的數據bit at24c02nack() at24c02sda=1;if (at24c02clock()=0) /判斷是否接受1byte數據,若接收到return ok;else /判斷是否接受1byte數據,若未接收到return nok;7.2.6向i2c總線發(fā)送一個字節(jié)的數據void at24c0

21、2outbyte(unsigned char byte)char count;for (count=0; count8; count+) / 向eeprom 發(fā)送數據if (byte & 0x80) = 0)at24c02sda = 0;else at24c02sda = 1;byte = 1; / 數據左移一位at24c02clock();/向i2c總線接受1bit數據7.2.7從i2c總線接受一個字節(jié)的數據unsigned char at24c02getbyte()unsigned char byte=0,temp,count;/ 接收一個字節(jié)的數據for (count=0; count8

22、; count+) byte = 1;at24c02sda = 1;temp = at24c02clock();/從i2c總線接受1bit數據if (temp = 1)/判斷數據的數據是否與讀出的一致,若一致,則置1byte = byte | 0x01; return(byte);7.2.8向i2c總線發(fā)送開始信號和從地址bit at24c02dummywrite(unsigned char addr)at24c02start(); /向i2c總線發(fā)送一個開始信號at24c02outbyte(at24c02slave); /向i2c總線發(fā)送0xa0的數據if (at24c02nack()=no

23、k) /若從器件無應答return nok;at24c02outbyte(addr);if (at24c02nack()=nok) /若從器件無應答return nok;return ok; 7.3 at24c02 讀寫程序說明7.3.1從at24c02讀取數據char at24c02read(unsigned char * _data,unsigned char addr,unsigned char leng)unsigned char n;chang_4052(2);if (at24c02dummywrite(addr)=nok) /向i2c總線發(fā)送從地址,所屬器件無應答return no

24、k;at24c02start();/向i2c總線發(fā)送一個開始信號at24c02outbyte(at24c02slave|0x01); /向i2c總線發(fā)送一個讀取數據if (at24c02nack()=nok) /若從器件未接收到數據return nok;/讀取數據失敗for (n=0;nleng-1; n+) _datan = at24c02getbyte();/將從i2c總線接收到的數據賦給_datanat24c02ack();/向i2c總線發(fā)送一個數據接受完成信號_dataleng - 1 = at24c02getbyte();at24c02stop();/向i2c總線發(fā)送一個停止信號de

25、lay_1ms(30);/延時return ok; /讀取數據成功7.3.2向at24c02寫數據char at24c02write(unsigned char * _data,unsigned char addr,unsigned char leng)unsigned char n;chang_4052(2);at24c02wp=0;/打開寫保護if (at24c02dummywrite(addr)=nok) /向i2c總線發(fā)送從地址,所屬器件無應答return nok;/寫數據失敗for (n=0; nleng; n+)at24c02outbyte(_datan); /向i2c總線發(fā)送待寫數據內容if (at24c02nack()=nok) /若從器件未接收到數據return nok; /寫數據失敗at24c02stop();/向i2c總線發(fā)送一個停止信號at24c02wp = 1; /關閉寫保護delay_1ms(30);/延時return ok; /寫數據成功8操作過程說明調試程序的過程中出現的比較多的就是指令操作錯誤。以及函數的調用錯誤,對于子函數的命名一定要有一定規(guī)律性,避免在調用時經常調用錯誤。進行程序調試時按照如下的步驟: 電源指示燈是否正

溫馨提示

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

評論

0/150

提交評論