This is my code

'************************************************* ***************
'* Name : TRANSPONDEDOR.BAS *
'* Author : Leonardo Castillo *
'* Notice : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 26/12/2011 *
'* Version : 2.0 *
'* Notes rograma terminado pero aun no probado fisicamente *
'* :se le adecuo un display para poder probarlo *
'************************************************* ***************
include "modedefs.bas"
'Device 16F627
'Config WDT_OFF, PWRTE_ON
DEFINE OSC 4
DATO VAR Word
DATO2 VAR word
RGIT VAR byte
I VAR Byte
Boton1 var byte
Bandera var byte
ChkSum var byte
Symbol SDO=PORTA.0 'SDO , en el microcontrolador se configura como entrada
Symbol SDI=PORTA.1 'SDI , en el microcontrolador se configura como salida
Symbol SCK=PORTA.2 'SCK , en el microcontrolador se configura como salida
Symbol nSEL=PORTA.3 'nSEL , en el microcontrolador se configura como salida
Symbol nIRQ=PORTB.0 'nIRQ , en el microcontrolador se configura como entrada
symbol Boton=PORTB.2 'Boton de seleccion
goto inicio
Configs:
nSEL = 0
ShiftOut SDi,SCK,msbfirst,[DATO\16]
nSEL = 1
asm ;pauseus 10
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
endasm
Return
Inicio:
CMCON=7
'76543210
PORTA = %00000001
PORTB = %00000101
boton1=0
Pulsar:
pause 200
if boton=1 then pulsar
boton1=boton1+1
pause 1000
if boton=0 then boton1=boton1+1
Esperadejapulsar:
if boton=0 then esperadejapulsar
'Inicializa dispositivo transpondedor
PAUSE 500
DATO = $8038 : GoSub CONFIGS 'habilita registros, 915Mhz, 12.5pF
if boton1=1 then
DATO = $8208 : GoSub CONFIGS 'activas cristal oscilador, !PA
elseif boton1=2 then
DATo = $82D8 : GoSub CONFIGS 'activa cristal, !PA, habilita resepcion
endif
DATO = $a640 : GoSub CONFIGS 'frec centrada en 912 MHz
DATO = $c647 : GoSub CONFIGS 'velocidad de datos 4789 Kbps
DATO = $94a0 : GoSub CONFIGS 'VDI, FAST, 134kHz, 0dBm, -103dBm
DATO = $c2ac : GoSub CONFIGS 'modo de recuperacion de reloj auto, velocidad de recuperacion de reloj lenta, filtro de datos digital, nivel de calidad de datos (Threshold) 4
DATO = $ca80 : GoSub CONFIGS 'nivel FIFO 8, longitud de sincronizacion 2 bytes, fifo fill inicio de sincronizacion, sensivilidad de reset alta
DATO = $ca83 : GoSub CONFIGS 'FIFO8, sync (sensivilida de reset fifo lenta y habilita fifo fill
DATO = $c49b : GoSub CONFIGS 'habilita afc, strobe, habilita registro de frecuencia offset (registro offset 15 a -16 ) solo mientras vdi=high
DATO = $9850 : GoSub CONFIGS '!mp, 9810=30kHz, MAX OUT post frec shift, 90 KHz deviation and power out 0 db -txt control command
DATO = $e000 : GoSub CONFIGS 'comando wake up timer no usado
DATO = $c800 : GoSub CONFIGS 'comando low duty-cycle no usado
DATO = $c000 : GoSub CONFIGS '1.0Mhz, 2.2v
if boton1=1 then
gosub transmicion
else
gosub resepcion
endif
boton1=0
goto Pulsar
Transmicion:
if boton=1 then transmicion 'espera a iniciar el envio de datos
DATO = $8228 : GoSub CONFIGS 'activa cristal oscilador, habre PA
@ nop ;retardo de 4 us 1 instruccion = 1 us a 4 Mhz
@ nop
@ nop
@ nop
DATo = $8238 : GoSub CONFIGS 'activa cristal, habilita transmicion
@ nop ;retardo de 2 us
@ nop
loop1:
if nirq = 0 then
ChkSum=0
i=0
repeat
' lookup2 i,[$AA,$AA,$AA,$2D,$D4,"LeonardoCastillo",ChkSum,$AA, $55],dato2 'de esta forma en una sola linea se pone todo el formato pero consume mas bytes de memoria
lookup i,[$AA,$AA,$AA,$2D,$D4,"LeonardoCastillo",$55],dato2
if dato2<>$AA or dato2<>$55 then ChkSum=(ChkSum+16)&$FF
if dato2<>$55 then gosub enviar
i=i+1
until dato2=$55
dato2=chksum : gosub enviar'si se usa instruccion lookup2 se elimina esta instruccion
dato2=$AA : gosub enviar 'si se usa instruccion lookup2 se elimina esta instruccion
endif
DATO = $8208 : GoSub CONFIGS 'activa cristal, sierra PA
DATO = $8200 : GoSub CONFIGS 'finaliza resepcion, entra en reposo
pause 1000
GoTo inicio
'siempore que un comando de lectura sea identificado se podra leer el registro
'STATUS a travez del pin SDO y embiando los pulsos de reloj requeridos
'Como solo nos interesa leer el bit RGIT (FIN DE TRANSMICION) que corresponde al
'bit 16 del registrto y como siempre el primer bit en salir es el 16, solo se
'requiere de un pulso de reloj, para poder leer dicho registro, el pin SDI debe
'ponerse a nivel bajo (SDI=0)

Enviar:
RGIT=0
dato=DATo2|$B800 'se suma al comando de lectura (OxB800 el byte de la letra o dato enviado
Loop2:
SCK=0 'baja señal de reloj
nSEL=0 'baja señal y habilita el dispositibo para injiciar la transmicion
SDI=0 'baja señal de dato para habilitar la lectura del registro STATUS
SCK=1 'eleba señal de reloj para iniciar el pulso y obtyener la lectura por el pin SDO
if SDO=1 then 'checa el bit 16 (RGIT) del reg status mediante el pin SDO y que es el
RGIT=1 'que primero se lee y si esta en alto entonces significa que termino la transmicion
else
RGIT=0 'si hay transmicion en progreso(SDO=0), coloca esta otra bandera
endif
SCK=0 'baja señal de reloj para finalizar pulso
SDI=1 'eleva señal de datos
nSEL=1 'deshabilita dispositivo transpòndedor
if RGIT==0 then 'si sigue transmitiendo se vuelbe a habilitar el dispositivo para
goto Loop2 'iniciar la lectura del reg status hasta completar la transmicion
else 'pero si termino de transmitir (se enviaron los 16 bits)
RGIT=0 'el microcontrolador almacena los siguientes byts en el
gosub configs 'transpondedor en forma serial mediante esta rutina
endif
return
' Resepcion empleando interrupcion nIRQ
Resepcion:
if boton=1 then resepcion 'espera a iniciar resepcion
' Define LCD registros y bits
Define LCD_DREG PORTB
Define LCD_DBIT 4
Define LCD_RSREG PORTB
Define LCD_RSBIT 2
Define LCD_EREG PORTB
Define LCD_EBIT 3
Parcial var word
Result var word [25]
BStatus var word
pause 500
i=0 'inicializa contador
nsel=1
sdi=1
sck=0
sdo=0
IniciaResep:
while nIRQ=0 '(!nIRQ)
gosub leeFIFO 'LeeFIFO
result[i]=parcial 'almacena en registros
i=i+1
if i=16 then i=0 : GOTO ESCRIBELCD
DATo = $ca80 : GoSub CONFIGS
DATo = $ca83 : GoSub CONFIGS ' //reset a FIFO y lee el siguiente Byte resibido
wend
goto iniciaresep
LeeFIFO: 'Rutina FIFO
SCK=0;
SDI=0;
nSEL=0;
SHiftIn SDo, SCK, msbpre, [bstatus\16] 'lee y salta bits status, quedan almacenados
SHiftIn SDo, SCK, msbpre, [parcial\8] 'lee y almacena byte de datos del registro FIFO
nSEL=1
RETURN
EscribeLCD:
lcdout $FE,1 'limpia pantalla
Escribe: 'escribe en la pantalla el mensaje almacenado en las variables
for i=0 to 16
LCDOUT result[i]
next i
goto inicio 'regresa al inicio del programa
end