Autor Tema: Problema con 2 uart en pic16f877 con ccs  (Leído 7512 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado xlisus

  • PIC10
  • *
  • Mensajes: 5
Problema con 2 uart en pic16f877 con ccs
« en: 18 de Febrero de 2008, 06:58:26 »
Buenas, necesito tener en un pic16f877 dos puertos configurados como entrada salida y me ocurre un problema que no se como solucionarlo, estoy usando ccs.

Yo declaro

#use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B7,bits=8,stream=PuertoA)
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B5,bits=8,stream=PuertoB)

pues bien, con esta declaracion recibo perfectamente por el puerto B5 y envio perfectamente por el puerto B7, pero no recibo bien por el puerto B7.

Si las invierto, primero el B y luego el A,

#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B5,bits=8,stream=PuertoB)
#use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B7,bits=8,stream=PuertoA)

me pasa todo al reves,no recibo bien por el puerto B5.

A que puede ser debido?

Gracias. Un saludo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #1 en: 18 de Febrero de 2008, 07:09:04 »
Es que no puedes utilizar el mismo pin para enviar y recibir. Para usar dos usarts tendrás que usar dos por dos pines, o sea cuatro (vaya trabalenguas)

Desconectado xlisus

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #2 en: 18 de Febrero de 2008, 07:35:31 »
Pero si yo declaro solamente

#use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B7,bits=8,stream=PuertoA)

Funciona correctamente, envia y recibe sin ningún problema por el mismo ping.

Igual se hace algun lio el compilador.
Porbaré a poner todos los pines distintos a ver que ocurre. Ya os contaré.

Gracias por las respuesta.

Un saludo.


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #3 en: 18 de Febrero de 2008, 07:54:42 »
Perdona, ¿te funciona con un sólo pin?
En ese caso olvida mi comentario anterior; yo habría jurado que eso no funcionaba.

Desconectado xlisus

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #4 en: 18 de Febrero de 2008, 08:08:06 »
Si solo hago una declaración funciona correctamente, sin ningún problema, envio y recibo correctamente.

Es raro, debe ser algún problema del compilador porque dependiendo del orden en el que declare las usart hace una cosa u otra.

Tambien ocurre una cosa, cuando no recibo bien, los cinco primeros bytes que recibo son correctos, pero los siguientes no.

Un saludo.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #5 en: 18 de Febrero de 2008, 08:32:02 »
Anda que curioso, desconocía esa particularidad de que funcionen por el mismo pin :S :S ... Supongo que lógicamente en Half-Duplex. Quizá venga por ahí el problema??? es decir, un problema con la sincronización?

Desconectado xlisus

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #6 en: 18 de Febrero de 2008, 19:47:33 »
Por fín lo he conseguido !!!  :-/ Al final J1M tenia razón, el problema era con la sincronización del bit de inicio.

Ahora no hay ningún problema en declar dos usart con entrada y salida en el mismo ping.

Muchas gracias.

Un saludo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #7 en: 19 de Febrero de 2008, 03:25:49 »
¿Puedes poner cómo lo has resuelto?

Desconectado xlisus

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #8 en: 19 de Febrero de 2008, 07:01:10 »
Buenas, al final el problema no era cosa del compilador sino mia.

No estoy acostumbrado a programar los pic en c, siempre en ensamblador, y claro no hice una pequeña implementación de usart que no funcionaba bien.

Las declaraciones de las usart:

#use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B7,bits=8,stream=PUERTO_A)
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B5,bits=8,stream=PUERTO_B)

para recibir:

while(kbhit(PUERTO_X)); //bucle hasta que no se detecte bit de inicio
 a = getc(PUERTO_X);

para enviar:

fputc(a,PUERTO_X)

El problema es que no utilizaba la función kbhit(), lo hacía de otra forma.

Ahora lo que me surge es una duda, a ver si vosotros que entendeis más del tema me la resolveis, yo para mandar una serie de bytes lo que hago es poner fputc() dentro de un bucle , es correcto, hay alguna forma de enviar por ejemplo 6 byte de una vez sin bucle, es decir, yo hago

for(i=0;i<6;i++){
      fputc(dat,PUERTO_X);
      delay_ms(1);
   }

los byte deben ser enviados en hexadecimal.

Un saludo y muchas gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #9 en: 19 de Febrero de 2008, 07:32:16 »
Siempre puedes utilizar el printf. Te recomiendo que lo mires en la ayuda porque sus posibilidades son enormes y no me siento capaz de explicártelas aquí.

Desconectado jluisruelas

  • PIC10
  • *
  • Mensajes: 35
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #10 en: 10 de Enero de 2015, 14:34:41 »
Buenas, al final el problema no era cosa del compilador sino mia.

No estoy acostumbrado a programar los pic en c, siempre en ensamblador, y claro no hice una pequeña implementación de usart que no funcionaba bien.

Las declaraciones de las usart:

#use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B7,bits=8,stream=PUERTO_A)
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B5,bits=8,stream=PUERTO_B)

para recibir:

while(kbhit(PUERTO_X)); //bucle hasta que no se detecte bit de inicio
 a = getc(PUERTO_X);

para enviar:

fputc(a,PUERTO_X)

El problema es que no utilizaba la función kbhit(), lo hacía de otra forma.

Ahora lo que me surge es una duda, a ver si vosotros que entendeis más del tema me la resolveis, yo para mandar una serie de bytes lo que hago es poner fputc() dentro de un bucle , es correcto, hay alguna forma de enviar por ejemplo 6 byte de una vez sin bucle, es decir, yo hago

for(i=0;i<6;i++){
      fputc(dat,PUERTO_X);
      delay_ms(1);
   }

los byte deben ser enviados en hexadecimal.

Un saludo y muchas gracias.

para enviar varios bytes utiliza la funcion puts(cadena o variable);
saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Problema con 2 uart en pic16f877 con ccs
« Respuesta #11 en: 10 de Enero de 2015, 18:35:14 »
para enviar varios bytes utiliza la funcion puts(cadena o variable);
saludos

No creo que te conteste y si lo hace de seguro que ya lo debe haber solucionado o tirado todo:
Fecha del post: 19 de Febrero de 2008