關(guān)于STC單片機EEPROM的應(yīng)用總結(jié)
什么是EEPROM,即Electrically Erasable ProgrammableRead_Only Memory首先它是一種存儲器,并且可以通過高電壓來進行反復(fù)擦寫的存儲器。具有掉電數(shù)據(jù)不丟失的特點。比如常用的24C系列,93C系列的器件。一般這種器件采用I2C的方式與單片機進行通訊,對于這種通訊方式及器件的應(yīng)用另作總結(jié)。這里主要總結(jié)一下,STC12C5204AD芯片內(nèi)部包含的EEPROM的應(yīng)用方法。
STC12C5201AD系列單片機內(nèi)部集成了EEPROM是與程序空間分開的,利用ISP/IAP技術(shù)可將內(nèi)部dataflash當(dāng)EEPROM,擦寫10萬次以上。
EEPROM可分為若干個扇區(qū),每個扇區(qū)包含512字節(jié)。
使用時建議同一次修改的數(shù)據(jù)放在同一個扇區(qū),不是同一次修改的數(shù)據(jù)放在不同的扇區(qū),不一定要用滿。數(shù)據(jù)存儲器的擦除操作是按扇區(qū)進行的。
在程序中可對EEPROM進行字節(jié)讀寫/字節(jié)編程/扇區(qū)擦除操作。在工作電壓Vcc偏低時,建議不要進行EEPROM/IAP操作。以免發(fā)生數(shù)據(jù)錯誤。
應(yīng)用的步驟
1、聲明與EEPROM相關(guān)的寄存器
2、編寫EEPROM初始化函數(shù)
3、編寫字節(jié)擦除函數(shù)
4、編寫字節(jié)編程函數(shù)
5、編寫字節(jié)讀取函數(shù)
6、在需要讀取EEPROM字節(jié)內(nèi)容時直接調(diào)用字節(jié)讀取函數(shù)即可
7、在需要進行寫EEPROM字節(jié)時,先調(diào)用字節(jié)擦除函數(shù),將字節(jié)內(nèi)容擦除成FFH后,在調(diào)用字節(jié)編程函數(shù),將數(shù)據(jù)寫入到EEPROM的地址單元中。
與EEPROM應(yīng)用相關(guān)的寄存器
本文引用地址:http://m.butianyuan.cn/article/201612/324568.htm符號 | 描述 | 地址 | 位地址及符號 | 復(fù)位值 | |||||||
IAP_DATA | ISP/IAP flash data register | C2H | 1111 1111B | ||||||||
IAP_ADDRH | ISP/IAPflashaddress high | C3H | 0000 0000B | ||||||||
IAP_ADDRL | ISP/IAP flash address low | C4H | |||||||||
IAP_CMD | ISP/IAP flash command register | C5H | MS1 | MS0 | |||||||
IAP_TRIG | ISP/IAP flash command trigger | C6H | xxxxxxxxxB | ||||||||
IAP_CONTR | ISP/IAP control register | C7H | IAPEN | SWBS | SWRST | CMD_FAIL | WT2 | WT1 | WT0 | 0000X000B | |
PCON | Power control | 87H | SOMD | SMOD0 | LVDF | POF | GF1 | GF0 | PD | IDL | 00110000B |
1、IAP_DATA:ISP/IAP數(shù)據(jù)寄存器
ISP/IAP操作時的數(shù)據(jù)寄存器。
ISP/IAP從FlASH讀出的數(shù)據(jù)存放此處,向flash寫的數(shù)據(jù)也需要放在此處。
2、IAP_ADDRH和IAP_ADDRL :IAP/ISP地址寄存器
3、IAP_CMD:ISP/IAP命令寄存器
MS1 | MS0 | 命令/操作模式選擇 |
0 | 0 | Standby 待機模式,無ISP操作 |
0 | 1 | 從用戶程序區(qū)對“data flash /EEprom區(qū)”進行字節(jié)讀 |
1 | 0 | 從用戶的應(yīng)用程序區(qū)對“data flash/eeprom區(qū)”進行字節(jié)編寫 |
1 | 1 | 從用戶的應(yīng)用程序區(qū)對“dataflash/eeprom區(qū)”進行扇區(qū)擦除 |
4、IAP_TRIG:ISP/IAP命令觸發(fā)寄存器
在IAPEN(IAP_CONTR.7)=1時,對IAP——trig先寫入5AH,在寫入A5H,ISPIAP命令才會生效
ISPIAP操作完成后,IAP地址高8位寄存器IAP_ADDRH、IAP地址低8位寄存器IAP_ADDRL 和IAP命令寄存器IAP_CMD的內(nèi)容不變。如果接下來要對下一個地址的數(shù)據(jù)進行IAP/ISP操作,需手動將該地址的高8位和低8位分別寫入IAP_ADDRH和IAP_ADDRL寄存器。
每次IAP操作時,都要對IAP_TRIG先寫入5AH,再寫入A5H,ISP/IAP命令才會生效。
5、IAP_CONTR:ISPIAP控制寄存器
SFR name | Address | Bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
IAP_CONTR | C7H | Name | IAPEN | SWBS | SWRST | CMD_FAIL | _ | WT2 | WT1 | WT0 |
IAPEN:ISP/IAP功能允許位:0:禁止IAP讀/寫/擦除 data flash /eeprom
1:允許IAP讀/寫/擦除 dataflash/eeprom
SWBW:軟件選擇從用戶應(yīng)用程序區(qū)啟動(送0),還是從系統(tǒng)ISP監(jiān)控程序啟動(送1)。
要與SWRST直接配合使用才可以實現(xiàn)
SWRST:0:不操作;1:產(chǎn)生軟件系統(tǒng)復(fù)位,硬件自動復(fù)位。
CMD_FAIL:如果送了ISP/IAP命令,并對IAP_TRIG送5AH/A5H觸發(fā)失敗,則為1,需由軟件清零。
在用戶應(yīng)用程序區(qū)(AP區(qū))軟件復(fù)位并從用戶應(yīng)用程序區(qū)(AP區(qū))開始執(zhí)行程序。
MOV IAP_CONTR,#00100000B;SWBS=0(選擇AP區(qū)),SWRST=1(軟復(fù)位)
在用戶應(yīng)用程序區(qū)(AP區(qū))軟件復(fù)位并從系統(tǒng)ISP監(jiān)控程序區(qū)開始執(zhí)行程序
MOV IAP_CONTR,#01100000B;SWBS=1(選擇ISP區(qū)),SWRST=1(軟復(fù)位)
在系統(tǒng)ISP監(jiān)控程序區(qū)軟件復(fù)位并從用戶應(yīng)用程序區(qū)(AP區(qū))開始執(zhí)行程序
MOV IAP_CONTR,#00100000B;SWBS=0(選擇AP區(qū))SWRST=1(軟復(fù)位)
在系統(tǒng)ISP監(jiān)控程序區(qū)軟件復(fù)位并從系統(tǒng)ISP監(jiān)控程序區(qū)開始執(zhí)行程序。
MOV IAP_CONTR,#01100000B;SWBS=1(選擇ISP區(qū)),SWRST=1(軟復(fù)位)
設(shè)置等待時間
設(shè)置等待時間 | CPU等待時間(多少個CPU工作時鐘) | ||||||
WT2 | WT1 | WT0 | Read/讀 (2個時鐘) | Program/編程(=55us) | Sector erase 扇區(qū)擦除 =21us | Recommended system clock 跟等待參數(shù)對應(yīng)的推薦系統(tǒng)時鐘 | |
1 | 1 | 1 | 2個時鐘 | 55個時鐘 | 21012個時鐘 | <=1MHz | |
1 | 1 | 0 | 2個時鐘 | 110個時鐘 | 42024個時鐘 | <=2MHz | |
1 | 0 | 1 | 2個時鐘 | 165個時鐘 | 63036個時鐘 | <=3MHz | |
1 | 0 | 0 | 2個時鐘 | 330個時鐘 | 126072個時鐘 | <=6MHz | |
0 | 1 | 1 | 2個時鐘 | 660個時鐘 | 252144個時鐘 | <=12MHz | |
0 | 1 | 0 | 2個時鐘 | 1100個時鐘 | 420240個時鐘 | <=20MHz | |
0 | 0 | 1 | 2個時鐘 | 1320個時鐘 | 504288個時鐘 | <=24MHz | |
0 | 0 | 0 | 2個時鐘 | 1760個時鐘 | 672348個時鐘 | <=30MHz |
12c系列單片機內(nèi)部EEPROM選型一覽表
型號 | 字節(jié)數(shù)(eeprom) | 扇區(qū)數(shù) | 起始扇區(qū)首地址 | 結(jié)束扇區(qū)末尾地址 |
STC12C5201AD/PWM | 2K | 4 | 0000h | 07ffh |
STC12C5202AD/PWM | 2k | 4 | 0000h | 07ffh |
STC12C5203AD/PWM | 2k | 4 | 0000h | 07ffh |
STC12C5204AD/PWM | 1k | 2 | 0000h | 03ffh |
STC12C5205AD/PWM | 1k | 2 | 0000h | 03ffh |
評論