Advertisement
Electgpl

PIC - Transmición 16 bit UART

Nov 18th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.53 KB | None | 0 0
  1. //*********************************************************************************************************
  2. // Programa para enviar 16 estados por UART con CRC
  3. // El enlace se realiza mediante una comunicación ASK OOK UHF sobre UART Invertido a 600bps
  4. //*********************************************************************************************************
  5. #include <16F883.h>                                  //Biblioteca del microcontrolador
  6. #fuses NOMCLR, NOWDT, INTRC_IO                       //Configuración de fuses
  7. #use delay(int=4000000)                              //Configuración del clock interno a 4MHz
  8. #use rs232(baud=600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) //Configuración de UART 600bps 8 N 1
  9. //*********************************************************************************************************
  10. // Función que realiza la lectura de puertos
  11. //*********************************************************************************************************
  12. int8 valor1=0, valor2=0, valor1Ant=0, valor2Ant=0;   //Declaracion de variables de 8bit
  13. int1 cambio=FALSE;                                   //Declaracion de variable boole
  14. int1 leePuertos(void){                               //Declaración de función para enviar datos
  15.    valor1=input_a();                                 //Lectura de puerto A
  16.    delay_ms(50);                                     //Delay de 50ms
  17.    valor2=input_b();                                 //Lectura de puerto B  
  18.    delay_ms(50);                                     //Delay de 50ms
  19.    if(valor1!=valor1Ant || valor2!=valor2Ant)        //Si hay cambio en entrada se actualiza
  20.       cambio=TRUE;                                   //Setea flag a TRUE
  21.    else                                              //Si no hay cambio en la entrada no actualiza
  22.       cambio=FALSE;                                  //Setea flag a FALSE
  23.    valor1Ant=valor1;                                 //Intercambio de valores
  24.    valor2Ant=valor2;                                 //Intercambio de valores
  25.    return(cambio);                                   //Retorno de funcion
  26. }
  27. //*********************************************************************************************************
  28. // Función que realiza el envio de datos por UART
  29. //*********************************************************************************************************
  30. #define HEADER 200                                   //Definición de valor Header para el payload
  31. static char trama[4];                                //Variable donde se aloja el trama
  32. void enivaRF(void){                                  //Declaración de función para enviar datos
  33.    trama[0]=HEADER;                                  //Carga el Header en byte 0 del trama
  34.    trama[3]=trama[1]+trama[2];                       //Realiza suma de los dos datos y lo carga en el byte 3 del trama
  35.    putc(trama[0]);                                   //Envía el byte 0 del trama por UART
  36.    delay_ms(50);                                     //Delay de espera entre bytes enviados por UART
  37.    putc(trama[1]);                                   //Envía el byte 1 del trama por UART
  38.    delay_ms(50);                                     //Delay de espera entre bytes enviados por UART
  39.    putc(trama[2]);                                   //Envía el byte 2 del trama por UART
  40.    delay_ms(50);                                     //Delay de espera entre bytes enviados por UART
  41.    putc(trama[3]);                                   //Envía el byte 3 del trama por UART
  42.    delay_ms(50);                                     //Delay de espera entre bytes enviados por UART
  43.    printf("\r");                                     //Envía caracter de retorno de linea como final de trama
  44. }
  45. //*********************************************************************************************************
  46. // Programa principal, Realiza el envio de datos por UART
  47. //*********************************************************************************************************
  48. void main(){                                         //Función principal
  49.    while(true){                                      //Loop principal repetitivo
  50.       if(leePuertos()){                              //Funcion que lee los puertos para enviar datos
  51.          trama[1]=valor1;                            //Carga el valor 1 en byte 1 del trama
  52.          trama[2]=valor2;                            //Carga el valor 2 en byte 2 del trama
  53.          enivaRF();                                  //Llamado a la función que envía datos
  54.       }
  55.    }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement