TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: inxanu en 26 de Julio de 2012, 10:56:02
-
Hola a todos,
Estoy probando la conexión al pic16f877 con un código que hace eco en el micro y devuelve el carácter que introduzco al hiperterminal de windows. El código es el que escribo a continuación (no es propio, es cogido de alguna web que a su vez lo han cogido de un libro)
;******************************************************************************
processor 16f877
include <p16f877.inc>
__CONFIG 0x3F71
; ------------------------------Código modificado por aztk-------------------------------------
; inicio
org 0x00
goto inicio
org 0x04
goto INTER
; Se transmite via Serie el dato que esta en el registro W
TX_DATO bcf PIR1,TXIF ; Restaura el flag del transmisor
movwf TXREG ; Mueve el byte a transmitir al registro de transmision
bsf STATUS,RP0 ; Bank01
bcf STATUS,RP1
TX_DAT_W btfss TXSTA,TRMT ; ¿Byte transmitido?
goto TX_DAT_W ; No, esperar
bcf STATUS,RP0 ; Si, vuelta a Bank00
return
; Tratamiento de interrupción
INTER btfss PIR1,RCIF ; ¿Interrupción por recepción?
goto VOLVER ; No, falsa interrupción
bcf PIR1,RCIF ; Si, reponer flag
movf RCREG,W ; Lectura del dato recibido
movwf PORTB ; Visualización del dato
call TX_DATO ; Transmisión del dato como eco
VOLVER retfie
; Comienzo del programa principal
inicio clrf PORTB ; Limpiar salidas
clrf PORTC
bsf STATUS,RP0 ; Bank01
bcf STATUS,RP1
clrf TRISB ; PORTB como salida
movlw b'10111111' ; RC7/RX entrada,
movwf TRISC ; RC6/TX salida
movlw b'00100100' ; Configuración USART
movwf TXSTA ; y activación de transmisión
movlw .25 ; 9600 baudios
movwf SPBRG
bsf PIE1,RCIE ; Habilita interrupción en recepción
bcf STATUS,RP0 ; Bank00
movlw b'10010000' ; Configuración del USART para recepción continua
movwf RCSTA ; Puesta en ON
movlw b'11000000' ; Habilitación de las
movwf INTCON ; interrupciones en general
BUCLE nop
goto BUCLE
end
El esquemático esta adjunto a este post, así como el cable que estoy usando para la comunicación con el PC
El problema es que no he conseguido respuesta en la ventana del hiperterminal, es decir, no me deja introducir ningún carácter. Y estoy totalmente perdido, no se si puede ser problema del esquemático, del cable, o del código..... si me ayudáis a descartar cosas os estaré agradecido
-
Hola inxanu
Para que la UART trabaje tenés que setear los bits 6 y 7 del TRISC. Es decir, ambos deben estar configurados como salidas. Lo podés ver en la página 95 de la hoja de datos de este micro.
Espero que sea el único problema. Suerte
-
Tu código está bien, recuerda colocar en la simulación un clock de 4Mhz.
Prueba quitando todo eso y colocándole de frente el terminal virtual, te debe dar el eco, y además según el código lo que escribes debe aparecer en el puerto B.
-
Muchas gracias, ya funciona todo correctamente!
Un saludo.