51微控制器內部EEPROM的應用

2021-06-21 20:38:10 字數 3778 閱讀 2991

51微控制器內部eeprom的應用

stc89c51、52內部都自帶有2k位元組的eeprom,54、55和58都自帶有16k位元組的eeprom,stc微控制器是利用iap技術實現的eeprom,內部flash擦寫次數可達100,000 次以上,先來介紹下isp與iap的區別和特點。 

表1 isp/iap相關暫存器列表

名稱位址功能描述

d7d6

d5d4

d3d2

d1d0

復位值isp_data

e2hflash資料暫存器

1111 1111

isp_addrh

e3hflash高位元組位址暫存器

0000 0000

isp_addrl

e4hflash低位元組位址暫存器

0000 0000

isp_cmd

e5hflash命令模式暫存器

----

----

--ms2

ms1ms0

***x x000

isp_trig

e6hflash命令觸發暫存器

***x ***x

isp_contr

e7hisp/iap 控制暫存器

ispen

swbs

swrst

----

wt2wt1

wt0000x x000

isp_data:isp/iap操作時的資料暫存器。

isp/iap從flash讀出的資料放在此處,向flash寫入的資料也需放在此處。

isp_cmd:isp/iap操作時的命令模式暫存器,須命令觸發暫存器觸發方可生效。命令模式如表2所示。表2 isp_cmd暫存器模式設定

d7d6d5

d4d3

d2d1

d0模式選擇

保留命令選擇

----

------0

00待機模式,無isp操作

----

------0

01對使用者的應用程式flash區及資料flash區位元組讀

----

------0

10對使用者的應用程式flash區及資料flash區位元組程式設計

----

------0

11對使用者的應用程式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命令才會生效。

表3stc89c52rc、stc89le52rc微控制器內部eeprom位址表

第一扇區

第二扇區

第三扇區

第四扇區

起始位址

結束位址

起始位址

結束位址

起始位址

結束位址

起始位址

結束位址

2000h

21ffh

2200h

23ffh

2400h

25ffh

2600h

27ffh

第五扇區

第六扇區

第七扇區

第八扇區

起始位址

結束位址

起始位址

結束位址

起始位址

結束位址

起始位址

結束位址

2800h

29ffh

2a00h

2bffh

2c00h

2dffh

2e00h

2fffh

每個扇區為512位元組,建議大家在寫程式時,將同一次修改的資料放在同乙個扇區,方便修改,因為在執行擦除命令時,一次最少要擦除乙個扇區的資料,每次在更新資料前都必須要擦除原資料方可重新寫入新資料,不能直接在原來資料基礎上更新內容。

下面通過乙個例子來講解stc系列微控制器eeprom的具體用法。

【例】:在實驗板上實現如下描述,操作stc微控制器自帶的eeprom,儲存一組按秒遞增的二位資料,並且將資料實時顯示在數碼管上,資料每變化一次就往eeprom中寫入一次,當關閉實驗板電源,再次開啟電源時,從eeprom中讀取先前儲存的資料,接著遞增顯示。

#include

#include //52系列微控制器標頭檔案

#define uchar unsigned char

#define uint unsigned int

#define rdcommand 0x01 //定義isp的操作命令

#define prgcommand 0x02

#define erasecommand 0x03

#define error 1

#define ok 0

#define waittime 0x01 //定義cpu的等待時間

sfr isp_data=0xe2; //暫存器申明

sfr isp_addrh=0xe3;

sfr isp_addrl=0xe4;

sfr isp_cmd=0xe5;

sfr isp_trig=0xe6;

sfr isp_contr=0xe7;

sbit dula=p2^6; //申明u1鎖存器的鎖存端

sbit wela=p2^7; //申明u2鎖存器的鎖存端

uchar code table=;

uchar num;

void delayms(uint xms)   

void display(uchar shi,uchar ge)  //顯示子函式

/* ***************= 開啟 isp,iap 功能 ***************== */

void isp_iap_enable(void)

/* *************** 關閉 isp,iap 功能 ***************=== */

void isp_iap_disable(void)

/* ***************= 公用的觸發********************** */

void ispgoon(void)

/* ******************** 位元組讀********************==== */

unsigned char byte_read(unsigned int byte_addr)

/* ***************=== 扇區擦除********************==== */

void sectorerase(unsigned int sector_addr)

/* ******************** 位元組寫********************==== */

void byte_write(unsigned int byte_addr, unsigned charoriginal_data)

void main()

a=num1/10;

b=num1%10;

}display(a,b);}}

void timer0() interrupt 1

51微控制器內部ram

51微控制器預設的內部ram只有128位元組,52微控制器增加至256位元組,stc89c54 55 58 516等增加到1280位元組。微控制器內部ram,共256個單元,使用者使用前128個單元,用於存放可讀寫資料,後128個單元被專用暫存器占用。現在新出的51微控制器都在內部擴充套件了外部ra...

51微控制器內部資源

運算器 功能 1 從儲存器中取出下一條要執行的指令 取指 2 對取出的指令進行解碼 解碼 3 指揮運算器運算或控制資料傳送 指揮 1 pc是乙個16位專用暫存器,由cpu控制提供下一條執行指令的首位址 2 程式執行時自動加1 按順序執行 3 復位時值為0000h,程式從0開始 4 可被指令修改功能實...

51微控制器 eeprom 串列埠

按照相應的編碼格式,對串列埠資料進行編碼,傳送至微控制器,微控制器對資料進行解析,寫入或者讀取eeprom,再返回資料至微控制器串列埠。讀取資料0x03 且只需要傳入3個16進製制數即可,寫入資料0x06,具體不超過255個資料,要想多寫入資料,可以將資料長度的值增加到兩個16進製制數,程式也需要相...