kevin2458

Kevin Lara - 201110510072 - Microcontroladores - 18/06/2016

Jun 17th, 2016
151
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Kevin Lara - 201110510072 - Microcontroladores - 18/06/2016
  2.  
  3. #define LED_1  LATA.F0
  4. #define LED_2  LATA.F1
  5.  
  6. #define BUTTON_1_2_PRESSED  0
  7. #define BUTTON_1_PRESSED    4
  8. #define BUTTON_2_PRESSED    8
  9.  
  10. #define EVERLOOP  while (1)
  11.  
  12. #define STATE_LOW   0
  13. #define STATE_HIGH  1
  14.  
  15. #define MILLIS_DEFAULT  5750
  16.  
  17. #define DELAY_EVERLOOP  delay_ms(MILLIS_DEFAULT)
  18.  
  19. unsigned int _PortState;
  20.  
  21. unsigned int _Timer1Counter;
  22.  
  23. void initMCU() {
  24.   ANCON0  = ANCON1  = 0;
  25.   TRISA             = 0;
  26.   TRISD             = 12;
  27.   LATA    = LATD    = 0;
  28.   PORTA   = PORTD   = 0;
  29. }
  30.  
  31. void initTimer0() {
  32.   // Time : 100 us
  33.  
  34.   T0CON       = 0x88;
  35.   TMR0H       = 0xFB;
  36.   TMR0L       = 0x50;
  37.   GIE_bit     = 1;
  38.   TMR0IE_bit  = 1;
  39. }
  40.  
  41. void initTimer1() {
  42.   // Time : 10 ms
  43.  
  44.   T1CON       = 0x11;
  45.   TMR1IF_bit  = 0;
  46.   TMR1H       = 0x15;
  47.   TMR1L       = 0xA0;
  48.   TMR1IE_bit  = 1;
  49.   INTCON      = 0xC0;
  50. }
  51.  
  52. void interrupt() {
  53.   if (TMR0IF_bit) {
  54.     int stateLed1 = STATE_LOW;
  55.     int stateLed2 = STATE_LOW;
  56.  
  57.     TMR0IF_bit  = 0;
  58.     TMR0H       = 0xFB;
  59.     TMR0L       = 0x50;
  60.  
  61.     switch (PORTD) {
  62.       case BUTTON_1_2_PRESSED:
  63.         _PortState = 0;
  64.        
  65.         if (stateLed1 == STATE_LOW && LED_1 == STATE_LOW) {
  66.           LED_1 = STATE_HIGH;
  67.         } else if (stateLed1 == STATE_HIGH && LED_1 == STATE_HIGH) {
  68.           LED_1 = STATE_LOW;
  69.         }
  70.        
  71.         if (stateLed2 == STATE_LOW && LED_2 == STATE_LOW) {
  72.           LED_2 = STATE_HIGH;
  73.         } else if (stateLed2 == STATE_HIGH && LED_2 == STATE_HIGH) {
  74.           LED_2 = STATE_LOW;
  75.         }
  76.         break;
  77.  
  78.       case BUTTON_1_PRESSED:
  79.         _PortState = 1;
  80.  
  81.         if (stateLed1 == STATE_LOW && LED_1 == STATE_LOW) {
  82.           LED_1 = STATE_HIGH;
  83.         } else if (stateLed1 == STATE_HIGH && LED_1 == STATE_HIGH) {
  84.           LED_1 = STATE_LOW;
  85.         }
  86.         break;
  87.  
  88.       case BUTTON_2_PRESSED:
  89.         _PortState = 2;
  90.  
  91.         if (stateLed2 == STATE_LOW && LED_2 == STATE_LOW) {
  92.           LED_2 = STATE_HIGH;
  93.         } else if (stateLed2 == STATE_HIGH && LED_2 == STATE_HIGH) {
  94.           LED_2 = STATE_LOW;
  95.         }
  96.         break;
  97.    
  98.       default:
  99.         _PortState = 3;
  100.    
  101.         if (stateLed1 == STATE_LOW && LED_1 == STATE_HIGH) {
  102.           stateLed1 = STATE_HIGH;
  103.         } else if (stateLed1 == STATE_HIGH && LED_1 == STATE_LOW) {
  104.           stateLed1 = STATE_LOW;
  105.         }
  106.  
  107.         if (stateLed2 == STATE_LOW && LED_2 == STATE_HIGH) {
  108.           stateLed2 = STATE_HIGH;
  109.         } else if (stateLed2 == STATE_HIGH && LED_2 == STATE_LOW) {
  110.           stateLed2 = STATE_LOW;
  111.         }
  112.         break;
  113.     }
  114.   } else if (TMR1IF_bit) {
  115.     TMR1IF_bit  = 0;
  116.     TMR1H       = 0x15;
  117.     TMR1L       = 0xA0;
  118.  
  119.     _Timer1Counter++;
  120.  
  121.     if (_Timer1Counter == 100) {
  122.       _Timer1Counter = 0;
  123.  
  124.       if (LED_1 == STATE_LOW) {
  125.         LED_1 = STATE_HIGH;
  126.       } else if (LED_1 == STATE_HIGH) {
  127.         LED_1 = STATE_LOW;
  128.       }
  129.  
  130.       if (LED_2 == STATE_LOW) {
  131.         LED_2 = STATE_HIGH;
  132.       } else if (LED_2 == STATE_HIGH) {
  133.         LED_2 = STATE_LOW;
  134.       }
  135.     }
  136.   }
  137. }
  138.  
  139. void activateOutputs() {
  140.   switch (_PortState) {
  141.     case 1:
  142.       if (LED_1 == STATE_LOW) {
  143.         LED_1 = STATE_HIGH;
  144.       }
  145.       break;
  146.  
  147.     case 2:
  148.       if (LED_2 == STATE_LOW) {
  149.         LED_2 = STATE_HIGH;
  150.       }
  151.       break;
  152.      
  153.     default:
  154.       if (LED_1 == STATE_HIGH) {
  155.         LED_1 = STATE_LOW;
  156.       }
  157.  
  158.       if (LED_2 == STATE_HIGH) {
  159.         LED_2 = STATE_LOW;
  160.       }
  161.       break;
  162.   }
  163. }
  164.  
  165. void main() {
  166.   initMCU();
  167.  
  168.   initTimer0();
  169.   initTimer1();
  170.  
  171.   EVERLOOP {
  172.     DELAY_EVERLOOP;
  173.  
  174.     activateOutputs();
  175.   }
  176. }
RAW Paste Data