Hola, yo he comunicado al 12F508 y al 12F509 via seriar a la hyperterm de Windows, si te sirve ahi esta el OpCode en .ASM
;Comunicaciones RS232. Controla tres líneas de salida desde hypertem de Windows
;Las líneas GP0, GP1 y GP2 cambian de estado cada vez que se reciba el carácter
;0, 1 o 2 respectivamente
List p=12F508 ;Tipo de procesador
include "P12F508.INC" ;Definiciones de registros internos
;Ajusta los valores de la palabra de configuración durante el ensamblaje:
;Protección de código =OFF, WDT=OFF, MCLR=Interno y OSC= RC interno
;Estas u otras configuraciones se pueden seleccionar según las necesidades
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
;Las siguientes variables determinan el tipo y velocidad de la comunicación
CLKIN equ .4000000 ;Frecuencia del oscilador expresada en ciclos/segundo
BAUDIOS equ .9600 ;Velocidad de transferencia
T_MODO equ 1 ;Transmite 1º el bit LSB (a 0 transmite 1º el bit MSB)
R_MODO equ 1 ;Recibe 1º el bit LSB (a 0 recibe 1º el bit MSB)
T_Nbit equ .8 ;Nº de bits a transmitir (7 u
R_Nbit equ .8 ;Nº de bits a recibir (7 u
Sbit equ .1 ;Nº de bits de stop (1 o 2)
#define Txd_pin GPIO,4 ;Línea de transmisión
#define Rxd_pin GPIO,5 ;Línea de recepción
RS232VAR equ 0x07 ;Inicio de la variables (5) empleadas
;por las rutinas de Transmisión/Recepción
org 0x00 ;Vector de Reset
goto Inicio
include "RS232LOW.INC" ;Incluir rutinas de Transmisión/Recepción
Inicio movwf OSCCAL ;Almacena valor de calibración original
movlw b'11000111' ;Preescaler 1:256 asignado al TMR0
option ;Pin GP2/TOCKI=GP2
movlw b'11111000'
movwf GPIO ;Borra salidas
movlw b'11101000' ;GP0-GP2 salidas, GP4 salida TxD
tris GPIO ;y GP5 como entrada RxD
Loop call RxD ;Esperar recibir un carácter
movf Rxdreg,W ;Lee carácter recibido
movlw '0'
subwf Rxdreg,W
btfsc STATUS,Z ;Es el carácter 0??
goto Toggle_GP0 ;Si, GP0 cambia de estado
movlw '1'
subwf Rxdreg,W
btfsc STATUS,Z ;Es el carácter 1 ??
goto Toggle_GP1 ;Si, GP1 cambia de estado
movlw '2'
subwf Rxdreg,W
btfss STATUS,Z ;Es el carácter 2 ??
goto Loop ;No, carácter inválido
Toggle_GP2 movlw b'00000100'
xorwf GPIO,F
goto Loop ;GP2 cambia de estado
Toggle_GP1 movlw b'00000010'
xorwf GPIO,F
goto Loop ;GP1 cambia de estado
Toggle_GP0 movlw b'00000001'
xorwf GPIO,F
goto Loop ;GP0 cambia de estado
end