eeprom

/***********************************************************************************
**文件名:eeprom.h
**功 能:STC89C52RC内部eeprom驱动程序c文件,包括基本操作函数的实现
**创建人:
**日 期:2010年3月21日
************************************************************************************/
#include "eeprom.h"
#include "intrins.h"

/**********************************************************************************
**函 数:EEPROM_ReadByte()
**功 能:从第sector个扇区读取第n个字节
**输入参数:sector 要读数的扇区号,从0开始
n 扇区的第n个字节,0 -- 511
**输出参数:读的字节值
*********************************************************************************/
unsigned char EEPROM_ReadByte(unsigned int sector, unsigned int n)
{
ISP_ADDRH = (unsigned char)((sector * 512 + n + START_ADDR) >> 8); // 送入地址
ISP_ADDRL = (unsigned char)(sector * 512 + n + START_ADDR);
EA = 0; // 关中断
ISP_CONTR = (1 << 7) | WAIT_TIME; // 允许ISP操作,并设置等待时间
ISP_CMD = CMD_BYTE_READ; // 发读命令
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
_nop_();
ISP_CONTR = 0x00;
ISP_CMD = 0x00;
ISP_TRIG = 0x00;
EA = 1;
return ISP_DATA;
}

/***********************************************************************************
**函 数:EEPROM_WriteByte()
**功 能:向地址addr写入byte
**输入参数:sector 要写入的扇区号,从0开始
n 要写入扇区的字节号,0 -- 511
byte 要写入的数
**输出参数:无
**说 明:在写入之前,写入位置的数据必须是0xff,所以在向一个扇区写入数据时,
先擦除这个扇区
***********************************************************************************/
void EEPROM_WriteByte(unsigned int sector, unsigned int n, unsigned char byte)
{
ISP_DATA = byte; //送入数据
ISP_ADDRH = (unsigned char)((sector * 512 + n + START_ADDR) >> 8); // 送入地址
ISP_ADDRL = (unsigned char)(sector * 512 + n + START_ADDR);
EA = 0;
ISP_CONTR = (1 << 7) | WAIT_TIME; // 允许ISP操作,并设置等待时间
ISP_CMD = CMD_BYTE_WRITE; // 发写命令
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
_nop_();
ISP_CONTR = 0x00;
ISP_CMD = 0x00;
ISP_TRIG = 0x00;
EA = 1;
}

/**********************************************************************************
**函 数:EEPROM_EraseSector()
**功 能:擦除第sector个扇区
**输入参数:sector 扇区号,从0开始。每个扇区为512个字节
**输出参数:无
***********************************************************************************/
void EEPROM_EraseSector(unsigned char sector)
{
ISP_ADDRH = (unsigned char)((sector * 512 + START_ADDR) >> 8); // 送入扇区地址
ISP_ADDRL = (unsigned char)(sector * 512 + START_ADDR);
EA = 0;
ISP_CONTR = (1 << 7) | WAIT_TIME; // 允许ISP

操作,并设置等待时间
ISP_CMD = CMD_SECTOR_ERASE; // 发擦除命令
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
_nop_();
ISP_CONTR = 0x00;
ISP_CMD = 0x00;
ISP_TRIG = 0x00;
EA = 1;
}

/***********************************************************************************
** End of file
************************************************************************************/

相关文档
最新文档