STC89C52单片机内部EEPROM驱动

来源:本站
导读:目前正在解读《STC89C52单片机内部EEPROM驱动》的相关信息,《STC89C52单片机内部EEPROM驱动》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STC89C52单片机内部EEPROM驱动》的详细说明。
简介:本文给出一个STC89C52单片机内部EEPROM驱动的程序,感兴趣的朋友可以看看。

STC89C52单片机内部带有4K的EEPROM,严格来说,应该是4K的FLASH,它分为8个扇区,每个扇区有512个字节。读写数据只能按字节操作,擦除数据只能按扇区操作。 由于它掉电不易失的特性,可以用来存储程序运行过程中产生的用户数据,掉电可保存。

[cpp] view plaincopy/*

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

Fuction:STC89C52单片机内部4K的EEPROM操作驱动

Software Designer:Jason

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

*/

#include

#include

#define uchar unsigned char

#define uint unsigned int

/******************定义命令字节******************/

#define Read_COM 0x01 //字节读数据命令

#define Prog_COM 0x02 //字节编程数据命令

#define Erase_COM 0x03 //扇区擦除数据命令

#define En_Wait_TIME 0x81 //设置等待时间 ,并使能ISP/IAP

#define Start_ADDRH 0x20 //扇区地址高位

#define Start_ADDRL 0x00 //扇区地址低位

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

sfr ISP_DATA = 0xe2;

sfr ISP_ADDRH = 0xe3;

sfr ISP_ADDRL = 0xe4;

sfr ISP_CMD = 0xe5;

sfr ISP_TRIG = 0xe6;

sfr ISP_CONTR = 0xe7;

/*****************关闭ISP&IAP功能*****************/

void ISP_IAP_disable(void)

{

ISP_CONTR = 0x00;

ISP_CMD = 0x00;

ISP_TRIG = 0x00;

}

/*********************字节读**********************/

uchar Byte_read(uint byte_addr)

{

EA = 0; //关中断

ISP_CONTR = En_Wait_TIME; //开启ISP&IAP,并送等待时间

ISP_CMD = Read_COM; //送字节读命令字

ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字节

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

ISP_TRIG = 0x46; //送触发命令字0x46

ISP_TRIG = 0xB9; //送触发命令字0xB9

_nop_();

ISP_IAP_disable(); //关闭ISP&IAP功能

EA = 1; //开中断

return (ISP_DATA);

}

/*********************字节编程*********************/

void Byte_program(uint byte_addr,uchar isp_iap_data)

{

EA = 0; //关中断

ISP_CONTR = En_Wait_TIME; //开启ISP&IAP,并送等待时间

ISP_CMD = Prog_COM; //送字节编程命令字

ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字节

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

ISP_DATA = isp_iap_data; //送数据进ISP_DATA

ISP_TRIG = 0x46; //送触发命令字0x46

ISP_TRIG = 0xB9; //送触发命令字0xB9

_nop_();

ISP_IAP_disable(); //关闭ISP&IAP功能

EA = 1; //开中断

}

/*********************扇区擦除*********************/

void Sector_erase(uint sector_addr)

{

EA = 0; //关中断

ISP_CONTR = En_Wait_TIME; //开启ISP&IAP;并送等待时间

ISP_CMD = Erase_COM; //送扇区擦除命令字

ISP_ADDRH = (uchar)(sector_addr >> 8); //送地址高字节

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

ISP_TRIG = 0X46; //送触发命令字0x46

ISP_TRIG = 0XB9; //送触发命令字0xB9

_nop_();

ISP_IAP_disable(); //关闭ISP&IAP功能

EA = 1;

}

void main()

{

Sector_erase(0x2000); //扇区擦除

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

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

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

while(1);

}

提醒:《STC89C52单片机内部EEPROM驱动》最后刷新时间 2024-03-14 00:58:20,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STC89C52单片机内部EEPROM驱动》该内容的真实性请自行鉴别。