📄 自恢复程序.c
字号:
#include "iom8v.h"
#include "macros.h"
#include "stdio.h"
#define FUSE_H 0xD9
#define FUSE_L 0xE1
#define ERASE_CHIP 0x80
#define WRITE_FUSE 0x40
#define READ_FUSE 0x04
#define LED_ON PORTD|=BIT(PD0);
#define LED_OFF PORTD&=~BIT(PD0);
#define OE 2
#define OE_H PORTD|=BIT(PD2);
#define OE_L PORTD&=~BIT(PD2);
#define WR 3
#define WR_H PORTD|=BIT(PD3);
#define WR_L PORTD&=~BIT(PD3);
#define BS1 4
#define BS1_H PORTD|=BIT(PD4);
#define BS1_L PORTD&=~BIT(PD4);
#define XA0 5
#define XA0_H PORTD|=BIT(PD5);
#define XA0_L PORTD&=~BIT(PD5);
#define XA1 6
#define XA1_H PORTD|=BIT(PD6);
#define XA1_L PORTD&=~BIT(PD6);
#define PAGEL 7
#define PAGEL_H PORTD|=BIT(PD7);
#define PAGEL_L PORTD&=~BIT(PD7);
#define BS2 2
#define BS2_H PORTC|=BIT(PC2);
#define BS2_L PORTC&=~BIT(PC2);
#define XTAL1 3
#define XTAL1_H PORTC|=BIT(PC3);
#define XTAL1_L PORTC&=~BIT(PC3);
#define RDY 4
#define RESET 5
#define RESET_H PORTC|=BIT(PC5);
#define RESET_L PORTC&=~BIT(PC5);
void delay()
{
unsigned int a,b;
for(a=0;a<250;a++)
for(b=0;b<350;b++)
;
}
void wait()
{
unsigned char a,b;
for(a=0;a<10;a++)
for(b=0;b<10;b++)
;
}
void set_data(char data)
{
XA1_L;
XA0_H;
PORTB=data;
XTAL1_H;
wait();
XTAL1_L;
wait();
}
void write_puls()
{
WR_L;
wait();
WR_H;
while((PINC&0x10)==0)
;
PORTB=0;
}
void set_command(char com)
{
WR_H;
OE_H;
XA1_H;
XA0_L;
BS1_L;
BS2_L;
PORTB=com;
XTAL1_H;
wait();
XTAL1_L;
wait();
}
char read_data()
{
char data;
DDRB=0x00;
OE_L;
wait();
data=PINB;
OE_H;
return data;
}
void main()
{
char i=0,j=0,k=0;
char p=0;
DDRD=0x01;
DDRC=0xef;
delay();
delay();
delay();
LED_ON;
delay();
LED_OFF;
RESET_L;
for (i=0; i < 10; i++)
{
XTAL1_H;
wait();
XTAL1_L;
}
DDRC=0xef;
DDRB=0xff;
DDRD=0xff;
OE_L;
WR_L;
BS1_L;
XA0_L;
XA1_L;
PAGEL_L;
BS2_L;
XTAL1_L;
delay();
XTAL1_H;
wait();
XTAL1_L;
RESET_H;
delay();
set_command(ERASE_CHIP);
write_puls();
set_command(ERASE_CHIP);
write_puls();
wait();
wait();
for (j = 0; j < 8; j++)
{
set_command(WRITE_FUSE);
set_data(FUSE_L);
BS1_L;
BS2_L;
write_puls();
wait();
wait();
}
for (j = 0; j < 8; j++)
{
set_command(WRITE_FUSE);
set_data(FUSE_H);
BS1_H;
BS2_L;
write_puls();
wait();
wait();
}
LED_ON;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -