gracias por contestar. El codigo mas relevante es éste:
; ZONA DE DATOS *********************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F876
INCLUDE <P16F876.INC>
estat_anterior EQU 0x21
; ZONA DE Codigo*********************************************************************
ORG 0 ; El programa comienza en la dirección 0.
goto Inici
ORG 0x04 ; Sera el vector d'interrupció del USART
;dadaRebuda
btfss PIR1,RCIF ; si el Flag de recepcio s'ha activat salta la seguent instruccio
goto fi
bcf PIR1,RCIF ; restaurem el flag
;****SI HEMOS LLEGADO AQUI TENEMOS UN CARACTER ESPERANDO EN RCREG****
; El primer pas es mirar en quin estat ens trobem
movf estat_anterior,0 ; carreguem l'estat anterior a W
xorlw '0'
btfss STATUS, Z
goto estat1
;som a l'estat 0
xorlw '$' ; Comparem el valor de W amb una lletra, Si es igual el flag de Z=1
btfss STATUS, Z
;per qualsevol altre cosa que no sigui un $ marxem
goto fi
;hem trobar un '$' i per tant passem a l'estat 1
movlw .1
movwf estat_anterior
*****AQUI COLOCO UN 1 EN EL W y LLAMO A LANZO AL SERIE
**********ESTO ES EL MOTIVO DE MI PREGUNTA************
movlw a'1'
call putchar
call encendre_taronja
goto fi
;si estamos aqui es porque pq posiblemente estemos en en estado1
estat1
movf estat_anterior,0 ; carreguem l'estat anterior a W
xorlw '1'
btfss STATUS, Z
goto estat2
;som a l'estat 1
xorlw 'G' ; Comparem el valor de W amb una lletra, Si es igual el flag de Z=1
btfss STATUS, Z
;per qualsevol altre cosa que no sigui un $ marxem
goto fi
;hem trobar una 'G' i per tant passem a l'estat 2
movlw .2
movlw a'2'
call putchar
movwf estat_anterior
goto fi
estat2
call encendre_verd
;********FI DE LA MEVA RUTINA D'ADQUISICIÓ DE DADES********************
fi retfie
putchar
movwf TXREG ; del codigo ascii
bsf STATUS,RP0 ;Cambio al banco 1 -------------
bcf STATUS,RP1
COMP_TX
btfss TXSTA,TRMT ;comprueba si acabo de Tx.
goto COMP_TX
bcf STATUS,RP0 ;Cambio al banco 0 -------------
return
Inici
bsf RCSTA,SPEN ;se activa la USART
bsf STATUS,RP0 ;Cambio al banco 1 -------------
bcf STATUS,RP1
clrf TRISA ; Tot el port A es configura com a SORTIDA
clrf TRISB ;Puerta B como salida
movlw b'10111111' ;RC7/Rx entrada,
movwf TRISC ;RC6/Tx salida.
movlw b'00100100' ;Configuracion USART
movwf TXSTA ;y activacion de transmision
movlw .51
;movlw .25 ;9600 baudios
movwf SPBRG
bsf PIE1,RCIE ;Habilitem l'interrupcio de Recepcio
bcf STATUS,RP0 ;Cambio al banco 0 -------------
clrf estat_anterior ; Inicialment l'estat anterior sera 0
movlw b'10010000' ;Usart recepcion continua
movwf RCSTA
movlw b'11000000' ;Habilitem les interrupcions en general
movwf INTCON
bsf RCSTA,SPEN ;se activa la USART
bsf STATUS,RP0 ;Cambio al banco 1 -------------
bcf STATUS,RP1
bsf TXSTA,TXEN ;Habilita la transmision
bcf STATUS,RP0 ;Cambio al banco 0 -------------
call encendre_vermell
Principal
goto Principal ; Crea un bucle cerrado e infinito.
END ; Fin del programa.