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



Podobne dokumenty
Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

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

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

PROGRAMOWALNE SYSTEMY MECHATRONIKI

Programowanie mikrokontrolerów AVR z rodziny ATmega.

2. Architektura mikrokontrolerów PIC16F8x... 13

Programowanie mikrokontrolerów. 5 grudnia 2007

SYSTEM PRZERWAŃ ATmega 32

Mikrokontrolery AVR ATmega

Programowanie mikrokontrolerów - laboratorium

Programowanie w językach asemblera i C

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

Mikrokontroler ATmega32. Tryby adresowania Rejestry funkcyjne

Przerwania, polling, timery - wykład 9

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Metody obsługi zdarzeń

Instytut Teleinformatyki

Techniki mikroprocesorowe i systemy wbudowane

Programowanie mikrokontrolerów. 8 listopada 2007

start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja

MIKROKONTROLERY I MIKROPROCESORY

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015

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

Opis procedur asemblera AVR

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

Schemat blokowy architektury AVR

Hardware mikrokontrolera X51

Mikroprocesor Operacje wejścia / wyjścia

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Wstęp Architektura... 13

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

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Sterownik diod RGB. Robert Budzioski

Podstawy techniki mikroprocesorowej. Dr inż. Grzegorz Kosobudzki p.311a A-5. Tel

Mikrokontroler ATmega32. Język symboliczny

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

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

Komunikacja w mikrokontrolerach Laboratorium

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Mikroprocesory i mikrosterowniki Wydział Elektroniki Mikrosystemów i Fotoniki Politechniki Wrocławskiej Ćwiczenie nr 4

Szkolenia specjalistyczne

IIPW_SML3_680 (Z80) przewodnik do ćwiczeń laboratoryjnych

Mikroprocesory i mikrosterowniki

Wyświetlacz widmowy RGB sterowany bezprzewodowo

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

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

Instytut Teleinformatyki

1. Struktura urządzeń z wykorzystaniem mikrokontrolerów...13

petla:... ; etykieta określa adres w pamięci kodu (docelowe miejsce skoku) DJNZ R7, petla

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

Ćwiczenie 7 Matryca RGB

Mikroprocesory i Mikrosterowniki

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Mikroprocesory i Mikrosterowniki

Akademia Górniczo- Hutmicza w Krakowie Katedra Elektroniki WIET

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

2.1 Przesył danych między procesorem a tabelą zmiennych

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Mechanizm przerwań i menadżer zdarzeń procesora sygnałowego F/C240

Programowanie mikrokontrolerów AVR

Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.

SML3 październik

Mikrokontrolery AVR Wprowadzenie

Opis układów wykorzystanych w aplikacji

Technika Mikroprocesorowa

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

Instytut Teleinformatyki

ZL16AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega8/48/88/168

LABORATORIUM UKŁADY WY Ś WIETLANIA INFORMACJI Z WY Ś WIETLACZAMI 7-SEGMENTOWYMI LED

Wbudowane układy peryferyjne cz. 1 Wykład 7

AVREVB1. Zestaw uruchomieniowy dla mikrokontrolerów AVR. Zestawy uruchomieniowe

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

Instytut Teleinformatyki

Instytut Teleinformatyki

STM32 Butterfly. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów AVR

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

Elementy struktur cyfrowych. Magistrale, układy iterowane w przestrzeni i w czasie, wprowadzanie i wyprowadzanie danych.

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

Listing_ $crystal = deklaracja

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

interfejs szeregowy wyświetlaczy do systemów PLC

LITEcomp aplikacje Zegar z układem PCF8583

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

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

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

Działanie i charakterystyka sterownika GE FANUC VersaMaxNano

Mikrokontrolery ARM. Elektroniczny zegar / budzik / kalendarz z wyświetlaczem NIXIE. Opis projektu

Struktura programu w asemblerze mikrokontrolera 8051

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Komunikacja w mikrokontrolerach. Wydział Elektroniki Mikrosystemów i Fotoniki Piotr Markowski

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

Instytut Teleinformatyki

Przerwania w architekturze mikrokontrolera X51

Podstawy Techniki Mikroprocesorowej

Projektowanie urządzeń mikroprocesorowych cz. 2 Wykład 4

Celem ćwiczenia jest zapoznanie z obsługą klawiatury sekwencyjnej i matrycowej w systemie DSM-51.

Tab. 1. Zestawienie najważniejszych parametrów wybranych mikrokontrolerów z rodziny LPC2100, które można zastosować w zestawie ZL3ARM.

Transkrypt:

Sterowanie multipleksowe 4-cyfrowego wyświetlacza siedmiosegmentowego w oparciu o system przerwao mikrokontrolera ATmega16 w języku Asembler Robert Budzioski Wrocław, 11. maja 2009

Spis treści 1. Sterowanie multipleksowe... 3 2. System przerwao... 4 2.1. Idea działania przerwao... 4 2.2. Uaktywnienie i blokowanie przerwao... 4 2.3. Wektory przerwao... 4 3. Obsługa wyświetlacza... 5 3.1. Deklaracja stałych, zmiennych i nazw symbolicznych... 5 3.2. Wypełnienie wektorów przerwao... 5 3.3. Inicjalizacja wyświetlacza... 6 3.4. Obsługa wyświetlacza... 7 3.5. Wyświetlanie cyfr... 8 4. Uwagi koocowe... 9 5. Bibliografia... 9 2

1. Sterowanie multipleksowe W wielu układach do prezentowania wartości liczbowych stosuje się siedmiosegmentowe wyświetlacze LED. W większości przypadków jeden wyświetlacz to za mało, natomiast dołączenie kolejnego wyświetlacza sterowanego statycznie ciągnie za sobą koniecznośd wykorzystania następnych 8 linii mikrokontrolera. Aby zmniejszyd liczbę użytych wyprowadzeo mikrokontrolera przy sterowaniu wieloma wyświetlaczami LED należy zastosowad sterowanie multipleksowe. Taki sposób sterowania minimalizuje liczbę potrzebnych do sterowania linii do 8 + liczba wyświetlaczy. W sterowaniu multipleksowym wszystkie katody poszczególnych segmentów wyświetlaczy są połączone ze sobą. Anody wyświetlaczy są dołączone do plusa zasilania przez tranzystory p-n-p (np. BC558), których włączeniem steruje mikrokontroler. W ten sposób każda grupa segmentów posiada pojedynczą linię zasilającą. Przy multipleksowej obsłudze czterech wyświetlaczy siedmiosegmentowych wykorzystuje się jedynie 12 linii mikrokontrolera. Stosując sterowanie statyczne należałoby użyd 32 linie. Jeśli grupy segmentów będą obsługiwane cyklicznie z dostatecznie dużą częstotliwością, to bezwładnośd oka ludzkiego spowoduje, że widz będzie miał wrażenie statyczności wyświetlanego obrazu. Przy sterowaniu multipleksowym wyświetlaczy LED, dla zapewnienia odpowiedniej jasności świecenia, rezystory ograniczające prąd płynący przez segmenty powinny mied wartości w zakresie od 47-100 Ω. Wynika to z impulsowego zasilania segmentów LED. 3

2. System przerwao 2.1. Idea działania przerwao Programy sterujące mikrokontrolerami rzadko mają postad jednolitej listy instrukcji. Odpowiednie podprogramy muszą byd wykonywane selektywnie i w kolejności zależnej od stanów modułów wewnętrznych lub sygnałów zewnętrznych. Umożliwia to system przerwao, który w zależności od zadanego warunku przenosi wykonywanie zadania w wybrane miejsce. Jeśli pewien układ zgłasza żądanie przerwania, mikrokontroler przerywa aktualnie wykonywane operacje i wykonuje podprogram przyporządkowany danemu źródłu przerwania, a następnie wraca do wcześniej wykonywanej czynności. 2.2. Uaktywnienie i blokowanie przerwao Mikrokontroler domyślnie blokuje obsługę przerwao. Aby przerwania zostały obsłużone należy włączyd zezwolenie globalne. Do zarządzania zezwoleniami globalnymi służą instrukcje: sei - zezwolenie na przerwanie cli - zablokowanie przerwao 2.3. Wektory przerwao Mikrokontrolery AVR wyposażono w wiele modułów będących źródłem przerwao, co wymaga ustalenia kolejności ich obsługi. Kolejnośd ta jest ustalona odgórnie przez wektor przerwao, czyli adres w pamięci programu, w którym umieszcza się zwykle instrukcję skoku do właściwego podprogramu. Położenie wektorów przerwao w pamięci programu dla mikrokontrolera ATmega16 przedstawia poniższa tabela: Adres wektora Źródło przerwania Powód żądania 0x000 RESET Inicjalizacja 0x002 INT0 Zewnętrzny 0x004 INT1 Zewnętrzny 0x006 TIMER2 Zgodne porównanie 0x008 TIMER1 Przepełnienie 0x00A TIMER1 Przechwycenie 0x00C TIMER1 Zgodne porównanie A 0x00E TIMER1 Zgodne porównanie B 0x010 TIMER1 Przepełnienie 0x012 TIMER0 Przepełnienie 0x014 SPI Koniec transmisji 0x016 USART Poprawnie odebrany bajt 0x018 USART Pusty bufor nadawczy 0x01A USART Koniec transmisji wychodzącej 0x01C ADC Konwersja skooczona 0x01E EEPROM Gotowy 0x020 ANA_COMP Zmiana stanu wyjścia 0x022 TWI Każda aktywnośd modułu 0x024 INT2 Zewnętrzny 0x026 TIMER0 Zewnętrzny 0x028 SPM Koniec zapisu pamięci flash 4

3. Obsługa wyświetlacza 3.1. Deklaracja stałych, zmiennych i nazw symbolicznych Na początku programu zadeklarujemy wszystkie wykorzystywane stałe i zmienne oraz wprowadzimy nazwy symboliczne rejestrów związanych z portem, do którego dołączono wyświetlacz. Dzięki tej operacji program stanie się bardziej uniwersalny, a ewentualne modyfikacje w projekcie ograniczą się jedynie do kilku zmian..include "m16def.inc" ; SEGMENT DEKLARACJI.EQU SYS_FREQ = 1 ; częstotliwość pracy w MHz.EQU K_W7S_SEG = DDRA ; rejestr kierunku portu segmentów.equ O_W7S_SEG = PORTA ; rejestr wyjściowy portu segmentów.equ K_W7S_KOL = DDRD ; rejestr kierunku portu kolumn.equ O_W7S_KOL = PORTD ; rejestr wyjściowy portu kolumn.equ W7S_KOL0 = 7 ; nr linii dla kolumny 1. (cyfra najmłodsza).equ W7S_KOL1 = 6 ; nr linii dla kolumny 2..EQU W7S_KOL2 = 5 ; nr linii dla kolumny 3..EQU W7S_KOL3 = 4 ; nr linii dla kolumny 4. (cyfra najstarsza).dseg ; SEGMENT DANYCH.ORG 0x0060 ; początek pamięci SRAM W7s_kolumna:.BYTE 1 ; zmienna numeru aktywnej kolumny W7s_cyfry:.BYTE 4 ; tablica 4. zmiennych przechowujących ; wartości aktualnie wyświetlanych cyfr 3.2. Wypełnienie wektorów przerwao Ponieważ wyświetlacz multipleksowy będzie korzystał z mechanizmu przerwao, konieczne jest wypełnienie odpowiednich wektorów przerwao. Podprogram obsługujący wyświetlacz powinien byd uruchamiany przy zdarzeniu zgodnego porównania zawartości licznika 0 z rejestrem OCR0. Jeśli licznik ten uruchomimy w trybie CTC, to uzyskamy możliwośd programowego sterowania częstotliwością multipleksowania. Oprócz obsługi wyświetlacza wykorzystamy również przerwanie inicjalizacyjne. Jest to przerwanie o najwyższym priorytecie (ulokowane w adresie 0x000), a ponadto nie jest objęte blokadą. Wywoła ono podprogram inicjalizujący zawartośd pamięci SRAM. Wypełnienie wektorów przerwao w początkowej części pamięci programu wygląda następująco:.cseg ; segment programu.org 0 ; wektor zerowania (adres 0x000) jmp Reset ; skok do procedury inicjalizującej.org OC0addr ; wektor przerwania OC0 (adres 0x026) jmp Multipleksuj ; skok do procedury obsługi wyświetlacza Po włączeniu zasilania w pamięci SRAM znajdują się zwykle wartości przypadkowe, które mogą zakłócid pracę programu, dlatego też w programie inicjalizującym umieszczamy pętlę zerującą zawartośd wszystkich zmiennych ulokowanych w SRAM. W naszym programie wykorzystujemy 5 pierwszych komórek SRAM, zatem pętlę zerującą wykonujemy pięciokrotnie, rozpoczynając od adresu 0x0060. Reset: ldi R17, high(ramend) ldi R16, low(ramend) out SPH, R17 out SPL, R16 clr R16 ldi R17, 5 ; podprogram inicjalizujący ; inicjalizacja wskaźnika stosu ; R17 określa liczbę zajętych przez zmienne komórek 5

ldi XH, high(0x0060) ldi XL, low(0x0060) Reset_1: st X+, R16 dec R17 brne Reset_1 rcall Ini_w7s sei ; pamięci SRAM (licznik poniższej pętli) ; X wskazuje na początek pamięci SRAM ; pętla zerująca zawartość wszystkich używanych ; przez zmienne komórek pamięci SRAM ; inicjalizacja wyświetlacza ; odblokowanie przerwań 3.3. Inicjalizacja wyświetlacza Przygotowanie mikrokontrolera do pracy z wyświetlaczem polega na konfiguracji portów wejścia-wyjścia, licznika 0 oraz uaktywnienia generacji przerwao wywoływanych zdarzeniem zgodnego porównania. Licznik będzie okresowo przypominał o konieczności obsługi wyświetlacza. Licznik 0 będzie działał w trybie CTC jego zawartośd będzie zerowana po zrównaniu z wartością rejestru OCR0. Źródłem impulsów zliczanych jest wartośd zegara systemowego podzielona przez 1024. Zdarzenie zgodnego porównania wywoła przerwanie OC0. Rejestr OCR0 ładowany jest wartością, która określa częstotliwośd generacji przerwania. Poprzez nastawę wartości rejestru OCR0 można manipulowad okresem multipleksowania. Zakładamy, że mikrokontroler pracuje z częstotliwością 1MHz. Przy podziale przez 1024 licznik będzie zliczał impulsy z częstotliwością 1000000/1024 976,6 Hz. Aby migotanie nie było dostrzegalne, częstotliwośd odświeżania pojedynczej cyfry powinna byd większa lub równa 50Hz, a zatem 200Hz dla całego wyświetlacza 4-cyfrowego. Dzieląc wartośd częstotliwości taktującą licznik 0 przez żądaną wartośd odświeżania otrzymujemy wartośd, którą należy wpisad do rejestru OCR0 976,6/200 5. Na koniec liczbę tę mnożymy przez prędkośd zegara taktującego mikrokontroler a określoną w sekcji deklaracji stałych jako SYS_FREQ, dzięki czemu zmiana rezonatora taktującego mikrokontroler będzie wymagała jedynie aktualizacji wartości SYS_FREQ. Jeśli migotanie jest dostrzegalne, do rejestru OCR0 można wpisad mniejszą wartośd. Ini_w7s: push R16 ldi R16, (1<<WGM01) (1<<CS02) (1<<CS00) out TCCR0, R16 ; licznik 0. - tryb CTC, f=fosc/1024 in R16, TIMSK sbr R16, 1<<OCIE0 out TIMSK, R16 ; przerwanie OC0 uaktywnione ldi R16, SYS_FREQ*5 out OCR0, R16 ; częstotliwość odświeżania pojedynczej ; cyfry równa ok. 49 Hz ; (przepełnianie z częstotliwością 195,3 Hz) ldi R16, 0xFF out K_W7S_SEG, R16 ; port segmentów w trybie wyjściowym in R16, O_W7S_KOL ori R16, (1<<W7S_KOL0) (1<<W7S_KOL1) (1<<W7S_KOL2) (1<<W7S_KOL3) out O_W7S_KOL, R16 ; wyjścia kolumn w stanie wysokim (nieaktywne) in R16, K_W7S_KOL ori R16, (1<<W7S_KOL0) (1<<W7S_KOL1) (1<<W7S_KOL2) (1<<W7S_KOL3) out K_W7S_KOL, R16 ; linie kolumn w trybie wyjściowym pop R16 ret 6

3.4. Obsługa wyświetlacza Parametrem wejściowym podprogramu obsługującego wyświetlacz siedmiosegmentowy jest tablica wartości cyfr zadeklarowana na początku programu jako W7s_cyfry w pamięci SRAM. Podprogram sprawdza i inkrementuje numer wyświetlanej cyfry zapisany w zmiennej W7s_kolumna jeśli cykl zakooczono, ładuje wartością zerową. Wartośd cyfry, która ma zostad wyświetlona na wyświetlaczu pobierana jest z odpowiedniej komórki tablicy W7s_cyfry. Multipleksuj: push R16 push R17 push ZL push ZH in R16, SREG push R16 lds R16, W7s_kolumna inc R16 cpi R16, 4 brne Mul_w7s_0 ldi R16, 0 Mul_w7s_0: ; odczytaj nr aktualnie wyświetlanej kolumny ; zwiększ nr aktualnie wyświetlanej kolumny ; jeśli zakończono cykl wyświetlania, to ; wyzeruj nr aktualnie wyświetlanej kolumny sts W7s_kolumna, R16 ; zapamiętaj nr aktualnie wyświetlanej kolumny ldi ZH, high(w7s_cyfry) ldi ZL, low(w7s_cyfry) ; Z wskazuje na tablicę wyświetlanych cyfr ldi R17, 0 add ZL, R16 adc ZH, R17 ; do Z dodawany jest nr aktualnie wyświetlanej ; kolumny ld R16, Z ; R16 przyjmuje wartość cyfry, która powinna ; się znaleźć na aktualnie wyświetlanej pozycji ldi ZH, high(w7s_wzory_cyfr<<1) ; Z wskazuje na tablicę 7-segmentowych ldi ZL, low(w7s_wzory_cyfr<<1) ; wzorów cyfr ldi R17, 0 add ZL, R16 ; do Z dodawana jest wartość cyfry, której wzór adc ZH, R17 ; ma zostać odczytany lpm R16, Z ; R16 przyjmuje wartość 7-segmentowego wzoru ; cyfry, która ma zostać wyświetlona ldi R17, 0x00 out K_W7S_SEG, R17 ; wyłącz chwilowo bufory wyjściowe linii segm. ; (wygaszanie wyświetlacza na czas zmiany) out O_W7S_SEG, R16 ; wyświetl cyfrę na wyświetlaczu 7-segmentowym ldi ZH, high(w7s_kolejnosc<<1) ; Z wskazuje na tablicę kolejności ldi ZL, low(w7s_kolejnosc<<1) ; cyfr (wymuszeń na liniach kolumn) lds R16, W7s_kolumna ; odczytaj nr aktualnie wyświetlanej kolumny ldi R17, 0 add ZL, R16 ; do Z dodawany jest nr kolumny, która ma adc ZH, R17 ; zostać uaktywniona lpm R17, Z ; R17 przyjmuje wartość nowego wymuszenia ; na liniach kolumnowych in R16, O_W7S_KOL ori R16, (1<<W7S_KOL0) (1<<W7S_KOL1) (1<<W7S_KOL2) (1<<W7S_KOL3) and R16, R17 out O_W7S_KOL, R16 ldi R17, 0xFF out K_W7S_SEG, R17 pop R16 out SREG, R16 pop ZH pop ZL pop R17 pop R16 reti ; zmiana aktywnej kolumny (wymuszenie niskiego ; stanu na nowej linii kolumnowej) ; włącz bufory wyjściowe na liniach segmentów 7

Zamiana cyfry na stan linii segmentowych powodujących wyświetlenie odpowiedniego kształtu dokonuje się w oparciu o gotowy wzorzec zawarty w tablicy W7s_wzory_cyfr. Ponieważ każda z cyfr zapisywana jest w jednym bajcie, można zdefiniowad dodatkowo znaki specjalne. W zamieszczonym niżej kodzie zdefiniowano litery ABCDEF oraz znaki i _. Kolejnośd zapalania poszczególnych pozycji wyświetlacza również określona jest za pomocą tablicy wzorów W7s_kolejnosc. Kolejnośd wzorów wyznaczana jest rosnącymi wartościami odpowiadających im cyfr. Kolejnośd segmentów w programie określono jako: kgfedcba W7s_wzory_cyfr:.DB ~0b00111111, ~0b00000110 ; 0, 1.DB ~0b01011011, ~0b01001111 ; 2, 3.DB ~0b01100110, ~0b01101101 ; 4, 5.DB ~0b01111101, ~0b00000111 ; 6, 7.DB ~0b01111111, ~0b01101111 ; 8, 9.DB ~0b01110111, ~0b01111100 ; A, B.DB ~0b00111001, ~0b01011110 ; C, D.DB ~0b01111001, ~0b01110001 ; E, F.DB ~0b01000000, ~0b00001000 ; -, _ W7s_kolejnosc: ; tablica wymuszeń dla portu kolumn.db ~(1<<W7S_KOL0), ~(1<<W7S_KOL1), ~(1<<W7S_KOL2), ~(1<<W7S_KOL3) 3.5. Wyświetlanie cyfr Wyświetlenie cyfry na danej pozycji wyświetlacza siedmiosegmentowego nastąpi automatycznie po załadowaniu odpowiedniej komórki pamięci tablicy W7s_cyfry zawartością określonego rejestru roboczego. Do zapisu wartości w pamięci danych wykorzystuje się komendę sts. Przykładowo poniższy kod umieszczony w dowolnym miejscu programu głównego (main) spowoduje zapalenie na wyświetlaczu wartości -397. push R17 ldi R17, 7 sts (W7s_cyfry+0), R17 ldi R17, 9 sts (W7s_cyfry+1), R17 ldi R17, 3 sts (W7s_cyfry+2), R17 ldi R17, 16 sts (W7s_cyfry+3), R17 pop R17 8

4. Uwagi koocowe Niniejsze opracowanie przygotowano jako pomoc dydaktyczną w ramach kursu Podstawy techniki cyfrowej i mikroprocesorowej. Kody źródłowe umieszczone w niniejszym opracowaniu stanowią kompletny program. Główną procedurę (main) należy umieścid po procedurze Reset1. Program został uruchomiony i przetestowany za pomocą środowiska AVR Studio w wersji 4.16 Build 628, płytki edukacyjnej ARE0025 (are.net.pl) oraz programatora AVR Dragon (w trybie ISP). Nie zauważono żadnych nieprawidłowości w funkcjonowaniu programu. 5. Bibliografia Opracowanie przygotowano na podstawie kodów źródłowych dostępnych na stronie Wydawnictwa BTC (http://www.btc.pl/pliki/atmwp.zip). Rafał Baranowski, Mikrokontrolery AVR ATmega w praktyce Marcin Wiązania, Programowanie mikrokontrolerów AVR w języku BASCOM Katedra Optoelektroniki i Systemów Elektronicznych, Dokumentacja mikrokontrolera Atmega16 firmy Atmel 9