切换到宽版
  • 4469阅读
  • 6回复

ATmega16(L)简易并行编程器(解锁用) [复制链接]

上一主题 下一主题
离线jwbl
 

发帖
201
M币
1081
专家
1
粉丝
13
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2015-01-11
;***********************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
;个串口调试软件SSCOMV3.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        ;PD6XTAL编程动作位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         ;CARRIAGERETURN
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)        
    ACALLINT_SIO        ;初始化SIO
LOOP:
    CPL LAMP
    ACALL DELAY_1S  
    JB KEY,LOOP
    JNB KEY,$
    SETB LAMP

    ACALLPROG_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            ;输入一个负脉冲,开始执行命令擦除芯片
    JBRDY_BSY,$        ;等待RDY/BSY变高,表示擦除完成
    JNB RDY_BSY,$
    ACALLDELAY_106US  
    SETB LAMP           ;指示空闲
    ACALL DELAY_106US  
   RET
;///////////////写熔丝高低字节子程序////////////////
WRITE_FUSE:
    CLRLAMP            ;指示正忙
    SETB XA1            ;设置XA1,XA0="10"允许装入命令
   CLR  XA0
    CLR BS1
    CLR BS2
    MOV P0,#40H         ;送出写熔丝命令
    SETB XTAL1
    CLR XTAL1           ;XTAL1输入正脉冲将命令装入芯片
    CLRXA1            ;设置XA1,XA0="01"允许装入数据
    SETB XA0
    NOP
    CLRBS1             ;BS1,BS2="00"表示熔丝低字节“10”表示高字节
    CLR BS2
    MOVP0,#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
    ACALLDELAY_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 ASCIISUBROUTINE        *  
;* 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


按上面的说明连线就行了!
装好了下完程序运行灯是一闪一闪的!
按住按键会一直亮!放手后恢复闪的状态!

同时在串口调试助手能显示反过来的熔丝位!
第一位是扩展熔丝位,后面两位是从高到低!
默认的可以看见FF 99E1,我改的会看见FF99EF!
可惜那个默认设置是不能用USBASP下载线识别的!
把里面的:
MOV P0,#0E1H       ;DOBLEVEL=1,BODEN=1,SUT1=1,SUT1=0,SKSEL3=0,  
                       ;SKSEL2=0,SKSEL1=0,SKSEL0=1(工厂设定值)  
改成:
MOV P0,#0EFH       ;DOBLEVEL=1,BODEN=1,SUT1=1,SUT1=0,SKSEL3=1,  
                       ;SKSEL2=1,SKSEL1=1,SKSEL0=1(外部晶振设定值)  

然后装上3-8M的晶振还有复位电路就可以用USBASP下载线读取了!
改完还可以用USBASP改熔丝!只要没把熔丝设置内部RC的4M以下就可以!
要是你的USBASP下载线有低速下载就没关系!


仿制了一个 不成功  上电LED闪烁 按下按钮LED常亮  松开按钮还是常亮    检查不出问题   郁闷。。。。。。





本帖最近打赏记录:共3条打赏 ,M币+11
离线武哥在线

发帖
1293
M币
3230
专家
3
粉丝
25
只看该作者 1楼 发表于: 2015-01-11
请登录后查看

发帖
690
M币
4712
专家
1
粉丝
26
只看该作者 2楼 发表于: 2015-01-11
请登录后查看
本帖最近打赏记录:共1条打赏 ,M币+3
离线ksd

发帖
1660
M币
1504
专家
0
粉丝
35
只看该作者 3楼 发表于: 2015-01-11
请登录后查看
离线absflash
发帖
1719
M币
2459
专家
3
粉丝
38
只看该作者 4楼 发表于: 2015-01-12
请登录后查看
离线谗猫
发帖
12
M币
-497
专家
0
粉丝
1
只看该作者 5楼 发表于: 2018-06-21
请登录后查看
离线bg4rff

发帖
1518
M币
1237
专家
8
粉丝
32
只看该作者 6楼 发表于: 2018-06-22
回 谗猫 的帖子
请登录后查看
快速回复
限80 字节
“新手上路”发帖需审核后才能显示(请认真发帖),达到数码9级后取消此限制
 
上一个 下一个