Tworzenie nowego projektu w asemblerze dla mikroprocesora z rodziny 8051 Katedra Automatyki, Wydział EAIiE Akademia Górniczo-Hutnicza w Krakowie Marcin Piątek Kraków 2008
1. Ważne uwagi i definicje Poniższy poradnik opisuje tworzenie przykładowego projektu w asemblerze dla procesora 8051. Został on stworzony jako pomoc dydaktyczna do laboratorium Elektroniki z Techniką Mikroprocesorową dla III roku kierunku Automatyka i Robotyka Akademii Górniczo-Hutniczej w Krakowie. Poradnik powstał z wykorzystaniem i jest przeznaczony do wykorzystania z wymienionymi niżej narzędziami: pakiet SDCC (Simple Device C Compiler) płytka prototypowa PRO-501, komputer PC. Przydatne dokumenty: schemat płytki prototypowej PRO-501, opis asemblera dla mikroprocesora 8051. 2. Asemblacja Do utworzenia nowego projektu należy stworzyć nowy katalog, w którym będą umieszczane pliki tego projektu. Nowy katalog tworzymy w katalogu Studenci umieszczonym na pulpicie. Najprostszą metodą na stworzenie nowego katalogu jest wybranie odpowiedniej opcji z menu kontekstowego, uruchamianego prawym przyciskiem myszy (Rysunek 1). Rysunek 1: Tworzenie nowego katalogu lub pliku Następnie w ten sam sposób tworzymy nowy plik tekstowy w utworzonym przez nas katalogu. Nadajemy mu charakterystyczną dla nas nazwę np. diody.asm. Plik ten następnie posłuży jako plik z kodem źródłowym dla pisanego przez nas programu. 2 z 9
Uwaga! W nazwie pliku nie mogą się pojawiać polskie znaki typu: ąęśćńź, znaki spacji oraz należy pamiętać o rozszerzeniu.asm! Na następnym etapie należy umieścić kod programu w utworzonym pliku. Po naciśnięciu lewego przycisku myszy na jego nazwie otworzy się edytor tekstu Kate, który możemy do tego wykorzystać (Rysunek 2). W pliku diody.asm wpisujemy kod i używamy opcji Save z menu File lub symbolu dyskietki na pasku, aby zapisać plik. Rysunek 2: Edytor tekstu Kate Treść podstawowego programu może przyjąć postać:.area MAIN(ABS).org 0x000 LJMP START.org 0x100 START: MOV P1, #0b10101010 LJMP START 3 z 9
Uwaga! W standardzie asmeblera przyjętym przez projekt SDCC dyrektywy zawsze rozpoczynamy kropką (np..org,.db,.area) każdy program pisany w czystym asemblerze powinien rozpoczynać się od dyrektywy.area MAIN(ABS) ustalającą sposób adresowania pamięci programu na bezwzględny (co pozwala na wykorzystanie dyrektywy.org) liczby w formacie szesnastkowym podajemy w formie 0x12AC, 0xA45F, 0xFFFF itp. liczby w formacie binarnym podajemy w formie 0b10101010, 0b11110000 itp. Następnie dokonujemy asemblacji pliku źródłowego. W tym celu otwieramy program konsoli (np. z menu głównego systemu System -> Konsola lub paska szybkiego uruchamiania) i przechodzimy do katalogu, w którym umieściliśmy plik z asemblerem (polecenie cd). Następnie uruchamiamy w konsoli polecenie: >> asx8051 -xlos diody.asm Po jego poprawnym wykonaniu w konsoli powinien pojawić się nowy znak zachęty (bez żadnych dodatkowych powiadomień Rysunek 3). Rysunek 3: Asemblacja Po asemblacji w naszym katalogu pojawi się kilka dodatkowych plików zawierających informacje na temat naszego projektu (więcej informacji w dokumentacji pod adresem: http://sdcc.sourceforge.net/doc/sdccman.html/). Przede wszystkim powinien w nim znajdować się plik o nazwie diody.rel, który będzie przez nas wykorzystywany na następnym etapie. 4 z 9
3. Linkowanie Do linkowania należy utworzyć plik sterujący linkera. Powinien on posiadać charakterystyczną dla nas nazwę typu diody.lnk, gdzie istotnym elementem jest rozszerzenie pliku (.lnk). Plik ten powinien znajdować się w katalogu projektu. W pliku tym umieszczamy instrukcje dla linkera, a ich przykładowa postać wygląda następująco: ;poczatek -mxiu diody.ihx diody.rel ;paramtery ;nazwa pliku wyjściowego ;nazwa pliku wejściowego -e ;koniec pliku sterujacego Uwaga! Proszę nie zapomnieć o zmodyfikowaniu nazw plików w pliku sterującym!! Znak ';' oznacza komentarz. Plikiem wejściowym jest plik o rozszerzeniu.rel. Plik wyjściowy zostanie utworzony w naszym katalogu i będzie posiadał rozszerzenie.ihx. Linkowanie uruchamiamy przy pomocy polecenia: >> aslink -f diody.lnk uruchomionego w konsoli. Parametrem wejściowym jest utworzony wcześniej plik sterujący diody.lnk. W wyniku na konsoli powinna pojawić się jego treść bez dodatkowych komunikatów (Rysunek 4). 5 z 9
Rysunek 4: Linkowanie 4. Przygotowanie pliku.hex Do przygotowania poprawnego (pełnego) obrazu pamięci programu pozostał jeszcze jeden krok: zmiana formatu pliku z ihx na hex. Możemy tego dokonać poprzez uruchomienie następującego polecenia w konsoli: >> packihx diody.ihx > diody.hex Wynik powinien wyglądać analogicznie do tego na Rysunku 5. 6 z 9
Rysunek 5: Zmiana formatu na hex Plik diody.hex może zostać użyty do zaprogramowania pamięci programu układu. 5. Programowanie Do programowania używamy programu o nazwie FLIP. Do jego uruchomienia używamy ikony na pasku do szybkiego uruchamiania (symbol procesora). Tuż po otwarciu program powinien wyglądać tak jak na Rysunku 6. 7 z 9
Rysunek 6: Widok programu FLIP tuż po uruchomieniu Pierwszym krokiem do zaprogramowania jest wybór właściwego procesora. W tym celu naciskamy symbol układu scalonego znajdujący się w lewym górnym rogu programu i w nowym oknie wybieramy procesor AT89C51RD2. Teraz możemy nawiązać połączenie z układem. Płytka powinna być podłączona do komputera przy pomocy przewodu RS232 oraz podłączona do zasilania. Układ należy wprowadzić w stan programowania poprzez naciśnięcie sekwencji guzików: naciśnij PSEN naciśnij RESET puść RESET puść PSEN Guzik RESET znajduje się obok gniazda do RS232, a guzik PSEN mniej więcej na środku płytki. Jeżeli operacja się powiodła wszelkie diody na płytce zgasną za wyjątkiem czerwonej diody obok przewodu zasilającego (oznaczającej poprawne zasilanie układu). Następnie przy pomocy programu FLIP nawiązujemy połączenie z układem. W tym celu naciskamy klawisz z symbolem przewodu komunikacyjnego w jego lewym górny rogu (obok wyboru mikroprocesora). W oknie, które się pojawi wybieramy RS232, a w następnym Port -> /dev/ttys0 i Baud -> 115200 oraz przyciskamy Connect (w tej kolejności). W efekcie główne okno programu FLIP powinno przyjąć postać jak na Rysunku 7. 8 z 9
Rysunek 7: Widok programu FLIP po nawiązaniu komunikacji z procesorem Teraz należy wczytać utworzony wcześniej przez nas plik hex do programu FLIP. Służy do tego ikona przedstawiająca otwartą książkę z czerwoną strzałką skierowaną do środka (trzecia licząc od prawej strony). Po wybraniu odpowiedniego pliku w oknie podpisanym Operations Flow zaznaczamy opcje Erase, Blank Check, Program, i Verify po czym naciskamy przycisk Run. Gdy wszystkie operacje zostaną zakończone pomyślnie możemy nacisnąć czerwony guzik Start Application co wprowadzi płytkę w tryb pracy. Jeśli wszystkie operacje zostały wykonane poprawnie nasz program zostanie wykonany przez mikroprocesor. Koniec. 9 z 9