Politechnika Białostocka Wydział Mechaniczny Instrukcja do zajęć laboratoryjnych Temat ćwiczenia: Arytmetyka układów cyfrowych część 1 dodawanie i odejmowanie liczb binarnych Numer ćwiczenia: 1 Laboratorium z przedmiotu: Technika cyfrowa i mikroprocesorowa Kod: Opracował: dr inż. Marcin Derlatka 25
Wydział Mechaniczny Katedra Automatyki i Robotyki KOD: 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4
I. WPROWADZENIE a) kody liczbowe. Najbardziej rozpowszechnionymi kodami liczbowymi są kody zwane naturalnymi. Zapis liczb w kodzie naturalnym jest pozycyjny to znaczy że w kodowanym słowie A reprezentującym liczbę dziesiętną L(A) każdy znak a i przyjętego alfabetu zajmuje ściśle określoną pozycję (i). Każda pozycja ma przyporządkowaną odpowiednią wagę w i = p i gdzie p jest tak zwaną podstawą przyjętego kodu liczbowego. I tak np. naturalny kod dziesiętny ma podstawę p=1. Przykład: Naturalna liczba dziesiętna A=3751 interpretowana jest jako: L(A)=3*1 3 +7*1 2 +5*1 1 +1*1 3 a i lub inaczej L(A)= 1 W kodzie szesnastkowym zwanym również heksadecymalnym podstawą jest liczba 16. W kodzie tym oprócz cyfr używa się liter które określają odpowiednio liczby A 1, B 11, C 12, D 13, E 14, F 15. Przykład: Liczba szesnastkowa A=D5A2 interpretowana jest jako: L(A)=13*16 3 +5*16 2 +1*16 1 +2*16 3 a i lub inaczej L(A)= i 16 W kodzie binarnym podstawą jest cyfra 2. Do zapisu liczb używa się tyko dwóch cyfr 1 i. Przykład: Liczba binarna A=111 interpretowana jest jako: L(A)=1*2 5 +*2 4 +*2 3 +1*2 2 +*2 1 +1*2 5 a i lub inaczej L(A)= 2 Kod ten jest nazywany naturalnym kodem binarnym (NKB). W tym miejscu warto wspomnieć o prostym sposobie przeliczania liczb z kodu binarnego na szesnastkowy (heksadecymalny) i odwrotnie, gdyż czynność ta jest dość często wykorzystywana w technikach cyfrowych i mikroprocesorowych. Weźmy na przykład liczbę heksadecymalną xe7. Teraz przeliczmy poszczególne symbole na kod binarny tj. 7 odpowiada binarnie 111 a E odpowiada 111 i i i odwrotnie liczbę 1111 rozbijamy na dwie tetrady (czyli liczby czterobitowe) 11 (dziesiętnie 1) i 11 (dziesiętnie 5) czyli A5 heksadecymalnie
b)dodawanie dwóch liczb jednobajtowych Dodawanie jest podstawową operacją arytmetyczną. W systemie dziesiętnym przeprowadza się ją w sposób pokazany poniżej. 1 19 przeniesienie + 24 43 Dodawanie przebiega w tylu krokach ile cyfr ma każda liczba. W każdym kroku dodajemy do siebie dwie cyfry po jednej z każdej liczby, poczynając od liczby najmniej znaczącej do najbardziej znaczącej. Wynikiem tego dodawania są dwie cyfry: jedna cyfra wyniku druga cyfra przeniesienia, która będzie dodana w następnym kroku do cyfr znajdujących się na bardziej znaczącej pozycji np. w 9+4=13; 3 cyfra wyniku 1 cyfra przeniesienia. Wbrew pozorom przeniesienie występuje zawsze, lecz kiedy jest równe zeru zostaje pominięte. W mikroprocesorze wystąpienie przeniesienia sygnalizowane jest przez ustawienie flagi C (ang. carry) występującej w rejestrze STATUS (w procesorach PIC16Fxx jest to bit tego rejestru). Dodawanie tych samych liczb w kodzie binarnym będzie wyglądała następująco: 1 + 111 11 1111 c) Dodawanie liczb binarnych ze znakiem. Dla uproszczenia operacji dodawania liczb ze znakiem wprowadzono nowy sposób kodowania liczb. Przyjmując że waga najbardziej znaczącego bitu wynosi nie 2 n-1 (n ilość cyfr (symboli) liczby) a 2 n-1 to wszystkie liczby zaczynające się (mające najbardziej znaczący bit) od będą dodatnie a od 1 ujemne. Wartość n-bitowej liczby w takim zapisie n 2 wyniesie : w= - 2 n-1 a n + 2 i ai np.= =1 1=2 111=7 1= - 8 (-8+) 11= - 7 (-8+1) 111= - 5 (-8+3) Na początku zapis ten może wydawać się dziwaczny, lecz jego zalety są ogromne. Arytmetyka wszystkich mikroprocesorów oparta jest na tym właśnie zapisie nazywanym zapisem w kodzie uzupełnień do 2 U2. Ten rodzaj kodowania rozwiązuje problem podwójnego zera oraz umożliwia łatwą realizację odejmowania. Dodawanie w kodzie U2 przebiega w ten sam sposób co w NKB, tylko trzeba pamiętać o innej reprezentacji liczb
Jeżeli przy dodawaniu dwóch liczb o jednakowych znakach okaże się, że wynik ma znak przeciwny, będzie to świadczyło o przekroczeniu zakresu przez wynik, a więc o powstaniu nadmiaru (ang. overflow). Aby odjąć dwie liczby należy najpierw zanegować odjemnik i dodać do niego 1, po czym dodać wynik do odjemnej. II. CEL ĆWICZENIA LABORATORYJNEGO Celem ćwiczenia laboratoryjnego jest zapoznanie studentów z podstawami arytmetyki układów cyfrowych, a także ze zintegrowanym środowiskiem projektowym MPLAB. III. PRZEBIEG ĆWICZENIA 1. Napisać program realizujący następujące założenia (podpunkty opisują zadania alternatywne wyboru dokonuje prowadzący)) a) Dodawanie dwu liczb jednobajtowych w kodzie NKB. b) Dodawanie dwu liczb jednobajtowych w kodzie U2. c) Dodawanie dwu liczb dwubajtowych w kodzie NKB. d) Dodawanie dwu liczb dwubajtowych w kodzie U2.
2. Prześledzić jego działanie za pomocą symulatora MPLAB. a) Utwórz projekt zgodnie z instrukcją Zintegrowane środowisko projektowe MPLAB wraz z programatorem PICSTART Plus, b) przeprowadź symulację działania programu i oceń jego poprawność. IV. SPRAWOZDANIE STUDENCKIE Sprawozdanie powinno zawierać: 1. Wydruk programu zaopatrzonego w komentarze, 2. Obserwacje i wnioski. V. LITERATURA. 1. Pietraszek S.: Mikroprocesory jednoukładowe PIC, Wyd. Helion 22. 2. Jabłoński T.: Mikrokontrolery PIC16F8x w praktyce. Wyd. BTC, 22. 3. MPLAB IDE, Simulator, Editor, User s Guide, Microchip Technology Inc., 1996. 4. PIC16/17 microcontroller data book, Microchip Technology Inc., 1996. 5. J. Biernat Arytmetyka komputerów, Wydawnictwo Naukowe PWN, Warszawa 1996. 6. B. Pochopień Arytmetyka systemów cyfrowych, Wydawnictwo Politechniki Śląskiej, Gliwice 1994. 7. O. Limann, H. Pelka Elektronika bez wielkich problemów. Technika cyfrowa, Wydawnictwa Komunikacji i Łączności, Warszawa 1991.