Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <p18f1330.h>
- #include <delays.h>
- #include <adc.h>
- #define switch_1 PORTAbits.RA0 /* Define switches */
- #define switch_2 PORTAbits.RA1
- #define switch_3 PORTBbits.RB2
- #define switch_4 PORTBbits.RB3
- #define LED_1 PORTBbits.RB0 /* Define LEDs */
- #define LED_2 PORTBbits.RB1
- #define LED_3 PORTBbits.RB4
- #define LED_4 PORTBbits.RB5
- unsigned char flasherON; /* Patterns */
- unsigned char sequencerON;
- unsigned char chaserON;
- unsigned char emergencyON;
- //* Code for checking interrupts *//
- void check_int(void)
- {
- if(INTCONbits.INT0IF==1) /* If INT0 flag set... */
- {
- INTCON3bits.INT1IF=INTCON3bits.INT2IF=INTCON3bits.INT3IF=0; /* ...Clear INT1-3 flags */
- sequencerON=chaserON=emergencyON=0; /* Turn off sequencer, chaser, and emergency patterns */
- flasherON=1; /* Turn on flasher pattern */
- }
- if(INTCON3bits.INT1IF==1) /* If INT1 flag set... */
- {
- INTCONbits.INT0IF=INTCON3bits.INT2IF=INTCON3bits.INT3IF=0; /* ...Clear INT0,2,3 flags */
- flasherON=chaserON=emergencyON=0; /* Turn off flasher, chaser, and emergency patterns */
- sequencerON=1; /* Turn on sequencer pattern */
- }
- if(INTCON3bits.INT2IF==1) /* If INT2 flag set... */
- {
- INTCONbits.INT0IF=INTCON3bits.INT1IF=INTCON3bits.INT3IF=0; /* ...Clear INT0,1,3 flags */
- flasherON=sequencerON=emergencyON=0; /* Turn off flasher, sequencer, and emergency patterns */
- chaserON=1; /* Turn on chaser pattern */
- }
- if(INTCON3bits.INT3IF==1) /* If INT3 flag set... */
- {
- INTCONbits.INT0IF=INTCON3bits.INT1IF=INTCON3bits.INT2IF=0; /* ...Clear INT0-2 flags */
- flasherON=sequencerON=chaserON=0; /* Turn off flasher, sequencer, and chaser patterns */
- emergencyON=1; /* Turn on emergency pattern */
- }
- else if(INTCONbits.INT0IF==INTCON3bits.INT1IF==INTCON3bits.INT2IF==INTCON3bits.INT3IF==0) /* If all interrupt flags are clear... */
- {
- PORTB=0b00000000; /* ...Set PORTB low */
- }
- }
- //* Main program *//
- void main(void)
- {
- TRISA=0b00000011; /* Set RA0 and RA1 as input, all others output */
- TRISB=0b00001100; /* Set RB2 and RB3 as input, all others output */
- ADCON1=0b00001111; /* Make outputs digital */
- INTCON3bits.INT1IP=1; /* Interrupts 0-3 high priority (INT0 fixed) */
- INTCON3bits.INT2IP=1;
- INTCON2bits.INT3IP=1;
- INTCONbits.INT0IF=INTCON3bits.INT1IF=INTCON3bits.INT2IF=INTCON3bits.INT3IF=0; /* Clear interrupt flags */
- PORTB=0b00000000; /* Set PORTB low */
- flasherON=sequencerON=chaserON=emergencyON=0; /* Turn off patterns */
- while(1)
- {
- while(flasherON==1) /* While flasher should be on... */
- {
- LED_1=1; /* ...Blink LED */
- Delay10KTCYx(10);
- LED_1=0;
- Delay10KTCYx(10);
- check_int(); /* Check for interrupt flags*/
- }
- while(sequencerON==1) /* while sequencer should be on... */
- {
- Delay10KTCYx(20); /* ..."Move" LED left-to-right */
- LED_1=1;
- Delay10KTCYx(5);
- LED_1=0;
- LED_2=1;
- Delay10KTCYx(5);
- LED_2=0;
- LED_3=1;
- Delay10KTCYx(5);
- LED_3=0;
- LED_4=1;
- Delay10KTCYx(5);
- LED_4=0;
- check_int(); /* Check for interrupt flags */
- }
- while(chaserON==1) /* While chaser should be on... */
- {
- Delay10KTCYx(20); /* ..."Move" LED left-to-right-to-left */
- LED_1=1;
- Delay10KTCYx(2);
- LED_1=0;
- LED_2=1;
- Delay10KTCYx(2);
- LED_2=0;
- LED_3=1;
- Delay10KTCYx(2);
- LED_3=0;
- LED_4=1;
- Delay10KTCYx(2);
- LED_4=0;
- LED_3=1;
- Delay10KTCYx(2);
- LED_3=0;
- LED_2=1;
- Delay10KTCYx(2);
- LED_2=0;
- LED_1=1;
- Delay10KTCYx(2);
- LED_1=0;
- Delay10KTCYx(10);
- check_int(); /* Check for interrupt flags */
- }
- while(emergencyON==1) /* While emergency should be on... */
- {
- Delay10KTCYx(20); /* ...Flash outer LEDs twice... */
- LED_1=1;
- LED_4=1;
- Delay10KTCYx(2);
- LED_1=0;
- LED_4=0;
- Delay10KTCYx(2);
- LED_1=1;
- LED_4=1;
- Delay10KTCYx(2);
- LED_1=0;
- LED_4=0;
- Delay10KTCYx(4);
- LED_2=1; /* ...Flash inner LEDs twice... */
- LED_3=1;
- Delay10KTCYx(2);
- LED_2=0;
- LED_3=0;
- Delay10KTCYx(2);
- LED_2=1;
- LED_3=1;
- Delay10KTCYx(2);
- LED_2=0;
- LED_3=0;
- Delay10KTCYx(4);
- check_int(); /* Check for interrupt flags */
- }
- while(flasherON==sequencerON==chaserON==emergencyON==0) /* While no patterns should be on... */
- {
- PORTB=0b00000000; /* ...Set PORTB low */
- check_int(); /* Check for interrupt flags */
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement