3756|2

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一种ATMEGA16高压解锁的方法 [复制链接]

源程序

/************ 相关说明 *****************/

//主单片机AVCC接VCC,利用AREF引脚控制锁死的单片机的VCC(5V电源电压能达到4.9V);

//主单片机的I/0寄存器ADMUX 控制AREF与AVCC的开关;

//三级管(9014)B极电阻100K,C极电阻1K,E极接GND(12.2V电源电压,能达到11.9V)

//锁死的单片机的RESET与VCC必须几乎同时加电压,不能有明显时间差;

//主单片机的熔丝位:禁用JTAG(因使用PORTC);1M内部时钟;


/************ C 源程序 ********************/

//Chip: ATmega16

//char is unsigned: Yes

//CodeVision AVR

#include <mega16.h>

#include <delay.h>


//引脚定义

#define DATA PORTA //锁死芯片的PORTB

#define RDY_BSY PINC.4 //锁死芯片的PD1

#define _OE PORTC.3 //锁死芯片的PD2始终为1

#define _WR PORTC.2 //锁死芯片的PD3

#define BS1 PORTC.1 //锁死芯片的PD4

#define XA0 PORTC.0 //锁死芯片的PD5

#define XA1 PORTD.7 //锁死芯片的PD6

#define PAGEL PORTD.6 //锁死芯片的PD7

#define BS2 PORTB.0 //锁死芯片的PA0

#define RST PORTD.2 //9014的B极电阻

#define XTAL1 PORTC.6 //XTAL1

#define LED PORTB.1 //LED

#define DDR_LED DDRB.1 //

#define VCC_ON ADMUX=0x40 //锁死芯片的VCC

#define VCC_OFF ADMUX=0x00


//进入编程状态

#define PROG_ENABLE BS1=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();

}

下面是我做的实物并且解锁成功

非常成功的恢复了熔丝位

最新回复

你好,我最近看见你的帖子,也按照你的方法焊接了一块,只是我用的是attiny2313,它的XA1/BS2,BS1/PAGEL是复用的,但是我在文档中也没有找到怎样操作这个,麻烦解答一下!特别是XA1和BS2这两个功能,因为它的文档中这两个都有进行操作的!也不像它的第二功能那样,有寄存器可以选择! [attach]92079[/attach] [ 本帖最后由 biyabc 于 2012-7-25 08:54 编辑 ]  详情 回复 发表于 2012-7-25 08:53
点赞 关注
 

回复
举报

3836

帖子

19

TA的资源

纯净的硅(中级)

沙发
 
谢谢楼主分享。
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

引脚

你好,我最近看见你的帖子,也按照你的方法焊接了一块,只是我用的是attiny2313,它的XA1/BS2,BS1/PAGEL是复用的,但是我在文档中也没有找到怎样操作这个,麻烦解答一下!特别是XA1和BS2这两个功能,因为它的文档中这两个都有进行操作的!也不像它的第二功能那样,有寄存器可以选择!


[ 本帖最后由 biyabc 于 2012-7-25 08:54 编辑 ]
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表