USART (PIC-PC) PIC16F87x
4 participantes
Página 1 de 1.
USART (PIC-PC) PIC16F87x
Saludos kamaradas!
Hace tiempo quise usar el puerto serie del PC con un PIC y por más que leia el datasheet o buscaba en internet no podía lograrlo, je toy chavo jajajaja ('chavo' -> 'novato'), hasta que encontre un código de ejemplo en un libro. Quiero compartir ese código, pero no estoy seguro de si es permitido ya que supongo el libro tiene Copyright (buuuuuuuuuu, prefiero el CopyLeft, je), pss lo pondré y si creen que no debería diganme para quitarlo. De todos modos la bibliografía del libro está en los comentarios. Y al código le hice unas muy ligeras modificaciones.
Aunque sea para el PIC16F877 es valido para toda la serie PIC16Fx y tal vez para otras.
Por cierto, abri un nuevo hilo porque concidero que facilita la busqueda.
Buena Vibra!
Hace tiempo quise usar el puerto serie del PC con un PIC y por más que leia el datasheet o buscaba en internet no podía lograrlo, je toy chavo jajajaja ('chavo' -> 'novato'), hasta que encontre un código de ejemplo en un libro. Quiero compartir ese código, pero no estoy seguro de si es permitido ya que supongo el libro tiene Copyright (buuuuuuuuuu, prefiero el CopyLeft, je), pss lo pondré y si creen que no debería diganme para quitarlo. De todos modos la bibliografía del libro está en los comentarios. Y al código le hice unas muy ligeras modificaciones.
- 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
Aunque sea para el PIC16F877 es valido para toda la serie PIC16Fx y tal vez para otras.
Por cierto, abri un nuevo hilo porque concidero que facilita la busqueda.
Buena Vibra!
aztk- Participante Activo
- Mensajes : 52
Fecha de inscripción : 08/06/2009
Edad : 36
Localización : Tenochtitlan
simulación en gpsim
Hey!!!!!!!!!!!!
Que hongo kamaradas!
Hoy les traigo mi simulación con 'gpsim' de este código.
Debo de confesar que se me dificulto algo el poder simular el código e hice varias pruebas consiguiéndolo por fin pero el método es un poco confuso, no sé si serán bugs de gpsim o si no hice las cosas como debiese. Sea como sea les dejo el método:
Pues para la simulación es necesario tener el archivo *.cod del código, este lo pueden obtener cuando ensamblan con PikLab o por medio de la terminal con 'gpasm'. Si es con 'gpasm' una vez que tengan el código en un archivo con extensión *.asm (por ejemplo 'echobook.asm') lo ensamblan con:
Ya tenemos nuestro 'echobook.cod'!!! Ahora creamos un archivo llamado 'env.conf' con lo siguiente:
Y despues de ello un nuevo archivo llamado 'myproject.stc' con lo siguiente:
Y este ultimo lo ejecutamos con gpsim en un terminal:
En la ventana de controles denle al 'run' y luego en la pequeña ventana llamada 'USART' escriban algo y ya verán que tal funciona, jejeje
Nota: Los nombres que elijan para los archivos pueden ser los que gusten, y todos deben encontrarse en el mismo directorio.
Referencias:
Pic-LINUX Ejemplo: simulación de circuito en GPsim (por arcachofo)
Something useful with a PIC: serial line communication with the outside (por Steven)
Que hongo kamaradas!
Hoy les traigo mi simulación con 'gpsim' de este código.
Debo de confesar que se me dificulto algo el poder simular el código e hice varias pruebas consiguiéndolo por fin pero el método es un poco confuso, no sé si serán bugs de gpsim o si no hice las cosas como debiese. Sea como sea les dejo el método:
Pues para la simulación es necesario tener el archivo *.cod del código, este lo pueden obtener cuando ensamblan con PikLab o por medio de la terminal con 'gpasm'. Si es con 'gpasm' una vez que tengan el código en un archivo con extensión *.asm (por ejemplo 'echobook.asm') lo ensamblan con:
- Código:
$ gpasm -p 16f877a echobook.asm
Ya tenemos nuestro 'echobook.cod'!!! Ahora creamos un archivo llamado 'env.conf' con lo siguiente:
- Código:
# Load the gpsim modules library
module library libgpsim_modules.so
# Create an USART called 'U1'
module load usart U1
U1.console=true
U1.xpos=276.0000000000000
U1.ypos=216.0000000000000
# Create LEDs to connect to the PORTB
module load led led0
led0.xpos=300.0000000000000
led0.ypos=180.0000000000000
module load led led1
led1.xpos=300.0000000000000
led1.ypos=156.0000000000000
module load led led2
led2.xpos=300.0000000000000
led2.ypos=132.0000000000000
module load led led3
led3.xpos=300.0000000000000
led3.ypos=108.0000000000000
module load led led4
led4.xpos=300.0000000000000
led4.ypos=84.00000000000000
module load led led5
led5.xpos=300.0000000000000
led5.ypos=60.00000000000000
module load led led6
led6.xpos=300.0000000000000
led6.ypos=36.00000000000000
module load led led7
led7.xpos=300.0000000000000
led7.ypos=12.00000000000000
# Connections:
node n_led0
attach n_led0 pin(portb0) led0.in
node n_led1
attach n_led1 pin(portb1) led1.in
node n_led2
attach n_led2 pin(portb2) led2.in
node n_led3
attach n_led3 pin(portb3) led3.in
node n_led4
attach n_led4 pin(portb4) led4.in
node n_led5
attach n_led5 pin(portb5) led5.in
node n_led6
attach n_led6 pin(portb6) led6.in
node n_led7
attach n_led7 pin(portb7) led7.in
node n_rx
attach n_rx pin(portc7) U1.TXPIN
node n_tx
attach n_tx pin(portc6) U1.RXPIN
# End.
Y despues de ello un nuevo archivo llamado 'myproject.stc' con lo siguiente:
- Código:
# ----------- myproject.stc ---------------
load s echobook.cod
frequency 4000000
load c env.conf
# -----------------------------------------
Y este ultimo lo ejecutamos con gpsim en un terminal:
- Código:
$ gpsim -c myproject.stc
En la ventana de controles denle al 'run' y luego en la pequeña ventana llamada 'USART' escriban algo y ya verán que tal funciona, jejeje
Nota: Los nombres que elijan para los archivos pueden ser los que gusten, y todos deben encontrarse en el mismo directorio.
Referencias:
Pic-LINUX Ejemplo: simulación de circuito en GPsim (por arcachofo)
Something useful with a PIC: serial line communication with the outside (por Steven)
aztk- Participante Activo
- Mensajes : 52
Fecha de inscripción : 08/06/2009
Edad : 36
Localización : Tenochtitlan
Re: USART (PIC-PC) PIC16F87x
Gracias por compartir el ejemplo, espero poder darle una checada en cuanto tenga un poco de tiempo .
Prácticamente no he usado gpsim, viendo cosas como estas creo que debo animarme más .
Prácticamente no he usado gpsim, viendo cosas como estas creo que debo animarme más .
Re: USART (PIC-PC) PIC16F87x
Interesante...
Veo que has usado el módulo USART, lo que no entiendo es como lo "conectas" al exterior... al usar ese módulo te aparece automaticamente la ventanita como si fuera una terminal serie? o como es eso?
La verdad que el Gpsim usado "a pelo" es un poco lioso, pero se pueden hacer cosas interesantes. Cuesta un poco más de trabajo crear los circuitos que con programas puramente gráficos y tiene algún que otro bug, pero bueno... hasta que el Ktechlab no esté desarrollado se pueden hacer cosas.
Por cierto, el Gpsim 0.23 ya salió hace unos meses, creo que hay varios bugs corregidos, quizás te interese instalarlo.
Si haces más cosas en Gpsim estaría muy bien que las postearas, siempre es util tener archivos de circuitos para usarlos tal cual o modificarlos o saber como configurar los módulos y todo eso.
Lo de generar el .cod con gpasm tambien es muy util...
Saludos.
Veo que has usado el módulo USART, lo que no entiendo es como lo "conectas" al exterior... al usar ese módulo te aparece automaticamente la ventanita como si fuera una terminal serie? o como es eso?
La verdad que el Gpsim usado "a pelo" es un poco lioso, pero se pueden hacer cosas interesantes. Cuesta un poco más de trabajo crear los circuitos que con programas puramente gráficos y tiene algún que otro bug, pero bueno... hasta que el Ktechlab no esté desarrollado se pueden hacer cosas.
Por cierto, el Gpsim 0.23 ya salió hace unos meses, creo que hay varios bugs corregidos, quizás te interese instalarlo.
Si haces más cosas en Gpsim estaría muy bien que las postearas, siempre es util tener archivos de circuitos para usarlos tal cual o modificarlos o saber como configurar los módulos y todo eso.
Lo de generar el .cod con gpasm tambien es muy util...
Saludos.
Re: USART (PIC-PC) PIC16F87x
Pues he probado la simulación y a mi me da errores en el archivo env.conf, en estas lineas:
# Connections:
node n_led0
attach n_led0 pin(portb0) led0.in
Me funciona bien si utilizo esta notación para los pines de los puertos:
# Connections:
node n_led0
attach n_led0 portb0 led0.in
Yo estoy usando GPsim 0.23, nosé si será por eso.
# Connections:
node n_led0
attach n_led0 pin(portb0) led0.in
Me funciona bien si utilizo esta notación para los pines de los puertos:
# Connections:
node n_led0
attach n_led0 portb0 led0.in
Yo estoy usando GPsim 0.23, nosé si será por eso.
Re: USART (PIC-PC) PIC16F87x
Hola, que tal!!, me parecio excelente tu aporte!, y por cierto a mi me funciona muy bien, la version que uso de gpsim es la 0.22.0, y si en verdad es muy talachudo trabajar con gpsim, pero veo que esta muy efectivo, ya lo probé, ahora solo es cuestion de estudiarle un poco mas
Pikitin, es posible que sea por el cambio de version el que ten funcione con la modificacion que indicas, ya que yo como mencione anteriormente, es una version mas abajo.
Pikitin, es posible que sea por el cambio de version el que ten funcione con la modificacion que indicas, ya que yo como mencione anteriormente, es una version mas abajo.
maigke- Asiduo del Foro
- Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 47
Localización : Mexico
jeje
Pikitin escribió:...lo que no entiendo es como lo "conectas" al exterior... al usar ese módulo te aparece automaticamente la ventanita como si fuera una terminal serie? o como es eso?...
Oooppss! Je, aunque supongo que Pikitin ya sabe la respuesta pss...
la simulación solo verifica que el código asm funciona correctamente, en ningún momento existe una conexión entre un Pic y el PC, todo es virtual.
Hace tiempo que no me pasaba por estos foros, prometo hacerlo más seguido. Saludos!
Buena Vibra!
aztk- Participante Activo
- Mensajes : 52
Fecha de inscripción : 08/06/2009
Edad : 36
Localización : Tenochtitlan
Temas similares
» SDCC: Driver para ADC PIC16f87x.
» GCBasic: Librería ADC para PIC16F87X
» PC-Pic por usart a 230.400 baud??
» USART (AVR - PC) ATtiny2313 en ASM
» prueva con usart.h y masterI2C.h
» GCBasic: Librería ADC para PIC16F87X
» PC-Pic por usart a 230.400 baud??
» USART (AVR - PC) ATtiny2313 en ASM
» prueva con usart.h y masterI2C.h
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.