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

📄 eeprom.txt

📁 这是一个STC单片机 EEPROM的读写程序
💻 TXT
字号:
#include<reg52.h>
#include<intrins.h>
#define  uchar  unsigned  char
#define  uint   unsigned  int
sfr isp_data=0xe2;
sfr isp_addrh=0xe3;
sfr isp_addrl=0xe4;
sfr isp_cmd=0xe5;
sfr isp_trig=0xe6;
sfr isp_contr=0xe7;

uchar eeprom_read(uint addres);//读字节
void eeprom_write(uint address,uchar wdata);//写数据
void eeprom_eares(uint addres);//扇区擦除

sbit dula=P2^1;
sbit wela=P2^0;
uchar  code tab[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

uchar  num,z;

void  delay(uint xms)
{
	uint  i,j;
	for(i=0;i<xms;i++)
	for(j=0;j<110;j++);
}


void display(uchar shi,uchar ge)
{
	wela=1;
	P0=0xfe;
	wela=0;
	P0=0xff;
	dula=1;
	P0=tab[shi];
	dula=0;
	delay(5);

	wela=1;
	P0=0xfd;
	wela=0;
	P0=0xff;
	dula=1;
	P0=tab[ge];
	dula=0;
    delay(5);
}




void eeprom_eares(uint addres)//扇区擦除
{
//	uchar i;
	isp_addrl=addres;//送低位地址00
	isp_addrh=addres>>8;//再送高位地址20

	isp_contr=0x01;//CPU等待时间,小于20MHZ
	isp_contr=isp_contr|0x80;//ISPEN=1使能
	
	isp_cmd=0x03;//擦除扇区命令
	
	isp_trig=0x46;//触发
	isp_trig=0xb9;//触发启动
	
	//for(i=0;i<3;i++);//延时一下
	_nop_();
	
	isp_addrl=0x00;
	isp_addrh=0x00;
	isp_contr=0x00;
	isp_cmd=0x00;
	isp_trig=0x00;
	
	

}

void eeprom_write(uint addres,uchar write_data)//写数据。
{
	//uchar i;
	isp_contr=0x01;//CPU等待时间,小于20MHZ
	isp_contr=isp_contr|0x80;//ISPEN=1使能,设时间与充ISP操作
	
	isp_cmd=0x02;//写数据命令
	
	isp_addrl=addres;//低位地址
	isp_addrh=addres>>8;//高位地址
	isp_data=write_data;//要写入的数据

	isp_trig=0x46;//触发
	isp_trig=0xb9;//触发启动
	
	//for(i=0;i<3;i++);
	_nop_();
	
	isp_addrl=0x00;
	isp_addrh=0x00;
	isp_contr=0x00;
	isp_cmd=0x00;
	isp_trig=0x00;

	

}


uchar eeprom_read(uint addres)//读字节
{
	//uchar i;
	
	isp_contr=0x01;//CPU等待时间,小于20MHZ
	isp_contr=isp_contr|0x80;//ISPEN=1使能,设时间与充ISP操作
	isp_cmd=0x01;// 读数据命令
	isp_addrl=addres;//低位地址
	isp_addrh=addres>>8;//高位地址

	isp_trig=0x46;//触发
	isp_trig=0xb9;//触发启动
	//for(i=0;i<3;i++);
	_nop_();
	
	z=isp_data;
	return(z);
	isp_addrl=0x00;
	isp_addrh=0x00;
	isp_contr=0x00;
	isp_cmd=0x00;
	isp_trig=0x00;
	

	


}


void  main()
{
	uchar a,b,num1;
	TMOD=0x01;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	EA=1;
	ET0=1;
	TR0=1;
	num1=eeprom_read(0x2000);//程序开始时读取EEPROM中的数据
	if(num1>=60)//防止首次上电时读取出错
	num1=0;
	while(1)
	{
		if(num>=10)
		{
			num=0;
			num1++;
			eeprom_eares(0x2000);//擦除扇区
			eeprom_write(0x2000,num1);//重新写入数据
			if(num1==60)
			{
				num1=0;
				
			}
			a=num1/10;
			b=num1%10;
			
		}
			display(a,b);


	}
}


void timer0() interrupt 1
{
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	num++;
}

⌨️ 快捷键说明

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