版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、STC單片機(jī)EEPROM的應(yīng)用和程序(2009-04-22 21:58:34)轉(zhuǎn)載標(biāo)簽:雜談分類(lèi):Program最近,由于工作的需要,用STC89C52來(lái)開(kāi)發(fā)新產(chǎn)品,要用天STC的Eeprom的功能,上網(wǎng)也找了一點(diǎn)資料,得到很大幫助,真的非常感謝。程序是我在網(wǎng)上摘錄的,調(diào)試通過(guò)了,不過(guò)我產(chǎn)品在用動(dòng)態(tài)掃描顯示的,由于在Eeprom擦除時(shí)要用幾十毫秒,會(huì)有一閃爍的。不過(guò)這是正常的。單片機(jī)運(yùn)行時(shí)的數(shù)據(jù)都存在于RAM(隨機(jī)存儲(chǔ)器)中,在掉電后RAM 中的數(shù)據(jù)是無(wú)法保留的,那么怎樣使數(shù)據(jù)在掉電后不丟失呢?這就需要使用EEPROM 或FLASHROM 等存儲(chǔ)器來(lái)實(shí)現(xiàn)。在傳統(tǒng)的單片機(jī)系統(tǒng)中,一般是在片外擴(kuò)展
2、存儲(chǔ)器,單片機(jī)與存儲(chǔ)器之間通過(guò)IIC 或SPI 等接口來(lái)進(jìn)行數(shù)據(jù)通信。這樣不光會(huì)增加開(kāi)發(fā)成本,同時(shí)在程序開(kāi)發(fā)上也要花更多的心思。在STC 單片機(jī)中內(nèi)置了EEPROM(其實(shí)是采用IAP 技術(shù)讀寫(xiě)內(nèi)部FLASH 來(lái)實(shí)現(xiàn)EEPROM),這樣就節(jié)省了片外資源,使用起來(lái)也更加方便。下面就詳細(xì)介紹STC 單片機(jī)內(nèi)置EEPROM 及其使用方法。STC 各型號(hào)單片機(jī)內(nèi)置的EEPROM 的容量各有不同,見(jiàn)下表:(內(nèi)部EEPROM 可以擦寫(xiě) 次以上)上面提到了IAP,它的意思是“在應(yīng)用編程”,即在程序運(yùn)行時(shí)程序存儲(chǔ)器可由程序自身進(jìn)行擦寫(xiě)。正是是因?yàn)橛辛薎AP,從而可以使單片機(jī)可以將數(shù)據(jù)寫(xiě)入到程序存儲(chǔ)器中,使得數(shù)據(jù)
3、如同燒入的程序一樣,掉電不丟失。當(dāng)然寫(xiě)入數(shù)據(jù)的區(qū)域與程序存儲(chǔ)區(qū)要分開(kāi)來(lái),以使程序不會(huì)遭到破壞。要使用IAP 功能,與以下幾個(gè)特殊功能寄存器相關(guān):ISP_DATA: ISP/IAP 操作時(shí)的數(shù)據(jù)寄存器。ISP/IAP 從Flash 讀出的數(shù)據(jù)放在此處,向Flash 寫(xiě)的數(shù)據(jù)也需放在此處ISP_ADDRH:ISP/IAP 操作時(shí)的地址寄存器高八位。ISP_ADDRL:ISP/IAP 操作時(shí)的地址寄存器低八位。ISP_CMD: ISP/IAP 操作時(shí)的命令模式寄存器,須命令觸發(fā)寄存器觸發(fā)方可生效。ISP_TRIG:ISP/IAP 操作時(shí)的命令觸發(fā)寄存器。當(dāng)ISPEN(ISP_CONTR.7)=1 時(shí)
4、,對(duì)ISP_TRIG 先寫(xiě)入0x46,再寫(xiě)入0xb9,ISP/IAP命令才會(huì)生效。單片機(jī)芯片型號(hào)起始地址內(nèi)置EEPROM 容量(每扇區(qū)512 字節(jié))STC89C51RC,STC89LE51RC 0x2000 共八個(gè)扇區(qū)STC89C52RC,STC89LE52RC 0x2000 共八個(gè)扇區(qū)STC89C54RD+,STC89LE54RD+ 0x8000 共五十八個(gè)扇區(qū)STC89C55RD+,STC89LE55RD+ 0x8000 共五十八個(gè)扇區(qū)STC89C58RD+,STC89LE58RD+ 0x8000 共五十八個(gè)扇區(qū)寄存器標(biāo)識(shí)地址名稱(chēng)7 6 5 4 3 2 1 0 初始值ISP_DATA 0x
5、E2 ISP/IAP閃存數(shù)據(jù)寄存器ISP_ADDRH 0xE3 ISP/IAP 閃存地址高位ISP_ADDRL 0xE4 ISP/IAP 閃存地址低位ISP_CMD 0xE5 ISP/IAP閃存命令寄存器MS2MS1 MS0 xxxxx000ISP_TRIG 0xE6 ISPIAP 閃存命令觸發(fā)xxxxxxxxISP_CONTR 0xE7 ISP/IAP 控制寄存器ISPEN SWBS SWRST WT2WT1 WT0 00xx000B7 B6 B5 B4 B3 B2 B1 B0 命令操作模式選擇保留命令選擇 0 0 0 待機(jī)模式,無(wú)ISP/IAP 操作 0 0 1 對(duì)用戶的應(yīng)用程序Flash
6、 區(qū)及數(shù)據(jù)Flash 區(qū)字節(jié)讀 0 1 0 對(duì)用戶的應(yīng)用程序Flash 區(qū)及數(shù)據(jù)Flash 區(qū)字節(jié)編程 0 1 1 對(duì)用戶的應(yīng)用程序Flash 區(qū)及數(shù)據(jù)Flash 區(qū)扇區(qū)擦除ISP_CONTR:ISP/IAP 控制寄存器。ISPEN:ISP/IAP 功能允許位。0:禁止ISP/IAP 編程改變Flash,1:允許編程改變FlashSWBS:軟件選擇從用戶主程序區(qū)啟動(dòng)(0),還是從ISP 程序區(qū)啟動(dòng)(1)。SWRST:0:不操作,1:產(chǎn)生軟件系統(tǒng)復(fù)位,硬件自動(dòng)清零。ISP_CONTR 中的SWBS 與SWRST 這兩個(gè)功能位,可以實(shí)現(xiàn)單片機(jī)的軟件啟動(dòng),并啟動(dòng)到ISP 區(qū)或用戶程序區(qū),這在“STC
7、 單片機(jī)自動(dòng)下載”一節(jié),亦有所應(yīng)用。如:ISP_CONTR=0x60? 則可以實(shí)現(xiàn)從用戶應(yīng)用程序區(qū)軟件復(fù)位到ISP 程序區(qū)開(kāi)始運(yùn)行程序。ISP_CONTR=0x20? 則可以實(shí)現(xiàn)從ISP 程序區(qū)軟件復(fù)位到用戶應(yīng)用程序區(qū)開(kāi)始運(yùn)行程序。用IAP 向Flash 中讀寫(xiě)數(shù)據(jù),是需要一定的讀寫(xiě)時(shí)間的,讀寫(xiě)數(shù)據(jù)命令發(fā)出后,要等待一段時(shí)間才可以讀寫(xiě)成功。這個(gè)等待時(shí)間就是由WT2、WT1、WT0 與晶體振蕩器頻率決定的。(以上的建議時(shí)鐘是(WT2、WT1、WT0)取不同的值時(shí)的標(biāo)稱(chēng)時(shí)鐘,用戶系統(tǒng)中的時(shí)鐘不要過(guò)高,否則可能使操作不穩(wěn)定。)#include reg52.h#include eeprom.h/* 關(guān)
8、閉 ISP,IAP 功能 *void ISP_IAP_Disable(void)ISP_CONTR = 0x00;ISP_CMD = 0X00;ISP_TRIG = 0x00;EA = 1;/開(kāi)中斷/*字節(jié)讀*ucharByte_read(uint byte_addr)ISP_CONTR = En_Wait_TIME;/開(kāi)啟ISP/IAP;并送等待時(shí)間ISP_CMD = Read_COM;/送字節(jié)讀命令字ISP_ADDRH = (uchar)(byte_addr 8);/送地址高字節(jié)ISP_ADDRL = (uchar)(byte_addr & 0X00FF);/送地址低字節(jié)EA = 0;/關(guān)
9、中斷ISP_TRIG = 0X46;/送觸發(fā)命令字 0X46、0XB9ISP_TRIG = 0XB9;_nop_();ISP_IAP_Disable();/關(guān)閉ISP/IAP功能EA = 1;/開(kāi)中斷return (unsigned char)ISP_DATA);/*字節(jié)編程*void Byte_program(uint byte_addr, uchar isp_iap_data)ISP_CONTR = En_Wait_TIME;/開(kāi)啟ISP/IAP;并送等待時(shí)間ISP_CMD = Prog_COM;/送字節(jié)編程命令字ISP_ADDRH = (uchar)(byte_addr 8);/送地址高
10、字節(jié)ISP_ADDRL = (uchar)(byte_addr & 0X00FF);/送地址低字節(jié)ISP_DATA = isp_iap_data;/送數(shù)據(jù)進(jìn)ISP_DATAEA = 0;/關(guān)中斷ISP_TRIG = 0X46;/送觸發(fā)命令字 0X46、0XB9ISP_TRIG = 0XB9;_nop_();ISP_IAP_Disable();/關(guān)閉ISP/IAP功能EA = 1;/開(kāi)中斷/* 扇區(qū)擦除*voidSector_erase(uint sector_addr)ISP_CONTR = En_Wait_TIME;/開(kāi)啟ISP/IAP;并送等待時(shí)間/ISP_CONTR=0xc1;ISP_C
11、MD = Dele_COM;/送扇區(qū)擦除命令字ISP_ADDRH = (uchar)(sector_addr 8);/送地址高字節(jié)ISP_ADDRL = (uchar)(sector_addr & 0X00FF);/送地址低字節(jié)EA = 0;/關(guān)中斷ISP_TRIG = 0X46;/送觸發(fā)命令字 0X46、0XB9ISP_TRIG = 0XB9;_nop_();ISP_IAP_Disable();/關(guān)閉ISP/IAP功能EA = 1;#ifndef _eeprom_h#define _eeprom_H/*EEPROM定義命令字節(jié)*#define Read_COM0X01/字節(jié)讀數(shù)據(jù)存儲(chǔ)區(qū)#de
12、fine Prog_COM0X02/字節(jié)編程數(shù)據(jù)存儲(chǔ)區(qū)#define Dele_COM0X03/扇區(qū)擦除數(shù)據(jù)存儲(chǔ)區(qū)#define En_Wait_TIME0X81/設(shè)置等待時(shí)間 ,并使能ISP/IAP/從用戶區(qū)啟動(dòng)程序/0X00=40MHZ以下,0X01=20MHZ以下/0X02=10MHZ以下,0X03=5MHZ以下,現(xiàn)在設(shè)置了20MHZ以下的,/#define Start_ADDRH0X20/扇區(qū)地址高位,STC89C/LE52RC#define Start_ADDRL0X00/扇區(qū)地址低位#endif注意了,要寫(xiě)數(shù)據(jù)時(shí),一定要對(duì)該扇區(qū)先擦除后寫(xiě)數(shù)據(jù)的,所以要寫(xiě)的數(shù)據(jù)盡量不要多,也可以對(duì)不
13、同功能的數(shù)據(jù)存在不同的扇區(qū)里。如:Sector_erase(0X2e00);/扇區(qū)擦除,第八個(gè)扇區(qū)Byte_program(0X2e00,Eeprom_ReadCode);/寫(xiě)EEPROM,保存可讀命令要讀數(shù)據(jù)時(shí),就直接讀就可以了。ReadData=Byte_read(0X2002);/讀取該地址的數(shù)據(jù)讀一個(gè)字節(jié)、編程一個(gè)字節(jié)、擦除一個(gè)扇區(qū)分別用時(shí)10us、60us、10ms關(guān)于STC系列51單片機(jī)的片內(nèi)EEPROM應(yīng)用(轉(zhuǎn)載自虛V界的博客eeworld)(2011-12-10 12:22:43)轉(zhuǎn)載標(biāo)簽:stc內(nèi)部eeprom雜談分類(lèi):51EEPROM都知道,做單片機(jī)的都知道EEPROM是什
14、么東西,或許一說(shuō)到很多人都會(huì)想到24C02這片子,但這東西只有2K,而且與單片機(jī)分離的IC傳輸速度明顯較慢。 另外很多初學(xué)者可能認(rèn)為數(shù)據(jù)就這么傳進(jìn)EEPROM就算是完成任務(wù)了,但實(shí)際EEPROM并不是這么用著的,以一片EEPROM 資料稱(chēng)能存儲(chǔ)10萬(wàn)次的算,假若程序設(shè)置的是一秒一次存儲(chǔ),3600S/h30個(gè)小時(shí)就做了次存儲(chǔ),基本達(dá)到報(bào)廢這EEPROM的條件了。所以EEPROM 一般是做存儲(chǔ)的數(shù)據(jù)保存后,產(chǎn)品需要做斷電存儲(chǔ)的功能,這樣才能實(shí)現(xiàn)再次啟動(dòng)產(chǎn)品后使用上一次狀態(tài)中的數(shù)據(jù)。因此EEPROM的存儲(chǔ)設(shè)定要有條件式的觸發(fā)。在我最近做的一個(gè)小項(xiàng)目中,客戶要求希望產(chǎn)品能在斷電后的再次上電后做斷電前的
15、動(dòng)作,這樣斷電便成了這個(gè)存儲(chǔ)的觸發(fā)條件,斷電后的供電模式有兩種一種是電池式供電,一種采用大電容供電。存儲(chǔ)數(shù)據(jù)量小的話當(dāng)然是電容供電的更好啦。然而這又會(huì)出現(xiàn)斷電后的一個(gè)低壓工作問(wèn)題,一般5V單片機(jī)最低工作電壓能有3.8左右。但EEPROM通常需要4.1V以上,這樣片外存儲(chǔ)的時(shí)間很可能會(huì)跟不上。如今單片機(jī)很多都集成了片內(nèi)存儲(chǔ)的EEPROM,存儲(chǔ)速度遠(yuǎn)遠(yuǎn)高于片外存儲(chǔ)十幾倍,電容放電的瞬間完全可以勝任。網(wǎng)上實(shí)在太少這方面的資料和例子了,琢磨了一番STC的幾個(gè)單片機(jī)后發(fā)現(xiàn)同一品牌的單片機(jī)內(nèi)部EEPROM存儲(chǔ)模式打進(jìn)相同。在這我就放出一個(gè)STC 單片機(jī)內(nèi)部EEPROM的例子,童鞋們可以根據(jù)片內(nèi)的寄存器與相
16、應(yīng)的控制位修改即可使用,強(qiáng)調(diào)這只能使用與STC的 一部分單片機(jī),主要有STC11FXX 系列、STC10FXX系列、STC125AXX系列、STC89C5X系列. 其他的沒(méi)試過(guò),但只要對(duì)比資料結(jié)構(gòu)大體相同都可使用。貼程序:我這是做成一個(gè)頭文件方便使用的,以STC11F16XE為例#ifndef _EEPROM_H_#define _EEPROM_H_#include#include #define uchar unsigned char#define uint unsigned intsfr ISP_DATA = 0XC2;sfrISP_ADDH = 0XC3;sfr ISP_ADDL = 0
17、XC4;sfr ISP_CMD= 0XC5;sfr ISP_TRIG = 0XC6;sfr ISP_CONTR= 0XC7;#define RED_ISP 0X01#define WITE_ISP 0x02#define ERASE_ISP 0X03#define MCU_CLOCK_5MHz 0x04#define MCU_CLOCK_12MHz 0x03#define MCU_CLOCK_20MHz 0x02#define MCU_CLOCK_24MHz 0x01extern void ISP_EN(void)EA=0;ISP_CONTR=ISP_CONTR&0x08;ISP_CONTR=
18、ISP_CONTR|MCU_CLOCK_12MHz;ISP_CONTR=ISP_CONTR|0x80;extern void ISP_DIS(void)ISP_CONTR=ISP_CONTR&0x07;ISP_TRIG=0X00;extern ucharRead_ISP(uint bite_addr)uchar DATA;ISP_ADDH=(uchar)(bite_addr8);ISP_ADDL=(uchar)(bite_addr&0x00ff);ISP_CMD=ISP_CMD&0xF8;ISP_CMD=ISP_CMD|RED_ISP;ISP_EN();ISP_TRIG=0X5A;ISP_TRIG=0XA5;_nop_();_nop_();ISP_DIS();DATA=IS
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 保稅區(qū)混凝土路面修建協(xié)議
- 旅游集團(tuán)授權(quán)管理方法
- 渠道價(jià)格策略制定增強(qiáng)競(jìng)爭(zhēng)力
- 服裝設(shè)計(jì)師合作協(xié)議證書(shū)聘用
- 水上貨運(yùn)鉆深水井施工合同
- 家具制造財(cái)政所施工合同
- 花藝教學(xué)視頻制作師合作協(xié)議
- 城市綠化養(yǎng)護(hù)項(xiàng)目招標(biāo)范例
- 智能家居產(chǎn)業(yè)園配套設(shè)施招投標(biāo)
- 化工原料投標(biāo)代理合作協(xié)議
- 《道路交叉設(shè)計(jì)》課件
- 《活著》讀后感-課件
- 體檢報(bào)告匯總分析中風(fēng)險(xiǎn)的防范
- 村里建群管理制度
- 【城市軌道交通運(yùn)營(yíng)安全管理研究5300字】
- 2024年中核匯能有限公司招聘筆試參考題庫(kù)含答案解析
- 上海市2024屆高三7月模擬預(yù)測(cè)歷史試題(等級(jí)考)(解析版)
- 肺炎護(hù)理查房課件
- 2024年中國(guó)華能集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 服務(wù)質(zhì)量的管理規(guī)定模版
- 部編《道德與法治》二年級(jí)上冊(cè)教材解析及教學(xué)建議
評(píng)論
0/150
提交評(píng)論