computer
Programowanie Mikroprocesory Mikrokontrolery Last.fmProgramowanie Mikroprocesory Mikrokontrolery FacebookTwitter

Valid XHTML 1.0 Transitional

Poprawny CSS!

Programowanie mikrokontrolerów

Struktura programu

Poniżej przedstawiona została podstawowa struktura programu w C++ stosowana w programowaniu mikroprocesorów mikrokontrolerów z opisem poniżej kodu źródłowego:

// sekcja include
#include <avr/io.h>
#include <util/delay.h>
 
// sekcja define
#define F_CPU 8000000UL
#define true 1
#define false 0
 
// sekcja deklaracji zmiennych
unsigned char flaga_1,flaga_2;
int c;
 
// sekcja podprogramów
void zgas(void)
{
	PORTD=0xff;
	flaga_2=false;
}
	 
void zapal (void)
{
	PORTD=0x00;
	flaga_1=false;
}
	 
// sekcja przerwań
ISR(TIMER0_OVF_vect)
{
    c++;
}
 
// sekcja programu głównego
int main(void)
{
	//sekcja startup
	PIND=PIND|0xff;
	DDRD=DDRD&0xff;
	PORTD=PORTD|0xff;
	sei();

	// sekcja programu zapętlonego
	while(1)
	{
	    if (flaga_1)
	    {
	        zapal();
	    }
	    if (flaga_2)
	    {
	        zgas();
	    }
    }
}
 

Powyżej został przedstawiony program migający diodą. Każdy program składa się z kilku podstawowych sekcji takich jak:

Sekcja komentarza (linijki 1,5,10,14, itd.) Sekcja ta nie jest wymaganą sekcją do prawidłowego działania programu jednak warto ją dodać w celu opisania swojego programu dodatkowymi informacjami takimi jak data utworzenia nazwa projektu oraz wersja powstającego oprogramowania gdyż przy większej liczbie projektów może się wkraść zamieszanie i możemy nadpisać nowszą wersje jakiegoś urządzenia starszą i stracić owoce naszej ciężkiej pracy co nie należy do najmilszych doświadczeń.


Sekcja include (linie od 2-3) W sekcji tej dodajemy biblioteki zewnętrzne z których korzystać będzie nasz program. Biblioteki zewnętrzne mogą zawierać gotowe funkcje takie jak np opóźnienie czasowe to jest funkcja _delay_ms(X) (gdzie x jest wartością opóźnienia w ms) zawartą w bibliotece delay.h dostarczonej najczęściej ze środowiskiem programistycznym w jakim pracujemy np. WinAVR. Dzięki bibioteką możemy zaoszczędzić czasu oraz siły przy pewnych często wykorzystywanych powtarzających się funkcjach. Możemy również stworzyć sobie swoje biblioteki z własnymi autorskimi funkcjami. Możemy spotkać również biblioteki od obsługi standardowych protokołów, sprawdzania CRC, obsługi różnych urządzeń jak np wyświetlacze ciekłokrystaliczne które zawierają zestawy funkcji ułatwiających obsługę. Aby dołączyć bibliotekę do programu wpisujemy następującą komendę: #include <ścieżka dostępu z nazwą biblioteki>. np. #include <util/delay.h>


Sekcja define  (linie od 6-8) W sekcji tej możemy sobie zdefiniować pewne przezwania komend lub zmiennych tzn. kompilator w czasie kompilacji będzie zamieniał naszą tymczasową nazwę na pewien zdefiniowany ciąg znaków którym jest np komenda albo jakaś wartość parametru. Konstrukcja komendy jest następująca: #define nasza_nazwa nazwa_która_zostanie_podstawiona_do_kompilacji np. #define true 1. Jest to jedna z najprostrzych definicji dzięki której każde użyte przez nas słowo true zostanie zastąpione przed kompilacją cyfrą 1. Rozpatrzmy teraz trochę bardziej skomplikowaną definicjejaką jest #define cbi(sfr,bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) . W definicji tej dodatkowo występują dwa parametry "sfr" oraz "bit" które wykorzystujemy do przekazania parametrów z naszej definicji do funkcji właściwej. Dzięki tej definicji możemy zastąpić skomplikowany zapis operacji bitowej (_SFR_BYTE(sfr) &= ~_BV(bit)) skróconym zapisem cbi(sfr,bit) wymyślonym przez nas. Przed kompilacją nasza fraza cbi(sfr,bit) zostanie zastąpiona prawidłową operacją bitową (_SFR_BYTE(sfr) &= ~_BV(bit)) i skompilowana.


Sekcja deklaracji zmiennych globalnych ( linie od 11-12) W sekcji tej deklarujemy używane przez nas zmienne w programie. Określamy ich typ oraz nazwę np unsigned char flaga_1,flaga_2;. Zmienne tych samych typów możemy wymieniać oddzielając ich nazwy przecinkami. Zmienne globalne deklarowane w tej sekcji dostępne są w obrębie całego programu tzn. we wszystkich podprogramach, obsłudze przerwań itd. Natomiast zmienne deklarowane lokalnie w podprogramie lub przerwaniu dostępne są tylko w jego obrębie tzn. nie mamy do nich dostępu z innego podprogramu lub programu głównego.


Sekcja podprogramów (linie od 15-25) W sekcji tej zamieszczamy podprogramy do których odwołuje się program główny. Podprogramy tworzone są w celu zwiększenia przejrzystości kodu programu głównego, ułatwiają analizę kodu oraz umożliwiają w pewnym stopniu parametryzację dzięki czemu możemy wykorzystać jeden podprogram w kilku miejscach programu do wykonania określonych funkcji. Więcej o podprogramach w sekcji "PROGRAMOWANIE->PODPROGRAMY"


Sekcja obsługi przerwań (linie od 28-31) W sekcji tej zamieszczamy obsługę przerwań dla poszczególnych elementów procesora. Przerwania opisane zostaną szerzej w sekcji "PROGRAMOWANIE->PRZERWANIA"


Sekcja programu głównego (linie od 34-54) Sekcje programu głównego podzielić możemy na dwie części. W pierwszej części zamieszczamy elementy które mają wykonać się raz przy starcie programu. Po wykonaniu komend startowych program wchodzi w nieskończoną pętlę w której zamieszczony zostanie program właściwy sterujący pracą mikroprocesora mikrokontrolera.

Sekcje programu głównego podzielić możemy na dwa podstawowe elementy:

  • Początek sekcji main który wykonuje się tylko raz po uruchomieniu programu (sekcja startup) gdzie zamieszcza się inicjalizację oraz konfiguruje się wstępnie sposób pracy wykorzystywanych elementów mikrokontrolera.
  • Sekcja while która jest pętlą wykonującą się w sposób ciągły zapętlony. W sekcji tej umieszczamy nasz program główny.

12-Jan-2020 11:24:28 CET
by Pioter




Wszelkie prawa zastrzeżone! Kopiowanie, powielanie i wykorzystywanie zdjęć, treści oraz jej fragmentów bez zgody autora zabronione.
© mikroprocesory.info.pl@gmail.com 2013.