Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Kevin Lara - 201110510072 - Microcontroladores - 18/06/2016
- #define LED_1 LATA.F0
- #define LED_2 LATA.F1
- #define BUTTON_1_2_PRESSED 0
- #define BUTTON_1_PRESSED 4
- #define BUTTON_2_PRESSED 8
- #define EVERLOOP while (1)
- #define STATE_LOW 0
- #define STATE_HIGH 1
- #define MILLIS_DEFAULT 5750
- #define DELAY_EVERLOOP delay_ms(MILLIS_DEFAULT)
- unsigned int _PortState;
- unsigned int _Timer1Counter;
- void initMCU() {
- ANCON0 = ANCON1 = 0;
- TRISA = 0;
- TRISD = 12;
- LATA = LATD = 0;
- PORTA = PORTD = 0;
- }
- void initTimer0() {
- // Time : 100 us
- T0CON = 0x88;
- TMR0H = 0xFB;
- TMR0L = 0x50;
- GIE_bit = 1;
- TMR0IE_bit = 1;
- }
- void initTimer1() {
- // Time : 10 ms
- T1CON = 0x11;
- TMR1IF_bit = 0;
- TMR1H = 0x15;
- TMR1L = 0xA0;
- TMR1IE_bit = 1;
- INTCON = 0xC0;
- }
- void interrupt() {
- if (TMR0IF_bit) {
- int stateLed1 = STATE_LOW;
- int stateLed2 = STATE_LOW;
- TMR0IF_bit = 0;
- TMR0H = 0xFB;
- TMR0L = 0x50;
- switch (PORTD) {
- case BUTTON_1_2_PRESSED:
- _PortState = 0;
- if (stateLed1 == STATE_LOW && LED_1 == STATE_LOW) {
- LED_1 = STATE_HIGH;
- } else if (stateLed1 == STATE_HIGH && LED_1 == STATE_HIGH) {
- LED_1 = STATE_LOW;
- }
- if (stateLed2 == STATE_LOW && LED_2 == STATE_LOW) {
- LED_2 = STATE_HIGH;
- } else if (stateLed2 == STATE_HIGH && LED_2 == STATE_HIGH) {
- LED_2 = STATE_LOW;
- }
- break;
- case BUTTON_1_PRESSED:
- _PortState = 1;
- if (stateLed1 == STATE_LOW && LED_1 == STATE_LOW) {
- LED_1 = STATE_HIGH;
- } else if (stateLed1 == STATE_HIGH && LED_1 == STATE_HIGH) {
- LED_1 = STATE_LOW;
- }
- break;
- case BUTTON_2_PRESSED:
- _PortState = 2;
- if (stateLed2 == STATE_LOW && LED_2 == STATE_LOW) {
- LED_2 = STATE_HIGH;
- } else if (stateLed2 == STATE_HIGH && LED_2 == STATE_HIGH) {
- LED_2 = STATE_LOW;
- }
- break;
- default:
- _PortState = 3;
- if (stateLed1 == STATE_LOW && LED_1 == STATE_HIGH) {
- stateLed1 = STATE_HIGH;
- } else if (stateLed1 == STATE_HIGH && LED_1 == STATE_LOW) {
- stateLed1 = STATE_LOW;
- }
- if (stateLed2 == STATE_LOW && LED_2 == STATE_HIGH) {
- stateLed2 = STATE_HIGH;
- } else if (stateLed2 == STATE_HIGH && LED_2 == STATE_LOW) {
- stateLed2 = STATE_LOW;
- }
- break;
- }
- } else if (TMR1IF_bit) {
- TMR1IF_bit = 0;
- TMR1H = 0x15;
- TMR1L = 0xA0;
- _Timer1Counter++;
- if (_Timer1Counter == 100) {
- _Timer1Counter = 0;
- if (LED_1 == STATE_LOW) {
- LED_1 = STATE_HIGH;
- } else if (LED_1 == STATE_HIGH) {
- LED_1 = STATE_LOW;
- }
- if (LED_2 == STATE_LOW) {
- LED_2 = STATE_HIGH;
- } else if (LED_2 == STATE_HIGH) {
- LED_2 = STATE_LOW;
- }
- }
- }
- }
- void activateOutputs() {
- switch (_PortState) {
- case 1:
- if (LED_1 == STATE_LOW) {
- LED_1 = STATE_HIGH;
- }
- break;
- case 2:
- if (LED_2 == STATE_LOW) {
- LED_2 = STATE_HIGH;
- }
- break;
- default:
- if (LED_1 == STATE_HIGH) {
- LED_1 = STATE_LOW;
- }
- if (LED_2 == STATE_HIGH) {
- LED_2 = STATE_LOW;
- }
- break;
- }
- }
- void main() {
- initMCU();
- initTimer0();
- initTimer1();
- EVERLOOP {
- DELAY_EVERLOOP;
- activateOutputs();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement