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
上一页 [1] [2] [3] 下一页
本文关键字:制作 AVR单片机,单片机-工控设备 - AVR单片机