⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 源程序.asm

📁 只需1块51做的ATmega8熔丝恢复器
💻 ASM
字号:
	;***********************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
	PAGEL	EQU	P2.0	;FLASH和E2PROM页装入
	XA1	EQU	P2.1	;XTAL编程动作位1
	XA0	EQU	P2.2	;XTAL编程动作位0
	XTAL1	EQU	P2.3	;晶振输入端
	BS1	EQU	P2.4	;字节选择1(0=选低字节,1=选高字节)
	_WR	EQU	P2.5	;写脉冲
	_OE	EQU	P2.6	;输出允许(低有效)
	RDY_BSY	EQU	P2.7	;0=器件正在编程,1=器件就绪等待命令
	LAMP	EQU	P1.3	;编程指示灯
	_RST_12V	EQU	P1.2	;复位端12V电压
	KEY	EQU	P1.1	;执行按键
	BS2	EQU	P1.0	;字节选择2(0=选低字节,1=选高字节)
	ORG	0000H
	AJMP	MAIN
	ORG	30H
MAIN:	MOV	SP,#70H
	MOV	P0,#0FFH	;初始化P0,P1,P2
	MOV	P1,#0FFH
	MOV	P2,#0FFH
	CLR	XTAL1
LOOP:	CPL	LAMP
	ACALL	DELAY_1S
	JB	KEY,LOOP
	JNB	KEY,$
	SETB	LAMP
	ACALL	PROG_ST	;进入并行编程模式
	ACALL	WRITE_FUSE	;写熔丝字节
	CLR	_RST_12V
	CLR	LAMP
	AJMP	LOOP
	;**********************************
	;进入并行编程模式子程序
	;**********************************
PROG_ST:	MOV	R1,#7
PLS:	SETB	XTAL1	;产生>6个的XTAL1时钟脉冲触发
	CLR	XTAL1
	DJNZ	R1,PLS
	ANL	P2,#0E0H	;PAGEL,XTAL1,XA1,XA0,BS1==0
	NOP	;延时大于100NS
	SETB	_RST_12V	;RST加12V电压
	NOP	;延时大于100NS
	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,#0D9H	;'D9'为出厂设定值
	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
	;**********************************
	;延时子程序
	;**********************************
DELAY_106US:	MOV	R4,#26
	DJNZ	R4,$
	RET
DELAY_1S:	MOV	R5,#25	;延时1秒
L1:	MOV	R6,#200
L2:	MOV	R7,#148
	DJNZ	R7,$
	DJNZ	R6,L2
	DJNZ	R5,L1
	RET
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -