Politechnika Wrocławska
Mikrokontrolery rodziny ST7
Jarosław Emilianowicz
Wrocław 2011
2 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
S
PIS TREŚCI
A
SEMBLER
........................................................................ 3
Etykiety, rozkazy i komentarze ............................................................ 3
Pierwszy program .............................................................................. 4
Formatka .......................................................................................... 5
ST
V
ISUAL
D
EVELOP
.......................................................... 6
Konfiguracja przestrzeni roboczej ......................................................... 6
Konfiguracja projektu ......................................................................... 7
Kompilacja projektu ........................................................................... 9
Uruchamianie projektu ..................................................................... 11
S
CHEMATY BLOKOWE
........................................................ 13
Symbole schematów blokowych ......................................................... 13
Przykładowy algorytm ...................................................................... 14
M
IKROKONTROLER
ST72334 ............................................ 16
Charakterystyka .............................................................................. 16
Opis wyprowadzeń ........................................................................... 17
P
AMIĘĆ
......................................................................... 19
Rezerwacja zmiennych ..................................................................... 19
Inicjalizacja stałych .......................................................................... 19
Przypisanie wartości ......................................................................... 20
S
TEROWANIE PROGRAMEM
................................................. 21
Skoki i wywołania bezwarunkowe ....................................................... 21
Testowanie bitów i skoki warunkowe .................................................. 21
Strona
| 3
J. Emilianowicz
Mikrokontrolery rodziny ST7
A
SEMBLER
Etykiety,
rozkazy
i komentarze
Język mnemoniczny jest łącznikiem pomiędzy maszynami, których język jest
wyłącznie numeryczny, a ludźmi, którym wygodniej jest używać znaków i słów.
Język mnemoniczny jest łatwo tłumaczony na język maszynowy, bo charakteryzuje
go zależność słowo-na-słowo, pomiędzy językiem numerycznym a językiem
słownym, mnemonicznym. Język mnemoniczny jest także nazywany asemblerem, a
program tłumaczący na język maszynowy Asemblerem.
Linia programu źródłowego składa się z czterech elementów:
-
etykiety,
-
mnemonika rozkazu lub dyrektywy asemblera oraz linkera
-
operanda (liczby, rejestru), gdzie liczba operandów zależy od użytego
rozkazu
-
komentarza (zawsze rozpoczynającego się od średnika)
dzielenie sub A,#$22 ; dzielenie akumulatora przez warto
ść
$22
Etykiety powinny rozpoczynać się od samego boku dokumentu, natomiast rozkazy
wraz z operandami powinny być odsunięte przynajmniej o jedną spację.
dzielenie
sub A,#$30 ; dzielenie akumulatora przez warto
ść
$30
sub A,#$22 ; dzielenie akumulatora przez warto
ść
$22
Etykiety są symbolicznymi adresami i wskazują miejsca w programie, do którego
mogą następować skoki. Oznaczają też wyraźnie wybrany blok rozkazów, przez co
zwiększa się czytelność pliku. Muszą zaczynać się od kropki i od lewego marginesu
oraz nie mogą zawierać znaków spacji.
Lista mnemoników jest definiowana przez producenta mikrokontrolera. Zawiera ona
listę kodów specyficznych dla danego modelu mikrokontrolera. Rozkazy są
powiązane z funkcją instrukcji. Część z nich jest dokładną nazwą instrukcji, np.
ADD
(add), część skrótem, jak
SUB
(substract), a inne akronimen, jak
TNZ
(Test for
Negative or Zero).
Liczby mogą być zapisane w jednym z powszechnie stosowanych formatów,
przedstawionych w tabeli poniżej. W środowisku ST Visual Develop domyślnym
formatem jest format Motoroli.
Zapis
Motorola
Intel
Texas
Zilog
Dwójkowo
%01010000
01010000b
?01010000
%(2)01010000
Ósemkowo
~7
7o
~7
%(8)7
Dziesiętnie
10
10
lub
10d
10
10
Szesnastkowo
$FF
0FFh
>FFh
%FF
Komentarze są poprzedzone średnikiem i mogą znajdować się w dowolnej
kolumnie. Nie są one przetwarzane przez asembler, a pozwalają utrzymać
czytelność pliku źródłowego i zrozumiałość, przy próbie jego analizy w przyszłości.
4 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
Pierwszy
program
Wszystkie pliki przetwarzane przez asembler muszą rozpoczynać się instrukcją
ST7/
, umieszczoną w pierwszej kolumnie pierwszego wiersza, co wskazuje
asemblerowi, że asemblujemy plik dla procesorów rodziny ST7, a kończyć
instrukcją
END
. Pominięcie instrukcji
END
będzie sygnalizowane jako błąd. Dla
pewności, że ostatnia instrukcja nie zostanie pominięta podczas asemblacji, należy
potwierdzić koniec linii znakiem ENTER by kursor przeszedł do następnej linii.
ST7/
...
END
Właściwy program powinien zostać umieszczony we właściwym segmencie
ROM
,
zacząć się od etykiety (np.
MAIN)
i posiadać rozkaz resetujący wskaźnik stosu
RST
.
Ponadto powinien być zakończony ponownym skokiem na początek programu lub
niekończącą się pętlą, by uniemożliwić wykonywanie niechcianego kodu, który
może znajdować się w dalszej części pamięci programu.
...
segment ‘rom’
main
rsp ; reset wska
ź
nika stosu
infinite_loop
jp infinite_loop ; nieko
ń
cz
ą
ca si
ę
p
ę
tla
...
Kompilacja tak opracowanego programu przebiegnie poprawnie, jednakże próba
symulacji zakończy się niepowodzeniem, ponieważ procesor nie będzie potrafił
odnaleźć początek programu w pamięci. W tym celu należy dołożyć wektor
przerwań i w przerwaniu o najwyższy priorytecie wskazać etykietę
MAIN
.
...
NonHandledInterrupt
iret ; powrót z przerwa
ń
nieobsługiwanych
segment 'vectit'
dc.w NonHandledInterrupt
; irq13
dc.w NonHandledInterrupt
; irq12
dc.w NonHandledInterrupt
; irq11_eeprom
dc.w NonHandledInterrupt
; irq10_sci
dc.w NonHandledInterrupt
; irq9_timb
dc.w NonHandledInterrupt
; irq8_tima
dc.w NonHandledInterrupt
; irq7_spi
dc.w NonHandledInterrupt
; irq6
dc.w NonHandledInterrupt
; irq5_ext3
Strona
| 5
J. Emilianowicz
Mikrokontrolery rodziny ST7
dc.w NonHandledInterrupt
; irq4_ext2
dc.w NonHandledInterrupt
; irq3_ext1
dc.w NonHandledInterrupt
; irq2_ext0
dc.w NonHandledInterrupt
; irq1_mcc
dc.w NonHandledInterrupt
; irq0
dc.w NonHandledInterrupt
; trap
dc.w main
; reset
END
Formatka
śeby pierwszy program był w całości gotowy, potrzebne są także dodatkowe
odwołania do plików z definicjami, charakterystycznymi dla całej rodziny
mikrokontrolerów ST7 oraz dla ST72334N2 wykorzystywanego w makiecie
uruchomieniowej.
ST7/
#include "mapping.inc"
#include "ST72334N2.inc"
segment ‘rom’
main
rsp ; reset wska
ź
nika stosu
; tutaj wła
ś
ciwy program
infinite_loop
jp infinite_loop ; nieko
ń
cz
ą
ca si
ę
p
ę
tla
NonHandledInterrupt
iret ; powrót z przerwa
ń
nieobsługiwanych
segment 'vectit'
dc.w NonHandledInterrupt
; irq13
dc.w NonHandledInterrupt
; irq12
dc.w NonHandledInterrupt
; irq11_eeprom
dc.w NonHandledInterrupt
; irq10_sci
dc.w NonHandledInterrupt
; irq9_timb
dc.w NonHandledInterrupt
; irq8_tima
dc.w NonHandledInterrupt
; irq7_spi
dc.w NonHandledInterrupt
; irq6
dc.w NonHandledInterrupt
; irq5_ext3
dc.w NonHandledInterrupt
; irq4_ext2
dc.w NonHandledInterrupt
; irq3_ext1
dc.w NonHandledInterrupt
; irq2_ext0
dc.w NonHandledInterrupt
; irq1_mcc
dc.w NonHandledInterrupt
; irq0
dc.w NonHandledInterrupt
; trap
dc.w main
; reset
END
6 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
ST
V
ISUAL
D
EVELOP
Oprogramowanie
ST
Visual
Develop
umożliwia
symulowanie
pracy
mikrokontrolerów rodziny ST7, ale także ich sprzętowe emulowanie przy współpracy
z emulatorem DVP2, dostępnym w laboratorium C5 705. Oprogramowanie jest
dostępne do pobrania na stronie producenta (www.st.com) pod nazwą ST Toolset.
Program instalacyjny instaluje oprócz ST Visual Develop także ST Visual
Programmer.
W lewej części aplikacji jest okno z przestrzenią roboczą, gdzie będą widoczne w
postaci rozwijanego drzewa wszystkie projekty. W prawej części aplikacji będzie
wyświetlana zawartość plików. Natomiast u dołu będą wyświetlane komunikaty
kompilacji i debugowania.
Konfiguracja
przestrzeni
roboczej
Prace z oprogramowaniem ST Visual Develop rozpoczyna sie od utworzenia
przestrzeni roboczej (Workspace), a następnie poprzez dodanie kolejnych
projektów, które będą widoczne w postaci drzewa. Do katalogu, w którym będą
przechowywane pliki przestrzeni roboczej warto przekopiować z katalogu aplikacji
ST Toolset pliki st72334n2.asm oraz st72334n2.inc.
Strona
| 7
J. Emilianowicz
Mikrokontrolery rodziny ST7
Nową przestrzeń roboczą tworzy sie wybierając w menu File - New Workspace,
następnie Create an empty workspace. W okienku należy wypełnić obydwa
dostępne pola.
1.
W pierwszym polu Workspace filename wprowadzić nazwę przestrzeni
roboczej, np. st7.
2.
W drugim polu Workspace location podać ścieżkę dostępu do katalogu
przestrzeni roboczej, np. C:/ST7/.
Po poprawnym skonfigurowaniu po lewej stronie aplikacji pojawi sie nazwa
przestrzeni roboczej wraz z rozszerzeniem stw.
Konfiguracja
projektu
Nowy projekt do istniejącej juz przestrzeni roboczej dodamy poprzez Project - Add
New Project to Workspace.... Pojawi sie okienko, w którym wypełniamy trzy
pierwsze pola z czterech dostępnych.
1.
W pierwszym polu Project filename wprowadzamy nazwę projektu. Nazwa
powinna być krótka, maksymalnie 8 znaków, bez znaków specjalnych.
2.
W drugim polu Project location klikając na symbol żółtej teczki zakładamy
podkatalog dla projektu. Działanie takie zabezpieczy przed nadpisywaniem
się plików różnych projektów.
3.
W trzecim polu Toolchain należy wybrać ST Assembler Linker.
8 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
Po zatwierdzeniu konfiguracji pojawi się okienko wyboru procesora MCU Selection.
W okienku tym należy wybrać procesor ST72334N2.
Następnie należy dodać do projektu pliki st72334n2.asm oraz st72334n2.inc
klikając prawym klawiszem myszki odpowiednio na Source Files oraz Include
Files. Pliki te można odnaleźć w jednym z podkatalogów aplikacji ST Toolset.
Strona
| 9
J. Emilianowicz
Mikrokontrolery rodziny ST7
Kompilacja
projektu
Kompilację realizuje się poprzez menu Build > Buld (skrót klawiszowy F7).
Podczas kompilacji powtarza się często grupa błędów.
Brak pliku wykonywalnego
Podczas kompilacji może zdarzyć się błąd, wynikający z braku pliku
wykonywalnego, a dokładniej niepoprawnej ścieżki do niego.
Należy wtedy pozwolić na wyświetlenie ustawień projektu, wybrać zakładkę STM
ASM, a następnie wcisnąć klawisz Defaults.
10 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
Błąd krótkiej kompilacji
Podczas prawidłowo przeprowadzanej kompilacji w oknie wyjściowym przewija się
zwykle około 30 linijek. Jeżeli jednak kompilacja zakończy się wyświetleniem
jedynie jednej linijki 0 error(s), 0 warning(s), to świadczy i nieprawidłowym jej
przebiegu i należy przeprowadzić kompilację całego projektu od nowa poprzez
menu Buld > Rebuild All.
Błąd EOF
Skrót EOF oznacza End of File. Błąd ten jest wynikiem braku znaku ENTER za
dyrektywą END.
Oznacza to, że powinna być przynajmniej jedna pusta linia pod ostatnią dyrektywą.
Strona
| 11
J. Emilianowicz
Mikrokontrolery rodziny ST7
Uruchamianie
projektu
Przed rozpoczęciem uruchamiania należy wybrać tryb pracy poprzez ustawienie w
menu Debug instrument > Target settings…. W praktyce mogą być
wykorzystane trzy z wielu opcji:
-
Simulator nie wymagający posiadania zestawu uruchomieniowego,
-
Swim ST-Link w przypadku posiadania zestawu STM8 Discovery,
-
DVP2 w przypadku emulatorów sprzętowych, będących na wyposażeniu
laboratorium.
Uruchamianie realizuje się poprzez menu Debug > Start debuging (skrót
klawiszowy F7). Prawidłowe uruchomienie powinno zakończyć się wyświetleniem
kodu programu wraz z żółtym paskiem podświetlającym pierwszy rozkaz.
12 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
Błąd wektora przerwań
Jeżeli po uruchomieniu żółty pasek nie wyświetla się, to oznacza że w programie nie
ma wektora przerwań lub jest niepoprawny, więc procesor/symulator nie potrafi
odnaleźć pierwszego rozkazu w pamięci.
Strona
| 13
J. Emilianowicz
Mikrokontrolery rodziny ST7
S
CHEMATY
BLOKOWE
Częściami składowymi schematów blokowych są proste figury geometryczne, w
których umieszczone są warunki oraz proste instrukcje.
Symbole
schematów
blokowych
Blok graniczny (początek i koniec procedury)
Blok operacyjny (obliczenia). Ma kształt prostokąta. Wewnątrz bloku umieszcza
się zapis jednej lub kilku operacji.
Blok wejścia/wyjścia (wprowadzanie i wyprowadzanie danych). Ma kształt
równoległoboku. Wewnątrz bloku umieszcza się nazwy zmiennych, którym mają być
nadane wartości wprowadzone z interfejsów zewnętrznych lub nazwy zmiennych,
których wartości mają być wysłane do interfejsów zewnętrznych.
Blok warunkowy (decyzyjny). Ma kształt rombu. Wewnątrz bloku umieszcza się
zapis badanego warunku. Jeżeli warunek jest spełniony, to realizowany jest skok.
Jeśli natomiast warunek nie jest spełniony, to mikrokontroler przechodzi do
następnego rozkazu (pod rozkazem warunku).
14 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
Blok procesu (procedury). Proces zdefiniowany jest poza algorytmem. Można go
porównać do procedury, którą definiuje się raz w programie, by następnie móc ją
wielokrotnie wywoływać. Warunkiem użycia jest więc wcześniejsze zdefiniowanie
procesu.
Bloki łącznikowe (stronicowe lub międzystronicowe). Koło symbolizuje tzw.
łącznik stronicowy. Może się zdarzyć, że rysunek musi być dokończony w innym
miejscu strony, albo nawet na innej stronie. W pierwszym miejscu należy umieścić
łącznik z określonym symbolem w środku (np. cyfrą, literą) i doprowadzić do niego
strzałkę. Następnie w drugim miejscu należy umieścić drugi łącznik z takim samym
symbolem w środku i wyprowadzić z niego strzałkę.
Komentarz
Przykładowy
algorytm
Główny algorytm powinien być zawsze zapętlony na jeden z dwóch sposobów. W
algorytmie po lewej zdefiniowana grupa procedur będzie wykonywana cyklicznie.
Natomiast w algorytmie po prawej będzie wykonana tylko raz, następnie procesor
zacznie wykonywać niekończącą się pętlę.
Strona
| 15
J. Emilianowicz
Mikrokontrolery rodziny ST7
W żadnym z powyższych algorytmów nie ma bloku Koniec czy Stop. Bloki takie
dozwolone są jedynie przy definiowanych zewnętrznych procedur i oznaczają
zakończenie ich wykonywania oraz powrót do głównego programu. Poniżej
przedstawiona jest zewnętrzną procedura wyliczająca silnię.
16 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
M
IKROKONTROLER
ST72334
Charakterystyka
8-BIT CORE
ALU
CONTROL
LVD
MULTI OSC
+ CLOCK
FILTER
MCC/RTC
PORT F
TIMER A
BEEP
PORT E
SCI
WATCHDOG
PROGRAM
MEMORY
(8KB/16KB)
RAM
(384B/512B)
EEPROM
(256B)
PORT A
PORT B
PORT C
TIMER B
SPI
PORT D
8-BIT ADC
A
D
D
R
E
S
S
A
N
D
D
A
T
A
B
U
S
PA7:0
PB7:0
PC7:0
PD7:0
V
DDA
V
SSA
RESET
PF7,6,4,2:0
ISPSEL
V
DD
V
SS
OSC1
OSC2
PE7:0
Pamięć
-
8 lub 16K pamięci programu (ROM lub FLASH) z możliwością
programowania po zamontowaniu w układzie (ISP), wraz z zabezpieczeniem
przed odczytem
-
256 bajtów pamięci danych EEPROM (z opcją zabezpieczenia przed
odczytem, w przypadku wersji z pamięcią programu ROM)
-
384 lub 512 bajtów pamięci RAM.
Zegar, reset i zasilanie
-
Zawansowany system resetu
-
Zaawansowane
zarządzanie
niskim
poborem
energii,
z
trzema
programowalnymi poziomami
-
Różnorodne źródła taktowania: rezonatory kryształowe lub ceramiczne,
rezonatory
RC,
zewnętrzny
sygnał
zegara,
rezerwowy
system
zabezpieczający zegar
-
4 tryby oszczędzania energii: Halt, Active-Halt, Wait i Slow
Układ przerwań
-
10 źródeł przerwań, także TRAP i RESET
-
15 źródeł przerwań zewnętrznych (4 wektory)
44 lub 32 porty I/O
-
44 lub 32 wielofunkcyjnych, dwukierunkowych linii I/O:
o
21 lub 19 linii z alternatywną funkcją
Strona
| 17
J. Emilianowicz
Mikrokontrolery rodziny ST7
o
12 lub 8 linii z wysoką impedancją
4 Liczniki
-
Konfigurowalny układ watchdoga
-
Liczniki czasu rzeczywistego
-
Dwa 16-bitowe liczniki z: 2 wejściami zapamiętywania (tylko jedno w
liczniku A), 2 wyjścia porównania (tylko jedno w liczniku A), zewnętrzne
wejścia taktowania licznika A, PWM oraz generator impulsów
2 Porty komunikacyjne
-
synchroniczny port szeregowy SPI
-
asynchroniczny port szeregowy SCI
1 Przetwornik analogowo-cyfrowy
-
8-bitowy przetwornik analogowo-cyfrowy, z 8 kanałami wejściowymi
Zestaw instrukcji
-
operacje 8-bitowymi danymi
-
63 proste instrukcje
-
17 głównych trybów adresowania
-
mnożenie 8x8, bez znaku
-
operacje na bitach
Opis wyprowadzeń
Pin
Opis
PA0
Port A0
PA1
Port A1
PA2
Port A2
PA3
Port A3
PA4(HS)
Port A4
PA5(HS)
Port A5
PA6(HS)
Port A6
PA7(HS)
Port A7
PB0
Port B0
PB1
Port B1
PB2
Port B2
PB3
Port B3
PB4
Port B4
PB5
Port B5
PB6
Port B6
PB7
Port B7
PC0/OCMP2_B
Port C0 / Wyjście 2 porównania licznika B
PC1/OCMP1_B
Port C1 / Wyjście 1 porównania licznika B
PC2(HS)/ICAP2_B
Port C2 / Wejście 2 przechwytujące licznika B
PC3(HS)/ICAP1_B
Port C3 / Wejście 1 przechwytujące licznika B
PC4/MISO
Port C4 / Wyjście portu SPI
PC5/MOSI
Port C5 / Wejście portu SPI
PC6/SCK
Port C6 / Taktowanie portu SPI
PC7//SS
Port C7 / Wejście Slave portu SPI
PD0/AIN0
Port D0 / Wejście analogowe ADC 0
18 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
PD1/AIN1
Port D1 / Wejście analogowe ADC 1
PD2/AIN2
Port D2 / Wejście analogowe ADC 2
PD3/AIN3
Port D3 / Wejście analogowe ADC 3
PD4/AIN4
Port D4 / Wejście analogowe ADC 4
PD5/AIN5
Port D5 / Wejście analogowe ADC 5
PD6/AIN6
Port D6 / Wejście analogowe ADC 6
PD7/AIN7
Port D7 / Wejście analogowe ADC 7
PE0/TD0
Port E0 / Wyjście portu SCI
PE1/RDI
Port E1 / Wejście portu SCI
-
-
-
-
PE4(HS)
Port E4
PE5(HS)
Port E5
PE6(HS)
Port E6
PE7(HS)
Port E7
PF0/MCO
Port F0 / Wyjście zegara (f
osc
/2)
PF1/BEEP
Port F1 / Sygnał do przetwornika piezoelektrycznego
PF2
Port F2
-
-
PF4/OCMP1_A
Port F4 / Wyjście porównania licznika A
-
-
PF6/ICAP1_A
Port F6 / Wejście przechwytujące licznika A
PF7/EXTCLK_A
Port F7 / Zewnętrzne źródło licznika A
ISPSEL
Wejście ISP
/RESET
Wejście resetujące
OSC2
Wyjście rezonatora lub wejście oscylatora RC
V
DD_0
Napięcie zasilające bloku cyfrowego
V
DD_1
Napięcie zasilające bloku cyfrowego
V
DD_3
Napięcie zasilające bloku cyfrowego
V
SS_0
Masa bloku cyfrowego
V
SS_1
Masa bloku cyfrowego
V
SS_3
Masa bloku cyfrowego
V
DDA
Napięcie zasilające bloku analogowego
V
SSA
Masa bloku analogowego
Legenda:
HS – maks. 20mA
Strona
| 19
J. Emilianowicz
Mikrokontrolery rodziny ST7
P
AMIĘĆ
Pamięć mikrokontrolerów rodziny ST7 oparta jest o architekturę Von Neumanna.
Oznacza to, że jest tylko jedna przestrzeń adresowa, gdzie znajduje sie pamięć
RAM, ROM, EEPROM, oraz rejestry sterujące mikrokontrolerem i peryferiami. Zaletą
takiego rozwiązania jest to, ze dostęp do zmiennych, stałych i rejestrów
specjalnych, realizowany jest tymi samymi instrukcjami.
Rezerwacja
zmiennych
Pamięć RAM może być rezerwowana dla zmiennych. Służy do tego instrukcja
asemblera
ds.b
, po której należy podać ilość rezerwowanych bajtów. Etykieta
będzie wskazywać pierwszy z zarezerwowanych bajtów.
segment ’ram0’
count ds.b 1 ; rezerwacja jednego bajtu
temp_tab ds.b 4 ; rezerwacja czterech kolejnych bajtów
Tuż po włączeniu mikrokontrolera zawartość zmiennych jest przypadkowa i należy
pamiętać o ich zainicjalizowaniu.
init_variable ; przykład inicjalizacji zmiennej
ld A,#0
ld count,A
Inkrementacja i dekrementacja zmiennych dozwolona jest jedynie poprzez rejestry
A, X i Y.
increment_variable ; przykład inkrementacji poprzez akumulator
ld A,count
inc A
ld count,A
Inicjalizacja
stałych
W pamięci ROM można definiować stałe, używając instrukcji
dc.b
, po której należy
podać wartość stałej lub zestaw stałych oddzielonych przecinkami. Etykieta będzie
wskazywać pierwszy z zainicjalizowanych bajtów.
segment ’rom’
correction dc.b 12 ; definicja stałej o warto
ś
ci 100
table dc.b $A0,$A1 ; definicja tablicy o dwóch bajtach A0 i A1
message1 dc.b ” START SYSTEMU ” ; definicja tablicy o 16 bajtach,
; wypełniona kodami ASCII kolejnych
; liter
20 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
Stałe umieszczone są w pamięci programu i można je jedynie czytać.
add A,correction ; dodanie do akumulatora warto
ś
ci korekcji
Przypisanie
wartości
Inicjalizowane stałe zajmują miejsce w pamięci programu. Jest to rozwiązanie
bardzo wygodne przy inicjalizowaniu dużych tablic. W przypadku wartości
jednobajtowych można skorzystać z dyrektywy
equ
, przypisującej wartość do
etykiety.
lab1 equ $12
...
ld A,#lab1 ; załadowanie akumulatora warto
ś
ci
ą
$12
Można przypisać także wartość dwubajtową i przy dostępie do niej wskazać, która
część nas interesuje, starsza czy młodsza.
lab2 equ $1234
...
ld A,#lab2.h ; załadowanie akumulatora warto
ś
ci
ą
$12
ld A,#lab2.l ; załadowanie akumulatora warto
ś
ci
ą
$34
Strona
| 21
J. Emilianowicz
Mikrokontrolery rodziny ST7
S
TEROWANIE
PROGRAMEM
Skoki i wywołania
bezwarunkowe
Skoki bezwarunkowy
jp
i bezwarunkowy relacyjny
jra
realizują skok pod etykietę
wskazaną w rozkazie. Są to skoki bez zachowywania adresu powrotu.
...
jp dodawanie
...
...
dodawanie
...
Wywołania bezwarunkowe
call
i bezwarunkowe relacyjne
callr
realizują skok pod
etykietę wskazaną w rozkazie. Ponadto przed skokiem na stosie odkładany jest
adres następnego rozkazu pod wywołaniem, czyli adres powrotu. Powrót
realizowany jest po napotkaniu rozkazu
ret
.
...
call dodawanie
...
...
dodawanie
...
ret
...
Testowanie bitów
i skoki warunkowe
Rozkazy
btjt
i
btjf
realizują testowanie wskazanego bitu i w zależności od wyniku
testowania skok pod wskazaną etykietę, lub przejście do następnego rozkazu.
22 |
Strona
Mikrokontrolery rodziny ST7
J. Emilianowicz
Rozkaz
btjt
(bit test and jump if true) realizuje skok dla „1”, natomiast
btjf
(bit
test and jump if false) realizuje skok dla „0”.
; klawisz znajduje si
ę
na pinie PB0
; klawisz wci
ś
ni
ę
ty zwiera pin do masy (0)
; klawisz puszczony podaje na pin zasilanie (1)
sprawdz_klawisz
btjf PBDR,#0,klawisz_wcisniety
...
...
klawisz_wcisniety
...
Korzystając ze skoków warunkowy należy bardzo ostrożnie dobierać warunki i
etykiety do skoków. Poniżej przedstawiony jest algorytm, realizujący prostą funkcję
zmiany stanu leda na przeciwny. Jeśli led był włączony wyłączenie go, jeśli
wyłączony włączenie. Lewy algorytm poniżej jest algorytmem poprawnym, skok dla
warunku spełnionego jest skokiem długim, omijającym fragment programu dla
warunku niespełnionego. Natomiast prawy algorytm jest błędny, ponieważ dla
warunku niespełnionego i spełnionego następuje wykonywanie rozkazów zaraz pod
rozkazem testowania.
Poniżej przedstawione są fragmenty programu dla prawidłowego i nieprawidłowego
algorytmu.
sprawdz_leda sprawdz_leda
btjt PBDR,#7,wylacz_leda btjt PBDR,#7,wlacz_leda
wlacz_leda wlacz_leda
... ...
wylacz_leda wylacz_leda
... ...
Strona
| 23
J. Emilianowicz
Mikrokontrolery rodziny ST7