STC11F02E_EEPROM 頭文件
/*****File Function : STC11F02E_EEPROM Read and Write *****/
/*****Program Author : ZhengWen(ClimberWin) *****/
/*****Compile Date : 2009/3/3 *****/
/*****Edition Info : V1.0 *****/
/*************************************************************/
/*****Amend Date : 2009.3.3 *****/
/*****修改內(nèi)容:修改讀寫子程序,使得更加的簡潔********/
/*************************************************************/
#ifndef __STC11FXX_EEPROM_CLIMBERWIN__
#define __STC11FXX_EEPROM_CLIMBERWIN__
#define uchar unsigned char
#define uint unsigned int
#include
/*******************************************************/
/*****STC11FXX特殊功能寄存器定義********/
sfr isp_wdt = 0xc1;
sfr isp_da
sfr isp_addrh = 0xc3;
sfr isp_addrl = 0xc4;
sfr isp_cmd = 0xc5;
sfr isp_trig = 0xc6;
sfr isp_contr = 0xc7;
/*****************************************/
/***************STC11FXX扇區(qū)擦除程序*************************/
void STC89CXX_EEPROM_Erase(unsigned char t_addr)
{
isp_addrh = t_addr; //可以不要 扇區(qū)里任意一個字節(jié)的地址都是扇區(qū)地址,無需求首地址,單片機會自己處理
isp_addrl = 0;
EA = 0; //關(guān)中斷
isp_contr = 0x81;
isp_cmd = 3; //扇區(qū)擦除,要某字節(jié)為空,必須擦除1個扇區(qū)
isp_trig = 0x5a; //先送0x5a再送 0xa5 ISP/IAP 觸發(fā)寄存器,每次都需要如此
isp_trig = 0xa5; //送完0xa5后 ISP/IAP 立即被觸發(fā)啟動
_nop_();
_nop_();
isp_contr = 0;
isp_cmd = 0;
isp_trig = 0;
isp_addrh = 0;
isp_addrl = 0;
// EA = 1; // 開中斷
}
/***********************************************/
/***************STC11FXX_EEPROM字節(jié)寫程序*************************/
void STC89CXX_EEPROM_Char_Write(unsigned int Write_addr ,unsigned char Write_da
{
isp_da
isp_addrh = Write_addr/256; //送地址高位
isp_addrl = Write_addr%256; //地址低位
EA = 0; /* 關(guān)中斷 */
isp_contr = 0x81;
isp_cmd = 2; //送扇區(qū)命令
isp_trig = 0x5a;;
isp_trig = 0xa5;
_nop_();
_nop_();
isp_contr = 0;
isp_cmd = 0;
isp_trig = 0;
isp_addrh = 0;
isp_addrl = 0;
// EA = 1; /* 開中斷 */
}
/**************************************************************/
/***************STC11FXX_EEPROM字節(jié)讀程序*************************/
STC89CXX_EEPROM_Char_Read(unsigned int Read_addr)
{
isp_addrh = Read_addr/256; //送地址高字節(jié)
isp_addrl = Read_addr%256; //送地址低字節(jié)(從0開始到num-1為止)
EA = 0; /* 關(guān)中斷 */
isp_contr = 0x81; /*20M,是0x80 orl 1 */
isp_cmd = 1; // 1表示字節(jié)讀
isp_trig = 0x5a; //先送0x5a再送 0xb9 ISP/IAP 觸發(fā)寄存器,每次都需要如此
isp_trig = 0xa5; //送完0xa5后 ISP/IAP 立即被觸發(fā)啟動
_nop_(); //空指令
_nop_(); //空指令
isp_contr = 0; //禁止ISP/IAP 操作
isp_cmd = 0; //去除ISP/IAP 命令
isp_trig = 0; //防止 ISP/IAP 命令誤觸發(fā)
isp_addrh = 0; //地址指向非EEPROM地址區(qū),防止誤操作
isp_addrl = 0;
// EA = 1; /* 開中斷 */
return(isp_da
}
/**************************************************************/
/*******************************************************************************/
#endif
評論