Proste projekty dla PMC


W rozdziale umieściliśmy zbiór prostych projektów do zrealizowania w asemblerze PMC. W pierwszej kolejności należy narysować schemat blokowy tworzonego programu - nie starajcie się rozwiązywać problemu bezpośrednio w edytorze. Mając schemat blokowy przekształcamy każdą z operacji na ciąg instrukcji dla procesora PMC. Oto przykład rozwiązania:

 

Projekt przykładowy

Napisać program dla PMC, który odczyta liczbę dodatnią n, a następnie policzy sumę kolejnych wartości:
 

1 + (-2) + 3 + (-4) + 5 + (-6) +... + (+/-n)
 

Analiza

Program ma odczytać pewną wartość. Będziemy więc potrzebowali zmiennej na przechowanie tej wartości. Do odczytu liczby zastosujemy gotowy algorytm z poprzedniego rozdziału. Po odczytaniu tej liczby mamy sumować kolejne wartości od 1 do n, które przyjmują znak dodatni dla liczb nieparzystych, a znak ujemny dla parzystych. Będzie więc nam potrzebna następna zmienna przechowująca te wartości. Liczba jest parzysta, jeśli dzieli się przez 2. Skoro tak, to w zapisie dwójkowym ostatni bit musi mieć wartość 0. W przeciwnym razie po podzieleniu przez 2 otrzymywalibyśmy resztę 1:
 

2 - 10(2), 4 - 100(2), 6 - 110(2), 8 - 1000(2), 10 - 1010(2) - liczby parzyste
1 - 1(2), 3 - 11(2), 5 - 101(2), 7 - 111(2), 9 - 1001(2), 11 - 1011(2) - liczby nieparzyste
 

Wynika z tego, iż do stwierdzenia, czy dana liczba jest parzysta lub nie wystarczy zbadać ostatni, najmłodszy bit tej liczby. Kolejne liczby należy sumować. Suma musi być umieszczona w osobnej zmiennej. Oznaczmy więc zmienne następująco:
 

n - liczba sumowań
i - kolejne liczby naturalne, które będą sumowane
s - wartość sumy.
 

Teraz możemy przystąpić do narysowania odpowiedniego schematu blokowego, a następnie na jego podstawie utworzymy program dla PMC.


        RUN START

N:      DAT 0  ;tutaj trafi odczytana liczba
X:      DAT 0  ;zmienna pomocnicza
I:      DAT 1  ;kolejne liczby naturalne
S:      DAT 0  ;wartość sumy przemiennej

START:  LDA INP    ;odczytujemy znak z bufora
        JZR #START ;bufor zajęty?
        JMI #START ;bufor pusty?
LP1:    SUB #"0"   ;obliczamy wartość cyfry
        STA X      ;i zapamiętujemy ją tymczasowo
        LDA N      ;N przemnażamy przez 10
        MUL #10
        ADD X      ;dodajemy cyfrę
        STA N      ;zapisujemy wynik
LP2:    LDA INP    ;pobieramy kolejny znak
        JZR #LP2   ;czekamy na dostępność bufora
        JMI #LP3   ;ale kończymy, gdy pusty. Wynik w N
        JMP #LP1   ;inaczej przetwarzamy znak
LP3:    LDA N      ;sprawdzamy, czy n-i < 0
        SUB I
        JMI #0     ;jeśli tak, to stop
        LDA I      ;sprawdzamy, czy i jest parzyste
        AND #1     ;badając najmłodszy bit
        JZR #SPAR
        LDA S      ;i nieparzyste - dodajemy
        ADD I
        JMP #ON1
SPAR:   LDA S      ;i parzyste - odejmujemy
        SUB I
ON1:    STA S      ;uaktualniamy sumę
        INC I      ;zwiększamy i o 1
        JMP #LP3   ;i kontynuujemy pętlę
 

Projekt 1

Napisz program dla PMC, który wypisze na środku wyświetlacza znakowego słowo KONIEC, a następnie będzie je przesuwał w prawo i w lewo odbijając od krawędzi.

 

Projekt 2

Napisz program dla PMC, który będzie w kółko wypisywał na wyświetlaczu znakowym słówko KONIEC w ten sposób, iż będzie się ono wysuwało ze strony lewej i nikło po prawej stronie. Po całkowitym zniknięciu tego słówka ma się ono od nowa wysuwać literka po literce ze strony lewej i przemieszczać na prawo, aż do zniknięcia.

 

Projekt 3

Napisz program dla PMC, który będzie odczytywał teksty wprowadzane przez użytkownika i wyświetlał je na wyświetlaczu znakowym zmieniając wszystkie literki "a" na "o", a wszystkie literki "o" na "a". Duże znaki mają pozostać bez zmian.

 

Projekt 4

Napisz program dla PMC, który będzie wczytywał teksty wprowadzane przez użytkownika obliczając na bieżąco liczbę wpisanych przez niego samogłosek.

 

Projekt 5

Napisz program dla PMC, który będzie odczytywał teksty wprowadzane przez użytkownika i wyświetlał je na wyświetlaczu znakowym pomijając jednak wszystkie samogłoski i spacje.

 

Projekt 6

Napisz program dla PMC, który będzie odczytywał liczby dziesiętne wprowadzone przez użytkownika i na bieżąco obliczał ich sumę. Działanie programu ma być kończone w przypadku wpisania liczby 0.

 

Projekt 7

Napisz program dla PMC, który będzie odczytywał liczby dziesiętne wprowadzane przez użytkownika i na bieżąco liczył ilość liczb o wartości większej niż 10. Działanie programu ma być przerywane w przypadku podania przez użytkownika liczby o wartości 0.

 

Projekt 8

Napisz program dla PMC, który będzie odczytywał liczby dziesiętne wprowadzane przez użytkownika i na bieżąco wyszukiwał największą liczbę z dotychczas wprowadzonych. Działanie programu ma być przerywane w przypadku podania przez użytkownika liczby o wartości 0.

 

Projekt 9

Napisz program dla PMC, który wczyta liczbę podaną przez użytkownika, a następnie wyświetli na wyświetlaczu znakowym tyle literek "A", ile wynosi wartość wprowadzonej liczby.

 

Projekt 10

Napisz program dla PMC, który odczyta liczbę podaną przez użytkownika, a następnie policzy sumę kolejnych liczb naturalnych od 1 do podanej przez użytkownika liczby włącznie.

 

Projekt 11

Napisz program licznika, który na wyświetlaczu 7-mio segmentowym LED będzie wyświetlał kolejne liczby od 0 do 59. Po osiągnięciu wartości 59 licznik ten ma się zerować i zliczać od początku. Działanie programu ma być przerywane kliknięciem przycisku 0 na panelu IOP.

 

Projekt 12

Napisz program, który wyświetli na wyświetlaczu 7-mio segmentowym LED liczbę 12345, a następnie będzie po kolei zwiększał jej cyfry o 1. Gdy dana cyfra osiągnie wartość 9, to powinna zmieniać się na 0. Działanie programu ma być przerywane kliknięciem przycisku nr 0 na panelu IOP.

 

Projekt 13

Zaprojektuj na panelu wyświetlaczy 7-mio segmentowych 4-ro cyfrowy licznik w kodzie szesnastkowym zliczający wstecz od wartości FFFF. Program ma się kończyć po osiągnięciu przez ten licznik stanu 0000.

 

Projekt 14

Zaprojektuj program, który odczyta z portu INP liczbę dziesiętną, przeliczy ją na liczbę szesnastkową i wynik wyświetli na wyświetlaczu 7-mio segmentowym LED.

 

Projekt 15

Zaprojektuj program, który będzie monitorował stan przycisków IOP wyświetlając go jako liczbę w kodzie szesnastkowym na wyświetlaczu 7-mio segmentowym LED.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.