Files
Work/as68hc11/code/eeprom.asm
2024-08-07 09:12:07 -04:00

74 lines
3.1 KiB
NASM

; AUTHOR: SEAN KESSLER DATE:01/10/2001
; PROGRAM: EEPROM.ASM
; PLATFORM:M68HC11E2FN
; LANGUAGE:CUSTOM ASSEMBLER
; FUNCTION:TEST EEPROM READ/WRITE
RAM equ 00000h ; base of code
RAMSIZE equ 000FFh ; extent of RAM
STACK equ RAM+RAMSIZE ; stack expands down from end of RAM
PORTB equ 01004h ; address of PORTB register
EEPROM equ 0F800h ; start of EEPROM
PPROG equ 0103Bh ; PPROG register
EEPGM equ 00003h ; EEPROM Programming Voltage Enable
EELAT equ 00002h ; EEPROM Latch Control
org RAM ; base of code
BEGIN equ *
lds STACK ; initialize the stack
START equ * ; start sync address
loop equ *
ldab 01h ; move 1 into register b
stab [PORTB] ; light b0
bsr DELAY100
; bsr DELAY1K ; pause
ldab 02h ; move 2 into register b
stab [PORTB] ; light b1
bsr DELAY100
; bsr DELAY1K ; pause
jmp loop
END equ * ; need to figure out how to enable stop
jmp END ; do it forever
; ********************* write data to EEPROM location ******************************
EEPROMW equ * ; register a contains data, x contains eeprom address
ldab EELAT ; move EELAT enable into register b
stab [PPROG] ; move EELAT enable into PPROG register
staa ix,0 ; store contents of register a into EEPROM address at ix
ldab EEPGM ; move EEPGM enable bit into register b
stab [PPROG] ; move EEPGM enable bits into PPROG register
bsr DELAY10 ; allow charge pump to charge
clr [PPROG] ; turn off high voltage & set to read mode
rts
; ********************** DELAY ROUTINES ************************
DELAY10 equ * ; 10ms delay @ 2.1 mhz
pshy ; save register y
ldy 0BB8h ; load loop counter into y register
DELAY10LOOP equ * ; loop counter sync address
dey ; decrement counter
bne DELAY10LOOP ; loop until zero in y
puly ; restore register y
rts ; return to caller
DELAY1K equ * ; 1000ms delay @ 2.1 mhz
pshy ; save register y
ldy 0Ah ; load 10d into register y
DELAY1KLP equ * ; loop counter sync address
bsr DELAY100 ; call 100 ms delay
dey ; decrement register y
bne DELAY1KLP ; continue
puly ; restore register y
rts ; return to caller
DELAY100 equ * ; 100 ms @ 2.1 mhz
pshx ; save register x
ldx 07530h ; load loop counter into register x
DELAY100LP equ * ; loop counter sync address
dex ; decrement register x
bne DELAY100LP ; continue
pulx ; restore register x
rts ; return to caller