📄 main.c
字号:
#include<SM59D04G2.h>
void ISP_enable (void);
void ISP_disable (void);
void ISP_Byte_Program (unsigned int DPTR1,unsigned char ONE_DATA1);
void ISP_Sector_erase1(unsigned char block); //block=1 to 8
//void ISP_512Byte_read_write(unsigned char block);
void ISP_readByte(unsigned char block,unsigned int startplace,unsigned int len);
void ISP_writeByte(unsigned char block,unsigned int startplace,unsigned int len,unsigned char *wrturndata);
//void uart_init(void);
//void uart_send(unsigned char val);
//unsigned char code read_buffer[1] _at_ 0x3c00;
unsigned char code g[1] _at_ 0x3000;
unsigned char code g1[8] ={0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e};
unsigned char idata returndata2[21]={1,4,6,7,5,6,7,8,0x0b,0x0a,1,5,0x0c,4,5,6,7,0x0d,9,0x0a};
unsigned char xdata returndata1[512];
unsigned char xdata returndata3[21];
//unsigned char xdata b;
void main()
{
//uart_init();
ISP_writeByte(1,0,20,returndata2);
ISP_readByte(1,0,20);
//b=0x08;
//uart_send(b);
while(1)
{
//P2_7 =0; //test
//while(1);
};
}
//void uart_init(void) //串口初始化 // 正常
//{
//RCAP2H=0xff; //波特率=9600;
//RCAP2L=0xdc;
//TL2=0xff;
//TH2=0xdc;
//SCON=0X50;
//T2CON=0X34;
//}
//void uart_send(unsigned char val) //功能描述:向串口发送一个字符 // 正常
//{
//SBUF=val;
//while(TI==0);
//TI=0;
//}
//***********************//
//功能:打开ISP操作使能
//入口:无
//出口:无
//调用函数:无
//***********************//
void ISP_enable (void) // 正常
{
EA =0;
ISP_DATA =0x55;
ISP_DATA =0xaa;
ISP_DATA =0x55;
SCONF =SCONF|0x04|0x02;
}
//***********************//
//功能:关闭ISP操作使能
//入口:无
//出口:无
//调用函数:无
//***********************//
void ISP_disable (void) // 正常
{
SCONF =SCONF&0x0FB|0x02;
EA =1;
}
//***********************//
//功能:写入任意一字节到EEPROM的数据
//入口:16位地址DPTR1,一字节数据ONE_DATA1
//出口:无
//调用函数:ISP_enable();ISP_disable();
//***********************//
void ISP_Byte_Program (unsigned int DPTR1,unsigned char ONE_DATA1) // 正常
{
ISP_enable();
ISP_DATA =ONE_DATA1;
ISP_ADDRH =(unsigned char)(DPTR1>>8);
ISP_ADDRL =(unsigned char)DPTR1;
ISP_CMD =ISP_IAP_BYTE_PROGRAM;
ISP_disable();
}
//***********************//
//功能:擦除任意EEPROM块的数据
//入口:块block
//出口:无
//调用函数:ISP_enable();ISP_disable();
//***********************//
void ISP_Sector_erase1(unsigned char block) //block=0 to 7 // 正常
{
unsigned char reblockh;
reblockh=g1[block];
ISP_enable();
ISP_ADDRH=reblockh;
//ISP_ADDRH=0x3c;
ISP_ADDRL=0x00;
ISP_CMD=ISP_IAP_SECTOR_ERASE;
ISP_CMD=ISP_IAP_SECTOR_ERASE;
ISP_disable();
}
//***********************//
//功能:任意写入EEPROM的数据
//入口:块block,初始位置startplace,数据长度len,写入数据wrturndata
//出口:无
//调用函数:ISP_512Byte_read_write(unsigned char block);ISP_Byte_Program (unsigned int DPTR1,unsigned char ONE_DATA1);
//***********************//
void ISP_writeByte(unsigned char block,unsigned int startplace,unsigned int len,unsigned char *wrturndata) // 正常
{
unsigned int i=0;
//long startplace1;
//startplace1=512*block+startplace;
//ISP_512Byte_read_write(block);
SCONF =0x02; //打开外部RAM
for(i=0;i<512;i++) // 读出任意EEPROM块的全部数据
{
returndata1[i]=*(g+512*block+i); //数据存在数组returndata1中
//uart_send(returndata1[i]);
}
for(i=0;i<len;i++) //更新数据
{
returndata1[i+startplace]=*wrturndata;
//uart_send(returndata1[i+startplace]); //
wrturndata++;
}
ISP_Sector_erase1(block); // 擦除任意EEPROM block块的数据
for(i=0;i<512;i++) //写入更新完的数据
{
ISP_Byte_Program(g+512*block+i,*(returndata1+i));
//uart_send(returndata1[i]); //
}
}
//***********************//
//功能:任意读出EEPROM的数据
//入口:块block,初始位置startplace,数据长度len
//出口:数据保存在数组returndata1中
//调用函数:无
//***********************//
void ISP_readByte(unsigned char block,unsigned int startplace,unsigned int len) // 正常
{
unsigned int i=0;
//startplace=512*block+startplace;
SCONF =0x02; //打开外部RAM
for(i=0;i<len;i++)
{
returndata3[i]=*(g+512*block+i+startplace); //数据存在数组returndata2中
//uart_send(returndata3[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -