Programación Específica > Microcontroladores
Envio De Datos Por El Puerto Serial Pic-pc
Chungungo:
Les Saludo y expongo mi consulta.
Estoy tratando de comunicar por el puerto serie el pc con el Pic 16F877A.
Realicé un programa basado en datos aparecidos en este foro.
El drama está, que recibe bien,pero al transmitir, sólo llegan de un mensaje de 10 caracteres los 4 primeros.
Alguién se maneja con Usart del Pic 16F877A.
Al revisar los registro TXREG no aparece nada; por otra parte, según los libros dicen que para transmitir se debe poner un Literal en el acumulador. Hago la prueba pero no hay nada.
Soy nuevo en este foro y agradecería su ayuda.
Atte. Chungungo
Huguen_aus_Tirol:
Hola! y bienvenido!
A ver si entiendo tu problema...
El PIC recibe bien, pero cuando el micro transmite solo recibes parte del mensaje en el PC, es así? Bueno, al configurar el puerto serie en el PC (seguramente lo haces con VisualBasic) puedes indicar el tamaño del buffer de recepción; seguramente allí está el problema...
Para que el PIC transmita, debes escribir el dato (byte) a transmitir en el registro de transmisión de la USART, es decir en TXREG. El micro se encarga solo de enviar el dato, siempre que el puerto esté bien configurado.
Bueno, no creo haber entendido bien, pero nos aclaras mejor el problema y aquí estamos...
Saludos!
Ah....!!! Hice la consulta en el foro de VisualBasic, pero estan demasiado ocupados como para atender a los principiantes como yo :angry:
Necesito detectar el, o los modem instalados en el PC mediante VisualBasic, de tal manera que me devuelva un string con el nombre, tal como lo vemos cuando lo buscamos en el panel de control.
Si hay alguien aqui tan amable de indicarme los pasos a seguir, le estaré muy agradecido :)
:hola:
Toph:
--- Citar ---Estoy tratando de comunicar por el puerto serie el pc con el Pic 16F877A.
Realicé un programa basado en datos aparecidos en este foro.
El drama está, que recibe bien,pero al transmitir, sólo llegan de un mensaje de 10 caracteres los 4 primeros.
Alguién se maneja con Usart del Pic 16F877A.
--- Fin de la cita ---
Con lo que mencionas no se entiende muy bien tu duda :huh: , en la PC ¿estas usando hyperterminal o has hecho algun programa con el visual basic u otro lenguaje? puede ser aqui el problema de que solo te reciba 10 caracteres.
si puedes postea los programas que tienes, para ayudarte mejor :hola:
Chungungo:
Gracias por responder tan rápido y de forma tan minuciosa. Explique el drama a grandes rasgos para no aburrir al lector.
Efectivamente estoy usando un programa hecho en Visual Basic y la Hyperterminal. En ambos casos, ocurre que no llegan todos los caracteres. Revisaré lo que me mencionan con respecto al buffer de recepción.
Con respecto al registro TXREG, tengo claro que es el que transmite, pero de todos los cambios que hago y simulo en el Pic Simulator Ide, la Simulación funciona sin problemas, pero al grabarlo en el Pic y hacerlo funcionar no llegan todos los caracteres con los programas antes mencionados.
Lo extraño es que para transmitir hay que cargar un literal en el acumulador(W), según información del libro de Angulo, de la forma que aparece en las últimas 3 líneas de este extracto del programa, en el registro TXREG no aparece nada
Programa:
tx clrf portb
bsf status,rp0 ;Cambio al Banco 1
bcf status,rp1 ;Cambio al Banco 1
movlw 0x24 ;Configura USART y Activa
movwf txsta ;Transmisión
movlw .25 ;9600 Baudios
movwf spbrg
bsf txsta,txen ;Habilita la TX
bcf status,rp0 ;Cambio al Banco 0
bcf status,rp1 ;Cambio al Banco 0
bsf rcsta,spen ;Activa USART
movf 0x22,0 ;carga W con valor registro 0x21 a transmitir
movwf portb ;muestra el registro en el Puerto B
movwf txreg ;comienza TX
En estas tres últimas líneas, al simularlo, el registro TXREG, está vacío. En el registro 0x21 se va guardando el valor de los caracteres que se reciben para luego transmitirlo y cargarlo en el TXREG, pero como dije funciona cuando se le carga un literal, como aparece en las tres últimas líneas no funciona.
Hoy por la noche haré cambios nuevos en el programa, les cuento y mando el programa completo si no funciona.
Gracias : Tania_D y Huguen_aus_Tirol :smartass:
Toph:
--- Citar ---Lo extraño es que para transmitir hay que cargar un literal en el acumulador(W), según información del libro de Angulo
--- Fin de la cita ---
No :o , Chungungo para transmitir no es necesario poner un literal en el acumulador (W),lo que hace este ejemplo que posteaste, en esta parte:
--- Código: Text --- movf 0x22,0;carga W con valor registro 0x21 a transmitirmovwf portb;muestra el registro en el Puerto Bmovwf txreg;comienza TX
es pasar el dato que esta en la direccion 0x22 al registro W para mostrarlo por el puerto B y finalmente para enviarlo por el puerto serial, ese dato que se carga en W es el dato que vamos a transmitir no es ningun indicador para que transmita :huh: .
tu pusiste despues
--- Citar ---de la forma que aparece en las últimas 3 líneas de este extracto del programa, en el registro TXREG no aparece nada
--- Fin de la cita ---
No aparece nada porque en la direccion 0x22 no has puesto ningun dato seguramente.
saludos :hola:
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa