TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: waltermet en 04 de Febrero de 2004, 07:44:00
-
Les comento un pequeño gran problema que tengo tratando de manejar la usart : creo haber hecho todos los pasos como para que funcione según el DS pero no funciona y no me estoy dando cuenta cual es el error. Les paso un pequeño programa de prueba que hice:
include "modedefs.bas"
define osc 4
RCSTA=%10010000
TXSTA=%00000100
PIE1=%00000000
x var byte
ini: if PIR1.5=1 THEN x=RCREG
if x=$A0 then
high portB.5
else
low portB.5
endif
goto ini
Desde ya Muchas Gracias.
Saludos,
Waltermet
-
Que tal Waltermert,
S¿Para usar el USART de forma Asincrona (por lo que veo en tu codigo) tienes en PB PLUS comandos con aplicacion directa, como HRSIN,HSerin, pero si quieres emplear codigos de ensamblador, tienes mal configurado el registro d transmision, ya que no tienes activado el registro de habilitamiento de transmision:
TXSTA=%00000100 (TU CODIGO) <--- ESTO SE LEE ASI:
MODO ASNICRONO,DE 8 BITS, TRANSMISION DESHABILITADA,ASINCRONO,NO SE USA,BRGH EN ALTO,ESTADO DEL REGISTRO TRS LLENO,NOVENO BIT EN CERO(NO USADO).
La forma correcta es habilitando la transmision,:
TXSTA=%00100100 <--- OK!
LA RECEPCION ESTA BIEN HABILITASTE LOS PUERTOS DE LA USART Y UNA RECEPCION CONTINUA. .
Ahora ya puedes recibir y transmitir con ese usart
Otra cosa, tienes deshabiltadas las interrupciones del PIE, por lo tanto no tendras respuesta de las banderas de llenado y vacion de el pin de transmision y recepcion (OJO con eso) veo que stas usando como referencia eso y no tienes activadas las interrupciones no te va avisar jamas ya que las tienes deshabilitadas:
PIE1.5=1 <---- HABIL INT DE RECPTOR
PIE1.4=1 <--- HABIL INT DE TRANS (en lugar de esta puedes usar el estado de llenado del TSR (TXSTA.1) Y ESTE SI LO PUEDES BORRAR TU VIA SOFTWARE, LAS INTERRUPCIONES NO.
Lee a CONCIENCIA el usao de cada estado en interrupciones del DS , para que no tengas estos inconvenientes, o si ya estas usando el PB PLUS o pro usa el comando directo con los defines y declares necesarios para evitar error, ademas creo que te hara falta establecer la velocidad de recepcion o por lo menos no lo veo en tu codigo, para eso usas el comando SPBRG= x
este valor de x en decimal viene en las tablas del Ds del Micro que uses y depende de el estado de BRGH(alto o bajo) y de tu Oscilador en tu pic,
Saludos
-
Lager te paso el programita con el cual al fin y al cabo funciona la RX y TX con USART:
include "modedefs.bas"
define osc 4
SPBRG=%00110100
x var byte
RCSTA=%10010000
TXSTA=%00100100
PIE1=%00000000
If PIR1.5=1 then
x=RCREG
TXREG=x
endif
Con este prog -es de prueba- cada vez que recibís un dato es reenviado por TX. Es verdad, me había olvidado el SPBRG y para el caso de la transmisión faltaba habilitar, tal como bien observaste, el bit TXEN pero en aquel prog solo empleé el TXSTA para setear el bit BRGH porque lo que más me importaba era que recibiera.
Ahora deberé seguir rompiéndome la cabeza para hacer lograr que ande el resto del prog. De paso te comento, estoy haciendo un equipo de desplazamiento lineal sobre un riel en ambas direcciones, con dos velocidades, comandado por un teclado serie. Para ello empleo un motor de CC y para saber la posición del mismo lo hago a través de un encoder -símil al de los mouse-. Y es aquí donde radica el problema ya que debo hacer el prog lo más chico posible para no perder ninguna cuenta del encoder. Por eso decidí utilizar la USART cuando antes empleaba los comandos SERIN2 y SEROUT2.
Muchas Gracias
Saludos,
Waltermet
-
Que onda Waltermert,
me da gusto que ya este funcionando tu codigo, y en eso tienes toda la razon, para cotejar un compilado mucho menor, no hay como el asm, yo en lo personal tambien uso asm para usar las usart de estos bichos, no tiene gran ciencia, siempre y cuando se indique todo sin olvidar los detalles que lo conforman. Esta interesante tu proyecto, haber si cuando lo termines lo subes para que todos los colegas que formamos parte este foro aprendamos cosas nuevas.
Saludos pana!!