//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,专门用来恢复熔丝,解锁单片机,不附加累赘功能