搜索
bottom↓
回复: 81

用89S51制作简易并行编程器ATmega16(救活ATmega16)

[复制链接]

出0入104汤圆

发表于 2004-10-20 20:07:10 | 显示全部楼层 |阅读模式
;***********************ATmega16(L)简易并行编程器**********************/

;说明:

;    用于没有烧写ATmega16并行编程器的朋友,初用ATmega16的工程师在串行

;编程时写错熔丝位,及加密位,造成不能再应用串行编程,构成不便,没并行

;编程将无法再使用,做了一个简易的并行编程器(很简单,用万能板搭焊即可),

;将的芯片加密位及熔丝恢复出厂默认值及恢复串行在线编程功能(ISP)。

;**********************************************************************

;使用说明:

;    本电路有1按键(key),执行1次将芯片加密位擦除,都要按下按键1秒钟才

;执行操作,可将at89S51的P3.1(TXD)连接1只NPN三极管(9014)、2支电阻作为

;P3.1(TXD)输出5V反相器,连接PC的RS-232接收端(RXD),就可通过在PC执行1

;个串口调试软件SSCOM V3.0,设置波特率(2400、8、1、N),查看到之前的加

;密位及熔丝高低字节内容,以及执行了加密位擦除之后的加密位及熔丝高低字

;节内容(FF 99 E1)。

;//////////////////////////////////////////////////////////////

;主控at89S51,晶振6M

;P0口编程数据输入输出 ,;P2编程控制

;/*******************AT89C51与ATmega16(L)各脚连接********************/

;P0.0~7 <-->PB.0~PB.7

;P0.0~7 要连接4.7K x 8 上拉电阻到VCC (要注意:没有上拉电阻本电路是不能工作)

;********************************************************************

;P2.0-PD7(PAGEL)

;P2.1-PD6(XA1)

;P2.2-PD5(XA0)

;P2.3-PD4(BS1)

;P2.4-PD3(_WR)

;P2.5-PD2(_OE)

;P2.6-PD1(RDY/BSY)

;P2.7-(XTAL1)

;P1.0-PA0(BS2)

;-----------------------------------------

;P1.1---LED 指示运行状态 (p1.1=0时 LED 亮)

;P1.2---控制reset脚的12v电压(p1.2=1时输出12v,0时没有电压输出)

;P1.3---连接1个按键(key)的1接点,按键另1接点连接到GND

;////////////////////////////////////////////////////////////////////

;若不用不清楚请参考datesheet;

;制作成功后你就狂烧熔丝和加密位吧!!!!!!!!!!!!!!!!!!

PAGEL      BIT    P2.0        ;PD7 flash和E2PROM页装入

XA1        BIT    P2.1        ;PD6 XTAL编程动作位1

XA0        BIT    P2.2        ;PD5 XTAL编程动作位0

BS1        BIT    P2.3        ;PD4 字节选择1(0:选低字节,1:选高字节)

_WR        BIT    P2.4        ;PD3 写脉冲

_OE        BIT    P2.5        ;PD2 输出允许(低有效)

RDY_BSY    BIT    P2.6        ;PD1 0:器件正在编程,1:器件就绪等待命令

XTAL1      BIT    P2.7        ;晶振输入端

;-----------------------------------------------------

BS2        BIT    P1.0        ;PA0 字节选择2(0:选低字节,1:选高字节)

;-----------------------------------------------------

LAMP       BIT    P1.1        ;编程指示灯

_RST_12V   BIT    P1.2        ;复位端12V电压

KEY        BIT    P1.3        ;执行按键



CR         EQU    0DH         ;CARRIAGE RETURN

LF         EQU    0AH         ;LINE FEED     

;****************************************************************************



    ORG  0000H

    AJMP MAIN

    ORG 0030H

MAIN:   

    MOV SP,#70H

    MOV P0,#0FFH         ;初始化P0,P1,P2

    MOV P1,#11111000B    ;P1.7~4=1,KEY=1,_RST_12V=0,LED=0V.BS2=0

    MOV P2,#01110000B    ;XTAL1=0,RDY_BSY=1,_OE=1,_WR =1,(BS1,XA0,XA1,PAGEL=0)      

    ACALL INT_SIO        ;初始化SIO

LOOP:

    CPL LAMP

    ACALL DELAY_1S   

    JB KEY,LOOP

    JNB KEY,$

    SETB LAMP



    ACALL PROG_ST      ;进入并行编程模式

    ACALL READ_FUSE    ;读之前熔丝字节及经过TXD将内容发送到PC RS-232

    ACALL CHIP_ERASE   ;擦除加密位,存储器

    ACALL WRITE_FUSE   ;写熔丝字节

    ACALL READ_FUSE    ;读之后熔丝字节及经过TXD将内容发送到PC RS-232

    CLR  _RST_12V

    CLR  LAMP

    ACALL SIO_CR_LF

    AJMP LOOP

;**********************************

;进入并行编程模式子程序

;**********************************

PROG_ST:

    MOV R1,#6

PLS:     

    SETB XTAL1           ;产生6个的XTAL1时钟脉冲触发

    CLR XTAL1

    DJNZ R1,PLS

    ANL P2,#01110000B   ;PAGEL,XTAL1,XA1,XA0,BS1==0

    NOP                 ;延时大于100ns        

    SETB _RST_12V       ;RST加12v电压

    NOP                 ;延时大于100ns

    RET

;**********************************

;擦除加密位、存储器子程序

;***********************************

CHIP_ERASE:

    CLR LAMP            ;指示正忙

    SETB XA1            ;设置XA1,XA0="10"允许装入命令

    CLR  XA0

    CLR BS1

    CLR BS2

    MOV P0,#80H         ;送出芯片擦除命令

    SETB XTAL1

    CLR XTAL1           ;输入正脉冲将命令装入芯片

    NOP

    SETB _WR

    CLR _WR

    SETB _WR            ;输入一个负脉冲,开始执行命令擦除芯片

    JB RDY_BSY,$        ;等待RDY/BSY变高,表示擦除完成

    JNB RDY_BSY,$

    ACALL DELAY_106US

    SETB LAMP           ;指示空闲

    ACALL DELAY_106US

    RET

;///////////////写熔丝高低字节子程序////////////////

WRITE_FUSE:

    CLR LAMP            ;指示正忙

    SETB XA1            ;设置XA1,XA0="10"允许装入命令

    CLR  XA0

    CLR BS1

    CLR BS2

    MOV P0,#40H         ;送出写熔丝命令

    SETB XTAL1

    CLR XTAL1           ;XTAL1输入正脉冲将命令装入芯片

    CLR XA1            ;设置XA1,XA0="01"允许装入数据

    SETB XA0

    NOP

    CLR BS1             ;BS1,BS2="00"表示熔丝低字节“10”表示高字节

    CLR BS2

    MOV P0,#0E1H        ;DOBLEVEL=1,BODEN=1,SUT1=1,SUT1=0,SKSEL3=0,

                        ;SKSEL2=0,SKSEL1=0,SKSEL0=1(工厂设定值)

    SETB XTAL1

    CLR XTAL1            ;XTAL1输入正脉冲数据装入芯片

    SETB _WR

    CLR _WR

    SETB _WR            ;_WR输入一个负脉冲,开始执行命令

    JB RDY_BSY,$        ;等待RDY/BSY变高,表示完成

    JNB RDY_BSY,$

    ACALL DELAY_106US

;/*********写高字节**********/      

    MOV P0,#99H         ;'99'为出厂设定值

    SETB XTAL1

    CLR XTAL1           ;XTAL1输入正脉冲数据装入芯片

    SETB BS1

    SETB _WR

    CLR _WR

    SETB _WR              ;_WR输入一个负脉冲,开始执行命令

    JB RDY_BSY,$        ;等待RDY/BSY变高,表示完成

    JNB RDY_BSY,$

    CLR BS1

    ACALL DELAY_106US         

    SETB LAMP           ;指示空闲

    RET

;/**********读熔丝及加密位************/

READ_FUSE:

    CLR LAMP           ;指示正忙

    SETB XA1           ;设置XA1,XA0="10"允许装入命令   

    CLR XA0

    CLR BS1

    CLR BS2

    MOV P0,#04H          ;送出读熔丝和锁定位命令

    CLR XTAL1

    SETB XTAL1

    CLR XTAL1            ;XTAL1输入正脉冲将命令装入芯片

    NOP

    CLR _OE

    CLR BS2              ;读熔丝低字节

    CLR BS1

    MOV P0,#0FFH

    MOV R7,P0

    SETB BS2             ;读熔丝高字节

    SETB BS1

    MOV R6,P0

    CLR BS2               ;读加密位

    MOV R5,P0

    SETB _OE

    SETB LAMP

    ACALL SIO_TO_PC

    RET

;------------------

DELAY_1S:

    MOV R7,#1

DELAY11:

    MOV R6,#0FFH

DELAY12:      

    MOV R5,#0FFH

    DJNZ R5,$

    DJNZ R6,DELAY12

    DJNZ R7,DELAY11

    RET

;-------------------

DELAY_106US:

    MOV R5,#18H

    DJNZ R5,$

    RET

;************************************************************

;将R5 R6 R7 的内容经 TXD 发送到 PC 子程序

;*************************************************************

SIO_TO_PC:

   MOV      A,R5              ;加密锁定字节

   SWAP     A

   ACALL    HEX_ASC

   ACALL    SIO_SEND_OUT      ;经TXD发送加密锁定字节的高4BIT

   MOV      A,R5

   ACALL    HEX_ASC

   ACALL    SIO_SEND_OUT      ;经TXD发送加密锁定字节的低4BIT



   MOV      A,#' '

   ACALL    SIO_SEND_OUT      ;经TXD发送 空格

  

   MOV      A,R6              ;熔丝高字节

   SWAP     A

   ACALL    HEX_ASC

   ACALL    SIO_SEND_OUT      ;经TXD发送熔丝高字节的高4BIT   

   MOV      A,R6

   ACALL    HEX_ASC

   ACALL    SIO_SEND_OUT      ;经TXD发送熔丝高字节的低4BIT



   MOV      A,R7              ;熔丝低字节

   SWAP     A

   ACALL    HEX_ASC

   ACALL    SIO_SEND_OUT      ;经TXD发送熔丝低字节的高4BIT         

   MOV      A,R7

   ACALL    HEX_ASC

   ACALL    SIO_SEND_OUT      ;经TXD发送熔丝低字节的低4BIT

   MOV      A,#CR

   ACALL    SIO_SEND_OUT

   MOV      A,#LF

   ACALL    SIO_SEND_OUT

   RET

;*****************************************

;初始化SIO 波特率 2400 (晶振6MHz)

;*****************************************

INT_SIO:

   ORL      PCON,#10000000B   ;SMOD=1 T1

   MOV      TMOD,#00100000B

   MOV      TH1,#256-13       ;设置波特率为2400

   MOV      TL1,#256-13       ;6.MHZ石英/12/16/13=2400

   SETB     TR1               ;启动定时器T1 TR1=1

   ORL      SCON,#01000000B   ;SET SIO MODE 1

;******************************************

SIO_CR_LF:

   MOV      A,#CR

   ACALL    SIO_SEND_OUT

   MOV      A,#LF

   ACALL    SIO_SEND_OUT

   RET

;*****************************************

;* SEND ONE DATA SUBROUTINE              *

;* USE A FOR SEND DATA                   *

;*****************************************

SIO_SEND_OUT:

   MOV    SBUF,A

   JNB    TI,$

   CLR    TI

   RET

;*****************************************

;* INVERT HEX TO ASCII SUBROUTINE        *  

;* INPUT HEX LOW 4BIT TO A               *

;* OUTPUT ASCII FORM A                   *

;*****************************************

HEX_ASC:

    ANL    A,#00001111B

    INC    A

    MOVC   A,@A+PC

    RET



    DB    '0123456789ABCDEF'     

    END

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
头像被屏蔽

出0入0汤圆

发表于 2004-10-20 20:30:28 | 显示全部楼层
要用到89S51?



有没有AVR芯片及C组成的并行编程器的资料? 如果有,做一个也不错啊。

出0入104汤圆

 楼主| 发表于 2004-10-20 20:41:53 | 显示全部楼层
可以用ATmega8写C组成的并行编程器对应ATmega8/16,要自己动手写。

出0入0汤圆

发表于 2004-11-27 17:04:20 | 显示全部楼层
有电路图否

出0入104汤圆

 楼主| 发表于 2004-11-27 19:10:05 | 显示全部楼层
用这个电路,AVR全系列芯片都可以并行编程,只要将MEGA16的18条编程线和STK500_M8监控连接就可以了,查看MEGA16中文PDF手册249页。



点击此处打开armok0110742.pdf





点击此处下载armok0110722.rar



AVR全系列芯片并行编程实物图





http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=66222&bbs_page_no=1&sub_kind_id=1260&bbs_id=1000
-----此内容被andy于2004-11-27,19:38:19编辑过

出0入104汤圆

 楼主| 发表于 2004-11-27 23:50:48 | 显示全部楼层
不同的avr编程线图



出0入0汤圆

发表于 2004-11-28 20:50:03 | 显示全部楼层
我本来打算等几天用PCB板子做一个并行的MEGA16的开发板的,现在看到你这个,好羡慕!!!!!!!!!!!

我有了自己动手焊接的冲动

出0入0汤圆

发表于 2004-11-29 22:07:54 | 显示全部楼层
andy 红日:

         能把电路图贴上吗?我有10片M16L锁了。

出0入0汤圆

发表于 2004-12-13 15:25:09 | 显示全部楼层
我有好几片12被锁了,能提供一些资料吗?十分感谢
头像被屏蔽

出0入0汤圆

发表于 2004-12-13 15:28:50 | 显示全部楼层
这个方法就能搞好啊:http://www.ouravr.com/guide_restore_the_fuse.html

出0入0汤圆

发表于 2004-12-13 20:23:45 | 显示全部楼层
你说的方法是指加有源晶振的方法,还是用炜煌烧写器?

出0入0汤圆

发表于 2004-12-13 23:19:31 | 显示全部楼层
我试过了,加有源晶振确实可以修改用isp下载时写错的时钟位,但是偶用jtag仿真时把jtag和isp两种方式都关了,所以不能用站长提供的那些方法了,改用andy的方法.不过自己做的东西可以用串口读熔丝位,但读的数不对.

出0入104汤圆

 楼主| 发表于 2004-12-14 08:19:20 | 显示全部楼层
<andy,你好,你在11月贴出来的那个用atmel89s51做的那个并行编程器成功了吗?

<我用实验板做的读不到正确的数.

<我的邮箱是liver@eyou.com.如果你的那个成功了,发个信告诉我一声或者是在这里回复一下.

<注:

<我要擦除的是一个mega128板,在程序上有小的改动



回hibiscus:

   这程式应用在mega16是成功的,要应用在mega128,要修改#0E1H 、#99H 对应mega128的数值,查看mega128数据手册 。      





   MOV P0,#0E1H        ;DOBLEVEL=1,BODEN=1,SUT1=1,SUT1=0,SKSEL3=0,

                        ;SKSEL2=0,SKSEL1=0,SKSEL0=1(工厂设定值)

;/*********写高字节**********/      

    MOV P0,#99H         ;'99'为出厂设定值

出0入0汤圆

发表于 2005-1-26 00:12:53 | 显示全部楼层
红日:你好,可以介绍一下4楼的资料中的控制芯片ATMEGA8是如何设置熔丝的吗?

多谢!

出0入0汤圆

发表于 2005-1-26 15:51:49 | 显示全部楼层
请问;P1.2---控制reset脚的12v电压(p1.2=1时输出12v,0时没有电压输出)

12V如何接线

有电路图否?我有2个mega16 被锁了,加有源晶振不能解决!

多谢!

出0入0汤圆

发表于 2005-1-27 09:35:01 | 显示全部楼层
请问;P1.2---控制reset脚的12v电压(p1.2=1时输出12v,0时没有电压输出)  

12V如何接线

有电路图否?我有2个mega16 被锁了,加有源晶振不能解决!

多谢!

Email:okhxm@163.com

出0入0汤圆

发表于 2005-4-19 18:35:19 | 显示全部楼层
楼主前辈:您好!

我是大四的学生,现在正做毕业设计。我的题目是《USB多功能编程器》,大概与您在这篇帖子上发的内容相近。我打算用AT89C2051作为主控制器,CP2101作为USB与UART的转换芯片。主要实现对mega8的在系统编程。前辈是否能指导一下我还将用到哪些芯片?哪些器件?

也不知现今mega8的实用性大吗?

学生感激不禁!!!

出0入0汤圆

发表于 2005-4-20 01:57:25 | 显示全部楼层
AT89C2051的速度不够,最好用 Mega系列.

出0入0汤圆

发表于 2005-4-22 13:53:47 | 显示全部楼层
是不是能用啊

出0入0汤圆

发表于 2005-4-22 14:28:30 | 显示全部楼层
能不能把图纸传给我

我的邮箱是:zhuodengguo@163.com

出0入0汤圆

发表于 2005-5-24 09:44:10 | 显示全部楼层
用有源晶振的方法十分方便的,贼好使,救活了一片16

出0入0汤圆

发表于 2005-6-17 17:42:24 | 显示全部楼层
那个有源晶振的PB6接的是那个AVR芯片?是mega16还是AT90S8515?多大晶振?
-----此内容被yuanfeng于2005-06-17,17:50:24编辑过

出0入0汤圆

发表于 2005-6-18 20:53:57 | 显示全部楼层
首先多谢楼主,我已经按楼主的方法用万用板搭建了一个对M16的并口编程器,并成功对M16的熔丝位进行了编程,以后我再也不用怕ISP熔丝位被锁了,虽然我未对其它功能进行测试,但拥有这样的一个编程器对我来说是心满意足了。

出0入0汤圆

发表于 2005-6-18 21:32:53 | 显示全部楼层
谢谢楼主!今天我用上面的方法(通过外接油源晶振,OUT接XTAL1)救活了我的Mega128!

出0入0汤圆

发表于 2005-6-22 07:30:26 | 显示全部楼层
请问红日:

用at89s51搭建的并行编程器是不是只能够回复m16的熔丝呀?其他型号的mega系列的单片机的熔丝位可以恢复吗?比如m8,m8535等

先谢谢了!

我对熔丝有天生的恐惧,感觉没有用at89s5x系列用着有安全感,如果该编程器可以的话,那就太好了!

出0入0汤圆

发表于 2005-6-22 07:34:19 | 显示全部楼层
再问个问题:

用m8作为主控芯片的编程器内部的程序有源代码吗?我想学习一下是如何进行控制的!

如果有源代码就太好了!

先谢谢了!

出0入104汤圆

 楼主| 发表于 2005-7-18 18:58:21 | 显示全部楼层
89S51简易并行编程器,宣布退役。

由mega8简易并行编程器接替其今後恢复熔丝位的工作。

出0入0汤圆

发表于 2005-7-19 13:08:48 | 显示全部楼层
红日兄,能公开MEGA8简易并行编程器的制作资料吗

出0入0汤圆

发表于 2005-7-28 20:04:28 | 显示全部楼层
急!!!

我有4片M16被锁了,加有源晶振或从其他单片机上引时钟都不行,今有MEGA8简易并行编程器

太好了,红日兄, 可否传点资料参考一下???

出0入0汤圆

发表于 2005-8-2 21:33:30 | 显示全部楼层
请问23楼的yuanfeng :

谢谢楼主!今天我用上面的方法(通过外接油源晶振,OUT接XTAL1)救活了我的Mega128!



我也有片mega128锁了,想试一下有源晶振,下载方式是用JTAG还是ISP呢?

出0入0汤圆

发表于 2005-10-4 13:49:13 | 显示全部楼层
问下大家,电路中232有一组电平口没有用,我用它输出12v编程电压好不?

出0入0汤圆

发表于 2005-10-4 14:04:49 | 显示全部楼层
想法倒是不错,不过 行不通,电压上不了12V

出0入0汤圆

发表于 2005-10-5 01:52:31 | 显示全部楼层
那么10v的电压可以编程了吗?

出0入0汤圆

发表于 2005-10-5 23:15:34 | 显示全部楼层
我也做过一个完整的,通过PC的串口下载HEX文件,然后用89S52对AVR并行操作。做起来还是有点麻烦的,需要理解HEX,才能做出PC程序,还要自定串口通讯协议,选用S52主要是因为一次通讯的RAM要足够大。现在,自己的AVR芯片全靠这玩意读写,8535的也很方便。

出0入0汤圆

发表于 2005-10-9 16:31:59 | 显示全部楼层
嘿,我用的是mega48,同样是自己做的一个PC串口下载,不过是用PC先转.hex文件为.bin 文件后下载,下面是用的w78e52b来做的,下载速度也还可以,稳定到很稳定,只是上层PC我用DOS写的,不会其他的

出0入0汤圆

发表于 2005-10-21 09:58:56 | 显示全部楼层
请问我用编程器烧写Mega16L,第一次烧写熔丝位后第二次重新烧写,可是编程器提示芯片ID不符?

请问是什么原因?

我用的编程器是EasyPRO 80B

出0入0汤圆

发表于 2005-11-16 13:49:36 | 显示全部楼层
请问红日,mega8做主芯片并行编程器的232接口部分能否用分立器件?我用你JTAG电路中的电路(三极管+电阻)没有成功。在STK500中探测不到。一上电就向PC不断发送FE 00 00...。另 DISABLE RESET这个容丝位有没有办法不用写?

出0入0汤圆

发表于 2006-5-15 16:44:11 | 显示全部楼层
楼主,使用原者代码请注明出处,尊重原创作者工作成果!

原文出处:

www.21icbbs.com



AVR单片机版块



fjzwf 发表于 2003-11-30 13:34 AVR 单片机 ←返回版面   



发布一个ATmega8的简易并行烧写器,觉得好用就顶吧!(原创)



;***********************ATmega8(L)简易并行编程器**********************/

;说明:适用于没用烧写ATmega8并行编程器的朋友,初用ATmega8的工程师常

;常在串行编程时写错熔丝位,及加密位,造成不能再串行编程的不便,没并

;行编程将无法再使用,本人就是因此才特花两天时间做了一个简易的并行编

;程器(很简单,用万能板搭焊即可),将的芯片加密位及熔丝恢复出厂默认值

;恢复串行编程。

;//////////////////////////////////////////////////////////////

;主控at89c51,晶振6M

;P0口编程数据输入输出 ,;P2编程控制

;/*******************AT89C51与ATmega8(L)各脚连接********************/

;P0.0-PB0,P0.1-PB1,P0.2-PB2,P0.3-PB3,P0.4-PB4,P0.5-PB5,P0.6-PC0

;P0.7-PC1

;P2.0-PD7(PAGEL),P2.1-PD6(XA1),P2.2-PD5(XA0),P2.3-PB6(XTAL1)

;P2.4-PD4(BS1),  P2.5-PD3(_WR),P2.6-PD2(_OE),P2.7-PD0(RDY/BSY)

;P1.0-PC2(BS2)   P1.2---控制reset(PC6)的12v电压p1.2=1时输出12v

;////////////////////////////////////////////////////////////////////

;若不用不清楚请参考datesheet;

;注:本程序只对reset引脚未被编程为I/O时有用。因时间问题(我目前还没

;遇到误设RSTDISBL位)所以没写这段程序。若有需要的发

;Email:crd2@21cn.com或fjzwf0068@sina.com.cn给我,需要人多的话我会

;抽时间整理出电路图和更完善 的单片机控制程序。

;制作成功后你就狂烧熔丝和加密位吧!!!!!!!!!!!!!!!!!!

PAGEL        BIT    P2.0         ;flash和E2PROM页装入

XA1        BIT     P2.1        ;XTAL编程动作位1

XA0        BIT    P2.2        ;XTAL编程动作位0

XTAL1        BIT    P2.3          ;晶振输入端

BS1        BIT    P2.4;字节选择1(0:选低字节,1:选高字节)

_WR        BIT    P2.5        ;写脉冲

_OE        BIT     P2.6        ;输出允许(低有效)

RDY_BSY     BIT    P2.7    ;0:器件正在编程,1:器件就绪等待命令

LAMP        BIT    P1.3        ;编程指示灯

_RST_12V     BIT    P1.2                   ;复位端12V电压

KEY        BIT    P1.1        ;执行按键

BS2        BIT     P1.0    ;字节选择2(0:选低字节,1:选高字节)

    ORG    0000H

    AJMP MAIN

    ORG 30H

MAIN:    MOV SP,#70H

    CLR LAMP                ;初始化指示

    MOV P0,#0FFH

    MOV P1,#0FFH

    MOV P2,#0FFH        

    DJNZ R3,$                ;延时大于100us

    DJNZ R3,$

    DJNZ R3,$

    DJNZ R3,$

    SETB LAMP                ;起动延时完成

LOOP:    ;JB KEY,LOOP

    DJNZ R3,$

    DJNZ R3,$

    DJNZ R3,$

    DJNZ R3,$

    ;JB KEY,LOOP

    ACALL PROG_ST            ;进入并行编程模式

    ACALL CHIP_ERASE        ;擦除加密位,存储器

    ACALL WRITE_FUSE        ;写熔丝字节

    ACALL READ_FUSE    ;读熔丝字节/////////可不用(我调试时用的)

    CLR  _RST_12V

    AJMP $

    AJMP LOOP

PROG_ST:

    CLR _RST_12V            ;RST=0V

    CLR BS2

    CLR XTAL1                ;XTAL1=0V

    MOV R1,#20

PLS:     CPL XTAL1            ;产生>6个的XTAL1时钟脉冲触发

    NOP

    NOP

    DJNZ R1,PLS

    ANL P2,#0E0H           ;PAGEL,XTAL1,XA1,XA0,BS1==0

    NOP            ;延时大于100ns        

    SETB _RST_12V            ;RST加12v电压

    NOP            ;延时大于100ns

    RET

CHIP_ERASE:

    CLR LAMP                ;指示正忙

    CLR  XA0        ;设置XA1,XA0="10"允许装入命令

    SETB XA1

    CLR BS1

    CLR BS2

    MOV P0,#80H        ;送出芯片擦除命令

    CLR XTAL1

    SETB XTAL1

    CLR XTAL1            ;输入正脉冲将命令装入芯片

    NOP

    SETB _WR

    CLR _WR

    SETB _WR    ;输入一个负脉冲,开始执行命令擦除芯片

    SETB RDY_BSY            ;置输入方式

    NOP

    NOP

    JB RDY_BSY,$    ;等待RDY/BSY变高,表示擦除完成

        JNB RDY_BSY,$

      SETB LAMP                ;指示空闲

    DJNZ R3,$

    DJNZ R3,$

    SETB _RST_12V

    RET

;///////////////写熔丝高低字节////////////////

WRITE_FUSE:

    CLR LAMP                ;指示正忙

    CLR  XA0            ;设置XA1,XA0="10"允许装入命令

    SETB XA1

    CLR BS1

    CLR BS2

    MOV P0,#40H                ;送出写熔丝命令

    CLR XTAL1

    SETB XTAL1

    CLR XTAL1            ;XTAL1输入正脉冲将命令装入芯片    NOP

    SETB XA0            ;设置XA1,XA0="01"允许装入数据

    CLR XA1

    NOP

    CLR BS1    ;BS1,BS2="00"表示熔丝低字节“10”表示高字节

    CLR BS2

    MOV P0,#0E1H;DOBLEVEL=1,BODEN=1,SUT1=1,SUT1=0,SKSEL3=0,

            ;SKSEL2=0,SKSEL1=0,SKSEL0=1(工厂设定值)

    CLR XTAL1

    SETB XTAL1

    CLR XTAL1            ;XTAL1输入正脉冲数据装入芯片

    SETB _WR

    CLR _WR

    SETB _WR            ;_WR输入一个负脉冲,开始执行命令

    SETB RDY_BSY            ;置输入方式

    NOP

    NOP

    JB RDY_BSY,$        ;等待RDY/BSY变高,表示完成

        JNB RDY_BSY,$

        ;/*********写高字节**********/      

        MOV P0,#0D9H            ;'D9'为出厂设定值

    CLR XTAL1

    SETB XTAL1

    CLR XTAL1                  ;XTAL1输入正脉冲数据装入芯片

    SETB BS1

    SETB _WR

    CLR _WR

    SETB _WR            ;_WR输入一个负脉冲,开始执行命令

    SETB RDY_BSY            ;置输入方式

    NOP

    NOP

    JB RDY_BSY,$        ;等待RDY/BSY变高,表示完成

        JNB RDY_BSY,$

        CLR BS1

        DJNZ R3,$        

      SETB LAMP                ;指示空闲

    DJNZ R3,$

    DJNZ R3,$

    RET

;/**********读熔丝及加密位(这段程序可不用是调试时用的)************/

READ_FUSE:

    CLR LAMP                ;指示正忙

    CLR  XA0            ;设置XA1,XA0="10"允许装入命令    SETB XA1

    CLR BS1

    CLR BS2

    MOV P0,#04H            ;送出读熔丝和锁定位命令

    CLR XTAL1

    SETB XTAL1

    CLR XTAL1            ;XTAL1输入正脉冲将命令装入芯片

    NOP

    CLR _OE

    CLR BS2                    ;读熔丝低字节

    CLR BS1

    MOV P0,#0FFH        

    MOV R7,P0

    SETB BS2                ;读熔丝高字节

    SETB BS1

    MOV P0,#0FFH

    MOV R6,P0

    CLR BS2                    ;读加密位

    MOV P0,#0FFH

    MOV R5,P0

    SETB _OE

    NOP

    SETB LAMP

    RET

    END

出0入0汤圆

发表于 2006-5-23 10:59:04 | 显示全部楼层
各位好

我的M8片子由于搞错熔丝位也不能用了,换了一片M88再写时,又出现了地址校验错,总是写不进去,请大家指教。我用的是双龙ISP1.4下载软件。谢谢,libocw@163.com

出0入8汤圆

发表于 2006-6-8 22:44:49 | 显示全部楼层
我的128也被锁了,看来也要搞个并行编程器了,不过我这里还有128可以先换一个在说了.

出0入0汤圆

发表于 2006-9-3 19:56:56 | 显示全部楼层
我也有一片atmega15锁死了,看来做一个并行编程器才是上策!

出0入0汤圆

发表于 2006-11-21 21:38:46 | 显示全部楼层
各位有没有用上边的改成改2313的,我作了一个好象不行,BS1/PAGEL,XA1/BS2合用一个脚,熔丝高位11011111,低位01100010,

出0入0汤圆

发表于 2007-1-22 16:49:47 | 显示全部楼层
能换了7.373Mhz的晶体 ---> 12Mhz晶体吗?我只有12Mhz, 4Mhz, 20Mhz.

出0入0汤圆

发表于 2008-3-30 22:07:36 | 显示全部楼层
学习学习。。。

出0入0汤圆

发表于 2008-5-14 09:33:02 | 显示全部楼层
@

出0入0汤圆

发表于 2008-5-14 09:35:02 | 显示全部楼层
收集中……

出0入0汤圆

发表于 2008-7-9 13:04:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-1-23 16:40:50 | 显示全部楼层
那个一键恢复熔丝我做出来了!

就是按上面的说明连线就行了!

装好了下完程序运行灯是一闪一闪的!

按住按键会一直亮!放手后恢复闪的状态!

同时在串口调试助手能显示反过来的熔丝位!

第一位是扩展熔丝位,后面两位是从高到低!

默认的可以看见FF&nbsp;99E1,我改的会看见FF&nbsp;99EF!

可惜那个默认设置是不能用USBASP下载线识别的!

把里面的:

MOV&nbsp;P0,#0E1H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;DOBLEVEL=1,BODEN=1,SUT1=1,SUT1=0,SKSEL3=0,&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SKSEL2=0,SKSEL1=0,SKSEL0=1(工厂设定值)&nbsp;

改成:

MOV&nbsp;P0,#0EFH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;DOBLEVEL=1,BODEN=1,SUT1=1,SUT1=0,SKSEL3=1,&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SKSEL2=1,SKSEL1=1,SKSEL0=1(外部晶振设定值)&nbsp;



然后装上3-8M的晶振还有复位电路就可以用USBASP下载线读取了!

改完还可以用USBASP改熔丝!只要没把熔丝设置内部RC的4M以下就可以!

要是你的USBASP下载线有低速下载就没关系!



顺便上传一个我编译好的HEX!我用AT89S52编译的哦!

我试过M16和M8都可以恢复!



熔丝位是EF&nbsp;99&nbsp;FF&nbsp;,外部晶振ourdev_600004.rar(文件大小:526字节)&nbsp;(原文件名:51.rar)&nbsp;

出0入0汤圆

发表于 2009-3-12 14:12:02 | 显示全部楼层
做的好不好用啊?接线图是什么样子的啊?

出0入0汤圆

发表于 2009-4-27 09:11:44 | 显示全部楼层
请问一下,128的锁住了,可以用这个解锁吗?需要改哪些地方呀!帮帮忙呀

出0入0汤圆

发表于 2009-5-6 00:14:01 | 显示全部楼层
电路图在
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=3325107&bbs_id=1000

16楼!

出0入18汤圆

发表于 2009-7-25 21:01:13 | 显示全部楼层
学习中!!!

出0入0汤圆

发表于 2009-9-14 23:41:48 | 显示全部楼层
mark!!

出0入0汤圆

发表于 2009-10-19 13:20:23 | 显示全部楼层
哦,不错,回头细看。。

出0入0汤圆

发表于 2009-11-12 09:46:59 | 显示全部楼层

出0入0汤圆

发表于 2010-1-9 02:49:06 | 显示全部楼层
mark2

出0入0汤圆

发表于 2010-1-9 09:17:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-11 21:55:08 | 显示全部楼层
之前看过,救活了我一个m8,很好。

出0入0汤圆

发表于 2010-1-11 23:51:43 | 显示全部楼层
mark一个

出0入0汤圆

发表于 2010-2-4 15:25:15 | 显示全部楼层
看下

出0入0汤圆

发表于 2010-2-5 23:16:17 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-2-21 17:26:27 | 显示全部楼层
标记一下,以后需要的时候看

出0入0汤圆

发表于 2010-2-21 19:21:37 | 显示全部楼层
不错!学习学习!!

出0入0汤圆

发表于 2010-2-22 08:53:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-9 11:29:03 | 显示全部楼层
又有得玩了

出0入0汤圆

发表于 2010-5-22 11:58:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-3 15:42:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-1 19:47:11 | 显示全部楼层
啊,看到此贴就是救星啊

出0入0汤圆

发表于 2011-1-2 20:56:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-15 15:19:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-1 17:45:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-1 17:46:44 | 显示全部楼层
有原理图吗
头像被屏蔽

出0入0汤圆

发表于 2011-10-8 11:48:57 | 显示全部楼层
要是有C51源码就好了,我没学过汇编。。。

出0入0汤圆

发表于 2011-10-9 00:07:54 | 显示全部楼层
学习了

出0入0汤圆

发表于 2011-10-9 18:02:24 | 显示全部楼层
回复【74楼】avrlv
-----------------------------------------------------------------------

飘过,留个纪念

出0入0汤圆

发表于 2011-10-9 22:50:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-11 21:25:46 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-10-11 21:41:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-12 06:21:43 | 显示全部楼层
高人 mark

出0入0汤圆

发表于 2011-10-12 12:31:26 | 显示全部楼层
高人,佩服!!!

出0入0汤圆

发表于 2011-10-13 08:53:56 | 显示全部楼层
回复【24楼】zx962032 都市狗尾草
-----------------------------------------------------------------------

是啊,不错的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 03:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表