📄 at89s5x_spi.c
字号:
/********************************************************************
FILE MAME AT89S5X_SPI.C
********************************************************************/
#pragma SMALL ORDER NOPRINT OPTIMIZE(2)
#include <AT89X52.H>
unsigned char result,read,write;
unsigned char serial_buf[16];
void WBYTE(unsigned char);
unsigned char RBYTE(void);
void INIT(void);
unsigned char READ_MEM(unsigned int addr);
void WRITE_MEM(unsigned int addr,unsigned char val); //write program memory
void DELAY10(void);
void put(char x) //输出字符
{
SBUF=x;
while(TI==0);
TI=0;
}
void print(char *p) //输出字符串
{
char c;
while((c=*p++)!=0)
put(c);
}
void convert_to_byte(void)
{
unsigned char temph,templ;
while(write == read);
temph = serial_buf[read];
read++;
read = read & 0x0F;
if(temph >= '0' && temph <= '9')
temph -= 48;
else
temph -= 55;
while(write == read);
templ = serial_buf[read];
read++;
read = read & 0x0F;
if(templ >= '0' && templ <= '9')
templ -= 48;
else
templ -= 55;
result = (temph << 4) + templ;
}
void serial(void) interrupt 4 using 1
{
if(RI)
{
RI=0;
serial_buf[write] = SBUF;
write ++;
write = write & 0x0F;
}
}
// programming enable
unsigned char progra_en(void)
{
unsigned char val;
WBYTE(0xAC);
WBYTE(0x53);
WBYTE(0x00);
val = RBYTE();
return(val);
}
//chip erase
void chip_erase(void)
{
WBYTE(0xAC);
WBYTE(0x80);
WBYTE(0x00);
WBYTE(0x00);
}
void delay(unsigned int i)
{
while(i)
{
DELAY10(); //1 毫秒延时子程序
i--;
}
}
void main(void)
{
unsigned char a,length,addh,addl;
int i,addr;
INIT();
SP = 0x30;
SCON = 0x50;
TMOD = 0x20;
PCON = 0X00;
TH1 = 0xFD; // 9600 baud
TR1 = 1;
write = 0;
read = 0;
ES = 1;
EA = 1;
while(1)
{
print("\r\n programming enable...\r\n");
delay(2000);
a = progra_en();
if(a != 0x69)
{
print(" programming enable error please reset!\r\n");
while(1);
}
print(" programming enable compelted!\r\n");
print(" erasing chip please waite...\r\n");
chip_erase();
delay(600);
delay(1000);
print(" erasing chip completed!\r\n");
print(" please select hex file!\r\n");
while(1)
{
while(write == read);
while(serial_buf[read] != ':')
{
read++;
read = read & 0x0F;
while(write == read);
}
read++;
read = read & 0x0F;
convert_to_byte();
length = result;
convert_to_byte();
addh = result;
convert_to_byte();
addl = result;
addr = addh*256 + addl;
convert_to_byte();
if(result == 0x01)
{
print(" programming compeleted!\r\n");
while(1);
}
for(i=0;i<length;i++)
{
convert_to_byte();
WRITE_MEM(i+addr,result);
a = READ_MEM(i+addr);
if(result != a)
{
print(" programming error!\r\n");
while(1);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -