;****************************************************
; ATMEL FUSEBIT DOCTOR ASM FILE
;****************************************************
;THIS IS PROGRAM TO RESET ATMEL FUSEBITS TO ENABLE SERIAL PROGRAMMING
;COMPILE USING MPLAB X IDE
;USE 4 MHZ CRYSTAL IN PIC16F72
;APPLY +5V TO VCC & AVCC AND +12V TO RESET FOR ATMEGA AND +5V TO PIC SIMULTANEOUSLY
;AND WAIT UNTIL LED AT PORTB,0 BLINKS, POWER OFF AND TAKE AS FRESH ATMEL IC
;*********************** CONNECTION DETAILS *************************
; ATMEGA8 PIC16F72
; PIN1 ------- +12 V
; PIN2 ------- OPEN
; PIN3 ------- OPEN (OPTIONAL RDY/BSY LED)
; PIN4 ------- +5 V
; PIN5 ------- PORTC,1
; PIN6 ------- PORTC,2
; PIN7 ------- +5 V
; PIN8 ------- GND
; PIN9 ------- PORTC,3
; PIN10 ------ OPEN
; PIN11 ------ PORTC,4
; PIN12 ------ PORTC,5
; PIN13 ------ GND
; PIN14 ------ PORTC,0
; PIN15 ------ GND
; PIN16 ------ GND
; PIN17 ------ GND
; PIN18 ------ GND
; PIN19 ------ GND
; PIN20 ------ +5V
; PIN21 ------ OPEN
; PIN22 ------ GND
; PIN23 ------ PORTC,6
; PIN24 ------ PORTC,7
; PIN25 ------ GND
; PIN26 ------ OPEN
; PIN27 ------ OPEN
; PIN28 ------ OPEN
list p=16f72
list n=0
#include p16f72.inc
__config _HS_OSC & _WDT_OFF & _PWRTE_OFF & _BODEN_ON & _CP_OFF
#DEFINE XA0 PORTC,4
#DEFINE XA1 PORTC,5
#DEFINE XTAL1 PORTC,3
#DEFINE BS1 PORTC,2
#DEFINE WR PORTC,1
#DEFINE D6 PORTC,6
#DEFINE D7 PORTC,7
#DEFINE D0 PORTC,0
#DEFINE LED PORTB,0
ORG 0x0000
GOTO START
ORG 0X0005
START BSF STATUS,RP0
MOVLW 0XFE
MOVWF TRISB ;DEFINE PORTB,0 AS OUTPUT
MOVLW 0X00
MOVWF TRISC ;PORTC AS OUTPUT
BCF STATUS,RP0
MOVLW B'00000010' ;WR ALONE 1
MOVWF PORTC
BCF LED ;LED BLINKS AFTER PROGRAMMING OVER
CALL HLFSEC
BSF XA1 ;LOAD COMMAND FOR CHIP ERASE
BSF D7 ;COMMAND FOR CHIP ERASE 1000 0000
BSF XTAL1
CALL HLFSEC
BCF XTAL1
BCF WR ;START CHIP REASE
CALL HLFSEC
BSF WR
BCF XA1
BCF D7
BSF XA1 ;LOAD COMMAND FOR PROGRAMMING FUSE BITS
BSF D6 ;COMMAND FOR PROGRAMMING FUSE BITS 0100 0000
BSF XTAL1
CALL HLFSEC
BCF XTAL1
BCF D6
BCF XA1 ;LOAD DATA FOR FUSE HIGH BYTE
BSF XA0 ;FIRST LOAD IN LOW BYTE AND THEN SELECT HIGH BYTE
BSF D7 ;FUSE HIGH BYTE 1100 0000
BSF D6
BSF XTAL1
CALL HLFSEC
BCF XTAL1
BSF BS1 ;SELECT FUSE HIGH BYTE
BCF WR ;GIVE WRITE COMMAND
CALL HLFSEC
BSF WR
BCF XA0
BCF BS1
BCF D7
BCF D6
CALL HLFSEC
BCF XA1 ;LOAD DATA FOR FUSE LOW BYTE
BSF XA0
BSF D0 ;FUSE LOW BYTE 1100 0001
BSF D6
BSF D7
BSF XTAL1
CALL HLFSEC
BCF XTAL1
BCF WR ;GIVE WRITE COMMAND
CALL HLFSEC
BSF WR ;END OF WRITE COMMAND
BCF D0
BCF D6
BCF D7
BCF XA0
BCF BS1
CALL HLFSEC
LOOP BSF LED ;LED BLINKS CONTINOUSLY INDICATES END OF PROGRAMMING
CALL HLFSEC
BCF LED
CALL HLFSEC
GOTO LOOP
HLFSEC MOVLW 0X30 ;DELAY FOR HALF SECOND
MOVWF 0X23
COU5 MOVWF 0X22
COU4 MOVWF 0X21
COU3 DECFSZ 0X21,F
GOTO COU3
DECFSZ 0X22,F
GOTO COU4
DECFSZ 0X23,F
GOTO COU5
RETURN
END