TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: jacobo28 en 18 de Diciembre de 2008, 03:53:04
-
hola!!!!, estoy comunicando un pic 16F877 utilizando la usart, kiero sacar los datos del rs232 en paralelo, pero no tengo ni idea de como hacerlo, alguien puede ayudarme???
gracias!!!!
-
Que lenguaje de programacion usas?
Si es en ASM
solo hace movf RCREG,W
movwf PORTX
Si es en C en este caso CCS C
output_X(getc());
-
muchas gracias AKENAFAB, me ha sido de gran ayuda
-
hola, estoy usando C de CCS, y al usar la opción dada, no tuve problemas, pero cuando intenté simularlo en proteus para sacarlo por el puerto b no hace nada, me imagino ke es un problema en el código, el que estoy usando es el siguiente:
#include <16F877a.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=20000000)
#byte portb=0x06
#use fast_io (b)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
void main(void)
{
set_tris_b(0x00);
output_b(getc());
}
si alguien puede ayudarme se lo agradeceria muchisimo, gracias
-
HOla amigo
Primero sino tienes nada no te mostrara nada xD osea 0 , hay que revisar como trabaja el getc();
Despues si digamos tuvieras 1 dato recibido cunado hace el getc(); y lo mandas al portb te lo envia , PERO en el siguiente getc();no tienes nada asi que te enviara nuvamente un 0 , creo que eso e sloq ue te sucede , podrias utilizar kbhit() para saber si tienes un dato en el buffer , y si es asi lo recibes por getc() y lo envias al puerto b, en caso de que no tengas nada en el buffer , kbhit() sera falsa y no atenderias la parte del getc();.
Disculpa si revolvi mucho las cosas xD no soy bueno para explicar y soy noob xD
do {
if(kbhit() ) //Dato recibido?
{
output_b(getc());
}
}while(1);
Un Saludo!
-
hola AKENAFAB, ya intente lo ke me dijiste, pero sigue igual y no se ke pueda ser, de casualidad no tienes algun ejemplo que me puedas proporcionar, xq la desesperación empieza a hacer presa de mi.
gracias otra vez
-
como tu Cristal pasa es de 20 MHz se toma como HS , no como XT .
Un saludo!
Pruebo tu programa y lo subo
Le modifique un poco
#include <16F877a.h>
#fuses HS, NOWDT, NOPROTECT,PUT,NOLVP
#use delay(clock=20000000)
#byte portb=0x06
#use fast_io (b)
#use rs232(UART1,baud=9600,xmit=PIN_C6,rcv=PIN_C7)
void main(void)
{
set_tris_b(0x00);
output_b(0);
do {
if(kbhit() ) //Dato recibido?
{
output_b(getc()); //enviar al puerto b
}
}while(1);
}
Es lo mismo que te puse mas arriba, lo simule y funciona bien.
-
muchas gracias por tu gran ayuda AKENAFAB, la verdad estaba perdido en este tema de la USART del pic.
un saludo