Laboratorium Układów Mikroprocesorowych |
||||||
Rok akademicki |
Termin |
Rodzaj studiów |
Kierunek |
Prowadzący |
Grupa |
Sekcja |
2008/2009 |
Wtorek 18:15-19:45 |
wieczorowe |
INF |
GD |
2 |
1 |
Sprawozdanie z ćwiczenia numer 22
Data wykonania ćwiczenia: 2008-11-27
Temat ćwiczenia:
Mikrokontrolery rodziny 8051
Skład podsekcji 2: |
Robert Piekorz Sylwester Bednorz |
Rafał Pulnar Anna Randak Damian Machnik
|
|
|
|
|
|
|
Skład podsekcji 3: |
|
Rafał Skowron Henryk Nycz |
Piotr Hankiewicz |
Michał Szczęsny |
|
|
|
|
Skład podsekcji 1:
|
Rafał Pacan Paweł Sadowski Grzegorz Kwiatkowski Robert Uszok |
Wojciech Szymoszek Ireneusz Zydroń
|
|
|
|
|
|
|
|
|
1. CEL ĆWICZENIA
Celem ćwiczenia jest zapoznanie się z mikrokomputerem jednoukładowym z rodziny 8051, oraz metodologią uruchamiania oprogramowania na ten komputer.
Ćwiczenia do wykonania:
„Program z krążącą jedynką” - odczytuje z portu P0 dane: P0.0 - taktowanie, program reaguje na zmianę z 0 na 1, P0.1 - kierunek przesuwania 1 prawo 0 lewo, na port P1 wystawia odpowiednio zera i jedną jedynkę która "krąży" w takt "zegara" P0.0 .
„Program ze znikającą jedynką” - odczytuje z portu P0 dane: P0.0 - taktowanie, program reaguje na zmianę z 0 na 1, P0.1 - kierunek przesuwania 1 prawo 0 lewo, na port P1 wystawia odpowiednio zera i jedną jedynkę która "krąży" w takt "zegara" P0.0 , ma przechodzić z ostatniej pozycji do pierwszej, albo z pierwszej do ostatniej przez niewidoczny bit.
Stworzyć program przepisujący ciąg znaków. Dopuszczalne są tylko litery małe, duże i cyfry. Przepisany ciąg ma zostać zmodyfikowany:
a./ Duże litery zostaną zamienione na małe.
b./ Małe litery pozostaną bez zmian.
c./ Cyfry zostaną zamienione na spacje.
d./ Ciąg zaczyna się pod adresem 20h w pamięci.
e./ Zmodyfikowany ciąg należy zapisać w te samo miejsce.
f./ Program ma się zakończyć po napotkaniu gwiazdki.
2. ROZWIĄZANIE PROBLEMU
Program z krążącą jedynką [podsekcja 1].
Analiza:
Rozwiązanie programu opiera się przede wszystkim na dwóch pętlach prawo i czekaj. Ich działanie polega na przesunięciu bitowym danej liczby rozkazami rr i rl. Ponieważ rozkazy te działają tylko na akumulatorze wartość portu P1 zostaje przed przesunięciem zapisana w akumulatorze a następnie ponownie przepisana na port P1. Wartość początkowa portu P1 została ustalona na początku programu.
Kod programu:
org 0
mov A, #1 ;wartość początkowa
mov P1, A ;wysłanie jej na port P1
start: jnb P0.0, start ;wykona skok jeśli P0.0 jest wyzerowany
jb P0.1, prawo ;wykona skok jeśli P0.1 jest ustawiony
rl A ; przesuwa w lewo zawartość akumulatora
mov P1, A ;przepisuje zawartość akumulatora na port P1
czekaj: jb P0.0, czekaj ;wykona skok jeśli P0.0 jest ustawiony
sjmp start ;skok do pętli start
prawo: rr A ;przesuwa w prawo zawartość akumulatora
mov P1, A ;przepisuje zawartość akumulatora na port P1
sjmp czekaj ;skok do pętli czekaj
Wnioski:
Napisanie programu nie sprawiło większych trudności pozwoliło jednak na utrwalenie podstawowych zasad programowania w asemblerze 8051. Symulator 8051 [AVSIM51] dał nam możliwość sprawdzenia działania programu na komputerze bez podłączenia fizycznego procesora, diod lub innych układów. W prosty sposób można wykorzystać porty jako wejścia oraz wyjścia.
Program działa prawidłowo i był okazany prowadzącemu jeszcze na zajęciach.
Program ze znikającą jedynką [podsekcja 2]:
Analiza:
Rozwiązanie programu jest bardzo podobne do rozwiązania programu z krążącą jedynką opiera się również na tych samych założeniach. Zastosowano tutaj dodatkowy bit C. Spełnia on rolę bitu ukrywającego jedynkę na jeden `takt'.
Kod programu:
org 0
clr C
mov A, #1
mov P1, A
start: jnb P0.0, start
jb P0.1, prawo
rlc A
mov P1, A
czekaj: jb P0.0, czekaj
sjmp start
prawo: rrc A
mov P1, A
sjmp czekaj
Wnioski:
Jako 9 bit przez który ma przechodzić jedynka został wykorzystany bit C. Dzięki temu można było minimalnie zmodyfikować program z zadania pierwszego, żeby spełniał założenia zadania drugiego.
Program przepisujący ciąg znaków [podsekcja 3]:
Analiza:
Główna zasada działania programu polega na sprawdzeniu kodów ASCII poszczególnych znaków i w zależności od wyników, podjęciu odpowiedniego działania. Wszystkie operacje realizowane są w akumulatorze. Program kończy się po napotkaniu gwiazdki (*) lub po zmodyfikowaniu wszystkich liter i znaków i napotkaniu gwiazdki.
Kod programu:
org 0
start: mov R0, #20h ; adres poczatku tekstu
petla: mov A, @R0 ; pobranie znaku z pamieci
cjne A, #42, dalej1 ; jesli nie gwiazdka, to idziemy dalej
sjmp koniec ; jesli gwiazdka, to koniec programu
dalej1: clr C ; zerowanie znacznika przeniesienia
subb A, #3Ah ; sprawdzenie czy liczba
jc liczba
mov A, @R0 ; ponowne pobranie znaku z pamieci
subb A, #5Bh ; sprawdzenie, czy duza litera
jc zmien
sjmp dalej2 ; ciag dalszy
zmien: mov A, @R0 ; pobranie znaku z pamieci
add A, #32 ; zamiana duzej litery na mala (dodanie 32 do znaku ascii)
mov @R0, A ; zapisanie znaku do pamieci
sjmp dalej2 ; ciag dalszy
liczba: mov @R0, #32 ; zamiana liczb na spacje
dalej2: inc R0 ; nastepny bajt pamieci
sjmp petla ; skok do petli
koniec: sjmp koniec ; koniec programu
nop
Wnioski:
Do przeprowadzenia symulacji wykorzystano symulator avsim51, który stanowił pomocne narzędzie, ponieważ nie tylko umożliwiał krokowe wykonywanie programu oraz obserwowanie portów i stanu pamięci, ale również zmianę wartości podawanej na poszczególne porty.