Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Podobne dokumenty
Mikrokontrolery AVR ATmega

dokument DOK wersja 1.0

AGH Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Instytut Teleinformatyki

Instytut Teleinformatyki

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

Podstawy techniki mikroprocesorowej

Mikrokontroler ATmega32. Język symboliczny

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Liczniki, rejestry lab. 09 Mikrokontrolery 8051 cz. 1

MIKROKONTROLERY I MIKROPROCESORY

Programator procesorów rodziny AVR AVR-T910

Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

ZL8AVR. Płyta bazowa dla modułów dipavr

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

STM32 Butterfly. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Systemy wbudowane. Wprowadzenie. Struktura. Mikrokontrolery AVR. Wprowadzenie do programowania w C

Opis procedur asemblera AVR

SYSTEMY CZASU RZECZYWISTEGO (SCR)

Instytut Teleinformatyki

MikloBit ul. Cyprysowa 7/ Jaworzno. JTAG + ISP dla AVR. rev

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

Politechnika Białostocka

Organizacja typowego mikroprocesora

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Akademia Górniczo- Hutmicza w Krakowie Katedra Elektroniki WIET

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

2. Architektura mikrokontrolerów PIC16F8x... 13

Zestaw Startowy EvB. Więcej informacji na stronie:

Mikroprocesory i Mikrosterowniki Laboratorium

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Architektura komputerów. Asembler procesorów rodziny x86

Sterownik Spid Pant 8 i Ant 8. Podręcznik użytkowania

Architektura komputerów

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

Instrukcja obsługi programatora AVR Prog USB v2

Techniki mikroprocesorowe i systemy wbudowane

Struktura i działanie jednostki centralnej

ZL2AVR. Zestaw uruchomieniowy z mikrokontrolerem ATmega8

Uniwersalny zestaw uruchomieniowy ZL4PIC

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Kod produktu: MP01611

Sterowanie multipleksowe 4-cyfrowego wyświetlacza siedmiosegmentowego w oparciu o system przerwao mikrokontrolera ATmega16 w języku Asembler

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

interfejs szeregowy wyświetlaczy do systemów PLC

Architektura systemów komputerowych Laboratorium 13 Symulator SMS32 Operacje na bitach

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Instrukcja obsługi programatora AVR Prog USB v2

TECHNIKA MIKROPROCESOROWA II

Wydział Mechaniczny. Instrukcja do zajęć laboratoryjnych. Numer ćwiczenia: 4. Laboratorium z przedmiotu: Technika cyfrowa i mikroprocesorowa

Laboratorium 1: Wprowadzenie do środowiska programowego. oraz podstawowe operacje na rejestrach i komórkach pamięci

ZL9AVR. Płyta bazowa dla modułów ZL7AVR (ATmega128) i ZL1ETH (RTL8019)

MultiTool instrukcja użytkownika 2010 SFAR

1. Cel ćwiczenia. 2. Podłączenia urządzeń zewnętrznych w sterowniku VersaMax Micro

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

Programowanie w językach asemblera i C

Instrukcja obsługi debugera JTAG-AVR USB v2

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Instrukcja obsługi programatora AVR Prog USB v2

IIPW_SML3_680 (Z80) przewodnik do ćwiczeń laboratoryjnych

Technika mikroprocesorowa I Wykład 2

START: ; start programu od adresu 0100H ; zerowanie komórek od 01H do 07FH ( 1 dec dec)

INSTRUKCJA OBSŁUGI PRZYSTAWKI PEN-01 DO PENDRIVE A

AVR DRAGON. INSTRUKCJA OBSŁUGI (wersja 1.0)

Opis układów wykorzystanych w aplikacji

Przemysłowy odtwarzacz plików MP3

Kurs Podstawowy S7. Spis treści. Dzień 1

Kod produktu: MP01611-ZK

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Rys. 1. Schemat ideowy karty przekaźników. AVT 5250 Karta przekaźników z interfejsem Ethernet

Instrukcja obsługi programatora AVR Prog USB v2

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja. do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1.

Instrukcja do oprogramowania ENAP DEC-1

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

Programator ZL2PRG jest uniwersalnym programatorem ISP dla mikrokontrolerów, o budowie zbliżonej do STK200/300 (produkowany przez firmę Kanda).

Komunikacja w mikrokontrolerach Laboratorium

BF30 OCDLINK/USBASP ARM-JTAG/AVR-ISP Programmer-debugger Instrukcja obsługi

1. Operacje logiczne A B A OR B

Systemy uruchomieniowe

Wstęp Architektura... 13

TWRS-21 TABLICOWY WYŚWIETLACZ CYFROWY DOKUMENTACJA TECHNICZNO-RUCHOWA. Wrocław, listopad 1999 r.

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej.

Mikrokontrolery AVR Wprowadzenie

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

LITEcomp. Zestaw uruchomieniowy z mikrokontrolerem ST7FLITE19

ZL19PRG. Programator USB dla układów PLD firmy Altera

Mikrokontroler ATmega32. Tryby adresowania Rejestry funkcyjne

DOKUMENTACJA PROJEKTU

KAmduino UNO. Płytka rozwojowa z mikrokontrolerem ATmega328P, kompatybilna z Arduino UNO

WIZUALIZACJA DANYCH SENSORYCZNYCH Sprawozdanie z wykonanego projektu. Jakub Stanisz

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

MOBOT RoboSnake. Moduł wieloczłonowego robota

LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2

Programowanie Mikrokontrolerów

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Programowanie mikrokontrolerów AVR z rodziny ATmega.

ZL4PIC uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC (v.1.0) Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

Transkrypt:

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki Technika mikroprocesorowa Ćwiczenie 4 Operacje logiczne Autor: Paweł Russek Tłumaczenie: Mariusz Sokołowski http://www.fpga.agh.edu.pl/upt wersja: 26.04.2016r. 1/14

1. Cel Głównymi celami niniejszego ćwiczenia jest: zapoznanie się z trybem adresacji pośredniej, poznanie wybranych instrukcji, takich jak: wykonujących operacje na bitach, wykonujących podstawowe operacje logiczne, wykonujących operacje przesuwania, poznanie algorytmu sumowania liczb bez znaku. W/w tematy będą przedstawione na przykładzie programowania wyświetlacza LED modułu ZL3AVR. Do testowania wszystkich programów będzie wykorzystywany sprzętowy system uruchomieniowy. 2. Wymagania wstępne Zaliczone ćwiczenia nr 1, 2 i 3. 3. Wbudowany symulator/debbuger W przypadku większości aplikacji, do przeprowadzenia efektywnego procesu uruchamiania testowanego programu niezbędny jest systemowy symulator/debbuger.programowy symulator może nie być na tyle wydajny, aby poradzić sobie z bardziej rozbudowanymi projektami. Poza tym, symulator takiego rodzaju, nie odzwierciedla prawdziwych reakcji sprzętu na działanie programu. Wobec powyższego, w toku niniejszych ćwiczeń, będzie wykorzystywany sprzętowy system uruchomieniowy (ang. debbuger), celem łatwiejszego przeprowadzenia procesu testowania, powstałych w trakcje zajęć, programów. Zaletą takiego systemu jest to, że instrukcje uruchamianego programu są wykonywane przez fizyczny mikrokontroler, pod nadzorem systemu nadrzędnego, pracującego np. na komputerze klasy PC, dając w rezultacie wrażenie wykonywania wszystkiego na komputerze. Sprzętowy debbuger pozwala na: pracę krokową (instrukcja po instrukcji), zakładanie pułapek, obserwowanie stanu zmiennych, rejestrów, portów i pamięci, itd. Na przykład, gdy instrukcja w programie odczytuje stan portu A, to na ekranie komputera wyświetla się faktyczny stan tego portu. Jeżeli instrukcja zapisuje wartość do portu A, to stan ten jest od razu widoczny na fizycznych końcówkach mikrokontrolera. Dzisiejsze mikrokontrolery oferują złącze JTAG do implementacji sprzętowego debbuger'a. Z reguły potrzebny jest specjalny układ do realizacji debugger'a w oparciu o złącze JTAG. My skorzystamy z modułu AVR Dragon, który wraz z oprogramowaniem Atmel Studio, tworzy kompletny system uruchomieniowy, pozwalający równocześnie programować mikrokontrolery AVR. 3.1. Podłączanie modułu AVR Dragon Moduł AVR Dragon ma możliwość współpracowania z portem JTAG lub ISP mikrokontrolera AVR. W naszym przypadku wykorzystamy złącze JTAG, celem zrealizowania sprzętowego 2/14

debbuger'a. Aby tego dokonać, należy wykonać następujące czynności: 1. Podłączyć port JTAG modułu AVR Dragon do złącza JTAG płytki ZL3AVR (JP21). Zwróć szczególną uwagę na pozycję pinu nr 1 (rys. 1). Pin 1 Pin 1 UWAGA! Rys. 1. Podłączanie modułu AVR Dragon do płytki ZL3AVR. Należy używać kabla o długości około 20cm. Dłuższy kabel może zaburzyć poprawną pracę układów, ze względu na szkodliwy wpływ na zależności czasowe sygnałów. 2. Podłączyć moduł AVR Dragon do portu USB komputera. Jeżeli czynność ta jest przeprowadzana pierwszy raz, zgłosi się okno instalatora sprzętu systemu Windows. Aby zainstalować odpowiednie sterowniki, należy posiadać uprawnienia administratora w systemie komputera. Wszelkie problemy należy zgłaszać prowadzącemu zajęcia. 3. W Menedżerze Urządzeń należy sprawdzić poprawność instalacji modułu (rys. 2). Rys. 2 4. Uruchomić program AVR Simulator. 3/14

Rys. 3 5. W wyświetlonym oknie narzędziowym wybrać AVR Dragon w polu 'Selected debugger/programmer' i interfejs JTAG interface w polu 'Interface' rys. 3 i 4. Rys. 4 6. Podłączyć zasilanie do modułu ZL3AVR. Wybrać jedną z komend debugger'a (rys. 5). Rys. 5 Interfejs debugger'a pozwala, podobnie jak programowy symulator, wybierać funkcje takie, jak: uruchom (ang. 'run'), wstrzymaj (ang. 'pause'), zatrzymaj (ang. 'stop), praca krokowa (ang. 'step'), załóż pułapki (ang. 'breakpoints'). Rożnica jest jednak taka, że efekty pracy symulatora widać tylko na ekranie komputera, a efekty pracy debuggr'a fizycznie na peryferiach modułu ZL3AVR. 4/14

4. Nowa dyrektywa assembler'a Dyrektywa definicji stałych bajtowych DB Dyrektywa ta rezerwuje lokacje w pamięci programu lub pamięci EEPROM. Żeby mieć możliwość odwołania się do danej lokacji, dyrektywa DB powinna być poprzedzona etykietą, pozwalającą ustalić adres początku zarezerwowanej przestrzeni. Po dyrektywie DB zamieszcza się listę danych 8-bitowych, rozdzielonych przecinkami. Lista musi zawierać przynajmniej jedną daną z zakresu 0 255 lub -128 127 w przypadku liczb ze znakiem (w pamięci zostaje umieszczona liczba w kodzie U2). Jeżeli lista zawiera więcej niż jedną liczbę, każde dwie dane 8-bitowe zostaną upakowane w słowo 16-bitowe w pamięci programu. W przypadku nieparzystej ilości, ostania dana zostanie dopełniona zerem, aby stworzyć 16- bitowe słowo nawet, jeśli następną instrukcją jest dyrektywa DB. Składnia:.xSEG ;.CSEG pamięć programu,.eseg pamięć EEPROM etykieta:.db lista_danych_8-bitowych Przykład:.include"m32def.inc".org 0x00 rjmp prog_start ;dyrektywa org nie jest konieczna ;skok do programu głównego.org 0x32 ;adres początku listy danych dyrektywy DB prime:.db 2, 3, 5, 7, 11, 13, 17, 19, 23.org 0x100 ;stworzenie listy dziewięciu liczb pierwszych ;w przestrzeni pamięci programu ;adres początku programu prog_start: ldi r30, low(2*prime) ;mnożenie przez dwa, celem uzyskania adresu ldi r31, high(2*prime)... ;w przestrzeni bajtowej Zawartość pamięci programu od adresu 0x32 pokazuje tabela tab. 1. Adresacja 16-bitowa 0x00 0x01 0x32 Adresacja 8-bitowa 0x00 0x01 0x02 0x03 0xff Pamięć programu 0xc0 rjmp prog_start niezdefiniowane Komentarz 0x64 0x02 Zawartość listy dyrektywy DB 0x65 0x03 0x33 0x66 0x05 0x67 0x07 5/14

0x34 0x35 0x36 0x68 0x69 0x6a 0x6b 0x6c 0x0b 0x0d 0x11 0x13 0x17 0x100 0x200???? 0x6d 0x00 Dana uzupełniona wartością 00 0x201???? 0x101 0x202????... 0x203???? Tab. 1 prog_start: ldi r30, low(2*prime) ldi r31, high(2*prime) Zauważ, że dyrektywa.org używa adresacji 16-bitowej (dwa kolejne bajty). Natomiast etykieta prime jest zastąpiona wartością odpowiednią od adresacji 8-bitowej (bajtowej) mnożenie przez 2. Dlatego wartości z listy DB są zamieszczone od adresu 0x64, podczas gdy dyrektywa.org wskazuje adres 0x32. Ćwiczenie 4.1 Zweryfikuj zawartość tabeli tab. 1 używając symulatora. Wypełnij pola, zawierające????, poprawnymi wartościami. 5. Adresacja pośrednia W trybie pośredniej adresacji, do generacji adresu danej lokacji w pamięci, jest wykorzystywana zawartość rejestru. W rodzinie AVR, do w/w funkcji, są przeznaczone trzy 16-bitowe rejestry X, Y i Z. Pozwalają one na zaadresowanie całej przestrzeni adresowej procesora, czyli 65 536-iu bajtów (rys. 6). Rys. 6 6/14

Każdy z rejestrów jest tworzony z zestawu dwóch, specyficznych rejestrów ogólnego przeznaczenia. Na przykład rejestr X składa się z pary rejestrów R26 i R27. Xhigh Xlow rejestr X 15 0 R27 Yhigh R26 Ylow rejestr Y 15 0 R29 Zhigh R28 Zlow rejestr Z 15 0 R31 R30 Rejestry X, Y i Z mogą być używane jako wskaźniki, wykorzystywane np. przez instrukcje ld i lpm. 5.1. Instrukcja ld Instrukcja ld ładuje jeden bajt z pamięci danych do rejestru Rn. Adres bajtu jest zawarty w rejestrze wskaźnikowym X, Y lub Z (16-bitowym), którego zasięg dotyczy bieżącego segmentu pamięci danych o rozmiarze 64KB. Po wykonaniu transferu, rejestr wskaźnikowy może zostać w stanie niezmienionym lub jego wartość może być automatycznie zwiększona o jeden. Trzecią możliwością jest automatyczne zmniejszenie zawartości rejestru wskaźnikowego o jeden, przed wykonaniem operacji transferu. Właściwości te można wykorzystać m.in. do operacji na łańcuchach i tabelach. ld Rn, X ;0 n 31 ld Rn, X+ ;0 n 31 ld Rn, -X ;0 n 31 5.2. Instrukcja lpm ld Rn, Y ;0 n 31 ld Rn, Y+ ;0 n 31 ld Rn, -Y ;0 n 31 ld Rn, Z ;0 n 31 ld Rn, Z+ ;0 n 31 ld Rn, -Z ;0 n 31 Instrukcja lpm (Load Program Memory) ładuje jeden bajt z pamięci programu do rejestru Rn. Adres bajtu jest zawarty w rejestrze wskaźnikowym Z. Instrukcja ta pozwala na efektywne wykorzystanie miejsca w pamięci, przy operowaniu na stałych bajtowych, mimo że pamięć programu ma organizację 16-bitową. Zapewnia to fakt, że rejestr Z zawiera adres bajtu a nie słowa 16-bitowego. Po wykonaniu transferu, rejestr Z może zostać w stanie niezmienionym lub jego wartość może być automatycznie zwiększona o jeden. lpm ;domyślnie R0 lpm Rn, Z ;0 n 31 lpm Rn, Z+ ;0 n 31 Z Z + 1 7/14

Przykład:.include"m32def.inc".org 0x00 rjmp prog_start ;dyrektywa org nie jest konieczna ;skok do programu głównego.org 0x32 ;adres początku listy danych dyrektywy DB prime:.db 2, 3, 5, 7, 11, 13, 17, 19, 23, 29.org 0x100 ;stworzenie listy dziesięciu liczb pierwszych ;w przestrzeni pamięci programu ;adres początku programu prog_start: ldi zl, low(2*prime) ;mnożenie przez dwa, celem uzyskania adresu UWAGA! ldi zh, high(2*prime) lpm r16, z out porta, r16 ;w przestrzeni bajtowej Instrukcja ld operuje w przestrzeni adresowej pamięci danych, natomiast instrukcja lpm w przestrzeni adresowej pamięci programu. Instrukcją o odwrotnym działaniu w stosunku do ld jest instrukcja st (Store), która zapisuje daną z rejestru Rn do pamięci danych, adresowanej za pomocą rejestrów X, Y lub Z. Pamięć programu może być zapisywana za pomocą instrukcji spm (Store Program Memory). Należy jedna pamiętać, że jest to pamięć typu Flash, która wymaga odpowiednich procedur kasowania stronicowego. Alternatywą dla instrukcji ld jest instrukcja lds, wykorzystująca tryb adresacji bezpośredniej, gdzie adres jest zawarty bezpośrednio za kodem instrukcji. Przykład: lds r2,$ff00 ;ładuje rejestr R2 zawartością komórki pamięci danych o adresie $FF00 Instrukcji tej używa się w przypadku, gdy adres jest typu statycznego, nie modyfikowany, jak np. w pętlach. Ćwiczenie 4.2 Napisz program, który w sposób ciągły będzie wyświetlał dziesięć kolejnych liczb pierwszych na diodach LED modułu ZL3AVR. Zastosuj podprogram Opóźnienie o długości ok. 1s, pozwalający na obserwację zmieniających się liczb. Zapisz program pod nazwą 'PrimesLEDs.asm'. 6. Podstawowe operacje logiczne Instrukcje operacji logicznych są najbardziej powszechnie używanymi instrukcjami. Realizują podstawowe działania Boole'a takie, jak: I (AND), LUB (OR), ALBO (XOR) i NIE (NOT) negacja. 8/14

6.1. Instrukcje and i andi funkcja logiczna AND Instrukcja and wykonuje operację funkcji logicznej AND pomiędzy rejestrami Rd i Rr (każdy bit osobno) - wynik zachowuje w rejestrze Rd. and Rd, Rr ;0 d 31, 0 r 31 Instrukcja andi wykonuje operację funkcji logicznej AND pomiędzy rejestrem Rd i daną natychmiastową, zawartą w kodzie instrukcji - wynik zachowuje w rejestrze Rd. Funkcja logiczna AND Wejście Wyjście X Y X AND Y 0 0 0 0 1 0 1 0 0 1 1 1 andi Rd, K 16 d 31, 0 K 255 Powyższe instrukcje mają wpływ na wartość flagi Z w rejestrze stanu (Z=1, jeśli wynik jest równy 0). Są najczęściej wykorzystywane do ustawiania wartości 0 na wybranych bitach operandu. Przykład: andi r17,$0f ; ustawia bity starszej połowy rejestru R17 na 0 andi r18,$10 ; wyizolowanie bitu nr 4 w rejestrze R18 andi r19,$aa ; zeruje wszystkie parzyste bity rejestru R19 and r2,r3 ; funkcja AND pomiędzy rejestrami R2 i R3 wynik w R2 ldi r16,1 ; ustawienie maski 0000 0001 w rejestrze R16 and r2,r16 ; wyizolowanie bitu nr 0 w rejestrze R2 6.2. Instrukcje or i ori funkcja logiczna OR Instrukcja or wykonuje operację funkcji logicznej OR pomiędzy rejestrami Rd i Rr (każdy bit osobno) - wynik zachowuje w rejestrze Rd. or Rd,Rr ;0 d 31, 0 r 31 Instrukcja ori wykonuje operację funkcji logicznej OR pomiędzy rejestrem Rd i daną natychmiastową, zawartą w kodzie instrukcji - wynik zachowuje w rejestrze Rd. Funkcja logiczna OR Wejście Wyjście X Y X OR Y 0 0 0 0 1 1 1 0 1 1 1 1 ori Rd,K ;16 d 31, 0 K 255 Powyższe instrukcje mają wpływ na wartość flagi Z w rejestrze stanu (Z=1, jeśli wynik jest równy 0). Są najczęściej wykorzystywane do ustawiania wartości 1 na wybranych bitach operandu. Przykład: ldi r20, 0x40 ; r20 = 0x04 ori r20,0x30 ;teraz r20 = 0x34 9/14

6.3. Instrukcja com funkcja logiczna NOT Instrukcja com wykonuje operację funkcji logicznej NOT na zawartości rejestru Rd (negacja każdego bitu osobno). com Rd ;0 d 31 Funkcja logiczna NOT Wejście Wyjście X NOT X 0 1 1 0 Powyższa instrukcja ma wpływ na wartość flagi Z w rejestrze stanu (Z=1, jeśli wynik jest równy 0). Przykład: com r4 ;neguje zawartość rejestru R4 breq zero ;skok, jeśli wynik równy 0 7. Dodatkowe informacje o module ZL2AVR 7.1. Wyświetlacz siedmiosegmentowy LED Na rysunku rys. 7 przedstawiono topologię klasycznego wyświetlacza siedmiosegmentowego. Odpowiednia kombinacja wyboru segmentów pozwala na wyświetlanie cyfr, niektórych liter (potrzebnych np. do reprezentacji liczby szesnastkowej) oraz znaków definiowanych przez użytkownika. Każdy segment jest oznaczony literą, od a do g, a ósmy, opcjonalny, segment pozwala na wyświetlanie liczb z ułamkiem dziesiętnym (kropka) lub na przykład czasu (dwukropek). Rys. 7 Tabela tab. 2 zawiera listę stanów poszczególnych segmentów, celem wizualizacji cyfr kodu szesnastkowego (cyfry od 0x0 do 0xF). Dane z tabeli pozwalają na transkodowanie reprezentacji szesnastkowej znaku na kod wyświetlacza. p7 p6 p5 p4 p3 p2 p1 p0 Cyfra dp a b c d e f g HEX 0 Off On On On On On On Off 0x7E 1 Off Off On On Off Off Off Off 0x30 2 Off On On Off On On Off On 0x6D 3 Off On On On On On Off Off 0x79 4 Off Off On On Off Off Off On 0x33 5 Off On Off On On Off On On 0x5B 6 Off On Off On On On On On 0x5F 7 Off On On On Off Off Off Off 0x70 8 Off On On On On On On On 0x7F 10/14

9 Off On On On On Off On On 0x7B A Off On On On Off On On On 0x77 B Off Off Off On On On On On 0x1F C Off On Off Off On On On Off 0x4E D Off Off On On On On Off On 0x3D E Off On Off Off On On On On 0x4F F Off On Off Off Off On On On 0x47 Tab. 2 W typowym module wyświetlacza siedmiosegmentowego wszystkie katody lud anody są ze sobą połączone i wyprowadzone jako jedna końcówka. Mówimy wtedy, że mamy do czynienia z wyświetlaczem ze wspólną katodą lub wspólną anodą. Zazwyczaj wspólną katodę dołącza się do masy, a wspólną anodę do dodatniego napięcia zasilającego. 7.2. Wyświetlacz LED modułu ZL3AVR Moduł ZL3AVR posiada na swoim pokładzie cztery wyświetlacze siedmiosegmentowe ze wspólną anodą, połączone w strukturę multipleksowaną. Oznacza to, że w danym momencie tylko jeden, wybrany, wyświetlacz świeci. Jeżeli obsługa poszczególnych wyświetlaczy będzie odbywać się z częstotliwością co najmniej 25Hz, nasze oczy będą miały złudzenie, że wszystkie wyświetlacze świecą równocześnie (efekt podobny jak w kinie). Sygnały sterujące wyświetlaczami są dostępne na złączach JP24 (segmenty) i JP28 (anody) rys. 8. Rys. 8 Bity C1 C4 złącza JP28 służą do aktywacji pojedynczego wyświetlacza. Bity a, b, c, d, e, f, g i dp złącza JP24 są wykorzystywane do sterowania segmentami. Aktywnym poziomem sygnału, w obu przypadkach, jest 0. Przykład: Wyświetlenie cyfry '5' na pierwszym wyświetlaczu. Do sterowania anodami wybrano port B, a segmentami port A. ldi r16, 0xff out ddra, r16 out ddrb, r16 ldi r16, 0x01 ;Ustawienie Port A jako wyjście ;Ustawienie Port B jako wyjście ;Wybór pierwszego wyświetlacza 11/14

com r16 out portb, r16 ldi r16, 0x5B ;Kod cyfry 5 com r16 ;Negacja, celem uzyskania aktywnego zera sterującego ;Aktywacja wyświetlacza poprzez port B ;Negacja, celem uzyskania aktywnego zera sterującego out porta, r16 ;Zaświecenie segmentów odpowiedzialnych za widzialność cyfry 5 stop: rjmp stop Ćwiczenie 4.3 Przekopiuj kod programu z pliku 'PrimesLEDs.asm' i zmodyfikuj go tak, aby na ostatnim wyświetlaczu były wyświetlane cyfry, kodu szesnastkowego, od 0 do F. Zapisz program jako 'SevSegDisp.asm' 8. Operacje na połówkach bajtu 8.1. Instrukcja swap zamiana miejscami połówek bajtu Instrukcja swap wykonuje operację zamiany miejscami połówek bajtu rejestru Rd. Przed: d7-d4 d3-d0 Po: d3-d0 d7-d4 Przed: 1110 1010 Po: 1010 1110 swap Rd ;0 d 31 Przykład: Wysłanie młodszej połówki rejestru R1 do młodszej części portu A (3:0) oraz starszej połówki rejestru R1 do młodszej części portu B (3:0). mov r2,r1 ;r2=r1 andi r2,0x0f ;Izolacja młodszej połówki bajtu out porta, r2 ;Wysłanie do portu A mov r2,r1 swap r2 ;r2=r1 ;Zamiana miejscami połówek bajtu rejestru R2 andi r2, 0x0f ;Izolacja młodszej połówki bajtu out portb, r2 ;Wysłanie do portu B 9. Dodawanie liczb bez znaku Liczby bez znaku reprezentują dane z zakresu 0 255 (szesnastkowo 0x00 0xFF). Do wykonywania operacji dodawania, w mikrokontrolerach AVR, służą głównie instrukcje add i adc. 12/14

add Rd, Rr adc Rd, Rr ;Rd=Rd+Rr ;Rd=Rd+Rr+C (carry) Operacja dodawania zmienia m.in. stan flagi C i Z. Flaga C jest ustawiana, jeśli wystąpi przeniesienie (wynik nie mieści się w rejestrze przeznaczenia) z bitu D7 wyniku. Natomiast flaga Z jest ustawiana, gdy wynik operacji wynosi 0. W przypadku dodawania liczb n-bajtowych (tzw. wielokrotna precyzja), aby wynik był poprawny, musi być uwzględniony stan flagi C na każdym etapie (oprócz pierwszego) dodawania poszczególnych bajtów. Do tego rodzaju operacji jest stworzona instrukcja adc. 9.1. Instrukcja add dodawanie bez bitu przeniesienia C Instrukcja add wykonuje operację dodawania dwóch rejestrów Rd i Rr. Wynik jest umieszczany w rejestrze Rd. Flaga C nie jest uwzględniana. add Rd,Rr ;0 d 31, 0 r 31 9.2. Instrukcja adc dodawanie z uwzględnianiem bitu przeniesienia C Instrukcja adc wykonuje operację dodawania dwóch rejestrów Rd i Rr. Wynik jest umieszczany w rejestrze Rd. Flaga C jest dodawana do wyniku. adc Rd,Rr ;0 d 31, 0 r 31 Przykład: Dodawanie 16-bitowej liczby 0x1f55 do rejestru Z ldi r16,low($1f55) ;r16=55 ldi r17, high($1f55) ;r17=1f add ZL, r16 adc ZH, r17 10. Procedura programowania wyświetlacza LED Ćwiczenie 4.4 Napisz program realizujący 16-bitowy, programowy licznik, którego bieżąca wartość będzie wyświetlana na czterech wyświetlaczach siedmiosegmentowych. 1. Licznik zrealizuj na dwóch 8-bitowych rejestrach. 2. Zastosuj podprogram opóźniający. 3. Wyświetlanie wartości licznika napisz w formie podprogramu. 4. Częstotliwość odświeżania wyświetlacza LED - 1/20 sekundy. 5. Częstotliwość modyfikacji licznika - 1/5 sekundy (cztery okresy odświeżające LED). Proponowany schemat blokowy programu jest zamieszczony na rysunku rys. 9. 13/14

Zapisz program jako 'SevSegDisp4.asm'. Rys. 9 14/14