Saludos kamaradas!
Quise aprender a usar la comunicación serie en un sistema PIC-PC, buscando por muchas horas en internet y revisando los datasheet de microchip, pero todo fue inútil para mi caso, no encontré nada que me sirviera, a lo mejor porque no sé buscar.
Pero entonces que me meto a la biblioteca de mi escuela y a buscar entre paginas de papel, y lo chido es que encontré justo lo que necesitaba, un código de ejemplo para la transmisión y recepción en el PIC16F87X en ensamblador.
Era para el 16F873 y tenia un errorsillo además de que usaba el perroguardian, pero con unas ligerisimas modificaciones, ya poseía el código para empezar a experimentar.
Disculpen tanto bla bla bla, el objetivo de este tema es compartir el código, espero no tener problemas al haberlo sacado de un libro, pero en el código esta la bibliografía.
El código lo que hace es esperar un dato del PC, cuando lo tiene lo imprime en el PORTB y lo envía de nuevo al PC, hace un eco.
Otra cosa, se que ya hay temas en el foro relacionados con el tema, pero preferí hacer uno nuevo para -según yo- facilitar la búsqueda.
Buena Vibra!
Quise aprender a usar la comunicación serie en un sistema PIC-PC, buscando por muchas horas en internet y revisando los datasheet de microchip, pero todo fue inútil para mi caso, no encontré nada que me sirviera, a lo mejor porque no sé buscar.
Pero entonces que me meto a la biblioteca de mi escuela y a buscar entre paginas de papel, y lo chido es que encontré justo lo que necesitaba, un código de ejemplo para la transmisión y recepción en el PIC16F87X en ensamblador.
Era para el 16F873 y tenia un errorsillo además de que usaba el perroguardian, pero con unas ligerisimas modificaciones, ya poseía el código para empezar a experimentar.
Disculpen tanto bla bla bla, el objetivo de este tema es compartir el código, espero no tener problemas al haberlo sacado de un libro, pero en el código esta la bibliografía.
El código lo que hace es esperar un dato del PC, cuando lo tiene lo imprime en el PORTB y lo envía de nuevo al PC, hace un eco.
Código:
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
; --------Código original en:
;
; MICROCONTROLADORES <<PIC>>
; Diseño práctico de aplicaciones
; SEGUNDA PARTE: PIC 16F87X
; José M. Angulo, Susana Romero, Ignacio Angulo
; Editorial: McGrawHill
Otra cosa, se que ya hay temas en el foro relacionados con el tema, pero preferí hacer uno nuevo para -según yo- facilitar la búsqueda.
Buena Vibra!