Advertisement
Guest User

Untitled

a guest
Jul 1st, 2016
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.66 KB | None | 0 0
  1. #include <inttypes.h>
  2. #include <avr/io.h>
  3. #include <avr/interrupt.h>
  4. #include <avr/sleep.h>
  5.  
  6. #define byte unsigned char
  7.  
  8. volatile byte lastPins = 0;
  9.  
  10. #define isPinChanged(pin) ((diff >> pin) & 1)
  11. #define isPinHigh(pin) ((mPins >> pin) & 1)
  12. ISR(INT0_vect) {
  13.    byte mPins = PINB;
  14.    byte diff = mPins ^ lastPins;
  15.  
  16.    if(isPinChanged(2) && isPinHigh(1) && !isPinHigh(2)) {
  17.       PORTB |= 1 << 0;
  18.    }
  19.  
  20.    lastPins = mPins;
  21. }
  22. #undef isPinChanged
  23. #undef isPinHigh
  24.  
  25. int main() {
  26.    DDRB |= (1 << 1) | (1 << 2);
  27.    PORTB &= ~(1 << 2);
  28.    MCUCR |= (1 << 0);
  29.    GIMSK |= (1 << 6);
  30.    asm("sei");
  31.    while(1) {
  32.       asm("nop");
  33.    }
  34.    return 0;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement