SHARE
TWEET

Untitled

a guest Dec 9th, 2019 75 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* ;////////////////////////////////////////////////////////////////////////////// ; Laboratory AVR Microcontrollers Part1 ; Program template for lab 21 ; Authors: Mateusz Szczesny, Piotr Vu Tran ; ; Group: 2 ; Section: 5 ; ; Task: Zapzonać się ze środowiskiem Atmel Studio, napisać program w języku C i asemblerze na ; mikrokontroler Atmega 2560 z zegarem 10MHz ; ; Todo: Do portów PA podłączone są przyciski do masy, do portów PB diody świecące ; stan wysoki zaświeca diodę, stan niski gasi ; Należy wyświetlić stan przycisków na diodach z przytrzymaniem świecenia 1 sekunda ; Sekunda odliczana jest za pomocą timera ; ; Version: 1.0 ;////////////////////////////////////////////////////////////////////////////// */ #define F_CPU 10000000UL //10MHz #include <avr/io.h> #include <avr/interrupt.h>
  2. volatile int liczenie = 0; //
  3. ISR(TIMER1_OVF_vect) // obsługa przerwania przepełnienia licznika, //jako że częstotliwość zegara wynosi 10MHz, //a my przepłniamy licznik co 31 250 sygnałów // musimy obsłużyć 5 krotne przepełnienie licznika { if (liczenie < 5) // odmierzanie 1 sekundy { if (0 == liczenie) //zaświecenie diod PORTB = !PINA;     //odczyt wciśniętych przycisków i wyświetlenie na diodach
  4. liczenie++; // zwiększanie naszego licznika
  5. } else if (5 == liczenie) // jeżeli skończyła się 1 sekunda gasimy diody { PORTB = 0xFF; }
  6. }
  7. //-------------------------------------------------------------------int main (void) {
  8. //-------------------------------------------------------------------// Main program code place here // Place here main code
  9. DDRA = 0x00; // Port A jako wejście DDRB = 0xFF;  // Port B jako wyjście PORTB = 0x00;  // gaszenie diod
  10. TCCR1B |= (1<<CS10) | (1<<CS11); //Ustawienie preskalera na 64, liczenie co 64 sygnałów //daje nam 156250 sygnałów na sekundę TIMSK1 |= 1 << TOIE1; // Włączenie przerwań przepełniania licznika TCNT1 |= 34285; // zaczęcie liczenia od 34 285, umożliwi nam zliczenie 31 250 sygnałów sei(); while(1) { if (PINA != 0xFF) { liczenie = 0; // startowanie licznika pozwala na  rozpoczęcie pętli //wyświetlania 1 sekundowego } } //--------------------------------------------------------------------// Program end //--------------------------------------------------------------------
  11. } // -----------------------------------------------------------------
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top