TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: armador en 17 de Febrero de 2011, 08:12:07
-
¡Hola! ¿Qué tal? Soy nuevo por el foro y supongo que como muchos empiezo tema nuevo con dudas que tengo. :D
Espero que podais ayudarme con esto.
Tengo un proyecto entre manos en el que tengo que usar la USART de un pic. De momento, estoy programándolo con un PIC16F628A, aunque quizás esto cambie, pero bueno, no viene al caso. Estoy utilizando MPLAB para llevarlo a cabo. La cuestión es que no tengo mucha experienza utilizando USART ni nada por el estilo y tengo algunas dudas al respecto.
Cuando quiero simular el programa utilizando el MPLAB SIM, no hay forma de que el programa salga del bucle de interrupción de fin de transmisión:
ESPERAR
banksel PIR1
btfss PIR1,TXIF ; Para comprobar el fin de la transmisión
goto ESPERAR
Después quería preguntar si se puede simular una comunicación USART utilizando Proteus.
Muchas gracias de antemano!
-
Busca en el foro como simular UART con MPLAB, LeonPIC dejo algo al respecto.
Y si, en proteus se puede simular.
Saludos!
-
Busca en el foro como simular UART con MPLAB, LeonPIC dejo algo al respecto.
Y si, en proteus se puede simular.
Saludos!
Muy buenas!!!
Pues he encontrado ese post y bueno, básicamente un código muy parecido a lo que yo ya tenía, pero de todas formas, aun modificando el código para acoplarlo perfectamente cuando simulo con MPLAB SIM, se queda "enganchado" en ese bucle de interrupción...puede que sea cosa del simulador (todavía no tengo el PIC y no puedo programarlo).
De todas formas, me temo que no será cuestión únicamente del simulador porque al intentar implementar el circuito en Proteus tampoco consigo llegar a buen puerto...
-
Ese bit se va a colocar a 1 lógico cuando se reciba el bit stop en la comunicación. Si el módulo está encendido y bien configurado, esto ocurre. Coloca lo demás.
Saludos!
-
Ese bit se va a colocar a 1 lógico cuando se reciba el bit stop en la comunicación. Si el módulo está encendido y bien configurado, esto ocurre. Coloca lo demás.
Saludos!
Bueno, probaré alguna cosa más y si no esperaré a tener el circuito montado y ver qé ocurre entonces.
-
Bueno mas que darte la solucion a tu problema sera una aclaracion :D :D :D, esto puede ayudarte posteriormente
Código:
ESPERAR
banksel PIR1
btfss PIR1,TXIF ; Para comprobar el fin de la transmisión
goto ESPERAR
Al preguntar btfss PIR1,TXIF no estas verificando si la trasmision a finalizado, lo que haces es verificar que el dato(llamemoslo DATA1) que pusiste en TXREG pase al registro de desplazamiento(el cual hace la trasmision del dato) :-/ :-/ :-/, y por ende tu registro TXREG queda vacio para que puedas colocar otro dato(esto no quiere decir que ya se trasmitio el dato que pusiste anteriormente, me refiero al DATA1) :mrgreen: :mrgreen: :mrgreen:
Te dejo una grafica en adjuntos
PD: el grafico es de notas de aplicacion, concretamente la AN774
-
Bueno mas que darte la solucion a tu problema sera una aclaracion :D :D :D, esto puede ayudarte posteriormente
Código:
ESPERAR
banksel PIR1
btfss PIR1,TXIF ; Para comprobar el fin de la transmisión
goto ESPERAR
Al preguntar btfss PIR1,TXIF no estas verificando si la trasmision a finalizado, lo que haces es verificar que el dato(llamemoslo DATA1) que pusiste en TXREG pase al registro de desplazamiento(el cual hace la trasmision del dato) :-/ :-/ :-/, y por ende tu registro TXREG queda vacio para que puedas colocar otro dato(esto no quiere decir que ya se trasmitio el dato que pusiste anteriormente, me refiero al DATA1) :mrgreen: :mrgreen: :mrgreen:
Te dejo una grafica en adjuntos
PD: el grafico es de notas de aplicacion, concretamente la AN774
Entiendo, gracias por la explicación. Más que fin de la transmisión, sería fin de la programación referente a la transmisión, ¿no?
-
Bueno, después de haber dejado un poco abandonado el asunto por diversos motivos he vuelto recientemente a ello y he hecho algunas modificaciones en el código con lo que creo que ya está bien, ahora toca programar y ver si realmente funciona!
Sin embargo, creo que no será así, ya que haciendo la simulación en Proteus, no hay forma de obtener ninguna señal...
-
El problema que tengo con Proteus es que al usar el Virtual Terminal, envía lo que envíe recibo 00, 02, 04, dependiendo que entrada active.