⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom.c

📁 STC89C52 EEPROM的编程模板,及本个一个验证通过程序.
💻 C
字号:
#include <reg52.h>
#include <intrins.h>   //use _nop_() function 

#define	uchar	unsigned char
#define	uint	unsigned int
/*********************定义命令字节******************/

#define Read_COM	0X01		//字节读数据存储区
#define Prog_COM	0X02		//字节编程数据存储区
#define Dele_COM	0X03		//扇区擦除数据存储区
#define En_Wait_TIME  	0X81	//设置等待时间 ,并使能ISP/IAP
								//0X00==40MHZ以下,0X01==20MHZ以下
								//0X02==10MHZ以下,0X03==5MHZ以下
#define Start_ADDRH	0X20    	//扇区地址高位,STC89C/LE52RC
#define Start_ADDRL	0X00    	//扇区地址低位
/*********************定义常量*********************/

#define	temp1	0X25
sbit	BP_OUT	=P2^0;
uchar	temp2;

/****************** 关闭 ISP,IAP 功能 **************/
void ISP_IAP_disable(void)
{
	ISP_CONTR = 0X00;
	ISP_CMD = 0X00;	
	ISP_TRIG = 0x00;
}
/*******************字节读***************************/

uchar 	Byte_read(uint byte_addr)
{
	EA = 0;										//关中断
	ISP_CONTR = En_Wait_TIME;					//开启ISP/IAP;并送等待时间
	ISP_CMD = Read_COM;             			//送字节读命令字	
	ISP_ADDRH = (uchar)(byte_addr >> 8);		//送地址高字节
	ISP_ADDRL = (uchar)(byte_addr & 0X00FF);	//送地址低字节	
	ISP_TRIG = 0X46;							//送触发命令字 0X46、0XB9
	ISP_TRIG = 0XB9;
	_nop_();
	ISP_IAP_disable();							//关闭ISP/IAP功能
	EA = 1;                						//开中断
	return (ISP_DATA);
}

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

void 	Byte_program(uint byte_addr, uchar isp_iap_data)
{
	EA = 0;										//关中断
	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
	ISP_TRIG = 0X46;							//送触发命令字 0X46、0XB9
	ISP_TRIG = 0XB9;
	_nop_();
	ISP_IAP_disable();							//关闭ISP/IAP功能
	EA = 1;                						//开中断	
}

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

/********************延时子程序**********************/
void Delay_xS(uchar t)
{
	unsigned char i,j;
	while(t--)
	{
		i=80;
		j=255;
		while(i--)
		{
			while(j--);
		}
	}
}

/********************蜂鸣器响;n=次数*****************/
void BP_out(uchar n)
{
	while(n--)
	{
		BP_OUT=1;
		Delay_xS(1);
		BP_OUT=0;
		Delay_xS(1);
	}
		
}

/*********************主程序***********************/
void main()
{	
	while(1)
	{	
		Sector_erase(0X2000);		//扇区擦除
		Byte_program(0X2000, 0X25);	//写EEPROM
		_nop_();
		_nop_();
		_nop_();
		temp2=Byte_read(0X2000);	//读EEPROM
		if(temp1!=temp2)
			{BP_out(1);}			//响1声
		else	
			{BP_out(2);}			//响2声
				
		Delay_xS(5);
									
	}
}




















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -