Hola a todos
Estoy intentando grabar en la EEPROM de mi PIC18F258 un programita que simplemente enciende y apaga un LED en intervalos de tiempo. Me surgen 2 dudas: teoria y practica:
Teoria: cómo se hace para que el micro lea de forma autonoma el codigo grabado en el pic. Yo con el debbuger de MPLAB ICD2 ejecuto el programa pero no sé cómo se hace para arrancar el codigo grabado.
Practica: Al ejecutar el codigo, se me queda en un bucle cuando llego al loop de encendido/apagado del LED (se me ejecuta y es lo que no quiero porque son isntrucciones que quiero que grabe).
El codigo que llevo hecho lo pongo a continuacion
De verdad, muchisimas gracias si podeis ayudarme:
LIST p=18F258
#include "P18f258.INC"
------->COMIENZA ESCRITURA EN EEPROM
MOVLW 0X000000 ;
MOVWF EEDATA ; Data Memory Value to write
BCF EECON1, EEPGD ; Point to DATA memory
BCF EECON1, CFGS ; Access program FLASH or Data EEPROM memory
BSF EECON1, WREN ; Enable writes
BCF INTCON, GIE ; Disable interrupts
MOVLW 55h ;
MOVWF EECON2 ; Write 55h
MOVLW 0AAh ;
MOVWF EECON2 ; Write AAh
BSF EECON1, WR ; Set WR bit to begin write
BSF INTCON, GIE ; Enable interrupts
;*************************************************************************
;COMIENZA EL PROGRAMA QUE QUIERO ESCRIBIR EN EEPROM
;*************************************************************************
activo equ 0x10
contador equ 0x11
STATUS_TEMP equ 0x1D
BSR_TEMP equ 0x1E
WREG_TEMP equ 0x1F
org 0x000050
bra COMIENZO
org 0x000058
bra INTERR
COMIENZO
movlw 0x7F
movwf contador
movlw B'10000111'
movwf T0CON
movlw 0xf0
movwf TMR0H
movlw 0xbd
movwf TMR0L
bcf INTCON, TMR0IF
bsf INTCON, TMR0IE
bsf RCON, IPEN
bsf INTCON, GIEH
inc
bsf TRISC, 0
bsf TRISC, 1
bcf TRISB, 5
loop
btfsc activo, 0
goto loop
btfss PORTC,0
goto incrementa
btfss PORTC,1
goto decrementa
goto loop
incrementa
movlw 10
addwf contador
setf activo
goto loop
decrementa
movlw 10
subwf contador
setf activo
goto loop
INTERR
movff STATUS, STATUS_TEMP
movff BSR, BSR_TEMP
movwf WREG_TEMP
bcf INTCON, TMR0IF
movf contador, W
movwf TMR0H
movlw 0xbd
movwf TMR0L
btg PORTB, 5
clrf activo
movf WREG_TEMP, W
movff BSR_TEMP, BSR
movff STATUS_TEMP, STATUS
retfie
END
;*************************************
;FINALIZA EL PROGRAMA QUE QUIERO ESCRIBIR EN EEPROM
;*************************************
BCF EECON1, WREN ; Disable writes on write complete (EEIF set)
;------>FINALIZA ESCRITURA EN EEPROM
------->COMIENZA LECTURA DE EEPROM
MOVLW 0X000000 ;
MOVWF EEADR ;Data Memory Address
;to read
BCF EECON1, EEPGD ;Point to DATA memory
BCS EECON1, CFGS ;
BSF EECON1, RD ;EEPROM Read
MOVF EEDATA, W ;W = EEDATA
END
Estoy intentando grabar en la EEPROM de mi PIC18F258 un programita que simplemente enciende y apaga un LED en intervalos de tiempo. Me surgen 2 dudas: teoria y practica:
Teoria: cómo se hace para que el micro lea de forma autonoma el codigo grabado en el pic. Yo con el debbuger de MPLAB ICD2 ejecuto el programa pero no sé cómo se hace para arrancar el codigo grabado.
Practica: Al ejecutar el codigo, se me queda en un bucle cuando llego al loop de encendido/apagado del LED (se me ejecuta y es lo que no quiero porque son isntrucciones que quiero que grabe).
El codigo que llevo hecho lo pongo a continuacion
De verdad, muchisimas gracias si podeis ayudarme:
LIST p=18F258
#include "P18f258.INC"
------->COMIENZA ESCRITURA EN EEPROM
MOVLW 0X000000 ;
MOVWF EEDATA ; Data Memory Value to write
BCF EECON1, EEPGD ; Point to DATA memory
BCF EECON1, CFGS ; Access program FLASH or Data EEPROM memory
BSF EECON1, WREN ; Enable writes
BCF INTCON, GIE ; Disable interrupts
MOVLW 55h ;
MOVWF EECON2 ; Write 55h
MOVLW 0AAh ;
MOVWF EECON2 ; Write AAh
BSF EECON1, WR ; Set WR bit to begin write
BSF INTCON, GIE ; Enable interrupts
;*************************************************************************
;COMIENZA EL PROGRAMA QUE QUIERO ESCRIBIR EN EEPROM
;*************************************************************************
activo equ 0x10
contador equ 0x11
STATUS_TEMP equ 0x1D
BSR_TEMP equ 0x1E
WREG_TEMP equ 0x1F
org 0x000050
bra COMIENZO
org 0x000058
bra INTERR
COMIENZO
movlw 0x7F
movwf contador
movlw B'10000111'
movwf T0CON
movlw 0xf0
movwf TMR0H
movlw 0xbd
movwf TMR0L
bcf INTCON, TMR0IF
bsf INTCON, TMR0IE
bsf RCON, IPEN
bsf INTCON, GIEH
inc
bsf TRISC, 0
bsf TRISC, 1
bcf TRISB, 5
loop
btfsc activo, 0
goto loop
btfss PORTC,0
goto incrementa
btfss PORTC,1
goto decrementa
goto loop
incrementa
movlw 10
addwf contador
setf activo
goto loop
decrementa
movlw 10
subwf contador
setf activo
goto loop
INTERR
movff STATUS, STATUS_TEMP
movff BSR, BSR_TEMP
movwf WREG_TEMP
bcf INTCON, TMR0IF
movf contador, W
movwf TMR0H
movlw 0xbd
movwf TMR0L
btg PORTB, 5
clrf activo
movf WREG_TEMP, W
movff BSR_TEMP, BSR
movff STATUS_TEMP, STATUS
retfie
END
;*************************************
;FINALIZA EL PROGRAMA QUE QUIERO ESCRIBIR EN EEPROM
;*************************************
BCF EECON1, WREN ; Disable writes on write complete (EEIF set)
;------>FINALIZA ESCRITURA EN EEPROM
------->COMIENZA LECTURA DE EEPROM
MOVLW 0X000000 ;
MOVWF EEADR ;Data Memory Address
;to read
BCF EECON1, EEPGD ;Point to DATA memory
BCS EECON1, CFGS ;
BSF EECON1, RD ;EEPROM Read
MOVF EEDATA, W ;W = EEDATA
END