STC單片機利用IAP技術實現EEPROM設計_第1頁
STC單片機利用IAP技術實現EEPROM設計_第2頁
STC單片機利用IAP技術實現EEPROM設計_第3頁
STC單片機利用IAP技術實現EEPROM設計_第4頁
STC單片機利用IAP技術實現EEPROM設計_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

STC單片機利用IAP技術實現EEPROM設計STC89C51、52內部都自帶有2K字節的EEPROM,54、55和58都自帶有16K字節的EEPROM,STC單片機是利用IAP技術實現的EEPROM,內部Flash擦寫次數可達100,000次以上,先來介紹下ISP與IAP的區別和特點。知識點:ISP與IAP介紹ISP:InSystemProgramable是指在系統編程,通俗的講,就是片子已經焊板子上,不用取下,就可以簡單而方便地對其進行編程。比如我們通過電腦給STC單片機下載程序,或給AT89S51單片機下載程序,這就是利用了ISP技術。IAP:InApplicationProgramable是指在應用編程,就是片子提供一系列的機制(硬件/軟件上的)當片子在運行程序的時候可以提供一種改變flash數據的方法。通俗點講,也就是說程序自己可以往程序存儲器里寫數據或修改程序。這種方式的典型應用就是用一小段代碼來實現程序的下載,實際上單片機的ISP功能就是通過IAP技術來實現的,即片子在出廠前就已經有一段小的boot程序在里面,片子上電后,開始運行這段程序,當檢測到上位機有下載要求時,便和上位機通信,然后下載數據到存儲區。大家要注意千萬不要嘗試去擦除這段ISP引導程序,否則恐怕以后再也下載不了程序了。STC單片機內部有幾個專門的特殊功能寄存器負責管理ISP/IAP功能的,見表1。表1ISP/IAP相關寄存器列表名稱地址功能描述D7D6D5D4D3D2D1D0復位值ISP_DATAE2hFlash數據寄存器11111111ISP_ADDRHE3hFlash高字節地址寄存器00000000ISP_ADDRLE4hFlash低字節地址寄存器00000000ISP_CMDE5hFlash命令模式寄存器----------MS2MS1MS0xxxxx000ISP_TRIGE6hFlash命令觸發寄存器xxxxxxxxISP_CONTRE7hISP/IAP控制寄存器ISPENSWBSSWRST----WT2WT1WT0000xx000ISP_DATA:ISP/IAP操作時的數據寄存器。ISP/IAP從Flash讀出的數據放在此處,向Flash寫入的數據也需放在此處。ISP_ADDRH:ISP/IAP操作時的地址寄存器高八位。ISP_ADDRL:ISP/IAP操作時的地址寄存器低八位。ISP_CMD:ISP/IAP操作時的命令模式寄存器,須命令觸發寄存器觸發方可生效。命令模式如表2所示。表2ISP_CMD寄存器模式設置D7D6D5D4D3D2D1D0模式選擇保留命令選擇----------000待機模式,無ISP操作----------001對用戶的應用程序flash區及數據flash區字節讀----------010對用戶的應用程序flash區及數據flash區字節編程----------011對用戶的應用程序flash區及數據flash區扇區擦除程序在系統ISP程序區時可以對用戶應用程序區/數據Flash區(EEPROM)進行字節讀/字節編程/扇區擦除;程序在用戶應用程序區時,僅可以對數據Flash區(EEPROM)進行字節讀/字節編程/扇區擦除。STC89C51RC/RD+系列單片機出廠時已經固化有ISP引導碼,并設置為上電復位進入ISP程序區,并且出廠時就已完全加密。ISP_TRIG:ISP/IAP操作時的命令觸發寄存器。在ISPEN(ISP_CONTR.7)=1時,對ISP_TRIG先寫入46h,再寫入B9h,ISP/IAP命令才會生效。STC89C52RC,STC89LE52RC單片機內部可用DataFlash(EEPROM)的地址如表3所示,其它型號單片機請查閱相關資料。表3STC89C52RC、STC89LE52RC單片機內部EEPROM地址表第一扇區第二扇區第三扇區第四扇區起始地址結束地址起始地址結束地址起始地址結束地址起始地址結束地址2000H21FFH2200H23FFH2400H25FFH2600H27FFH第五扇區第六扇區第七扇區第八扇區起始地址結束地址起始地址結束地址起始地址結束地址起始地址結束地址2800H29FFH2A00H2BFFH2C00H2DFFH2E00H2FFFH每個扇區為512字節,建議大家在寫程序時,將同一次修改的數據放在同一個扇區,方便修改,因為在執行擦除命令時,一次最少要擦除一個扇區的數據(需要提供扇區的首地址),每次在更新數據前都必須要擦除原數據方可重新寫入新數據,不能直接在原來數據基礎上更新內容。注意:上面的是數據存儲區的地址,程序存儲區地址是從0~1FFF,共8K,程序區只能是ISP編程。以下是自己寫的這部分功能代碼,因為風格問題,不太喜歡原著代碼,感覺自己的還嚴謹一點。/****************************************************************************//*IAP驅動*//****************************************************************************//************************************************************************************************************************//*ISP/IAP相關寄存器列表*//*名稱地址功能描述D7D6D5D4D3D2D1D0復位值*//*ISP_DATAE2hFlash數據寄存器11111111*//*ISP_ADDRHE3hFlash高字節地址寄存器00000000*//*ISP_ADDRLE4hFlash低字節地址寄存器00000000*//*ISP_CMDE5hFlash命令模式寄存器----------MS2MS1MS0xxxxx000*//*ISP_TRIGE6hFlash命令觸發寄存器xxxxxxxx*//*ISP_CONTRE7hISP/IAP控制寄存器ISPENSWBSSWRST----WT2WT1WT0000xx000*//************************************************************************************************************************//************************************************************************************//*ISP_CMD寄存器模式設置*//*D7D6D5D4D3D2D1D0模式選擇*//*保留命令選擇*//*----------000待機模式,無ISP操作*//*----------001對用戶的應用程序flash區及數據flash區字節讀*//*----------010對用戶的應用程序flash區及數據flash區字節編程*//*----------011對用戶的應用程序flash區及數據flash區扇區擦除*//************************************************************************************//*在ISPEN(ISP_CONTR.7)=1時,對ISP_TRIG先寫入46h,再寫入B9h,ISP/IAP命令才會生效。*//*定義常量*/#defineERROR0#defineOK1/*定義Flash操作等待時間*///#defineWAIT_TIME0x00//mcuclock40mhz//#defineWAIT_TIME0x01//mcuclock20mhz//#defineWAIT_TIME0x02//mcuclock10mhz#defineWAIT_TIME0x03//mcuclock5mhzsfrISP_DATA=0xe2;//Flash數據寄存器sfrISP_ADDRH=0xe3;//Flash高字節地址寄存器sfrISP_ADDRL=0xe4;//Flash低字節地址寄存器sfrISP_CMD=0xe5;//Flash命令模式寄存器sfrISP_TRIG=0xe6;//Flash命令觸發寄存器sfrISP_CONTR=0xe7;//ISP/IAP控制寄存器#defineCMD_READ0x01//定義IAP的讀字節操作#defineCMD_PRGM0x02//定義IAP的寫字節操作#defineCMD_ERASE0x03//定義IAP的擦除扇區操作/***********************打開ISP,IAP功能***********************/staticvoidISPIAPEnable(void){//EA=0;//關中斷ISP_CONTR=ISP_CONTR&0x18;//0001,1000ISP_CONTR=ISP_CONTR|WAIT_TIME;//寫入硬件延時ISP_CONTR=ISP_CONTR|0x80;//ISPEN=1}/***********************關閉ISP,IAP功能***********************/staticvoidISPIAPDisable(void){ISP_CONTR=ISP_CONTR&0x7f;//ISPEN=0ISP_TRIG=0x00;//EA=1;//開中斷}/*************************觸發Flash操作*************************/staticActiveOperate(void){biteacpy;eacpy=EA;EA=0;ISPIAPEnable();ISP_TRIG=0x46;//觸發ISP_IAP命令字節1ISP_TRIG=0xb9;//觸發ISP_IAP命令字節2{UINT8i=2;while(i--);}ISPIAPDisable();EA=eacpy;}/****************************讀一字節****************************/staticUINT8IAPReadByte(constUINT16uiAddr){ISP_ADDRH=(UINT8)(uiAddr》》8);//寫地址ISP_ADDRL=(UINT8)(uiAddr&0xFF);ISP_CMD=ISP_CMD&0xf8;//清低三位ISP_CMD=ISP_CMD|CMD_READ;//寫入讀命令ActiveOperate();//觸發執行return(ISP_DATA);//返回讀到的數據}/****************************寫一字節****************************/staticvoidIAPWriteByte(constUINT16uiAddr,constUINT8ucData){ISP_ADDRH=(UINT8)(uiAddr》》8);//寫地址ISP_ADDRL=(UINT8)(uiAddr&0xFF);ISP_CMD=ISP_CMD&0xf8;//清低三位ISP_CMD=ISP_CMD|CMD_PRGM;//寫入寫命令ISP_DATA=ucData;//寫入數據準備ActiveOperate();//觸發執行}/****************************擦除一扇區****************************/staticvoidIAPEarseSection(constUINT16uiAddr){UINT16uiSecAddr;uiSecAddr=(uiAddr&0xfe00);//取扇區地址ISP_ADDRH=(UINT8)(uiSecAddr》》8);//寫地址ISP_ADDRL=0x00;ISP_CMD=ISP_CMD&0xf8;//清低三位ISP_CMD=ISP_CMD|CMD_ERASE;//寫入擦除命令ActiveOperate();//觸發執行}------------------------------------------------------------------------------------------------------------------------#include//到宏晶網站下載頭文件或自己在現有的頭文件上加上相應的寄存器定義即可。#includ

溫馨提示

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

評論

0/150

提交評論