Bueno, vengo a pedirles ayuda con un programa que me viene rompiendo la cabeza hace algunos días y no lo puedo solucionar..
El programa este espera a que se ponga en 1 GP0 (un interruptor) y una vez que se pone en 1 empieza a hacer siempre lo mismo:
1) Lee el puerto analógico GP1
2) Escribe el dato del puerto analógico (solo 8bits) y lo escribe en la EEPROM (empezando de la posición 0).
3) espera 30 segundos
4) el ciclo se repite
Cuestión que cuando lo compilo no me arroja ningún problema, pero al pasarlo al pic prendo la fuente y no sucede nada, ningún indicio de vida...
Gracias al que me pueda ayudar, mi idea es hacer un data logger.
El código es este:
En 2) quise decir "Lee el dato del puerto analógico (solo 8bits) y lo escribe en la EEPROM (empezando de la posición 0)."
El programa este espera a que se ponga en 1 GP0 (un interruptor) y una vez que se pone en 1 empieza a hacer siempre lo mismo:
1) Lee el puerto analógico GP1
2) Escribe el dato del puerto analógico (solo 8bits) y lo escribe en la EEPROM (empezando de la posición 0).
3) espera 30 segundos
4) el ciclo se repite
Cuestión que cuando lo compilo no me arroja ningún problema, pero al pasarlo al pic prendo la fuente y no sucede nada, ningún indicio de vida...
Gracias al que me pueda ayudar, mi idea es hacer un data logger.
El código es este:
Código:
;-------------------------------------------------------------
; Define el PIC
;-------------------------------------------------------------
list p=12f675
#include P12F675.INC
org 0
__CONFIG _MCLRE_ON & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON
;-------------------------------------------------------------
; Calibración del RC interno
;-------------------------------------------------------------
bsf STATUS,RP0 ;Bank 1
call 3FFh ;Get the cal value
movwf OSCCAL ;Calibrate
bcf STATUS,RP0
;-------------------------------------------------------------
; Declaracion de variables
;-------------------------------------------------------------
conversion equ d'00041'
direccion equ d'00042'
CounterA equ d'00043'
CounterB equ d'00044'
CounterC equ d'00045'
;-------------------------------------------------------------
; Configuración entradas y salidas (GP1 entrada analogica)
;-------------------------------------------------------------
bcf STATUS,RP0 ;se pasa al banco 0
movlw b'00000101' ;[configura 1)"justificado a la izquierda" (todos los bit comprimidos hacia la izquierda del restultado), 2)Vref en Vdd ]
movwf ADCON0 ;[3)entrada analogica en GP1. 4)no empieza la conversion y esta operable (ultimos 2 bits) ]
clrf GPIO ;limpia las salidas
movlw b'00000111' ;[desactiva el comparador de tension y quedan libres GP1,GP2 y GP0]
movwf CMCON ;
bsf STATUS,RP0 ;se pasa al banco 1
movlw b'00010010' ;configura 1)toma el divisor de tiempo fosc/8. 2)configura GP1 como entrada analogica y las otras como digitales I/O
movwf ANSEL ;
movlw b'001011' ;Configura GP1 y GP0 como entradas
movwf TRISIO
bcf STATUS,RP0 ;se pasa al banco 0
;-------------------------------------------------------------
; Programa principal
;-------------------------------------------------------------
movlw d'0'
movwf GPIO ;apaga todos los leds
movwf EEADR
movwf direccion ;comienza a grabar datos desde la posición d'0' de la EEPROM
bcf INTCON,GIE ;Disable INTs
inicio btfss GPIO,0 ;pregunta para empezar conversion cada 30 segundos
goto inicio
convertir bsf ADCON0,1 ;comienza la conversion A/D
convierte btfsc ADCON0,1 ;espera a que convierta el dato
goto convierte
movf ADRESH,w ;pasa el resultado de la conversion a w
movwf conversion ;y luego a la variable conversion
bsf STATUS,RP0 ;pasa al banco 1 (donde se maneja la EEPROM)
movf conversion,w
movwf EEDAT ;y lo deja listo para grabar CONFIGURACION DE DATOS A GRABAR EN EEPROM
movf direccion,w ;tambien carga la direccion donde se va a grabar el dato
movwf EEADR
incf direccion,1 ;deja seteado donde se va a grabar el proximo dato
bsf STATUS,RP0 ;Bank 1 HABILITA GRABACION A EEPROM
bsf EECON1,WREN ;Enable write
movlw 0x55 ;Inicio de las intrucciones para EECON2
movwf EECON2
movlw 0xAA
movwf EECON2 ;Fin de las intrucciones para EECON2
bsf EECON1,WR ;Start the write INICIA LA GRABACION
esperargrabe btfsc EECON1,WR
goto esperargrabe
bcf EECON1,WREN ;deshabilita la escritura para prevenir errores
bsf GPIO,5 ;avisa que se grabo un dato
call demora0.1
bcf GPIO,5
call demora30
goto convertir
;-------------------------------------------------------------
; SUBRUTINA DE RETARDO DE 30 SEGUNDOS
;-------------------------------------------------------------
demora30 movlw D'153'
movwf CounterC
movlw D'49'
movwf CounterB
movlw D'161'
movwf CounterA
loop1 decfsz CounterA,1
goto loop1
decfsz CounterB,1
goto loop1
decfsz CounterC,1
goto loop1
retlw 0
;-------------------------------------------------------------
; SUBRUTINA DE RETARDO DE 0.1 SEGUNDOS
;-------------------------------------------------------------
demora0.1 movlw D'130'
movwf CounterB
movlw D'221'
movwf CounterA
loop2 decfsz CounterA,1
goto loop2
decfsz CounterB,1
goto loop2
retlw 0
END
En 2) quise decir "Lee el dato del puerto analógico (solo 8bits) y lo escribe en la EEPROM (empezando de la posición 0)."
Última edición por un moderador: