Comunicación PIC16F877A - PC con MAX232

#1
Hola!:
tengo un problema con la comunicación PIC16F877A - PC, la escritura con de la PC al PIC16F877A me funciona a la perfección pero al momento de querer enviar un dato a la PC el programa no m sirve quisiera saber si alguien m podria ayudar para saber en que parte del programa tengo el error o saber q puedo tener mal.

El programa está hecho en .asm
la parte de Transmite es en donde no m hace nada el PIC
Codigo:

list p=16f877a
include "P16F877A.inc"
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON

dato equ 0x20 ;dato a trasmitir
reg1 equ 0x21
reg2 equ 0x22

org 0
goto inicio


inicio
bsf STATUS,RP0 ;Cambio al banco 1
movlw d'255'
movwf TRISB ;Entradas
clrf TRISD ;Salidas
movlw b'10111111'
movwf PORTC ;configura el RC7 como entrada y RC6 como salidas y los demas como salidas
movlw d'25' ;Velocidad de transmision 9600 bits/seg
movwf SPBRG
movlw b'00100100' ;8 bits de transmision
movwf TXSTA ;modo asincrono alta velocidad
bcf STATUS,RP0 ;Cambio al banco 0

movlw b'10010000' ;8 bits de recepcion, puerto serial habilitado
movwf RCSTA
bsf RCSTA,SPEN ;habilitar el puerto serie(USART)
clrf PORTD
bcf PIR1,RCIF ;limpiar la bandera de recepcion
bcf PIR1,TXIF ;limpiar la bandera de transmision

clrf dato ;inicializamos dato

ciclo
btfsc PIR1,RCIF
call Recibe_y_Transmite
goto ciclo

Recibe_y_Transmite
call Recibe
movf dato,w
movwf PORTD
call Transmite
call retardo
return

Transmite
movf PORTB,W
movwf TXREG ;almacenar el dato a transmitir en el registro TXREG
btfss PIR1,TXIF ;si TXIF=1, buffer de transmision vacio (TXREG=0 bits)
goto $-D'1'
bcf PIR1,TXIF ;limpiar la bandera de transmision
bcf PIR1,RCIF ;limpiar la bandera de recepcion

return

Recibe
movf RCREG,w ;se reciben los datos en RCREG
movwf dato
bcf PIR1,RCIF ;limpiar la bandera de recepcion
return
retardo
movlw 0xff
movwf reg2
movwf reg1
decfsz reg1,f
goto $-D'1'
decfsz reg2,f
goto $-D'4'
return

END
 
Arriba