Duda al programar en assembler un 12f675

Hola amigos del foro:

Me encuentro empezando a programar y por razones de uso, necesidades y otras cosas.
Empeze por los 12f. Estoy haciendo un programa simple que prende una luz al pulsar un boton.

Está escrito en assembler y queria que me hechen una mano, pues no funciona. No entiendo si hay que definir con ansel como digital o analogo, tengo entendido que seria digital al entrada. Y si es necesario definir el comparador.

En el programa parto configurando el osscal, despues las i/o y despues el programa mismo.
Estoy usando MPLAB Ide v863

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;este programa lo que hace es encender un led cuando se apreta un pulsador ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;list p=12f675
#include <p12f675.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _CPD_OFF
ERRORLEVEL -302
ORG 0x00 ;se inicializa el reloj interno
bSf STATUS,RP0 ;banco 1
call 3FFh
movwf OSCCAL
bcf STATUS,RP0 ;banco 0



; bcf STATUS,RP0 ;esta en el banco cero (esta es la configuracion que microchip propone)
clrf GPIO ;inicializa el gpo en cero
movlw 07h ;se carga con 0111 cmcom
movwf CMCON ;set del cero al dos son e/s digitales
bsf STATUS,RP0 ;esta en el banco 1
;movlw 08h ;se carga ansel con 1000 binario y queda el bit 3 como analogo
clrf ANSEL ;deja como digital todas las i/o
movlw 0ch ;los gpio 2y3 como entrada
movwf TRISIO ;y los gpio 5,4,1,0 como salida



LOOP:
BTFSS GPIO,3 ;SE REALIZA LA PREGUNTA? SI SE APRETO EL PULSADOR SI O NO(si el puerto 3 esta en cero o no)
;si (BTFSS)en esta 1 salta hello y prende el led
goto Hello ;va hasta hello
BSF GPIO,1 ;pone un 1
goto LOOP ; va hasta loop
Hello:


BCF GPIO,1 ;se coloca un cero gpio,1 y no prende el led
goto LOOP
END


Gracias, he buscado bastante pero sobre 12f no hay tanto, espero este bien ubicado el tema en el foro.

Gracias!!! Saludos.
Nicolas.
 
Ya lo solucione con un pco de paciencia, el problema era la confuguración del osscal al parecer, pero aun me cabe una duda. Al emular el programa funcionaba de maravilla es decir que cuando presiono el boton se prende la luz, pero al llevarlo a la practica funcionaba a la inversa.
Lo otro que me sucedia es que se prendian otros leds conectados a las otras patas .

Dejo el programa por si alguien me desea ayudar:

Código:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;este programa lo que hace es encender un led cuando se apreta un pulsador ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
 
LIST P=12F675 ; Procesador utilizado.
INCLUDE <P12F675.INC> ; Definición de algunos operandos utilizados.
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON
ERRORLEVEL -302 
CBLOCK 0x20
ENDC
;#DEFINE LED GPIO,2 ; Salida del Led
;#DEFINE INT GPIO,3 ; Entrada del interruptor.
; ZONA DE CÓDIGOS *******************************************************************
ORG 0
Inicio
bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
movlw 0x20 ; Valor de calibración.
movwf OSCCAL
movlw b'00111101' ; Activar GP3 como entrada.
movwf TRISIO
bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
 
 
 
LOOP: 
BTFSS GPIO,3 ;SE REALIZA LA PREGUNTA? SI SE APRETO EL PULSADOR SI O NO(si el puerto 3 esta en cero o no)
;si (BTFSS)en esta 1 salta hello y prende el led
goto Hello ;va hasta hello
BcF GPIO,1 ;Altere esta parte para que funcionase al reves ;pone un 1
goto LOOP ; va hasta loop
Hello:
 
 
BsF GPIO,1 ;Altere esta parte para que funcionase al reves ;se coloca un cero gpio,1 y no prende el led
goto LOOP
END
 
Atrás
Arriba