TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: gabotronic en 05 de Diciembre de 2004, 09:41:00
-
Amigos, tengo este problemita, puede que sea super basico pero no lo he podido solucionar.
Inter es una rutina de recepcion de datos luego de una interrupcion por llegada de dato. Necesito que el programa llame a la rutina loop solo si le envio un 1 desde VB, sino se va a ppal que es un loop.
Alguien me puede decir por que no me funciona
Es un 16F877
Inter
bcf STATUS,RP0 ;Banco 0
btfss PIR1,RCIF ;Ha sido interrupción en la recepción ??
retfie ;No, falsa interrupción
bcf PIR1,RCIF ;Si, restaurar el flag de interrupción
movf RCREG,W ;Lee el dato recibido y lo pone en W
movfw rx ;mueve dato a rx
movlw d"49" ;pone en W, 1 en ascii
subwf rx,W ;Resta dato recibido con 1
btfsc STATUS,Z ;Si resta es 0 sigue sino salta
call Loop
call ppal ;Llama rutina principal
retfie
Saludos.
-
hola, una cosa q no dices es si "inter" es una interrupcion o no, aunque por el nombre pareciera q si y por los "retfie" tambien....
si es un interrupcion te diria lo siguiente:
.no es muy razonable (hay q ver las necesidades q tenes para esto) q desde la interrupcion llames a una rutina principal
.por otro lado hay q ver q es lo q hace cada una de ellas.... ppal y loop...
. como convencion una interrupcion es conveniente q solo tenga un lugar de salida "retfie",
. generalmente se restaura la interrupcion al final de la misma y justo antes de abandonarla.
.ademas deberia ver q es lo q hace el programa principal, pq puede ser necesario salvar el reg W y los flags si son utilizados en ambos lugares...
Suerte...
-
Solucionado:
En vez de movfw rx, era movwf y no me habia dado cuenta.
Saludos