void EEPROM_ByteWrite(unsigned char addr, unsigned char dat)
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = SMB0_PAGE;
while (SMB_BUSY); // 等待SMBus总线空闲
SMB_BUSY = 1; // 获取SMBus总线后,设置为总线忙
// 设置SMBus ISR中断服务程序参数
SMB_TARGET = EEPROM_ADDR; // 设置发送目标地址为EEPROM器件地址
SMB_RW = EEPROM_WRITE; // 置总线操读/写操作为写操作 (WRITE=0x00,写操作命令字)
SMB_SENDWORDADDR = 1; // 在从器件地址后送字地址
SMB_RANDOMREAD = 0; // 置为非随机读操作。单个EEPROM写操作为单字节随机写。
// 输出数据明细
SMB_WORD_ADDR = addr; // 设置待写数据存储地址
SMB_SINGLEBYTE_OUT = dat; // 待写数据(保存在全局变量中)
// 待写数据变量指针
pSMB_DATA_OUT = &SMB_SINGLEBYTE_OUT;
SMB_DATA_LEN = 1; // 指定中断服务程序发送的数据长度
// 初始化SMBus传送
STA = 1; // 置SMBus起始标志
SFRPAGE = SFRPAGE_SAVE;
}
/***********************************************************************************
* 函数名称:EEPROM_WriteArray;
*
* 函数功能描述:写长度为len字节数据到EEPROM的数据存储器内。
*
* 输入参数:1) unsigned char dest_addr - 待写数据目的存储器开始地址
2) unsigned char* src_addr - 待写数据数组指针。
3) unsigned char len - 待写数据长度
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void EEPROM_WriteArray(unsigned char dest_addr, unsigned char* src_addr,
unsigned char len)
{
unsigned char i;
unsigned char* pData = (unsigned char*) src_addr;
for( i = 0; i < len; i++ ){
EEPROM_ByteWrite(dest_addr++, *pData++);
}
}
文章评论(0条评论)
登录后参与讨论