Bueno finalmente ha salido andando... mañana os explico pq la cosa tiene su miga...
Durante las miles de pruebas realizadas... sin exagerar le habré echado a este problemas más de 20 horas de trabajo (igual me quedo muy corto) me dió por modificar el baud rate con el que habia estado trabajando, 9600 baudios por 19200 y también introduje una pequeña modificación en mi codigo que en ese momento era
BANKSEL TXSTA
bcf TXSTA,SYNC
bsf TXSTA,BRGH
por este otro
BANKSEL TXSTA
movlw b'0000100'
movfw TXSTA
Compilo y el invento funciona... en un primer momento le eché la culpa al baud rate pero luego me di cuenta de que no... vi que si ponia
BANKSEL TXSTA
bcf TXSTA,SYNC
bsf TXSTA,BRGH
NO FUNCIONABA
y sin embargo con
BANKSEL TXSTA
movlw b'0000100'
movfw TXSTA
SI FUNCIONABA....
mmm mmm mmm pensé que me estaba dejando algun bit sin borrar y fuera determinante pero no. SI os fijais en movfw TXSTA está mal escrita... mi intención era poner movWF TXSTA. El efecto en el programa era que no modificaba en ese instante el TXSTA y eso se traducia a la postre en que se dejaba el bit BRGH a 0.
Segun la tabla 10-4 del datasheet del 877a para una configuración 19200 a 20MHZ con BRGH=1 debia ser 64. Y eso era lo que queria configurar pero me equivoqué y dejaba el bit BRGH a 0... Y FUNCIONA.... y deja de funcionar en PROTEUS
que antes con BRGH=1 si funcionaba como se comenta en un post anterior.
Para descartar otros problemas lo he realizado con dos 877a distintos, verificado los valores de TXSTA en el momento de la configuración con el ICD2 en modo debug.
Ahora mi pregunta es... alguien de los presentes tiene algun 877a usando el puerto usart como receptor y le funciona???
Y para descartar que es problema de mi programa lo he hecho tambien con otro que he encontrado en este mismo foro usando el buscador, con identico resultado. Aqui os lo dejo por si alguien quiere comprobarlo (con BRGH=0 y baud rate de uno supuestamente para BRGH=1)
LIST P=16F877A
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF & _DEBUG_ON
INCLUDE <P16F877A.INC>
ERRORLEVEL -302, -207, -205, -203, -305 ;evitar warnings al compilar
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
ORG 00H ;Inicio en el Vector de Reset
goto INICIO ;Va a la primera instruccion del
;programa
;<<<<<<------------------- VECTOR DE INTERRUPCION -------------------->>>>>>>
ORG 04H ;Vector de interrupcion
INTER btfss PIR1,RCIF ;¿Interrupcion por recepcion?
goto VOLVER ;No. Falsa interrupcion
bcf PIR1,RCIF ;Si. Reponer Flag
movf RCREG,W ;Lectura dato recibido
; movwf PORTB ;Visualiza dato recibido
VOLVER retfie ;retorna de la interrupcion.
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO clrf PORTB ;Limpia salidas
clrf PORTC
clrf ADCON1
bsf RCSTA,SPEN ;se activa la USART
bsf STATUS,RP0 ;Cambio al banco 1 ------------------
bcf STATUS,RP1
clrf TRISB ;Puerta B como salida
clrf TRISB ;Puerta B como salida
movlw 80H ;RC7/Rx entrada,
movwf TRISC ;RC6/Tx salida y RC5 Salida.
movlw 00H ;Configuracion USART
movwf TXSTA ;y activacion de transmision
movlw .64 ;19200 baudios
movwf SPBRG
bsf PIE1,RCIE ;Habilitacion interrupcion RX
bcf STATUS,RP0 ;Cambio al banco 0 -----------------
bsf RCSTA,SPEN ;se activa la USART
movlw 90H ;Configuracion de la usart
movwf RCSTA ;para recepcion continua
movlw 0C0H ;Habilitacion para las
movwf INTCON ;interrupciones generales
BUCLE goto BUCLE ;espera aqui hasta que salte la int.
END