Advertisement
Guest User

Untitled

a guest
May 20th, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.02 KB | None | 0 0
  1. /*
  2. */
  3. #include <xc.h>
  4. #include <stdint.h>
  5. #include <stdio.h>
  6. #include <stdbool.h>
  7. // Variables Global y Constantes********************************************
  8. #define _XTAL_FREQ 4000000
  9. #define CONSTANT1 0xF3 //
  10. #define CONSTANT2 100 //
  11. #define CONSTANT3 900 //
  12. uint16_t var1[4] = {0,0,0,0}; //
  13. uint8_t var2 = 0; //
  14. uint16_t var3 = 0; //
  15. uint8_t var4 = 0; //
  16. uint8_t var5[100]; //
  17. uint8_t var6 = 0; //
  18. uint8_t var7 = 0; //
  19. #pragma config WDTE=OFF //WDT Disabled
  20. /*Prototipos*/
  21. void Function1(unsigned char *texto, unsigned char longitud);
  22. void Setup (void);
  23. //********************** Funciones extras ********************************
  24. void Function1(unsigned char *texto, unsigned char longitud) //
  25.  {
  26.  //el Segundo parámetro podría eliminarse por longitud=sizeof(texto);
  27.  for (unsigned char i = 0; i < longitud; i++)
  28.  var5[i] = *(texto + i); //
  29.  
  30.  var5[longitud] = 0x0A; //
  31.  var5[longitud+1] = 0x0D; //
  32.  var6 = 0; //
  33.  var7 = longitud+1; //
  34.  
  35.  PIE3bits.TXIE = 1; //
  36.  }
  37.  
  38.  
  39.  
  40.  
  41.  
  42. void Setup (void)
  43. {
  44.  //Oscilador interno configurado para
  45.  OSCCON1 = 0x60;
  46.  OSCCON3 = 0x00;
  47.  OSCEN = 0x00;
  48.  OSCFRQ = 0x02; //
  49.  OSCTUNE = 0x00;
  50.  
  51.  /** Puerto A:
  52.  LATA = 0x00;
  53.  TRISA = 0x10;
  54.  ANSELA = 0x10;
  55.  WPUA = 0x00;
  56.  ODCONA = 0x00;
  57.  
  58.  //Puerto C:
  59.  LATC = 0x00;
  60.  TRISC = 0xFE;
  61.  ANSELC = 0xFC;
  62.  WPUC = 0x00;
  63.  ODCONC = 0x00;
  64.  
  65.  // Rx y Tx PPS: Tx en RC0 y Rx en RC1*********************************************
  66.  RC0PPS = 0x10; //RC0->EUSART:TX;
  67.  RXPPSbits.RXPPS=0x11;//RC1->EUSART:RX;
  68.  
  69.  //
  70.  T0CON1 = 0x4C; //
  71.  TMR0H = CONSTANT1; //
  72.  TMR0L = 0x00; //
  73.  PIR0bits.TMR0IF = 0;//
  74.  PIE0bits.TMR0IE = 0;//
  75.  T0CON0 = 0x00; //
  76.  
  77.  //ADC Configuración ****************************************************
  78.  ADCLK = 0x03;
  79.  
  80.  ADCON0 = 0x04;
  81.  
  82.  ADCON2bits.ADMD = 0x0;//
  83.  ADREF = 0x00; //
  84.  ADPCH = 0x04; //
  85.  ADACQ = 0; //
  86.  ADACT = 0x02; //
  87.  ADCON0bits.ADON=1;
  88.  PIR1bits.ADIF = 0; //
  89.  
  90.  //EUSART ***************************************************************
  91.  PIE3bits.RCIE = 0; //
  92.  PIE3bits.TXIE = 0;
  93.  BAUD1CON = 0x08; //
  94.  RC1STA = 0x90; //
  95.  TX1STA = 0x24; //
  96.  //
  97.  SP1BRGL = 0x67; //
  98.  SP1BRGH = 0x00; //
  99. }
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106. void __interrupt() RAIs (void) //Habrá interrupciones por:
  107. {
  108.  unsigned char caracter = 0;
  109.  uint8_t i=0;
  110.  
  111.  // interrupt handler
  112.  if(INTCONbits.PEIE == 1)
  113.  {
  114.  if(PIE3bits.RCIE == 1 && PIR3bits.RCIF == 1) //
  115.  {
  116.  PIE3bits.RCIE == 0; //leemos char y almacenamos en carácter
  117.  if (OERR) // check for Error
  118.  {
  119.  CREN = 0; //Si error -> Reset
  120.  CREN = 1; //Si error -> Reset
  121.  }
  122.  
  123.  while(!RCIF); //Espera a que el buffer de RX esté libre
  124.  
  125.  caracter = RC1REG; //Se recibe el carácter desde buffer
  126.  
  127.  switch (caracter)
  128.  {
  129.  case '1':
  130.  Function1("Modo captura", 12);
  131.  PIR0bits.TMR0IF= 0; //
  132.  PIR1bits.ADIF = 0; //
  133.  PIE1bits.ADIE = 1; //
  134.  T0CON0bits.T0EN= 1; //
  135.  break;
  136.  
  137.  case '2':
  138.  Function1("Modo apagado", 12);
  139.  PIE0bits.TMR0IE=0; //
  140.  T0CON0bits.T0EN=0; //
  141.  break;
  142.  }
  143.  
  144.  PIE3bits.RCIE == 1; //
  145.  }
  146.  
  147.  else if ((PIE3bits.TXIE == 1) && (PIR3bits.TXIF == 1))//
  148.  {
  149.  PIE3bits.TXIE = 0;
  150.  TX1REG = var5[var6]; //
  151.  var6++; //
  152.  
  153.  if (var7 > var6)
  154.  {
  155.  PIE3bits.TXIE = 1;
  156.  }
  157.  
  158.  }
  159. else if (PIE1bits.ADIE == 1 && PIR1bits.ADIF == 1) //
  160.  {
  161.  PIR1bits.ADIF = 0; //
  162.  
  163.  var1[var2] = (ADRESH << 8) + ADRESL;//
  164.  var2++; //
  165.  if (var2>3) //
  166.  var2 = 0; //
  167.  var3 = 0; //
  168.  
  169.  for (int i = 0; i<4; i++)
  170.  var3 += var1[i]; //
  171.  
  172.  var3 = var3 >> 2; //
  173.  } // del else if
  174.  } // del primer if (PEIE)
  175. } // de la función RAI()
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182. /* Main application********************************************************/
  183. void main(void)
  184. {
  185.  Setup(); //
  186.  
  187.  PIE3bits.TXIE = 0; //
  188.  PIE3bits.RCIE = 1; //
  189.  
  190.  INTCONbits.GIE = 1; //
  191.  INTCONbits.PEIE = 1; //
  192.  
  193.  Function1("Configuracion OK", 16); //
  194.  
  195.  while (1)
  196.  {
  197.  if (var3 != 0) //
  198.  {
  199.  if (var3 < CONSTANT2) //
  200.  {
  201.  Function1("Alarma: muy baja", 16);
  202.  LATA=0x01;
  203.  }
  204.  else if (var3 > CONSTANT3) //
  205.  {
  206.  Function1("Alarma: muy alta", 16);
  207.  LATA=0x04;
  208.  }
  209.  else if ((var3<CONSTANT3) && (var3>CONSTANT2)) //
  210.  {
  211.  Function1("En rango", 8);
  212.  LATA=0x02;
  213.  }
  214.  var3 = 0; //
  215.  }
  216.  }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement