Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C
Mikrosterownik Inne nazwy: Microcontroler (z języka angielskiego) Ta nazwa jest powszechnie używana w Polsce. Mikrokomputer jednoukładowy ta nazwa wiele wyjaśnia: mikrosterownik zawierea procesor (rdzeń) pamięć ROM, pamięć RAM i układy wejścia-wyjścia (porty, interfejsy szeregowe, układy czasowo-licznikowe i wiele innych).
Przykładowe zastosowania mikrosterowników Urządzenia RTV i AGD, Urządzenia techniki komputerowej (klawiatura, drukarka, skaner, modem, ...) Zabawki, Urządzenia mobilne (komórki, tablety I...) Automaty (do kawy, ciasteczek, ...) Urządzenia sieciowe (rutery, przełączniki, ...) Sterownik dzwonka w naszej szkole.
Wybrane mikrosterowniki Rodzina Producenci i przykładowe typy MCS-51 Intel 80C51, Atmel AT89C4051 AVR Atmel AT90S2313, Atmel ATMEGA 8 AMR NXP LPC1768
Założenia do kursu programowania Uczestnik zna obsługę systemu operacyjnego Windows i(lub) Linux (korzystanie z systemowego edytora plików tekstowych i wiersza poleceń) Korzystamy wyłącznie z darmowego oprogramowania. Uczymy się na pięćdziesiątcejedynce, ale poznajemy zagadnienia wspólne dla wszystkich mikrosterowników.
Języki programowania
Język maszynowy Adresy słowa rozkazowe To język procesora Program składa się ze słów rozkazowych (liczb). Pisanie programów za pomocą liczb jest bardzo niewygodne Adresy słowa rozkazowe 0000 10 0001 98 0002 02 0003 80 0004 FB 0005 85
Asembler Adresy słowa rozkazowe Etykiety rozkazy argumenty Adresy komórek pamięci zastąpione są etykietami. Słowa rozkazowe są przedstawione za pomocą mnemoników, np. jbc oraz argumentów rozkazów, np. RI,koniec Adresy słowa rozkazowe Etykiety rozkazy argumenty _rs232rcvbyte: jbc RI,koniec sjmp _rs232rcvbyte koniec: mov dpl,SBUF ret
Język C #include <8051.h> char rs232rcvbyte (void) { while (!RI); RI = 0; return SBUF; }
Fragment złożonego programu void WriteFrame_EMAC(unsigned short Data) { *tptr++ = Data; } void CopyToFrame_EMAC(void *Source, unsigned int Size) unsigned short * piSource; unsigned int idx; piSource = Source; Size = (Size + 1) & 0xFFFE; //round Size while (Size > 0) { WriteFrame_EMAC(*piSource++); Size -= 2; idx = LPC_EMAC->TxProduceIndex; if (++idx == NUM_TX_FRAG) idx = 0; LPC_EMAC->TxProduceIndex = idx;
Słowa kluczowe języka C (według norm ANSI C z roku 1989 oraz ISO C z roku 1990) auto Zmienne break Instrukcje sterujące case Instrukcje sterujące char Zmienne const Zmienne continue Instrukcje sterujące default Instrukcje sterujące do Instrukcje sterujące double Zmienne else Instrukcje sterujące enum Typy złożone extern Biblioteki float Zmienne for Instrukcje sterujące goto Instrukcje sterujące if Instrukcje sterujące
Słowa kluczowe języka C (według norm ANSI C z roku 1989 oraz ISO C z roku 1990) int Zmienne long Zmienne register Zmienne return Procedury i funkcje short Zmienne signed Zmienne sizeof Zmienne static Biblioteki, Zmienne struct Typy złożone switch Instrukcje sterujące typedef Typy złożone union Typy złożone unsigned Zmienne void Wskaźniki volatile Zmienne while Instrukcje sterujące
Jaki język jest najlepszy? Zależy do czego. Pisząc duży program można korzystać z kilku języków. Na zajęciach napiszemy programy w C i Asemblerze.
Program źródłowy W języku C (c) Program źródłowy w Asemblerze (a51) Moduł Relokowalny (rel) Moduł Relokowalny (rel) Program (ihx) DSM-51
Na poprzednim slajdzie pokazano proces tworzenia programu składającego się z dwóch modułów: jeden moduł napisany jest w języku Asemblera, drugi – w języku C (nazwy języków zaczynamy wielką literą). Program tłumaczący z Asemblera nazywamy asemblerem, a program tłumaczący z C – kompilatorem języka C. Program łączący poszczególne moduły to konsollidator (linker) Na następnym slajdzie pokazano plik konfiguracyjny dla programu make, który służy do przeprowadzenia procesu asemblacji, kompilacji i konsolidacji
Plik Makefile main.ihx: main.rel dsm.rel sdcc $^ main.rel: main.c sdcc -c $< dsm.rel: dsm.a51 sdas8051 -l -o $< run: main.ihx dsm51run $<
Test Co to jest mikrosterownik? Wymień nazwy co najmniej sześciu języków programowania. Do czego służy kompilator? Do czego służy konsolidator? Co to jest asembler? Co to jest Asembler? Wymień 10 słów kluczowych języka C Wymień funkcje typowego programatora układów scalonych
Dziękuję za uwagę.