EEPROM是指带电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片。EEPROM可以在电脑上或专用设备上擦除已有信息,重新编程。一般用在即插即用。
EEPROM(带电可擦可编程只读存储器)是用户可更改的只读存储器(ROM),其可通过高于普通电压的作用来擦除和重编洞猜汪程(重写)。不兆裤像EPROM芯片,EEPROM不需从计算机中取出即可修改。在一个EEPROM中,当计算机在使用的时候可频繁地反复编程,因此EEPROM的寿命是一个很重要的设计考虑参数。纳仔EEPROM是一种特殊形式的闪存,其应用通常是个人电脑中的电压来擦写和重编程。
24C02只有256字节容量,所以一个WORD ADDRESS就掘段能全部寻址了。24C128是16K字节容量,因此必须要两个WORD ADDRESS才能全部寻址,所以在write_add和read_add函数中把address类型换成int型,write_byte(address)这里分两次写入档数,一次写入行散首高字节,一次写入低字节。
/********************************************************************* 文件名 : 宏晶EEPROM.c
* 描述: 该程序实现纳迹了对STC单片机的EEPROM的 *** 作。每隔0.5秒钟,单片机对EEPROM进行一次
读、擦除和写 *** 作,并把数值显示到数码管上知茄世。
确认试验是否成功:电源上电后,数码管的值在递增,观察值。关闭电源,待几秒后上电,
数码管显示的值会从断电钱的那个值开始显示。
* 创建人 : 东流
* 版本号 : 2.0
***********************************************************************/
#include<reg52.h>
#include<intrins.h>
/*以下是配置STC单片机的寄存器*/
sfr ISP_DATA = 0xC2
sfr ISP_ADDRH = 0xC3
sfr ISP_ADDRL = 0xC4
sfr ISP_CMD = 0xC5
sfr ISP_TRIG = 0xC6
sfr ISP_CONTR = 0xC7
#define uint unsigned int
#define uchar unsigned char
#define ISP_BYTE_READ1 //ISP字节读
#define ISP_BYTE_PROGRAM 2 //ISP直接编程
#define ISP_SECTOR_ERASE 3 //ISP扇区擦除
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)
{
uchar x,j
for(j=0j<ij++)
for(x=0x<=148x++)
}
/********************************************************************
* 名称 : ISP_ERASE()
* 功能 : EEPROM的扇区擦除
* 输入 : Address(擦除扇区的地址)
* 输出 : 无
***********************************************************************/
void ISP_ERASE(Address)
{
ISP_ADDRL = Address
ISP_ADDRH = Address >>8
ISP_CONTR = 0x83
ISP_CMD = ISP_SECTOR_ERASE
ISP_TRIG = 0x5a //PDF手册中说先像 ISP_TRIG 中写入搭肢 0x5a, 然后写入 0xa5
ISP_TRIG = 0xa5
_nop_()
_nop_()
}
/********************************************************************
* 名称 : ISP_READ()
* 功能 : 从EEPROM相应的地址中读出值
* 输入 : Address(想要读取EEPROM的地址)
* 输出 : Read_Data(从EEPROM读出的值)
*********************************************************************/
uint ISP_READ(Address)
{
uchar Read_Data
ISP_ADDRL = Address
ISP_ADDRH = Address >>8
EA = 0
ISP_CONTR = 0x83
ISP_CMD = ISP_BYTE_READ
ISP_TRIG = 0x5a
ISP_TRIG = 0xa5
_nop_()
_nop_()
Read_Data = ISP_DATA
return Read_Data
}
/********************************************************************
* 名称 : ISP_PROGRAM()
* 功能 : 实现EEPROM的字节编程
* 输入 : Address为编程的地址,Data_temp为想要编程的值
* 输出 : 无
***********************************************************************/
void ISP_PROGRAM(Address, Data_temp)
{
ISP_DATA = Data_temp
ISP_ADDRL = Address
ISP_ADDRH = Address >>8
ISP_CONTR = 0x83
ISP_CMD = ISP_BYTE_PROGRAM
ISP_TRIG = 0x5a
ISP_TRIG = 0xa5
_nop_()
_nop_()
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
uint i
uchar LED_Buffer = 0
while(1)
{
for(i=0i<100i++)
{
LED_Buffer = ISP_READ(0x0000)
P0 = table[LED_Buffer % 10]
P2 = 1
Delay_1ms(20)
P0 = table[LED_Buffer / 10 % 10]
P2 = 0
Delay_1ms(20)
}
LED_Buffer++
ISP_ERASE(0x0000) //注意:字节编程时必须要先要擦除整个扇区
ISP_PROGRAM(0x0000, LED_Buffer)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)