Te dejo el codigo modificado para que lo estudies.
Define CONFIG = 0x3f41
Define CLOCK_FREQUENCY = 4
AllDigital
TRISA = %00000000 'puerto A: todo salidas
TRISB = %00000000 'port B: 0 entrada, 1,2,3,4,5,6,7 salidas
PORTB = %00000000 'todas las salidas puerto B puestas a 0
PORTA = %00000000 'todas las salidas puerto A puestas a 0
Hseropen 9600
Define SEROUT_DELAYUS = 5000
Hserout "ate0", CrLf 'disable echo from modem
WaitMs 2000
INTCON.PEIE = 1 'bit de habilitacion de interrupciones de perifericos(USART), para que funcione la implementación P. SERIE
PIE1.RCIE = 1 'Activa la interrupcion de la USART en modo rx
Enable
INTCON.GIE = 1 'habilita todas las interrupciones globales
Enable
'--------------------------------------Inicio Programa--------------------------------------------------
WaitMs 100
Dim dato As Byte
pp:
Call _error_usart()
Hserout "AT", CrLf
PORTA.1 = 1
WaitMs 800
PORTA.1 = 0
WaitMs 800
PORTA.1 = 1
WaitMs 800
PORTA.1 = 0
WaitMs 800
Goto pp
End
'Gestiona el bloqueo de la Usart en modo Rx ("_FuncionesPic16F628.bas")
Proc _error_usart()
Dim _byte As Byte
If RCSTA.OERR = True Then 'Hay error en la Usart, entraron más datos de los que se extrajero (está bloqueada)
RCSTA.CREN = 0 'Disable, continua recepción
Hserget _byte 'Vacía registros usart
Hserget _byte
RCSTA.CREN = 1 'Enable, Continuous Receive Enable bit*/
Endif
End Proc
'####################################################################################
'############################### I N T E R R U P C I O N #####################################
'####################################################################################
'+CLCC: 1,1,4,0,0,"000000000",161,"SEC"
'Comienzan las rutinas de las interrupciones
On Interrupt 'PIE1.RCIE = 0 si al entrar estaba activado (igual con todas las interrupciones).
'Hserout "INTERRUPTION"
'(automático) PIE1.RCIE = 0 'desactiva la interrupcion de la USART en modo rx
Hserget dato 'PIR1.RCIF = 0 de forma automática, se vuelve activar si quedan datos pendientes de leer en el buffer de la usart.
PORTA.0 = 1
WaitMs 300
PORTA.0 = 0
'(automático) PIR1.RCIF = 0 'borra el flag de salto de la usart
'(automático) PIE1.RCIE = 1 'activa la interrupcion de la USART en modo rx
Resume 'PIE1.RCIE = 1 al salir, si al entrar estaba activada (igual con todas las interrupciones).