79_81.pdf

(99 KB) Pobierz
Biblioteki mikroprocesorowych procedur standardowych EP1/97
Biblioteki procedur standardowych
K U R S
Biblioteki
mikroprocesorowych
procedur standardowych
Oferowany poprzez Internet
kod ród³owy zosta³ sprawdzony
w praktyce w czasie konstrukcji
oprogramowania systemowego kil-
ku sterowników. Procedury maj¹
ró¿norodny charakter i przezna-
czenie. Ka¿da procedura jest
przedstawiona w formie podpro-
gramu. Proponowane podprogra-
my s¹ u¿ywane w czêci oprog-
ramowania zajmuj¹cego siê prze-
twarzaniem odebranych danych,
czyli tam, gdzie istnieje mini-
malne przywi¹zanie progra-
mu do otoczenia mikroproceso-
ra. Z czasem do tej biblioteki
do³¹czymy opracowania czê-
ciowo zale¿ne od otoczenia pro-
cesora, oraz zajmiemy siê obs³ug¹
przerwañ.
Procedury publikowane w tej
rubryce s¹ dostêpne na koncie
WWW firmy AVT w Internecie.
Dla osób nie posiadaj¹cych dostê-
pu do Internetu publikujemy pe³-
ny tekst ród³owy procedur. Nie
przewidujemy rozprowadzania
tych bibliotek na dyskietkach.
Uznalimy bowiem, ¿e coraz wiêk-
sza popularnoæ Internetu mo¿e
sk³oni potencjalnych odbiorców
tego oprogramowania do zaintere-
sowania siê t¹ ogólnowiatow¹
sieci¹.
(starszy bajt jest pamiêtany w ko-
mórce o m³odszym adresie). D³u-
goæ liczb, obliczana w bajtach,
jest zmienna, zale¿nie od potrzeb.
W czasie uk³adania w³asnego
programu warto przeznaczyæ pew-
n¹ liczbê komórek pamiêci wew-
nêtrznej na bufor wyników po-
rednich. Autor przyj¹³, ¿e taki
bufor jest umiejscowiony w trzech
starszych bankach pamiêci o ad-
resie pocz¹tkowym 08H i d³ugoci
24 bajtów. W procesorach '51, po
ich zerowaniu, w tym obszarze
jest lokalizowany stos. Dno stosu
zosta³o wiêc przeniesione do ad-
resu 70H. Szesnacie komórek
przeznaczonych na stos wystar-
cza. Jeli jednak zaczyna nam
brakowaæ pamiêci wewnêtrznej,
np. ze wzglêdu na liczne, za-
gnie¿d¿aj¹ce siê odwo³ania do
stosu, to musimy siêgn¹æ po nieco
mocniejszy typ z rodziny '51, np.
80C32. Ma on 256 bajtów, z czego
starsze 128 bajtów jest adresowa-
nych tylko porednio, poniewa¿
dziel¹ one adresy z rejestrami fun-
kcji specjalnych, dostêpnych z ko-
lei tylko bezporednio.
Arytmetyka
Zaczniemy od procedur aryt-
metycznych. Operacje s¹ wykony-
wane na liczbach interpretowa-
nych jako liczby ca³kowite, któ-
rych zapis pokazano na rys.1
Listing 1.
;PODPROGRAM WIELOBAJTOWEGO dodawania
; WEJCIE:
; R0 - ADRES NAJM£ODSZEGO
; BAJTU PIERWSZEGO SK£ADNIKA
; R1 - ADRES NAJM£ODSZEGO BAJTU DRUGIEGO
; SK£ADNIKA, NIE MODYFIKOWANY
; R2 - LICZBA BAJTÓW
; WYJCIE:
; R0 - ADRES NAJM£ODSZEGO BAJTU WYNIKU
; R2=0
; PRZENIESIENIE C I PRZEPE£NIENIE OV JEST
; USTAWIANE W TAKI SPOSÓB, JAK W ROZKAZIE
; ADDC
; STAN WSKANIKA P NIE ODPOWIADA OGÓLNYM
; ZASADOM JEGO USTAWIENIA
AD:
CLR C
PUSH R0REG
AD1:
Rys. 1. Przyjêty przez autora
sposób zapisu liczb wielobajtowych.
MOV A,@R0
ADDC A,@R1
MOV @R0,A
DEC R0
DEC R1
DJNZ R2,AD1
POP R0REG
RET
Elektronika Praktyczna 1/97
79
Wielu pocz¹tkuj¹cych
programistów mikrokomputerów
jednouk³adowych mo¿e
odczuwaæ brak zaplecza
w postaci biblioteki gotowych
procedur. Bez niej droga do
sukcesu, czyli dobrego
gotowego programu jest
d³u¿sza i bardziej uci¹¿liwa.
Biblioteka taka, zawieraj¹ca
szczegó³owo udokumentowane
i sprawdzone modu³y
programowe jest bardzo cenna
i oddaje nieocenione us³ugi.
Gromadzi siê wiêc te zasoby.
Wystarczy do nich siêgn¹æ
i do³¹czyæ odpowiedni
fragment do tworzonego
oprogramowania. Namiastkê
takiej biblioteki w³anie
proponujemy.
Od Czytelnika wymagamy
tylko znajomoci listy
podstawowych rozkazów tych
mikrokontrolerów, dla których
te procedury s¹ przeznaczone.
Zaczniemy od biblioteki dla
najbardziej popularnej rodziny
mikroprocesrów, jak¹ jest
niew¹tpliwie rodzina '51.
Prezentowane w artykule
procedury s¹ dostêpne w
sieci Internet pod adresem
www.atm.com.pl/~avt.
30445283.001.png
Biblioteki procedur standardowych
Rys. 2. Sposób mno¿enia liczb wielobajtowych.
Dodawanie
wielobajtowe
Dodawanie jedno-
bajtowego jest trywial-
ne, bowiem zapew-
niaj¹ to rozkazy doda-
wania ADD i dodawa-
nia z przeniesieniem
ADDC z ró¿norodny-
mi argumentami. My
zajmiemy siê dodawa-
niem wielobajtowym.
Uniwersalna procedu-
ra wielobajtowego dodawania
przedstawiona jest na listingu 1 .
Czêstym b³êdem pocz¹tkuj¹-
cych programistów jest brak ze-
rowania wskanika przeniesienia
C. Warto przyj¹æ od teraz za³o-
¿enie, ¿e wywo³ywana procedura
pracuje w rodowisku programo-
wym o nieznanych parametrach
wejciowych (z wyj¹tkiem para-
metrów pocz¹tkowych, które ma
ona przetwarzaæ) i powinna sama
je ustaliæ. Unikniemy wtedy nie-
spodzianek, bowiem zasadnicza
czêæ procedury pracuje popra-
wnie, a b³¹d tkwi gdzie indziej.
Wynik dodawania jest umiesz-
czany w miejsce pierwszego sk³ad-
nika sumy porednio adresowane-
go rejestrem R0.
liczb ujemnych powstaj¹ przez
zanegowanie bitów modu³u (war-
toci bezwzglêdnej) tej liczby i do-
danie jedynki. Np. +5 to 0101, za
-5 to zanegowane 0101, czyli
1010, plus 1, czyli w koñcu 1011.
Ciekaw¹ w³aciwoci¹ tego ko-
du (w skrócie nazywanego U2)
jest to, ¿e ponowna negacja bitów
liczby ujemnej i dodanie 1 spowo-
duje otrzymanie liczby dodatniej
równej co do wartoci bezwzglêd-
nej liczbie ujemnej. W naszym
przyk³adzie 1011 po inwersji to
0100, a plus 1 daje 0101, czyli 5.
Prosta procedura dokonuje uzu-
pe³nienia do dwóch liczby wie-
lobajtowej ( listing 3 ).
Listing 2.
;PODPROGRAM WIELOBAJTOWEGO ODEJMOWANIA
; WEJCIE:
; R0 - ADRES NAJM£ODSZEGO BAJTU ODJEMNEJ
; R1 - ADRES NAJM£ODSZEGO BAJTU ODJEMNIKA
; R2 - LICZBA BAJTÓW
; WYJCIE:
; R0 - ADRES NAJM£ODSZEGO BAJTU WYNIKU
; R2=0
; PO¯YCZKA C I PRZEPE£NIENIE OV S¥
; USTAWIANE W TAKI SPOSÓB, JAK W ROZKAZIE
; SUBB
; STAN WSKANIKA P NIE ODPOWIADA OGÓLNYM
; ZASADOM JEGO USTAWIENIA
Listing 4.
; PODPROGRAM MNO¯ENIA LICZB DWUBAJTOWYCH
; PISA£ I TESTOWA£: MIROSLAW LACH, AVT
; WEJCIE:
; R0 - ADRES NAJM£ODSZEGO BAJTU MNO¯NEJ
; R1 - ADRES NAJM£ODSZEGO BAJTU MNO¯NIKA
; WYJCIE:
; ILOCZYN JEST UMIESZCZANY W MIEJSCE CZYNNIKÓW
; ILOCZYNU, GDZIE ZLO¯ENIE BAJTÓW
; (R0-1):(R0):(R1-1):(R1) DAJE WYNIK (R0-1) -
; BAJT NAJSTARSZY, ZA R0 I R1 S¥ WARTOCIAMI
; WEJCIOWYMI ADRESÓW
; ZALECA SIÊ, ABY MNO¯NA I MNO¯NIK ZAJMOWA£Y
; CZTERY KOLEJNE BAJTY
; U¯YWANE ZASOBY:
; ACC,B,R0,R1,R2,R3,R4,R5
; W DEKLARACJACH ZMIENNYCH ZDEFINIOWAÆ
; BEZPOREDNIE ADRESY REJESTRÓW JAKO
; R2REG EQU 2
; R3REG EQU 3
; R4REG EQU 4
; R5REG EQU 5
SUB:
CLR C
PUSH R0REG
SUB1:
MOV A,@R0
SUBB A,@R1
MOV @R0,A
DEC R0
DEC R1
DJNZ R2,SUB1
POP R0REG
RET
Listing 3.
;PODPROGRAM UZUPE£NIENIA DO 2
;PISA£ I TESTOWA£: MIROSLAW LACH,AVT
; WEJCIE:
; R0 - ADRES NAJM£ODSZEGO BAJTU LICZBY
; R2 - LICZBA BAJTÓW
; LOKALNA ZMIENNA R2REG JEST ADRESEM REJESTRU
; R2 Z BANKU 0 PAMIÊCI
; LOKALNA ZMIENNA R0REG JEST ADRESEM REJESTRU
; R0 Z BANKU 0 PAMIÊCI
;WYJCIE:
; R0 - ADRES NAJM£ODSZEGO BAJTU LICZBY
; UZUPE£NIONEJ DO DWÓCH
R2REG
Odejmowanie
Przez analogiê do dodawania,
tworzymy podprogram wielobajto-
wego odejmowania o adresie SUB
( listing 2 ).
Stan wskaników programo-
wych po wykonaniu podprogramu
odejmowania, czy jak poprzednio
dodawania, nie jest bez znacze-
nia, bowiem mo¿e byæ istotny
w dalszej czêci budowanego op-
rogramowania. Najwa¿niejszy bê-
dzie dla nas stan wskanika prze-
niesienia C. Tam zostanie zapisa-
na po¿yczka (przeniesienie). Op-
rócz tego poprawnie zostanie usta-
wiony znacznik przepe³nienia OV,
u¿ywany w operacjach na licz-
bach zapisanych w kodzie uzupe³-
nieniowym do dwóch.
Przy ustawieniu CY nale¿y
interpretowaæ otrzyman¹ ró¿nicê,
jak liczbê ujemn¹. Wynik odejmo-
wania jest zapisany w kodzie uzu-
pe³nieniowym do dwóch. Jest to
odmiana kodu binarnego, s³u¿¹ce-
go do zapisu liczb ze znakiem.
Liczby dodatnie s¹ w tym kodzie
zapisane identycznie jak w natu-
ralnym kodzie binarnym, za zapis
MNOZ2B:
MOV A,@R0
; W ACC JEST X
MOV B,@R1
; W B JEST Y
MUL AB
; X*Y
MOV R2,A
; REJESTRY R5-R2
; PRZECHOWUJ¥ WYNIK POREDNI
MOV R3,B
; SUMY CZ¥STKOWEJ
DEC R0
MOV A,@R0
; W ACC JEST X+1
MOV B,@R1
; W B JEST Y
MUL AB
; (X+1)*Y
EQU 2
ADD A,R3
MOV R3,A
CLR A
ADDC A,B
MOV R4,A
CLR A
ADDC A,#0
MOV R5,A
INC R0
DEC R1
MOV A,@R0
R0REG
EQU 0
UZUP:
PUSH R2REG ; CHOWAMY REJESTRY R0 I R1
PUSH R0REG ; JESZCZE SIÊ PRZYDADZ¥
UZUP1:
MOV A,@R0
CPL A
; INWERSJA BITÓW
POSZCZEGOLNYCH BAJTOW
MOV @R0,A
DEC R0 ; MODYFIKACJA WSKANIKA
; ADRESOWEGO
DJNZ R2,UZUP1 ; CZY S¥ JESZCZE JAKIE
; BAJTY?
POP R0REG ; WYSTARCZY, TERAZ
; ODTWARZAMY R0 I R2
POP R2REG ; PO TO, ABY DODAÆ JEDYNKÊ
MOV A,@R0 ; DO PIERWSZEGO BAJTU
ADD A,#1 ; DODAJEMY JEDYNKÊ
MOV @R0,A ; TRZEBA TO JESZCZE
; SCHOWAÆ
DEC R0 ; TERAZ ZMODYFIKOWAÆ
; WSKANIK ADRESOWY
DJNZ R2,UZUP2 ; CZY TO JEST JEDYNY BAJT?
RET
; W ACC JEST X
MOV B,@R1
; W B JEST Y+1
MUL AB
; X*(Y+1)
ADD A,R3
MOV R3,A
MOV A,R4
ADDC A,B
MOV R4,A
CLR A
ADDC A,R5
MOV R5,A
DEC R0
MOV A,@R0
; W ACC JEST X+1
MOV B,@R1
; W B JEST Y+1
; TAK, TO BY£ JEDYNY BAJT,
; CZYLI KONIEC PROCEDURY
MUL AB
; (X+1)*(Y+1)
ADD A,R4
MOV R4,A
MOV A,R5
ADDC A,B
MOV R5,A
MOV @R0,R5REG
INC R0
MOV @R0,R4REG
MOV @R1,R3REG
INC R1
MOV @R1,R2REG
RET
UZUP2:
MOV A,@R0 ; DO POZOSTA£YCH BAJTÓW
ADDC A,#0 ; TRZEBA DODAÆ ZERO PO TO
MOV @R0,A ; ABY DODAÆ EWENTUALNE
; PRZENIESIENIE
DEC R0 ; MODYFIKACJA WSKANIKA
; ADRESOWEGO, JU¯ NIEDALEKO
DJNZ R2,UZUP2 ; CZY TO WSZYSTKIE BAJTY,
; JELI NIE - NA POCZ¥TEK
; PETLI
RET
; UFF, ZAKOÑCZYLIMY
80
Elektronika Praktyczna 1/97
30445283.002.png 30445283.003.png
Biblioteki procedur standardowych
Mno¿enie
W mikroprocesorach rodziny
'51 istnieje rozkaz mno¿enia,
MUL AB, ale dotyczy on mno¿e-
nia jednobajtowego. Mno¿na
i mno¿nik s¹ umieszczone w aku-
mulatorze i rejestrze B. Iloczyn tra-
fia z powrotem do tej pary rejestrów,
przy czym m³odsza czêæ znajduje
siê w akumulatorze, a starsza jest
umieszczona w B.
Rozkaz ten bêdzie bardzo u¿y-
teczny do wykonania mno¿enia
wielobajtowego. Na rys. 2  pokaza-
no znan¹ z lekcji arytmetyki me-
todê pisemnego mno¿enia liczb
wielocyfrowych. Ta w³anie zasa-
da jest wykorzystana do budowy
algorytmu mno¿enia liczb wielo-
bajtowych.
Mno¿enie liczb wielobajtowych
wykonujemy poprzez mno¿enie
pojedynczych bajtów za pomoc¹
rozkazu MUL. Tak otrzymane ilo-
czyny cz¹stkowe musimy odpo-
wiednio dodawaæ do wyniku, czy-
li z w³aciwym przesuniêciem,
wed³ug przepisu pokazanego na
rys. 2. Nie nale¿y zapominaæ
o dodawaniu iloczynu cz¹stkowego
do nastêpnego bajtu, po to aby nie
zgubiæ ewentualnego przeniesienia.
Proponujemy nastêpuj¹ce ro-
dzaje podprogramów mno¿enia
ró¿ni¹ce siê d³ugoci¹ mno¿onych
liczb:
-mno¿enie liczb trzybajtowych;
-mno¿enie liczb dwubajtowych
( listing 4 );
-mno¿enie liczby piêciobajtowej
i jednobajtowej;
-mno¿enie liczby dwubajtowej
i jednobajtowej ( listing 5 ).
Opis przygotowania paramet-
rów wejciowych oraz umiejsco-
wienie wyniku zawarto w komen-
tarzach w nag³ówkach plików.
Miros³aw Lach, AVT
Listing 5.
; PODPROGRAM MNO¯ENIA LICZBY
; DWUBAJTOWEJ I JEDNOBAJTOWEJ
; WEJCIE:
; R1:R0 - MNO¯NA
; R2 - MNO¯NIK
; WYJCIE:
; R5:R4:R3 - ILOCZYN, R5 - NAJSTARSZY
MNOZ2Z1B:
MOV A,R0
MOV B,R2
MUL AB
MOV R3,A
MOV R4,B
MOV A,R1
MOV B,R2
MUL AB
ADD A,R4
MOV R4,A
MOV A,B
ADDC A,#0
MOV R5,A
RET
Procedury przedstawione w arty -
kule dostêpne s¹ poprzez Internet
w pliku spakowanym KURS1.ARJ
Elektronika Praktyczna 1/97
81
30445283.004.png
Zgłoś jeśli naruszono regulamin