TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: leydi81 en 12 de Enero de 2005, 12:03:00

Título: manejo de la usart del pic 16f877
Publicado por: leydi81 en 12 de Enero de 2005, 12:03:00
Hola a todos.
Soy nueva en el uso de pics, necesito ayuda sobre el manejo de la usart del pic 16f8777.
estoy diseñando un sistema de alarmas con este pic, utilizo sensores de temperatura, de humedad, de nivel, otros on-off y necesito enviar estos datos al pic para que los lea y los envie de forma serial al pc. Me dijeron que podria enviarlos de forma serial a traves de la usart del pic, pero la verdad no tengo ni idea de como programar la usart para el envio de estos datos, ademas como ya lo habia mensionado unos sensores son analogicos y los otros solo poseen dos estados 1 y 0.

De verdad agradezco toda la ayuda que me puedan brinda lo ante posible.

Estoy trabajando para laprogramacion con MPLAB IDE v 6.


Título: RE: manejo de la usart del pic 16f877
Publicado por: peddrorolo en 13 de Enero de 2005, 01:43:00
Hola leidy81.
Como bien dices se puede usar la usart para transmitir datos via serie y además es muy sencillo. Yo te aconsejo que lo hagas en C pues la rutina de envio es simple, más abajo te la pongo. Los datos analógicos los tendrás que convertir a digital para transmitirlos, y con todos los 1 y 0 de los sensores on/off, puedes formar un dato de 8 bit, pues aunque no te lo he dicho la usart transmite los datos en paquetitos de 8bit.
Un ejemplo seria el siguiente:
#include <16F876.h>
#device *=16
#include "pic16xxx.h"
//////// Fuses: LP,XT,HS,RC,NOWDT,WDT,NOPUT,PUT,PROTECT,PROTECT_5%
//////// Fuses: PROTECT_50%,NOPROTECT,LVP,NOLVP,CPD,NOCPD,WRT,NOWRT,BROWNOUT
//////// Fuses: NOBROWNOUT,DEBUG,NODEBUG
#fuses XT,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, PARITY=N)

void main(void)
{   
   int persona=0;
   int puerta=0;
   while(1)
   {
                                persona++;
                                puerta++;
      printf("Puerta:%2d Persona:%2d
",puerta,persona);   
   }
}

Lo primero como ves se inicializa el puerto con #use rs232.
En la funcion main, incrementas persona y puerta y las transmites al puerto serie de pc, si abres el hiperterminal, podrás ver la transmisión de linea en linea.

Espero haberte ayudado y sino pregunta.

Un saludo Pedro.
Título: RE: manejo de la usart del pic 16f877
Publicado por: leydi81 en 13 de Enero de 2005, 09:53:00
Hola Peddrorolo
Gracias por ayudarme, pero la verdad no te entendi muy bien lo de la rutina, me podrias explicar mas detalladamente.

no se si me puedas enviar esta ayuda a mi correo, pues me queda mas facil revisarlo.

gracias

leydi


Título: RE: manejo de la usart del pic 16f877
Publicado por: peddrorolo en 13 de Enero de 2005, 11:35:00
Hola Leydi81.

Te escribo aqui pues prefiero ponerlo para que todos lo vean y así puede que alguno con la misma duda se beneficie de la explicación, de todas formas, mandame tu dirección de correo y te lo reenvio gustosamente. Ahora vamos a explicar más detalladamente la rutina.

#include <16F876.h>
Con esta instrucción pongo la librería del micro que he usado en este caso un 16F876.

#device *=16
Con esta otra configuro los punteros para 16 bits

#include "pic16xxx.h"
Esta es un fichero donde defino las patas del micro para que los cambios de los bancos sean automáticos.
 
#fuses XT,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
Con esto configuro como va a funcionar el pic, con que cristal, si tiene o no perro guardian etc.

#use delay(clock=4000000)
Le indico el reloj que uso, 4MHz
 
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, PARITY=N)
Configuro el puerto serie, indico que pin transmite, cual recibe, etc.

void main(void)
{
int persona=0;
int puerta=0;
while(1)
{
persona++;
puerta++;
printf("Puerta:%2d Persona:%2d
",puerta,persona);
}
}
El main es la funcion principal, y la última sentencia, es la que transmite al puerto serie las variables puerta y persona, o sea que los valores que contienen esas variables son transmitidos al puerto serie a través de la uart.

Un saludo Pedro.

Título: RE: manejo de la usart del pic 16f877
Publicado por: atlasdelcarinakeel en 14 de Enero de 2005, 07:11:00
Muy buena la explicacion detallada del codigo en C.
Tambien estoy haciendo un proyecto de transmision serial y pensaba hacerlo en C; me imagino que el codigo tambien sirve para la serie Pic18Fxxxx verdad?
Título: RE: manejo de la usart del pic 16f877
Publicado por: peddrorolo en 17 de Enero de 2005, 02:08:00
Hola a todos.
Si que vale el código, cambiando las configuraciones para los 18F

Un saludo Pedro.