📄 epr.c
字号:
#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);
uint one_byte;
void delay(void)
{
unsigned char m,n;
for(m=50;m>0;m--)
for(n=50;n>0;n--);
}
uchar eeprom_read(uint addres)
{uchar i,z;
isp_addrl=addres; //低位地址
isp_addrh=addres>>8; //高位地址
isp_contr=0x01;
isp_contr=isp_contr|0x80; //设时间与充ISP操作。
isp_cmd=0x01; //写命令
isp_trig=0x46; //触发
isp_trig=0xb9; //触发启动。
for(i=0;i<3;i++);
isp_addrl=0xff;
isp_addrh=0xff;
isp_contr=0x00;
isp_cmd=0x00;
isp_trig=0x00;
z=isp_data;
return(z);
}
void eeprom_eares(uint addres)//扇区擦除。
{uint i;
isp_addrl=addres; //低位地址
isp_addrh=addres>>8; //高位地址
isp_contr=0x01;
isp_contr=isp_contr|0x80; //设时间与充ISP操作。
isp_cmd=0x03; //扇区命命令
isp_trig=0x46; //触发
isp_trig=0xb9; //触发启动。
for(i=0;i<3;i++);
isp_addrl=0xff;
isp_addrh=0xff;
isp_contr=0x00;
isp_cmd=0x00;
isp_trig=0x00;
}
void eeprom_write(uint addres,uchar write_data)//写数据。
{unsigned char i;
isp_data=write_data; //要写入的数据。
isp_addrl=addres; //低位地址
isp_addrh=addres>>8; //高位地址
isp_contr=0x01;
isp_contr=isp_contr|0x80; //设时间与充ISP操作。
isp_cmd=0x02; //写命令
isp_trig=0x46; //触发
isp_trig=0xb9; //触发启动。
for(i=0;i<3;i++);
isp_addrl=0xff;
isp_addrh=0xff;
isp_contr=0x00;
isp_cmd=0x00;
isp_trig=0x00;
}
void sendbyte(one_byte)
{
TI=0;
SBUF=one_byte;
while (TI==0);
TI=0;
}
void init_uart(void)
{
ES=0;
TMOD=0x20; //定时器1,内部RC
SCON=0x50; //串口方式1,波特率4800
TH1=0xfd;
TL1=0xfd;
TR1=1;
ES=1;
}
void main(void)
{
init_uart();
eeprom_eares(0x2800);
eeprom_write(0x2a00,0xbb);
while(1)
{
sendbyte(0xaa);
delay();
delay();
delay();
delay();
sendbyte(eeprom_read(0x2800));
delay();
delay();
delay();
delay();
sendbyte(eeprom_read(0x2a00));
delay();
delay();
delay();
delay();
sendbyte(0xff);
delay();
delay();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -