Estoy comenzando a programar en asm y estoy intentando grabar en la memoria eeprom del 16f628a. He buscado y probado varias rutinas, pero no consigo hacerlo funcionar ¿donde puede estar el fallo?
list p=16f628A
#include <p16f628A.inc>
__CONFIG _CP_OFF &_CPD_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _LVP_OFF & _MCLRE_OFF
CLOCK equ 4000000
conta_1 equ 0x20
conta_2 equ 0x21
conta_3 equ 0x22
EEPROM_GuardaINTCON equ 0x23
; ----- Macros
SEL_BANK_0: macro
bcf STATUS,RP0 ; macros for data access
bcf STATUS,RP1
endm
SEL_BANK_1: macro
bsf STATUS,RP0
bcf STATUS,RP1
endm
FXTAL equ D'8000000'
BaudRate equ D'62500' ; Xbus serial speed
HIGH_BAUD equ (((D'10'*FXTAL/(D'16'*BaudRate))+5)/D'10')-1 ; BRGH = 1
LOW_BAUD equ (((D'10'*FXTAL/(D'64'*BaudRate))+5)/D'10')-1 ; BRGH = 0
;**** Definicion de variables ****
rs485 equ 5 ; Definimos Led como el bit cero de un registro, en este caso PORTB5.-
poweron equ 1 ; Definimos Led como el bit cero de un registro, en este caso PORTA1.-
Pulsador equ 0 ; Definimos Pulsador como el bit 0, en este caso sera para PORTA
;**** Configuracion de puertos ***
Reset org 0x00 ; Aqui comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
org 0x05 ; Origen del codigo de programa.-
Inicio:
movlw 0X07;CARGA W CON 0X07 PARA DESHABILITAR COMPARADORES
movwf CMCON
SEL_BANK_1
movlw b'11100' ; Muevo 11111 a W.-
movwf TRISA ; Cargo en TRISA.-
movlw b'00000000'
movwf TRISB
SEL_BANK_0
bsf PORTA,poweron ; Comienza encendido.portb5-
bsf PORTB,rs485 ; Comienza encendido.-porta1
;call Retardo_1s
bcf PORTA,poweron ; Comienza encendido.-
bcf PORTB,rs485 ; Comienza encendido.-
SEL_BANK_1
movlw 0x02 ;Referecia a la posición 02 de la memoria
movwf EEADR
movlw 0x0A ;Dato a escribir en la posición 02 de la memoria
movwf EEDATA
call EEWR
;Retardo_1s:
;movlw D'10'
;movwf conta_3
;movlw D'100'
;movwf conta_2
;movlw D'250'
;movwf conta_1
;nop
;decfsz conta_1,F
;goto $-.2
;decfsz conta_2,F
;goto $-.6
;decfsz conta_3,F
;goto $-.10
;return
EEWR:
;SEL_BANK_1 ;HABILITA EL BANCO 1
BSF EECON1,WREN ;HABILITA ESCRITURA EN EEPROM
BCF INTCON, GIE ; DESHABILITA INTERRUPCIONES
MOVLW H'55' ;PREPARA SECUENCIA DE SEGURIDAD
MOVWF EECON2 ;ESCRIBE PRIMER DATO DE SECUENCIA
MOVLW H'AA' ;SEGUNDO DATO
MOVWF EECON2 ;ESCRIBE SEGUNDO DATO DE SECUENCIA
BSF EECON1,WR ;INICIA CICLO DE ESCRITURA
EW: BTFSC EECON1,WR ;MALLA PARA ESPERAR AL FINAL DEL CICLO
GOTO EW ;SI WR=1, CICLO DE ESCRITURA AUN NO TERMINA
BCF EECON1, WREN ;DESHABILITA ESCRITURA
BSF INTCON, GIE ;HABILITA INTERRUPCIONES
RETURN
end