微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC单片机EEPROM的应用和程序

STC单片机EEPROM的应用和程序

时间:11-24 来源:互联网 点击:

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

void Byte_program(uint byte_addr, uchar isp_iap_data)
{

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
EA = 0;//关中断
ISP_TRIG = 0X46;//送触发命令字 0X46、0XB9
ISP_TRIG = 0XB9;
_nop_();
ISP_IAP_Disable(); //关闭ISP/IAP功能
EA = 1; //开中断
}

//********************* 扇区擦除*********************
voidSector_erase(uint sector_addr)
{

ISP_CONTR = En_Wait_TIME;//开启ISP/IAP;并送等待时间
//ISP_CONTR=0xc1;
ISP_CMD = Dele_COM; //送扇区擦除命令字
ISP_ADDRH = (uchar)(sector_addr >> 8);//送地址高字节
ISP_ADDRL = (uchar)(sector_addr & 0X00FF);//送地址低字节
EA = 0;//关中断
ISP_TRIG = 0X46;//送触发命令字 0X46、0XB9
ISP_TRIG = 0XB9;
_nop_();
ISP_IAP_Disable(); //关闭ISP/IAP功能
EA = 1;
}

#ifndef _eeprom_h
#define _eeprom_H

//*********************EEPROM定义命令字节******************
#define Read_COM0X01//字节读数据存储区
#define Prog_COM0X02//字节编程数据存储区
#define Dele_COM0X03//扇区擦除数据存储区
#define En_Wait_TIME 0X81//设置等待时间 ,并使能ISP/IAP
//从用户区启动程序
//0X00==40MHZ以下,0X01==20MHZ以下
//0X02==10MHZ以下,0X03==5MHZ以下,现在设置了20MHZ以下的,
//
#define Start_ADDRH0X20 //扇区地址高位,STC89C/LE52RC
#define Start_ADDRL0X00 //扇区地址低位

#endif

注意了,要写数据时,一定要对该扇区先擦除后写数据的,所以要写的数据尽量不要多,也可以对不同功能的数据存在不同的扇区里。如:

Sector_erase(0X2e00);//扇区擦除,第八个扇区
Byte_program(0X2e00,Eeprom_ReadCode);//写EEPROM,保存可读命令

要读数据时,就直接读就可以了。

ReadData=Byte_read(0X2002);//读取该地址的数据

读一个字节、编程一个字节、擦除一个扇区分别用时10us、60us、10ms

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top