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

Podobne dokumenty
DSM51 operacje przesylania danych i operacje arytmetyczne strona 1

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

Programowanie mikrokontrolera 8051

Pracownia elektryczno-elektroniczna klasa IV

Politechnika Warszawska

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

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

Lista rozkazów mikrokontrolera 8051 część pierwsza: instrukcje przesyłania danych, arytmetyczne i logiczne

Lista rozkazów mikrokontrolera 8051

Asembler - język maszynowy procesora

Liczniki, rejestry lab. 09 Mikrokontrolery 8051 cz. 1

Lista instrukcji procesora 8051 część 2 Skoki i wywołania podprogramów, operacje na stosie, operacje bitowe

architektura komputerów w 1 1

IV PROGRAMOWANIE MIKROKOMPUTERA Technika Cyfrowa 2. Wykład 4: Programowanie mikrokomputera 8051

Programowanie mikrokontrolerów (CISC)

Architektura komputerów. Asembler procesorów rodziny x86

Pracownia elektryczno-elektroniczna klasa IV

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

A Machine Architecture that is Really Intuitive and Easy. Dane: notacja dwójkowa, zapis w kodzie dopełnieniowym

Instytut Teleinformatyki

Obszar rejestrów specjalnych. Laboratorium Podstaw Techniki Mikroprocesorowej Instytut Mikroelektroniki i Optoelektroniki PW

TMiK Podstawy Techniki Mikroprocesorowej. Lidia Łukasiak

Pracownia elektryczno-elektroniczna klasa IV

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

1. Operacje logiczne A B A OR B

Mikrokontrolery 8 bit - wprowadzenie

Programowanie w językach asemblera i C

Struktura programu w asemblerze mikrokontrolera 8051

Przedmiot : Programowanie w języku wewnętrznym. Ćwiczenie nr 4

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

Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów

Algorytm mnożenia sekwencyjnego (wariant 1)

MIKROPROCESORY I MIKROKONTROLERY INSTRUKCJE / KOMENDY / ROZKAZY: PRZEGLĄD I KILKA PRZYKŁADÓW DLA PRZYPOMNIENIA, GŁÓWNE REJESTRY ROBOCZE CPU:

Mikrokontroler ATmega32. Język symboliczny

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

1. Pobrać plik masm.zip (Macro Assembler 6.15 & Segmented Executable Linker 5.60) (

Architektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle

Programowanie niskopoziomowe

Instytut Teleinformatyki

MIKROKONTROLERY I MIKROPROCESORY

Sprzęt i architektura komputerów

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Instytut Teleinformatyki

Przerwania w architekturze mikrokontrolera X51

Architektura systemów komputerowych

Ćwiczenie 3. Konwersja liczb binarnych

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

Architektura komputerów

Zapisywanie algorytmów w języku programowania

Ćwiczenie 3 Wyświetlacz ciekłokrystaliczny

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Przykładowe pytania DSP 1

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

6. Pętle while. Przykłady

Instytut Teleinformatyki

Sprzęt i architektura komputerów

UTK Można stwierdzić, że wszystkie działania i operacje zachodzące w systemie są sterowane bądź inicjowane przez mikroprocesor.

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Wykład z Technologii Informacyjnych. Piotr Mika

Algorytmy i struktury danych

Politechnika Warszawska

AKADEMIA GÓRNICZO HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI, INFORMATYKI I ELEKTRONIKI

SYSTEM PRZERWA Ń MCS 51

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Ćwiczenie 01 - Strona nr 1 ĆWICZENIE 01

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

imei Instytut Metrologii, Elektroniki i Informatyki

7. Pętle for. Przykłady

Analizowanie działania układów mikroprocesorowych 311[50].O1.06

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

CYKL ROZKAZOWY = 1 lub 2(4) cykle maszynowe

Podstawy techniki mikroprocesorowej

2. Architektura mikrokontrolerów PIC16F8x... 13

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

AGH Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Metody numeryczne Laboratorium 2

ZAPOZNANIE SIĘ Z ZESTAWEM DYDAKTYCZNYM ZD537, OPROGRAMOWANIEM µvision 2 ORAZ OPERACJE NA PAMIĘCIACH

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

6.1. Zastosowanie mikrokontrolera SAB 80C535 do sterowania silnikiem prądu stałego

ARCHITEKTURA KOMPUTERÓW Systemy liczbowe

1. Wstęp Różnice pomiędzy mikrokontrolerami ST7 a ST7LITE Rdzeń mikrokontrolerów ST7FLITE... 15

Języki formalne i techniki translacji

Sterowanie pracą programu

Badanie układów zewnętrznych mikrokontrolera 311[07].Z4.03

organizacja procesora 8086

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

Algorytmy i struktury danych

Architektura systemów komputerowych Laboratorium 7 Symulator SMS32 Stos, Tablice, Procedury

WSPÓŁPRACA UKŁADÓW ISD33XXX/4002/4003

Struktura i działanie jednostki centralnej

Programowanie komputera

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

Technologie Informacyjne

Pamięci EEPROM w systemach mikroprocesorowych, część 2

CPU ROM, RAM. Rejestry procesora. We/Wy. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Programowanie Niskopoziomowe

Transkrypt:

Ćwiczenie 01 - Strona nr 1 ĆWICZENIE 01 PRACA KROKOWA MIKROKONTROLERA Cel ćwiczenia: Zapoznanie się ze środowiskiem programowym: poznanie funkcji asemblera, poznanie funkcji symulatora. Operacje na plikach, edycja programu, ustawianie parametrów programów, uruchamianie programów, uruchamianie krokowe, obserwacja rejestrów. Zadania do wykonania: 1. Napisać poniższe programy w asemblerze i sprawdzić zawartość komórek pamięci od 0 do 127. ; Praca krokowa symulatora JAGODA - cwiczenie 001; ; poniższy program zeruje komórki: (adresy : 00 dec - 127 dec, od 00H do 7FH ) ; ZEROWANIE KOMÓREK PAMIĘCI ; skompiluj poniższy program (F9) ; praca krokowa (F7) ; start programu od adresu 0100H ; zerowanie komórek od 01H do 07FH ( 1 dec - 127 dec) MOV R0, #01 ; adres komórki pamięci RESET: MOV @R0, #00 ; zerowanie komórki INC R0 ; R0 <- R0 + 1 CJNE R0, #127, RESET ; jeśli A < 127 to skok KONIEC: MOV 00H, #00 ; zeruj komórkę o adresie 00H ; poniższy program wstawia 1 do komórek pamięci : (adresy : 00 dec - 127 dec) JEDYNKOWANIE KOMÓREK PAMIĘCI ; skompiluj poniższy program (F9) ; praca krokowa (F7) ; start programu od adresu 0100H ; zerowanie komórek od 01H do 07FH ( 1 dec - 127 dec) MOV R0, #01 ; adres komórki pamięci RESET: MOV @R0, #00 ; zerowanie komórki INC R0 ; R0 <- R0 + 1 CJNE R0, #127, RESET ; jeśli A < 127 to skok KONIEC: MOV 00H, #00 ; zeruj komórkę o adresie 00H ; SPRAWDZANIE ZMIANY ZAWARTOŚCI KOMÓREK PAMIĘCI ; skompiluj poniższy program (F9)

Ćwiczenie 01 - Strona nr 2 ; utwórz tabelkę zmian stanu komórek pamięci i rejestrów: R0, R1, R2, R3, R4, R5, R6, R7 ; PC, ACC, B, PSW według dostarczonego wzoru - w programie Excel 2003 lub w zeszycie. ;kod inicjalizujący MOV R0, #01 PROLOG: MOV @R0, #01 INC R0 CJNE R0, #127, PROLOG MOV 00H, #01 ; tu zaczyna się testowanie CW01: INC A ADD A, #01 MOV R0, A ADD A, #01 MOV R1, A MOV B, #3 MUL AB MOV R4, A MOV R5, #100 DEC R5 INC R6 MOV A, R7 ADD A, #3 MOV 7, A PC ACC B PSW R0 R1 R2 R3 R4 R5 R6 R7 STAN POCZĄTKOWY: 00 00 00 01 01 01 01 01 01 01 01 010E INC A 01 00 00 01 01 01 01 01 01 01 01 010F ADD A, #01 02 00 00 01 01 01 01 01 01 01 01 0111 MOV R0,A 02 00 00 02 01 01 01 01 01 01 01 0112 ADD A,#01 03 00 01 02 01 01 01 01 01 01 01 0114 MOV R1,A 03 00 00 02 03 01 01 01 01 01 01 0115 MOV B,#3 03 03 00 02 03 01 01 01 01 01 01 0118 MUL AB 09 03 00 02 03 01 01 01 01 01 01 0119 MOV R4, A 09 03 00 02 03 01 01 09 01 01 01 011A MOV R5, #100 09 03 00 02 03 01 01 09 64 01 01 011C DEC R5 09 03 00 02 03 01 01 09 63 01 01 011D INC R6 09 03 00 02 03 01 01 09 63 02 01 011E MOV A, R7 01 03 00 02 03 01 01 09 63 02 01 011F ADD A, #3 04 03 00 02 03 01 01 09 63 02 01 0121 MOV 7, A 04 03 00 02 03 01 01 09 63 02 04

Ćwiczenie 02 - Strona nr 3 ĆWICZENIE 02 - Proste operacje arytmetyczne. Cel ćwiczenia: Zapoznanie się ze środowiskiem programowym: poznanie dyrektyw asemblera, Operacje arytmetyczne. Obserwacja rejestrów i komórek. Zadania do wykonania: Napisać poniższe programy w asemblerze oraz: 2.1). dodawanie dwóch komórek pamięci: wynik sumowania umieszczamy w trzeciej komórce pierwsza liczba - adres 01, druga liczba - adres 02, suma - adres 03. Po wykonaniu dodawania dla: 200+55, oraz 200 + 56 sprawdź zawartość dziesiętną KOMORKI o adresie 03, akumulatora oraz flagi CY MOV 1, #200 ; wartosci poczatkowe MOV 2, #55 ADD A, 1 ADD A, 2 MOV 3, A 2.2). dodawanie dwoch komorek pamieci: wynik sumowania umieszczamy w trzeciej komorce X - adres 01, Y - adres 02, SUMA - adres 03. Po wykonaniu dodawania dla: 200+55, oraz 200 + 56 sprawdz zawartosc dziesietna KOMORKI o adresie 03, akumulatora oraz flagi CY X EQU 1 Y EQU 2 SUMA EQU 3 MOV X, #200 ; wartosci poczatkowe MOV Y, #55 ADD A, X ADD A, Y MOV SUMA, A

Ćwiczenie 02 - Strona nr 4 2. 3). Dodawanie: (wyniki: ACC, PSW przeslane sa na wyswietlacz LCD). Dodawanie dwoch komorek pamieci, wynik sumowania umieszczamy w trzeciej komorce. Po wykonaniu dodawania dla: 200 + 56 sprawdz zawartosc dziesietna KOMORKI o adresie 03 oraz flagi CY oraz KOMORKI o adresach: 0D0h i 0E0h (odp. 80h, 00h ) PSW znajduje sie pod adresem 0D0h ACC znajduje sie pod adresem 0E0h wyjasnij dlaczego wynik sumowania 200 + 60 wynosi 4? X EQU 1 ; adres komorki dla X Y EQU 2 ; adres komorki dla Y SUMA EQU 3 ; adres komorki dla SUMY MOV X, #200 ; wartosci poczatkowe MOV Y, #60 MOV A, #0 ADD A, X ; dodawanie ADD A, Y MOV R7, 0D0h ; przechowaj PSW w R7 MOV SUMA, A MOV R6, SUMA ; przechowaj SUMA w R6 ; wyswietlanie SUMA i PSW MOV A, R6 LCALL WRITE_HEX ; pokaż SUMĘ MOV A, R7 LCALL WRITE_HEX ; pokaż PSW 2. 4). Odejmowanie: odejmowanie dwoch komorek pamieci, wynik odejmowania umieszczamy w trzeciej komorce. Pierwsza liczba - adres 01, druga liczba - adres 02, roznica - adres 03. Po wykonaniu odejmowania dla: 200-199, oraz 200 200 sprawdz zawartosc dziesietna KOMORKI o adresie 03, akumulatora oraz flagi CY. MOV 1, #200 ; wartosci poczatkowe MOV 2, #199 MOV A, 1 CLR PSW.7 ; zeruj CARRY w PSW SUBB A, 2 MOV 3, A

Ćwiczenie 02 - Strona nr 5 2. 5). Odejmowanie: odejmowanie dwoch komorek pamieci, wynik odejmowania umieszczamy w trzeciej komorce. Pierwsza liczba X - adres 01, druga liczba Y - adres 02, ; roznica ROZNICA - adres 03. Po wykonaniu odejmowania dla: 200-200, oraz 200-201 ; sprawdz zawartosc dziesietna KOMORKI o adresie 03, akumulatora oraz flagi CY X EQU 1 Y EQU 2 ROZNICA EQU 3 MOV X, #200 ; wartosci poczatkowe MOV Y, #201 MOV A, X CLR PSW.7 ; zeruj CARRY w PSW SUBB A, Y ; A <- A - Y - C MOV ROZNICA, A 2. 6). Odejmowanie: (wyniki: ACC, PSW przeslane sa na wyswietlacz LCD) odejmowanie dwoch komorek pamieci, wynik odejmowania umieszczamy w trzeciej komorce Po wykonaniu odejmowania dla: 0 255. Sprawdz zawartosc dziesietna KOMORKI o adresie 03 oraz flagi CY oraz KOMORKI o adresach: 0D0h i 0E0h (odp. 80h, 00h ) PSW znajduje sie pod adresem 0D0h ACC znajduje sie pod adresem 0E0h Wyjasnij dlaczego wynik odejmowania 0-255 wynosi 1? X EQU 1 ; adres komorki dla X Y EQU 2 ; adres komorki dla Y ROZNICA EQU 3 ; adres komorki dla ROZNICY MOV X, #0 ; wartosci poczatkowe MOV Y, #255 MOV A, X CLR PSW.7 ; CARRY = 0 SUBB A, Y ; odejmowanie ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MOV R7, 0D0h ; przechowaj PSW w R7 MOV ROZNICA, A MOV R6, ROZNICA ; przechowaj ROZNICA w R6 ; wyswietlanie ROZNICA i PSW MOV A, R6 LCALL WRITE_HEX ; pokaż RÓŻNICĘ

Ćwiczenie 02 - Strona nr 6 MOV A, R7 LCALL WRITE_HEX ; pokaż PSW 2. 7). Mnożenie: ; mnozenie dwoch liczb, wynik mnozenia umieszczamy w R3 i R4 ; pierwsza liczba - R1, druga liczba - R2, iloczyn - R3 (low), R4 ((high) ; Po wykonaniu mnozenia dla: 4 x 5, oraz 25 x 10, oraz 10 x 255 ; sprawdz zawartosc dziesietna, binarną, heksydecymalną: ; rejestrów R3, R4, oraz A, B MOV R1, #4 ; wartosci argumentów mnożenia MOV R2, #5 MOV A, R1 MOV B, R2 MUL AB ; mnozenie MOV R3, A MOV R4, B 2. 8). Mnożenie: Wersja B (wyswietlanie wyniku na LCD, w postaci szestnastkowej) ; mnozenie dwoch liczb, wynik mnozenia umieszczamy w R3 i R4 ; pierwsza liczba - R1, druga liczba - R2, iloczyn - R3 (low), R4 ((high) ; Po wykonaniu mnozenia dla: 4 x 5, oraz 25 x 10, oraz 10 x 255 ; sprawdz zawartosc dziesietna, binarną, heksydecymalną: ; rejestrów R3, R4, oraz A, B MOV R1, #10 ; wartosci argumentów mnożenia MOV R2, #255 MOV A, R1 MOV B, R2 MUL AB ; mnozenie MOV R3, A MOV R4, B ; przeslij rejestry R3, R4 na LCD MOV A, R4 ;(HIGH VALUE) LCALL WRITE_HEX MOV A, R3 ;(LOW VALUE) LCALL WRITE_HEX

Ćwiczenie 03 - Strona nr 7 ĆWICZENIE 03 - PROSTE PĘTLE STERUJĄCE. Cel ćwiczenia: Zapoznanie się z realizacją operacji iteracyjnych w języku asembler. Napisać poniższe programy w asemblerze oraz: 3.1). Petla z uzyciem rozkazu JNZ i akumulatora ; A - przechowuje licznik petli, zapamietywany w komorce o adresie 0 ; jaka jest zawartosc dziesietna A po wykonaniu PETLI? DELTA EQU 5 MOV A,#10 PETLA: CLR DIODA ; DIODA ON MOV 0, A MOV A,0 DEC A JNZ PETLA SETB DIODA ; DIODA OFF 3.2). Petla typu for z uzyciem rozkazu DJNZ ; R0 - rejestr przechowujacy licznik petli ; jaka jest zawartosc dziesietna R0 po wykonaniu PETLI? DELTA EQU 5 MOV R0,#20 PETLA:CLR DIODA ; DIODA ON SETB DIODA ; DIODA OFF DJNZ R0, PETLA

Ćwiczenie 03 - Strona nr 8 3.3). Petla typu for z uzyciem rozkazu DJNZ ; R1, R0 - rejestry przechowujace licznik petli ; jaka jest wartosc dziesietna R3 po wykonaniu petli zewnetrznej? ; ODP. 0 DELTA EQU 5 MOV R3,#0 MOV R1,#16 PET1: MOV R0,#16 PET0: CLR BUZER ; BUZER ON SETB BUZER ; BUZER OFF INC R3 ; licznik pomocniczny DJNZ R0, PET0 DJNZ R1, PET1 3.4). Petla typu repeat...until z uzyciem rozkazu CJNE ; R0 - rejestr przechowujacy licznik petli ; jaka jest zawartosc dziesietna R0 po wykonaniu PETLI? DELTA EQU 5 MOV R0,#0 PETLA:CLR DIODA ; dioda ON SETB DIODA ; dioda OFF INC R0 CJNE R0, #10, PETLA

Ćwiczenie 03 - Strona nr 9 3.5). Petla typu repeat...until z uzyciem rozkazu CJNE ; R1, R0 - rejestry przechowujace licznik petli ; jaka jest zawartosc dziesietna R3 po wykonaniu petli zewnetrznej? DELTA EQU 5 MOV R3,#0 ; licznik pomocniczy MOV R1,#0 P_ZEW: MOV R0,#0 P_WEW: INC R3 CLR BUZER ; buzer ON SETB BUZER ; buzer OFF INC R0 CJNE R0, #4, P_WEW INC R1 CJNE R1, #4, P_ZEW 3.6). Petla z uzyciem rozkazu JNC i akumulatora ; A - przechowuje licznik petli, zapamietywany w komorce ; pod adresem 0 ; jaka jest zawartosc dziesietna A po wykonaniu PETLI? DELTA EQU 50 MOV A,#0 PETLA: CLR DIODA ; DIODA ON MOV 0, A LCALL DELAY_MS MOV A,0 ADD A, #1 JNC PETLA SETB DIODA ; DIODA OFF

Ćwiczenie 04 - Strona nr 10 ĆWICZENIE 04 - PĘTLE STERUJĄCE. Napisz program asemblerowy dla DSM-51, który wykona 10 razy pętlę, w której o Włączy diodę. (1 pkt.) o Włączy buzer. (1 pkt.) o Wykona opóźnienie czasowe ½ sekundy (1 pkt.) o Wyłączy diodę. (1 pkt.) o Wyłączy buzer. (1 pkt.) o Zmniejszy wartość rejestru R4 o 1 (1 pkt.) o Wykonaj opóźnienie czasowe 500 ms. (1 pkt.) Ćwiczenie 05 - Strona nr 10 ĆWICZENIE 05 - PĘTLE STERUJĄCE. Napisz program asemblerowy dla DSM-51, który działa według następującego algorytmu: Włącz diodę. (1 pkt.) W pętli dla liczb naturalnych n od 1 do 15 wykonaj: o Kasuj wyświetlacz LCD. (1 pkt.) o Podnieś liczbę n do potęgi 2. (2 pkt.) o Wyświetl wynik potęgowania w postaci HEX na wyświetlaczu LCD. (2 pkt.) o Wykonaj opóźnienie czasowe ½ sekundy. (1 pkt.) Wyłącz diodę. (1 pkt.) (Odp hex: 01, 04, 09, 10, 19, 24, 31, 40, 51, 64, 79, 90, A9, C4, E1) Ćwiczenie 06 - Strona nr 10 ĆWICZENIE 06 - PĘTLE STERUJĄCE. Napisz program asemblerowy dla DSM-51, który wykona 10 razy pętlę, w której o Włączy buzer. (1 pkt.) o Wykona opóźnienie czasowe 300 ms (1 pkt.) o Włączy diodę. (1 pkt.) o Wykona opóźnienie czasowe 300 ms (1 pkt.) o Zwiększy wartość rejestru R1 o 1. (1 pkt.) o Wykona opóźnienie czasowe 300 ms (1 pkt.) o Wyłączy buzer (1 pkt.) Ćwiczenie 07 - Strona nr 10 ĆWICZENIE 06 - PĘTLE STERUJĄCE. Napisz program asemblerowy dla DSM-51, który działa według następującego algorytmu: Włącz buzer. (1 pkt.) W pętli dla liczb naturalnych n od 1 do 30 wykonaj: o Wykonaj opóźnienie czasowe ½ sekundy. (1 pkt.) o Kasuj wyświetlacz LCD. (1 pkt.) o Wyświetl liczbę parzystą w postaci HEX na wyświetlaczu LCD. (2 pkt.) o Oblicz kolejną liczbę parzystą (w kolejności rosnącej). (2 pkt.) Wyłącz buzer. (1 pkt.) (Odp hex: 02, 04, 06, 08, 0A, 0C, 0E, 10, 12, 14, 16, 18, 1A, 1C, 1E)