Pues no se si te he entendido bien

pero yo lo que haria es: no utilizar interrupciones.
en visual basic haria lo siguiente:
For c = 1 To 18 Step 1
;poner el dato a enviar
Call enviar
Call recibir
;hacer lo que sea con el dato recibido
Next
Private Sub enviar()
MSComm1.Output = datoaenviar
Do While MSComm1.OutBufferCount > 0
Loop
End Sub
Private Sub recibir()
Do While MSComm1.InBufferCount = 0
DoEvents
Loop
datoarecibir = MSComm1.Input
End Sub
en el pic lo mismo solo que primero call recibir y despues call enviar.
aunque el puerto serial es asincrono en las rutinas de recepcion del pic y de la pc los programas se quedan trabados hasta recibir un dato. y eso da cierta sincronia
por cierto no se si sabias pero por el puerto serial los datos se van en ascii SIEMPRE, asi como los estabas mandando llegan al pic como "30", "31".... y las letras como su respectivo ascii a="61", b="62"
para enviarlos y que llegen 00,01.....0A..0F hay que convertirlos a ascii, si te interesa por ahi tengo la rutina, solo me avisas