Hola a todos.
Ando teniendo problemas con la transmisión del pic 16f877. Cuando cargo el dato a transmitir al registro TXREG, el bit TXIF se debe poner a 0 y cuando terminó de enviar los datos, este bit se coloca a 1 automáticamente. Pues bien, esto no ocurre al enviar los primeros dos datos, y en el tercero sí.

Les muestro la configuración de la usart. En esta rutina, ya arranco en el banco 1.
;************************************************************************************************
;CONFIGURO EL USART: ASINCRONO, 2400 BAUDIOS, 8 BIT DE DATOS, SIN PARIDAD (SE HACE UNA SOLA VEZ Y AL PRINCIPIO DEL PROGRAMA.
;************************************************************************************************
BCF TXSTA,SYNC
BCF STATUS,RP0 ;BANCO 0
BSF RCSTA,SPEN
BSF STATUS,RP0 ;BANCO 1
BCF TXSTA,BRGH ;BAJA VELOCIDAD.
BCF PIE1,TXIE
BCF TXSTA,TX9 ;8 BIT DE DATOS.
MOVLW D'25'
MOVWF SPBRG ;AJUSTAMOS PARA 2400 BAUDIOS.
Como verán, solo faltaba habilitar la transmisión, y lo hago en la siguiente rutina, en la que envío los datos. En la línea 5 y 6, cargo el dato a enviar por la USART y en la línea 7 verifico si se terminó de enviar los datos. Entre la línea 6 y 7, el bit TXIF debería ponerse a o y no lo hace, se coloca en 1. Lo curioso es que recién en la línea 15 lo hace.
Al principio pensé que era problema de tiempo y le puse una demora de 10 milisegundos entre la línea 6 y 7 y no ocurre nada, el bit TXIF se queda en 1. ¿Alguien sabe que puede estar pasando?
TX BCF STATUS,RP1
BSF STATUS,RP0 ;BANCO 1
BSF TXSTA,TXEN ;HABILITAMOS
BCF STATUS,RP0 ;BANCO 0
MOVLW B'10101010'
MOVWF TXREG ;MANDAMOS LA SINCRONIZACIÓN
BTFSS PIR1,TXIF ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
MOVLW B'01010101' ;SI, MANDAMOS LA SEGUNDA SINCRONIZACIÓN
MOVWF TXREG
BTFSS PIR1,TXIF ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
MOVFW temperaturaAL ;SI, RECUPERAMOS LA PARTE ALTA DE LA TEMPERATURA SENSADA.
MOVWF TXREG ;LO TRANSMITIMOS
BTFSS PIR1,TXIF ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS