日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 技術(shù)學(xué)院 > 熱搜器件
[導(dǎo)讀]STC89C52單片機內(nèi)部帶有4K的EEPROM,嚴格來說,應(yīng)該是4K的FLASH,它分為8個扇區(qū),每個扇區(qū)有512個字節(jié)。讀寫數(shù)據(jù)只能按字節(jié)操作,擦除數(shù)據(jù)只能按扇區(qū)操作。 由于它掉電不易失的特性,可以用來存儲程序運行過程中產(chǎn)生

STC89C52單片機內(nèi)部帶有4K的EEPROM,嚴格來說,應(yīng)該是4K的FLASH,它分為8個扇區(qū),每個扇區(qū)有512個字節(jié)。讀寫數(shù)據(jù)只能按字節(jié)操作,擦除數(shù)據(jù)只能按扇區(qū)操作。 由于它掉電不易失的特性,可以用來存儲程序運行過程中產(chǎn)生的用戶數(shù)據(jù),掉電可保存。

[cpp] view plaincopy/*

************************************************************************************

Fuction:STC89C52單片機內(nèi)部4K的EEPROM操作驅(qū)動

Software Designer:Jason

************************************************************************************

*/

#include

#include

#define uchar unsigned char

#define uint unsigned int

/******************定義命令字節(jié)******************/

#define Read_COM 0x01 //字節(jié)讀數(shù)據(jù)命令

#define Prog_COM 0x02 //字節(jié)編程數(shù)據(jù)命令

#define Erase_COM 0x03 //扇區(qū)擦除數(shù)據(jù)命令

#define En_Wait_TIME 0x81 //設(shè)置等待時間 ,并使能ISP/IAP

#define Start_ADDRH 0x20 //扇區(qū)地址高位

#define Start_ADDRL 0x00 //扇區(qū)地址低位

/****************特殊功能寄存器聲明****************/

sfr ISP_DATA = 0xe2;

sfr ISP_ADDRH = 0xe3;

sfr ISP_ADDRL = 0xe4;

sfr ISP_CMD = 0xe5;

sfr ISP_TRIG = 0xe6;

sfr ISP_CONTR = 0xe7;

/*****************關(guān)閉ISP&IAP功能*****************/

void ISP_IAP_disable(void)

{

ISP_CONTR = 0x00;

ISP_CMD = 0x00;

ISP_TRIG = 0x00;

}

/*********************字節(jié)讀**********************/

uchar Byte_read(uint byte_addr)

{

EA = 0; //關(guān)中斷

ISP_CONTR = En_Wait_TIME; //開啟ISP&IAP,并送等待時間

ISP_CMD = Read_COM; //送字節(jié)讀命令字

ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字節(jié)

ISP_ADDRL = (uchar)(byte_addr & 0x00ff); //送地址低字節(jié)

ISP_TRIG = 0x46; //送觸發(fā)命令字0x46

ISP_TRIG = 0xB9; //送觸發(fā)命令字0xB9

_nop_();

ISP_IAP_disable(); //關(guān)閉ISP&IAP功能

EA = 1; //開中斷

return (ISP_DATA);

}

/*********************字節(jié)編程*********************/

void Byte_program(uint byte_addr,uchar isp_iap_data)

{

EA = 0; //關(guān)中斷

ISP_CONTR = En_Wait_TIME; //開啟ISP&IAP,并送等待時間

ISP_CMD = Prog_COM; //送字節(jié)編程命令字

ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字節(jié)

ISP_ADDRL = (uchar)(byte_addr & 0x00ff); //送地址低字節(jié)

ISP_DATA = isp_iap_data; //送數(shù)據(jù)進ISP_DATA

ISP_TRIG = 0x46; //送觸發(fā)命令字0x46

ISP_TRIG = 0xB9; //送觸發(fā)命令字0xB9

_nop_();

ISP_IAP_disable(); //關(guān)閉ISP&IAP功能

EA = 1; //開中斷

}

/*********************扇區(qū)擦除*********************/

void Sector_erase(uint sector_addr)

{

EA = 0; //關(guān)中斷

ISP_CONTR = En_Wait_TIME; //開啟ISP&IAP;并送等待時間

ISP_CMD = Erase_COM; //送扇區(qū)擦除命令字

ISP_ADDRH = (uchar)(sector_addr >> 8); //送地址高字節(jié)

ISP_ADDRL = (uchar)(sector_addr & 0X00FF); //送地址低字節(jié)

ISP_TRIG = 0X46; //送觸發(fā)命令字0x46

ISP_TRIG = 0XB9; //送觸發(fā)命令字0xB9

_nop_();

ISP_IAP_disable(); //關(guān)閉ISP&IAP功能

EA = 1;

}

void main()

{

Sector_erase(0x2000); //扇區(qū)擦除

Byte_program(0x2000,0x88); //寫EEPROM

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

P0=Byte_read(0x2000); //讀EEPROM

while(1);

}

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉