版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第10章STC系列單片機片內EEPROM的應用
10.1EEPROM模塊所屬特殊功能寄存器10.2EEPROM讀、寫、擦除第10章STC系列單片機片內EEPROM的應用STC系列單片機內部不僅集成了用于存儲程序的EEPROM,還集成了用于存儲數(shù)據(jù)的EEPROM,不同的型號容量不同,從1KB-45KB不等。EEPROM主要用于保存在掉電時不允許丟失的數(shù)據(jù),在應用過程中所采集、運算或通過鍵盤輸入等得到的一些修正參數(shù)。STC系列單片機內部集成的用于存儲數(shù)據(jù)的EEPROM和用于存儲程序的EEPROM地址重疊,但屬于不同的物理空間。用戶程序指令代碼是通過串口直接下載至程序存儲器,而用于存儲數(shù)據(jù)的EEPROM則通過用戶程序進行讀寫操作。10.1EEPROM模塊所屬特殊功能寄存器對存儲數(shù)據(jù)的EEPROM讀、寫、擦除等操作要用到6個特殊功能寄存器特殊功能寄存器名稱地址描述復位初值IAP_DATAC2H/E2H數(shù)據(jù)寄存器11111111BIAP_ADDRHC3H/E3H地址寄存器高8位00000000BIAP_ADDRLC4H/E4H地址寄存器低8位00000000BIAP_CMDC5H/E5H命令寄存器xxxxxx00BIAP_TRIGC6H/E6H命令觸發(fā)寄存器xxxxxxxxBIAP_CONTRC7H/E7H控制寄存器0000x000BSTC11/10Fxx、STC12C5A60S2等單片機的6個特殊功能寄存器的地址分別為C2-C7H;而STC12C56xx、STC12C54xx、STC89/90C51xx等系列單片機的地址為E2-E7H。1.命令寄存器IAP_CMD
MS1、MS0決定EEPROM的工作方式MS1MS0操作任務的選擇00待機模式,不操作01對EEPROM進行讀操作10對EEPROM進行寫操作11對EEPROM進行擦除操作2.控制寄存器IAP_CONTR
對IAPEN、SWBS兩位,用戶只能寫入1、0或0、0。IAPEN:讀、寫、擦除使能位。清0后禁止對EEPROM進行讀、寫、擦除;置1后允許對EEPROM進行讀、寫、擦除。SWBS:若對該位寫入0,則是選擇了用戶應用程序(IAP)對EEPROM進行操作;該位若寫入1,則是選擇了單片機內部固化的系統(tǒng)監(jiān)控程序(ISP)對EEPROM進行操作。SWRST:若對該位寫入1時將產(chǎn)生系統(tǒng)軟件復位,復位響應時,硬件自動將該位清零。CMD_FAIL:若該位為0,表示對EEPROM的讀、寫、擦除等操作是成功的;若該位為1,表示對EEPROM的讀、寫、擦除等操作失敗,須由軟件清0。WT2、WT1、WT0這三位設置等待時間,寫入EEPROM單元的數(shù)據(jù)需要55μs的內部編程時間。如果是對內部扇區(qū)擦除,則需要21ms。在此期間,不得對EEPROM的任何單元進行任何訪問,否則在此之前寫入的命令失效。這三位的值決定等待上述時間所需要的系統(tǒng)時鐘周期數(shù),具體情況如表10-3所示。WT2WT1WT0讀(2個時鐘)寫(55us)扇區(qū)擦除(21ms)對應fosc
1112個時鐘55個時鐘21012個時鐘1MHz1102個時鐘100個時鐘42024個時鐘2MHz1012個時鐘165個時鐘63036個時鐘3MHz1002個時鐘330個時鐘126072個時鐘6MHz0112個時鐘660個時鐘252144個時鐘12MHz0102個時鐘1000個時鐘420240個時鐘20MHz0012個時鐘1320個時鐘504288個時鐘24MHz0002個時鐘1760個時鐘672384個時鐘30MHz10.2EEPROM讀、寫、擦除EEPROM進行讀寫時,必須按一個字節(jié)一個字節(jié)地操作。通過以下程序了解對EEPROM的讀、寫、擦除的過程。(1)從STC12C5A60S2單片機片內EEPROM中某單元讀取數(shù)據(jù)(假設系統(tǒng)時鐘頻率為20MHz) MOVIAP_ADDRH,#BYTE_ADDRH;送單元地址的高8位 MOVIAP_ADDRL,#BYTE_ADDRL;送單元地址的低8位 MOVIAP_CONTR,#10000010B;設置等待時間且允許 EEPROM進行讀、寫、擦除操作 MOVIAP_CMD,#00000001B;送字節(jié)讀指令 MOVIAP_TRIG,#5AH;啟動內部讀取工作 MOVIAP_TRIG,#0A5H NOP;等待2個時鐘周期的時間 NOP MOVA,ISP_DATA;將讀出的數(shù)據(jù)存入A寄存器(2)向STC12C5A60S2單片機片內EEPROM中某單元寫入數(shù)據(jù)(假設系統(tǒng)時鐘頻率為20MHz):MOVIAP_DATA,#DATA;先將要寫入的數(shù)據(jù)送至IAP_DATA寄存器MOVIAP_ADDRH,#BYTE_ADDRH;送單元地址的高8位MOVIAP_ADDRL,#BYTE_ADDRL;送單元地址的低8位MOVIAP_CONTR,#10000010B;設置等待時間且允許對EEPROM進行讀、寫、擦除操作MOVIAP_CMD,#00000010B;送字節(jié)寫命令MOVIAP_TRIG,#5AH;啟動內部編程工作MOVIAP_TRIG,#0A5HLCALLDELAY_55μs;調用延時55μs的子程序,等待編程結束完成讀、寫操作后,地址不會自動加1,每次執(zhí)行讀、寫操作時須重新送地址。(3)如果在某扇區(qū)中已向部分單元寫入了數(shù)據(jù),要想再改寫數(shù)據(jù),需對該扇區(qū)的所有單元進行全部擦除,即改寫數(shù)據(jù)前先對整個扇區(qū)進行擦除,對扇區(qū)擦除的程序如下(假設系統(tǒng)時鐘頻率為20MHz): MOVIAP_ADDRH,#SECTOR_ADDR_HIGH;送扇區(qū)起始地址的高8位 MOVIAP_ADDRL,#SECTOR_ADDR_LOW;送扇區(qū)起始地址的低8位 MOVIAP_CONTR,#10000010B;設置等待時間且允許對EEPROM進行讀、寫、擦除等操作 MOVIAP_CMD,#00000011B;送扇區(qū)擦除指令 MOVIAP_TRIG,#5AH;啟動擦除進程 MOVIAP_TRIG,#0A5H LCALLDELAY_21ms;延時21ms,等待擦除結束IAP_DATAEQU0C2H;數(shù)據(jù)寄存器IAP_ADDRHEQU0C3H;高8位地址寄存器IAP_ADDRLEQU0C4H;低8位地址寄存器IAP_CMDEQU0C5H;命令寄存器IAP_TRIGEQU0C6H;觸發(fā)寄存器IAP_CONTREQU0C7H;控制寄存器SECTION_ADDREQU0000H;扇區(qū)首地址ORG0000HLJMPMAINORG0100HMAIN:MOVSP,#0BFH;初始化堆棧指針START0:MOVDPTR,#SECTION_ADDR;第一扇區(qū)的首地址送DPTRLCALLSECTION_ERASE;調用扇區(qū)擦除子程序MOVA,IAP_CONTR;讀控制寄存控制器JNBACC.4,START;若此位為0,表示擦除成功,可進行編程LJMPSTART0;若擦除失敗,須重新進行擦除START:MOVDPTR,#SECTION_ADDR;第一扇區(qū)的首地址送DPTRMOVR0,#50H;R0作為片內RAM的指針MOVR2,#16;R2作為寫16個字節(jié)的計數(shù)器LOOP: LCALLBYTE_PROGRAM;調用向EEPROM寫數(shù)據(jù)的子程序LCALLBYTE_READ;調用讀EEPROM子程序MOVA,@R0CJNEA,IAP_DATA,START0;如果讀到的數(shù)據(jù)與原數(shù)據(jù)不等,則重新開始INCDPTR;EEPROM地址加1 INCR0;片內RAM地址加1DJNZR2,LOOP;計數(shù)不為0,跳轉至LOOPSJMP$SECTION_ERASE:;擦除 MOVIAP_CONTR,#82H;設置等待時間且允許對EEPROM進行操作MOVIAP_CMD,#03H;對EEPROM進行扇區(qū)擦除命令MOVIAP_ADDRL,DPL;送入扇區(qū)首地址的低8位MOVIAP_ADDRH,DPH;送入扇區(qū)首地址的高8位MOVIAP_TRIG,#5AH;啟動擦除操作MOVIAP_TRIG,#0A5H LCALLDELAY_21ms;延時等待 RETBYTE_READ:;讀 MOVIAP_CONTR,#82HMOVIAP_CMD,#01H;讀EEPROM命令MOVIAP_ADDRL,DPL;送入地址的低8位 MOVIAP_ADDRH,DPH;送入地址的高8位 MOVIAP_TRIG,#5AH;啟動讀操作 MOVIAP_TRIG,#0A5H NOP NOP RETDELAY_55μs:;略DELAY_21ms:;略ENDC51程序:#include<STC12C5A.h>#include<intrins.h>//聲明本征函數(shù)庫#defineucharunsignedchar#defineuintunsignedint#defineSECTION_ADDR0x0000//定義扇區(qū)的首地址uchardata*dp;//定義指針ucharTemp;uinti,xdat;longy;voidSECTION_ERASE(uintSECTION_ADDR);//扇區(qū)擦除函數(shù)voidBYTE_PROGRAM(uintbyte_addr);//扇區(qū)編程函數(shù)ucharBYTE_READ(uintbyte_addr);//讀扇區(qū)內容函數(shù)voidDelay_μs()reentrant;//延時函數(shù)voidmain(){ ucharflag=0; //定義扇區(qū)擦除失敗的標記位 dp=0x50;//dp指針指向50H
while(flag==0)//若扇區(qū)擦除失敗,則再次循環(huán)擦出{ SECTION_ERASE(SECTION_ADDR);//對整個扇區(qū)進行擦除
for(i=0;i<16;i++) { flag=0xFF; //先預置擦除成功標記 dp=dp+i;//指向片內RAM單元的下一字節(jié) BYTE_PROGRAM(i+SECTION_ADDR);
if(BYTE_READ(i+SECTION_ADDR)!=*dp) {flag=0;//寫失敗
break; } }}
while(1);}voidBYTE_PROGRAM(uintbyte_addr){IAP_CONTR=0x82;//設置等待時間且允許對EEPROM進行操作IAP_CMD=0x02;//對EEPROM進行寫操作IAP_ADDRL=byte_addr;//送入扇區(qū)地址的低8位IAP_ADDRH=(byte_addr>>8);//送入扇區(qū)地址的高8位IAP_DATA=*dp;//將數(shù)據(jù)送至數(shù)據(jù)寄存器IAP_TRIG=0x5A;//啟動觸發(fā)IAP_TRIG=0xA5;Delay_μs(0x0445);延時55μs}ucharBYTE_READ(uintbyte_addr){IAP_CONTR=0x82;//設置等待時間且允許對EEPROM進行操作IAP_CMD=0x01;//對EEPROM進行讀操作IAP_ADDRL=byte_addr;//送入扇區(qū)地址的低8位IAP_ADD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工作計劃新聞部第六屆工作計劃
- 睡美蓮紡織品創(chuàng)業(yè)計劃書創(chuàng)業(yè)計劃書
- 脫貧攻堅幫扶工作總結計劃及思路
- 初三數(shù)學教師教學工作計劃
- 2025二年級新學期數(shù)學教研組的工作計劃
- 工作計劃it行業(yè)
- 四年美術下冊教學計劃
- 實習生教學工作計劃錦集
- 《城市規(guī)劃展廳》課件
- 《大學計算機基礎》課件-第3章 操作系統(tǒng)與應用
- 2024年度共享辦公空間租賃合同2篇
- 《血氣分析的臨床應》課件
- 2024年四級品酒師資格認證考試題庫(濃縮400題)
- 小兒全麻患者術后護理
- 山東省臨沂市2023-2024學年高二上學期期末考試政治試題 含答案
- 黑龍江省哈爾濱市2023-2024學年八年級上學期語文期末模擬考試試卷(含答案)
- 2024至2030年不銹鋼水龍頭項目投資價值分析報告
- 風險投資協(xié)議書范本標準版
- 2024年汽車修理工職業(yè)技能考試練習題(含答案)
- 鄉(xiāng)村振興課件模板
- TSGD7002-2023-壓力管道元件型式試驗規(guī)則
評論
0/150
提交評論