Advertisement
elektronek

PCINT demo Atmega328 pro Radek Škrkoň

Sep 5th, 2019
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Nadefinujeme 5 promennych pro 5 tlacitek (vstupu)
  2. byte tlA=0,tlB=0,tlC=0,tlD=0,tlE=0;
  3.  
  4. void setup() {
  5.   // pinMode - default je všechno INPUT
  6.   // Napisu priklad pro PORT B - zapneme mu PULLUP
  7.   pinMode( 8, INPUT_PULLUP);  // Port B0
  8.   pinMode( 9, INPUT_PULLUP);  // Port B1
  9.   pinMode(10, INPUT_PULLUP);  // Port B2
  10.   pinMode(11, INPUT_PULLUP);  // Port B3
  11.   pinMode(12, INPUT_PULLUP);  // Port B4
  12.  
  13.   // Povoleni preruseni PCINT pro PORT B
  14.   PCICR |= (1<<PCIE0);
  15.   // Pokud treba jeste pro dalsi porty tak
  16.   // PCICR |= (1<<PCIE2)|(1<<PCIE1)|(1<<PCIE0);
  17.   // 0-PortB 1-PortC 2-PortD
  18.   // Da se samozrejme i standartni bitovy zapis
  19.   // PCICR = 0b00000111; // coz je stejny ekvivalent zapisu o 2 radky vyse
  20.  
  21.   // Povoleni PCINT na konkretnich pinech
  22.   PCMSK0 |= (1<<PCINT4)|(1<<PCINT3)|(1<<PCINT2)|(1<<PCINT1)|(1<<PCINT0);
  23.   // Pro dalsi porty je to registr PCMSK1 a PCMSK2
  24.   // Da se samozrejme i standartni bitovy zapis
  25.   // PCMSK0 = 0b00011111; // coz je stejny ekvivalent zapisu o 2 radky vyse
  26.  
  27.   // Nakonec globalne povolime preruseni
  28.   sei();
  29. }
  30.  
  31. // Kontrola tlacitek na Portu B
  32. ISR(PCINT0_vect)
  33. {
  34.   if (!(PINB & (1<<PINB0))) tlA = 1;  // Test bitu na vstupu D8
  35.   if (!(PINB & (1<<PINB1))) tlB = 1;  // Test bitu na vstupu D9
  36.   if (!(PINB & (1<<PINB2))) tlC = 1;  // Test bitu na vstupu D10
  37.   if (!(PINB & (1<<PINB3))) tlD = 1;  // Test bitu na vstupu D11
  38.   if (!(PINB & (1<<PINB4))) tlE = 1;  // Test bitu na vstupu D12
  39. }
  40.  
  41. void loop() {
  42.   // A tady vesele muzeme kontrolovat stav promennych a dle potreby je nulovat atd ....
  43.   if (tlA == 1)
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement