Pues el codigo está bien, se ve en los LEDs no lo he comprovado si es el número o no pero si se ve un cambio, para recibir el dato en el PC he tenido que cambiar de sitio la instrucción de enviar y si me llega al hyperterminal.
así ha quedado todo:
;************************************************************
; Programa para mostrar la funcionalidad de USART.
;
; Puerto B conectado a 8 LEDs.
; Cuando el PIC16F876 recive una palabra a traves de USART,
; el valor es mostrado en los LEDs y retransmitido hacia el host.
; 9600 baudios, 1 bit de stop y sin paridad
;
list p=16f876
include <P16f876.INC>
PDel0 EQU 0x22
PDel1 EQU 0x23
PDel2 EQU 0x24
;************************************************************
; Vectores de reset y de interrupción
org 0x00 ; vector de reset
goto Start
org 0x04 ; vector de interrupcion
goto IntVector
;************************************************************
org 0x05
Start
clrf PORTB
clrf PORTC
bsf RCSTA,SPEN ; Se activa la USART
bsf STATUS,5 ; Cambia al banco 1
clrf TRISB ; Configura el puerto B como salidas
movlw b"10011111" ;RC7/Rx entrada,
movwf TRISC ;RC6/Tx salida y RC5 Salida.
movlw .25 ; 9600 baud @4MHz
movwf SPBRG
movlw b"10100100" ; Habilita la transmision
movwf TXSTA ; Asíncrono, alta velocidad, reloj interno
bcf STATUS,5 ; Cambia al banco 0
movlw b"10010000" ;Habilita puerto serie y recepción contínua
movwf RCSTA
bcf PIR1,RCIF ; Buffer de recepción de USART vacío
bsf STATUS,5
bsf PIE1,RCIE ; Habilita la interrupción de transmisión de USART
bcf STATUS,5
movlw b"11000000" ;Habilitacion para las
movwf INTCON ;interrupciones generales y perifericas
;************************************************************
; Main loop
Main
goto Main ;espera aqui hasta que salte la interrupción
;************************************************************
; rutina de interrupción
IntVector
btfss PIR1,RCIF ; Testeamos si se produce una interrupción en USART
; Indica si la transferencia se ha completado
goto OtherInt ; No, se produce otro tipo de interrupción
movlw 06h
andwf RCSTA,W ; Chequeamos los bits FERR y OERR de RCSTA para ver
; si se ha producido algún error durante la recepción
btfss STATUS,Z ; Chequeamos el bit de error de STATUS
goto RcvError ; Error encontrado
movf RCREG,W ; Toma datos entrantes
movwf PORTB ; Muestra el resultado en el puertoB
movwf TXREG ; Transmisión
call DEMORA
clrf PORTB ;Borra el dato en PortB
goto ISREnd
RcvError
bcf RCSTA,CREN ; Deshabilita recepción contínua y borra el error
bsf RCSTA,CREN ; Habilita de nuevo recepción contínua
movlw 0FFh ; Ilumina todos los leds
movwf PORTB
goto ISREnd
OtherInt
goto $
ISREnd
retfie
DEMORA movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 nop ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 nop ; 1 ciclo delay
return ; 2+2 Fin.
end
Si no te funciona comentanos que es lo que te hace a ti, ah!!! si pones el include del PIC No hace falta definir los registros internos, veras que en el codigo lo he borrado y PORTB etc... lo compila igualmente