//Chip: ATmega16
//char is unsigned: Yes
//CodeVision AVR
#include
#include
//引脚定义
#define DATAPORTA//锁死芯片的PORTB
#define RDY_BSYPINC.4//锁死芯片的PD1
#define _OEPORTC.3//锁死芯片的PD2始终为1
#define _WRPORTC.2//锁死芯片的PD3
#define BS1PORTC.1//锁死芯片的PD4
#define XA0PORTC.0//锁死芯片的PD5
#define XA1PORTD.7//锁死芯片的PD6
#define PAGELPORTD.6//锁死芯片的PD7
#define BS2PORTB.0//锁死芯片的PA0
#define RSTPORTD.2//9014的B极电阻
#define XTAL1PORTC.6//XTAL1
#define LEDPORTB.1//LED
#define DDR_LEDDDRB.1//
#define VCC_ONADMUX=0x40//锁死芯片的VCC
#define VCC_OFFADMUX=0x00
//进入编程状态
#define PROG_ENABLEBS1=0;XA0=0;XA1=0;PAGEL=0;
//初始化
void initial(void)
{
DDRB=0xFF;
DDRC=0xFF;DDRC.4=0;PORTC.4=1;
DDRD=0xFF;
DDRA=0xFF;
_OE=1;
_WR=1;
XA0=1;
XA1=1;
PAGEL=0;
BS2=0;
BS1=0;
RST=1;
XTAL1=0;
LED=0;
VCC_OFF;
DATA=0x00;
}
//芯片擦除
void chip_erase(void)
{
XA1=1;XA0=0;
BS1=0;
DATA=0x80;
XTAL1=1;XTAL1=0;
_WR=0;_WR=1;
while(RDY_BSY==0);
}
//重写熔丝位
void write_fuse(char LB,char HB)
{
XA1=1;XA0=0;
BS1=0;
DATA=0x40;
XTAL1=1;XTAL1=0;
XA1=0;XA0=1;
DATA=LB;//熔丝低位
XTAL1=1;XTAL1=0;
BS1=0;BS2=0;
_WR=0;_WR=1;
while(RDY_BSY==0);
XA1=1;XA0=0;
BS1=0;
DATA=0x40;
XTAL1=1;XTAL1=0;
XA1=0;XA0=1;
DATA=HB;//熔丝高位
XTAL1=1;XTAL1=0;
BS1=1;BS2=0;
_WR=0;_WR=1;
while(RDY_BSY==0);
}
//高压恢复
void recover_fuse(void)
{
PROG_ENABLE;
RST=0,VCC_ON;//最关键的时序问题
chip_erase(); //擦除
write_fuse(0xE1,0x19); //恢复熔丝为默认(也可自己设定为其他值)
}
//结束状态
void finish(void)
{
DDRB=0x00;PORTB=0x00;
DDRC=0x00;PORTC=0x00;
DDRD=0x00;PORTD=0x00;
DDRA=0x00;PORTA=0x00;
DDR_LED=1;LED=1;
VCC_OFF;
}
void main(void)
{
initial();
delay_ms(200);
recover_fuse();
finish();
}
功能与使用方法:
功能:
将单片机锁定位与存储器擦除,并且将所有熔丝们都恢复为出厂默认(也可以改为自己想要的值)。
使用方法:
按下按键1秒钟以上时间,若看到LED指示灯亮,说明解锁成功。若尝试数次仍不见LED指示灯亮,说明芯片非锁死,而是损坏了。
特点:
1,不需要PC端软件,完全脱离电脑工作
2,专门用来恢复熔丝,解锁单片机,不附加累赘功能