Electgpl

PC - Checksum

Aug 25th, 2017
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.18 KB | None | 0 0
  1. //Simulador ONLINE
  2. //https://www.onlinegdb.com/online_c_compiler
  3. #include <stdio.h>
  4. #include <stdint.h>
  5. //Seteo de valores de ejemplo, esto proviene de los sensores en la realidad.
  6. uint16_t temp  = 30;
  7. uint16_t hum   = 60;
  8. uint16_t luz   = 180;
  9. //Variable Checksum en el transmisor
  10. uint8_t checksum_tx = 0;
  11. //Variable a alojar valores leídos y checksum en el receptor
  12. uint16_t valor[4];
  13. uint8_t checksum_rx = 0;
  14. //Funcion Principal
  15. int main(){
  16.    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  EN EL TRANSMISOR  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  17.    //Simulamos el programa trnasmisor, calculando el checksum
  18.    //Sumamos todos los valores, y como son variables de 8bit los bit que exceden este byte se pierden
  19.    //Ejemplo: Temp=30, Hum=60, Luz=180: 30+60+180=270, 0001 0000 1110, toma solo 8bit 0000 1110 = 14
  20.    checksum_tx = temp + hum + luz;
  21.    //Simulamos el envió de datos por UART  
  22.    //Se envía decimal 30 60 180 14, se pasa a hexadecimal 0x1E 0x3C 0xB4 0x0E
  23.    printf( "envió.: %02x%02x%02x%02x\n", temp, hum, luz, checksum_tx);
  24.    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  EN EL RECEPTOR  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  25.    //Entraran 4 byte por UART, cada valor que entra lo alojamos en un indice del vector valor
  26.    //quedando así los 4 indices del vector cada uno con cada variable y el último con el checksum
  27.    valor[0] = temp;
  28.    valor[1] = hum;
  29.    valor[2] = luz;
  30.    valor[3] = checksum_tx;
  31.    //Realizamos el calculo construyendo nuevamente la suma que se ha enviado por el transmisor
  32.    //dentro del receptor, sumamos los tres valores temp, hum y luz, a esto le restamos el checksum
  33.    //que ha llegado, si el valor es 0 entonces es correcta la transmisión.
  34.    checksum_rx = valor[0] + valor[1] + valor[2] - valor[3];
  35.    //Si el checksum es 0, entonces mostramos los valores temp, hum y luz.
  36.    //Si el checksum no es 0, entonces el calculo es erróneo y algún valor se perdió o llego mal
  37.    //entonces se muestra el mensaje de "Error en Checksum"
  38.    if(checksum_rx == 0){
  39.       printf( "temp.: %d\n", valor[0] );
  40.       printf( "hum..: %d\n", valor[1] );
  41.       printf( "luz..: %d\n", valor[2] );
  42.    }else{
  43.       printf( "Error en Checksum!!!\n" );
  44.    }
  45.    return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment