ksa4


KOMPUTEROWE SYSTEMY AUTOMATYKI

Projekt

Model banku

Grzegorz Barnik

Tomasz Pawłowski

AiR ISD

Cel projektu.

Zrealizować model banku (bankomatu) na zestawie uruchomieniowym dla mikrokontrolera MCS-51, oraz komputerem PC jako terminalem umożliwiającym dokonywanie operacji na rachunku bankowym: sprawdzenie stanu konta, wpłata i wypłata środków.

Realizacja.

Ze względu na dostępne narzędzia oraz możliwości sprzętu laboratoryjnego program realizujący postawione zadanie napisaliśmy w assemblerze, korzystając również z dodatkowych funkcji umożliwiających komunikację komputera PC (terminal) z zestawem uruchomieniowym mikrokontrolera.

Po uruchomieniu programu wyświetlany jest komunikat powitalny oraz dwie opcje do wybrania: 1.Logowanie, 2.Wyjście. Wybranie pierwszej opcji spowoduje pojawienie się napisu informującego o potrzebie wprowadzeniu numeru PIN. Wpisany PIN porównywany jest z numerami zapisanymi w pamięci i jeżeli jest zgodny z jednym z nich to wyświetlają się opcje dostępne dla konkretnego użytkownika (w tworzeniu modelu ograniczyliśmy się do dwóch użytkowników).

W tym momencie mamy możliwość sprawdzenia stanu konta oraz dokonać wpłat i wypłat. Zmienne zawierające stan konta podczas pracy systemu są przechowywana w rejestrach pomocniczych R1 i R2, co umożliwia aktualizację stanu konta zaraz po dokonanej operacji na rachunku.

Dodatkowe komentarze dotyczące programu w dołączonym listingu.

Wnioski.

Zrealizowanie zadania na dostępnym zestawie laboratoryjnym nie należało do najłatwiejszych. Lista rozkazów mikrokontrolera MCS-51 jest dosyć uboga w rozkazy skoków i porównań, co bardzo wpłynęło na długość kodu programu. W przypadku zwiększania liczby użytkowników banku na przeszkodzie mogłaby stanąć liczba rejestrów pomocniczych, których użyliśmy do operacji na rachunkach.

Listing programu.

locat equ 08000h

org locat

db 0a5h,0e5h,0e0h,0a5h

db 35,255,0,0

db 0,0,0,0

db 0,0,0,0

db 0,0,0,0

db 0,0,0,0

db 0,0,0,0

db 255,255,255,255

db 'Bank',0

org locat+64

;adresy funkcji

newline equ 95h

pcstr equ 92h

cin equ 7Fh

asc2hex equ 0B2h

wyswietl equ 3500h

ghex equ 87h

ghex16 equ 89h

pint16u equ 0A0h

pint8u equ 09Ah

phex16 equ 83h

ljmp naglowek

;zmienne

nag0: db ' BANK ' ,13,0

menu0: db 'Wybierz: ',13,0

menu1: db '1. Logowanie',13,0

menu2: db '2. Wyjscie',13,0

menubl: db 'Blad! Nie ma takiej opcji!',13,0

log0: db 'Podaj PIN:',13,0

opcje0: db '1. Wyplata',13,0

opcje1: db '2. Wplata',13,0

opcje2: db '3. Stan konta',13,0

opcje3: db '4. Wyjscie',13,0

pin01: db 10

pin02: db 23

osoba01: db 'Barnik Grzegorz',13,0

osoba02: db 'Pawlowski Tomasz',13,0

stan_konta01: db 12

stan_konta02: db 100

kwota: db 'Podaj kwote:',13,0

;strefy: db 3,3,1

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

naglowek:

lcall newline

mov dptr,#nag0

lcall pcstr

lcall newline

mov R1,#12 ;poczatkowy stan konta 01

mov R2,#100 ;poczatkowy stan konta 02

;koniec

menu:

lcall newline

mov dptr,#menu0

lcall pcstr

lcall newline

mov dptr,#menu1

lcall pcstr

mov dptr,#menu2

lcall pcstr

lcall cin ;czytanie klawiatury

lcall asc2hex

lcall wyswietl

cjne A,#2,menu_2 ;jak nie 2 to sprawdza dalej

ret ;jak 2 - wyjscie z programu

menu_2:

cjne A,#1,menu_b ;jak nie 1 to dalej (wyswietlenie bledu)

ljmp konto ;jak 1 - start

menu_b:

mov dptr,#menubl ;wyswietlenie wiadomosci o bledzie

lcall pcstr

ljmp menu ;ponowne wyswietlenie menu

;koniec menu glowne

konto:

lcall newline

mov dptr,#log0 ;napis 'podaj PIN'

lcall pcstr

lcall ghex ;wpisanie PIN

lcall wyswietl

cjne A,#16,skok01 ;sprawdzanie PIN, jesli nie rowny to sprawdzamy innego usera

;--------------------------pierwsza osoba-------------------------------------

lcall newline ;wypisanie osoby

mov dptr,#osoba01

lcall pcstr

opcje01:

lcall newline

mov dptr,#opcje0

lcall pcstr

mov dptr,#opcje1

lcall pcstr

mov dptr,#opcje2

lcall pcstr

mov dptr,#opcje3

lcall pcstr

lcall cin ;czytanie klawiatury

lcall asc2hex

cjne A,#4,menu1_4 ;jak nie 4 to dalej

ljmp menu ;jak 4 to wyjscie

menu1_4: ;stan konta

cjne A,#3,menu1_3 ;jak nie 3 to dalej

lcall newline

mov A,R1

lcall pint8u

lcall newline

ljmp opcje01

skok01:

ljmp nast_pin

menu1_3: ;wplata

cjne A,#2,menu1_2 ;jak nie 2 to sprawdza dalej

lcall newline

mov dptr,#kwota

lcall pcstr

lcall ghex ;dodanie do konta

lcall newline

mov R0,A

mov A,R1

add A,R0

mov R1,A

lcall pint8u

ljmp opcje01

menu1_2: ;wyplata

cjne A,#1,menu1_b

lcall newline

mov dptr,#kwota

lcall pcstr

lcall ghex ;odejmowanie

lcall newline

mov R0,A

mov A,R1

subb A,R0

mov R1,A

lcall pint8u

ljmp opcje01

menu1_b:

mov dptr,#menubl ;wyswietlenie wiadomosci o bledzie

lcall pcstr

ljmp opcje01

;---------------------------druga osoba-------------------------------------

nast_pin:

cjne A,#35,skok02

lcall newline

mov dptr,#osoba02

lcall pcstr

opcje02:

lcall newline

mov dptr,#opcje0

lcall pcstr

mov dptr,#opcje1

lcall pcstr

mov dptr,#opcje2

lcall pcstr

mov dptr,#opcje3

lcall pcstr

lcall cin ;czytanie klawiatury

lcall asc2hex

lcall wyswietl

cjne A,#4,menu2_4 ;jak nie 4 to dalej

ljmp menu ;jak 4 to wyjscie

menu2_4: ;stan konta

cjne A,#3,menu2_3 ;jak nie 3 to dalej

lcall newline

mov A,R2

lcall pint8u

ljmp opcje02

skok02:

ljmp dalej

menu2_3: ;wplata

cjne A,#2,menu2_2 ;jak nie 2 to sprawdza dalej

lcall newline

mov dptr,#kwota

lcall pcstr

lcall ghex ;dodawanie

lcall newline

mov R0,A

mov A,R2

add A,R0

mov R2,A

lcall pint8u

ljmp opcje02

menu2_2: ;wyplata

cjne A,#1,menu2_b

lcall newline

mov dptr,#kwota

lcall pcstr

lcall ghex ;odejmowanie

lcall newline

mov R0,A

mov A,R2

subb A,R0

mov R2,A

lcall pint8u

ljmp opcje02

menu2_b:

mov dptr,#menubl ;wyswietlenie wiadomosci o bledzie

lcall pcstr

ljmp opcje02

dalej:

ljmp konto

end



Wyszukiwarka

Podobne podstrony:
ksa4, Edukacja, studia, Semestr VIII, Komputerowe Systemy Automatyki, KSA-lab
ksa4, Edukacja, studia, Semestr VIII, Komputerowe Systemy Automatyki, KSA-lab

więcej podobnych podstron