Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.42 KB | None | 0 0
  1. #include <p18f1330.h>
  2. #include <delays.h>
  3. #include <adc.h>
  4. #define switch_1 PORTAbits.RA0 /* Define switches */
  5. #define switch_2 PORTAbits.RA1
  6. #define switch_3 PORTBbits.RB2
  7. #define switch_4 PORTBbits.RB3
  8. #define LED_1 PORTBbits.RB0 /* Define LEDs */
  9. #define LED_2 PORTBbits.RB1
  10. #define LED_3 PORTBbits.RB4
  11. #define LED_4 PORTBbits.RB5
  12. unsigned char flasherON; /* Patterns */
  13. unsigned char sequencerON;
  14. unsigned char chaserON;
  15. unsigned char emergencyON;
  16.  
  17. //* Code for checking interrupts *//
  18.  
  19. void check_int(void)
  20. {
  21. if(INTCONbits.INT0IF==1) /* If INT0 flag set... */
  22. {
  23. INTCON3bits.INT1IF=INTCON3bits.INT2IF=INTCON3bits.INT3IF=0; /* ...Clear INT1-3 flags */
  24. sequencerON=chaserON=emergencyON=0; /* Turn off sequencer, chaser, and emergency patterns */
  25. flasherON=1; /* Turn on flasher pattern */
  26. }
  27. if(INTCON3bits.INT1IF==1) /* If INT1 flag set... */
  28. {
  29. INTCONbits.INT0IF=INTCON3bits.INT2IF=INTCON3bits.INT3IF=0; /* ...Clear INT0,2,3 flags */
  30. flasherON=chaserON=emergencyON=0; /* Turn off flasher, chaser, and emergency patterns */
  31. sequencerON=1; /* Turn on sequencer pattern */
  32. }
  33. if(INTCON3bits.INT2IF==1) /* If INT2 flag set... */
  34. {
  35. INTCONbits.INT0IF=INTCON3bits.INT1IF=INTCON3bits.INT3IF=0; /* ...Clear INT0,1,3 flags */
  36. flasherON=sequencerON=emergencyON=0; /* Turn off flasher, sequencer, and emergency patterns */
  37. chaserON=1; /* Turn on chaser pattern */
  38. }
  39. if(INTCON3bits.INT3IF==1) /* If INT3 flag set... */
  40. {
  41. INTCONbits.INT0IF=INTCON3bits.INT1IF=INTCON3bits.INT2IF=0; /* ...Clear INT0-2 flags */
  42. flasherON=sequencerON=chaserON=0; /* Turn off flasher, sequencer, and chaser patterns */
  43. emergencyON=1; /* Turn on emergency pattern */
  44. }
  45. else if(INTCONbits.INT0IF==INTCON3bits.INT1IF==INTCON3bits.INT2IF==INTCON3bits.INT3IF==0) /* If all interrupt flags are clear... */
  46. {
  47. PORTB=0b00000000; /* ...Set PORTB low */
  48. }
  49. }
  50.  
  51. //* Main program *//
  52.  
  53. void main(void)
  54. {
  55. TRISA=0b00000011; /* Set RA0 and RA1 as input, all others output */
  56. TRISB=0b00001100; /* Set RB2 and RB3 as input, all others output */
  57. ADCON1=0b00001111; /* Make outputs digital */
  58. INTCON3bits.INT1IP=1; /* Interrupts 0-3 high priority (INT0 fixed) */
  59. INTCON3bits.INT2IP=1;
  60. INTCON2bits.INT3IP=1;
  61. INTCONbits.INT0IF=INTCON3bits.INT1IF=INTCON3bits.INT2IF=INTCON3bits.INT3IF=0; /* Clear interrupt flags */
  62. PORTB=0b00000000; /* Set PORTB low */
  63. flasherON=sequencerON=chaserON=emergencyON=0; /* Turn off patterns */
  64. while(1)
  65. {
  66. while(flasherON==1) /* While flasher should be on... */
  67. {
  68. LED_1=1; /* ...Blink LED */
  69. Delay10KTCYx(10);
  70. LED_1=0;
  71. Delay10KTCYx(10);
  72. check_int(); /* Check for interrupt flags*/
  73. }
  74. while(sequencerON==1) /* while sequencer should be on... */
  75. {
  76. Delay10KTCYx(20); /* ..."Move" LED left-to-right */
  77. LED_1=1;
  78. Delay10KTCYx(5);
  79. LED_1=0;
  80. LED_2=1;
  81. Delay10KTCYx(5);
  82. LED_2=0;
  83. LED_3=1;
  84. Delay10KTCYx(5);
  85. LED_3=0;
  86. LED_4=1;
  87. Delay10KTCYx(5);
  88. LED_4=0;
  89. check_int(); /* Check for interrupt flags */
  90. }
  91. while(chaserON==1) /* While chaser should be on... */
  92. {
  93. Delay10KTCYx(20); /* ..."Move" LED left-to-right-to-left */
  94. LED_1=1;
  95. Delay10KTCYx(2);
  96. LED_1=0;
  97. LED_2=1;
  98. Delay10KTCYx(2);
  99. LED_2=0;
  100. LED_3=1;
  101. Delay10KTCYx(2);
  102. LED_3=0;
  103. LED_4=1;
  104. Delay10KTCYx(2);
  105. LED_4=0;
  106. LED_3=1;
  107. Delay10KTCYx(2);
  108. LED_3=0;
  109. LED_2=1;
  110. Delay10KTCYx(2);
  111. LED_2=0;
  112. LED_1=1;
  113. Delay10KTCYx(2);
  114. LED_1=0;
  115. Delay10KTCYx(10);
  116. check_int(); /* Check for interrupt flags */
  117. }
  118. while(emergencyON==1) /* While emergency should be on... */
  119. {
  120. Delay10KTCYx(20); /* ...Flash outer LEDs twice... */
  121. LED_1=1;
  122. LED_4=1;
  123. Delay10KTCYx(2);
  124. LED_1=0;
  125. LED_4=0;
  126. Delay10KTCYx(2);
  127. LED_1=1;
  128. LED_4=1;
  129. Delay10KTCYx(2);
  130. LED_1=0;
  131. LED_4=0;
  132. Delay10KTCYx(4);
  133. LED_2=1; /* ...Flash inner LEDs twice... */
  134. LED_3=1;
  135. Delay10KTCYx(2);
  136. LED_2=0;
  137. LED_3=0;
  138. Delay10KTCYx(2);
  139. LED_2=1;
  140. LED_3=1;
  141. Delay10KTCYx(2);
  142. LED_2=0;
  143. LED_3=0;
  144. Delay10KTCYx(4);
  145. check_int(); /* Check for interrupt flags */
  146. }
  147. while(flasherON==sequencerON==chaserON==emergencyON==0) /* While no patterns should be on... */
  148. {
  149. PORTB=0b00000000; /* ...Set PORTB low */
  150. check_int(); /* Check for interrupt flags */
  151. }
  152. }
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement