Programowanie ST7 _2011.03.21 - ZST

Transkrypt

Programowanie ST7 _2011.03.21 - ZST
Politechnika Wrocławska
Mikrokontrolery rodziny ST7
Jarosław Emilianowicz
Wrocław 2011
2 | Strona
SPIS TREŚCI
ASEMBLER........................................................................ 3
Etykiety, rozkazy i komentarze ............................................................ 3
Pierwszy program .............................................................................. 4
Formatka .......................................................................................... 5
ST VISUAL DEVELOP .......................................................... 6
Konfiguracja przestrzeni roboczej ......................................................... 6
Konfiguracja projektu ......................................................................... 7
Kompilacja projektu ........................................................................... 9
Uruchamianie projektu ..................................................................... 11
SCHEMATY BLOKOWE ........................................................ 13
Symbole schematów blokowych ......................................................... 13
Przykładowy algorytm ...................................................................... 14
MIKROKONTROLER ST72334 ............................................ 16
Charakterystyka ..............................................................................
Opis wyprowadzeń ...........................................................................
Rejestry wewnętrzne CPU .................................................................
Rejestr statusu ................................................................................
Mapa pamięci ..................................................................................
Rejestry specjalne ............................................................................
16
17
18
19
20
21
PAMIĘĆ ......................................................................... 23
Rezerwacja zmiennych .....................................................................
Inicjalizacja stałych ..........................................................................
Przypisanie wartości .........................................................................
Dostęp do tablic ...............................................................................
23
23
24
24
STEROWANIE PROGRAMEM ................................................. 26
Skoki i wywołania bezwarunkowe ....................................................... 26
Skoki warunkowe ............................................................................. 26
Testowanie bitów i skoki warunkowe .................................................. 27
DZIAŁANIA ARYTMETYCZNE ................................................ 29
Dodawanie i odejmowanie ................................................................. 29
MnoŜenie ........................................................................................ 29
Dzielenie ......................................................................................... 29
PORTY WEJŚCIA-WYJŚCIA .................................................. 32
Diody LED ....................................................................................... 32
Klawisze ......................................................................................... 33
Wyświetlacz 7-segmentowy ............................................................... 34
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 3
ASEMBLER
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
sub A,#$22
; dzielenie akumulatora przez wartość $30
; 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
Dwójkowo
Ósemkowo
Dziesiętnie
Szesnastkowo
Motorola
%01010000
~7
10
$FF
Intel
01010000b
7o
10 lub 10d
0FFh
Texas
?01010000
~7
10
>FFh
Zilog
%(2)01010000
%(8)7
10
%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.
J. Emilianowicz
Mikrokontrolery rodziny ST7
4 | Strona
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
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
Mikrokontrolery rodziny ST7
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
;
;
;
;
;
;
;
;
;
irq13
irq12
irq11_eeprom
irq10_sci
irq9_timb
irq8_tima
irq7_spi
irq6
irq5_ext3
J. Emilianowicz
Strona | 5
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
main
;
;
;
;
;
;
;
irq4_ext2
irq3_ext1
irq2_ext0
irq1_mcc
irq0
trap
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
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
dc.w
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
NonHandledInterrupt
main
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
irq13
irq12
irq11_eeprom
irq10_sci
irq9_timb
irq8_tima
irq7_spi
irq6
irq5_ext3
irq4_ext2
irq3_ext1
irq2_ext0
irq1_mcc
irq0
trap
reset
END
J. Emilianowicz
Mikrokontrolery rodziny ST7
6 | Strona
ST VISUAL DEVELOP
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.
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 7
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.
J. Emilianowicz
Mikrokontrolery rodziny ST7
8 | Strona
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.
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 9
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
wykonywalnego, a dokładniej niepoprawnej ścieŜki do niego.
z
braku
pliku
NaleŜy wtedy pozwolić na wyświetlenie ustawień projektu, wybrać zakładkę STM
ASM, a następnie wcisnąć klawisz Defaults.
J. Emilianowicz
Mikrokontrolery rodziny ST7
10 | Strona
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ą.
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 11
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.
J. Emilianowicz
Mikrokontrolery rodziny ST7
12 | Strona
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.
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 13
SCHEMATY
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).
J. Emilianowicz
Mikrokontrolery rodziny ST7
14 | Strona
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ę.
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 15
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ę.
J. Emilianowicz
Mikrokontrolery rodziny ST7
16 | Strona
MIKROKONTROLER
ST72334
Charakterystyka
8-BIT CORE
ALU
RESET
ISPSEL
CONTROL
VDD
VSS
MULTI OSC
+ CLOCK
FILTER
MCC/RTC
PORT F
PF7,6,4,2:0
RAM
(384B/512B)
LVD
TIMER A
BEEP
PORT E
PE7:0
SCI
WATCHDOG
ADDRESS AND DATA BUS
OSC1
OSC2
PROGRAM
MEMORY
(8KB/16KB)
EEPROM
(256B)
PORT A
PA7:0
PORT B
PB7:0
PORT C
TIMER B
PC7:0
SPI
PORT D
PD7:0
8-BIT ADC
VDDA
VSSA
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
-
Mikrokontrolery rodziny ST7
44 lub 32 wielofunkcyjnych, dwukierunkowych linii I/O:
o 21 lub 19 linii z alternatywną funkcją
J. Emilianowicz
Strona | 17
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
PA0
PA1
PA2
PA3
PA4(HS)
PA5(HS)
PA6(HS)
PA7(HS)
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
PC0/OCMP2_B
PC1/OCMP1_B
PC2(HS)/ICAP2_B
PC3(HS)/ICAP1_B
PC4/MISO
PC5/MOSI
PC6/SCK
PC7//SS
PD0/AIN0
J. Emilianowicz
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Port
Opis
A0
A1
A2
A3
A4
A5
A6
A7
B0
B1
B2
B3
B4
B5
B6
B7
C0 / Wyjście 2 porównania licznika B
C1 / Wyjście 1 porównania licznika B
C2 / Wejście 2 przechwytujące licznika B
C3 / Wejście 1 przechwytujące licznika B
C4 / Wyjście portu SPI
C5 / Wejście portu SPI
C6 / Taktowanie portu SPI
C7 / Wejście Slave portu SPI
D0 / Wejście analogowe ADC 0
Mikrokontrolery rodziny ST7
18 | Strona
PD1/AIN1
PD2/AIN2
PD3/AIN3
PD4/AIN4
PD5/AIN5
PD6/AIN6
PD7/AIN7
PE0/TD0
PE1/RDI
PE4(HS)
PE5(HS)
PE6(HS)
PE7(HS)
PF0/MCO
PF1/BEEP
PF2
PF4/OCMP1_A
PF6/ICAP1_A
PF7/EXTCLK_A
ISPSEL
/RESET
OSC2
VDD_0
VDD_1
VDD_3
VSS_0
VSS_1
VSS_3
VDDA
VSSA
Port D1 / Wejście analogowe ADC 1
Port D2 / Wejście analogowe ADC 2
Port D3 / Wejście analogowe ADC 3
Port D4 / Wejście analogowe ADC 4
Port D5 / Wejście analogowe ADC 5
Port D6 / Wejście analogowe ADC 6
Port D7 / Wejście analogowe ADC 7
Port E0 / Wyjście portu SCI
Port E1 / Wejście portu SCI
Port E4
Port E5
Port E6
Port E7
Port F0 / Wyjście zegara (fosc/2)
Port F1 / Sygnał do przetwornika piezoelektrycznego
Port F2
Port F4 / Wyjście porównania licznika A
Port F6 / Wejście przechwytujące licznika A
Port F7 / Zewnętrzne źródło licznika A
Wejście ISP
Wejście resetujące
Wyjście rezonatora lub wejście oscylatora RC
Napięcie zasilające bloku cyfrowego
Napięcie zasilające bloku cyfrowego
Napięcie zasilające bloku cyfrowego
Masa bloku cyfrowego
Masa bloku cyfrowego
Masa bloku cyfrowego
Napięcie zasilające bloku analogowego
Masa bloku analogowego
Legenda:
HS – maks. 20mA
Rejestry
wewnętrzne CPU
Mikrokontrolery rodziny ST7 posiadają pełną 8-bitową architekturę.
wewnętrznych rejestrów pozwala sprawnie operować 8-bitowymi danymi.
Sześć
7
0
7
0
akumulator
rejestr wskaźnikowy X
7
0
rejestr wskaźnikowy Y
15
0
licznik rozkazów
15
0
wskaźnik stosu
7
0
rejestr statusu
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 19
Akumulator
Akumulator
jest
głównym
8-bitowym
rejestrem,
wykorzystywanym
do
przechowywania operandów oraz wyników arytmetycznych i logicznych operacji.
Rejestry wskaźnikowe (X i Y)
Te 8-bitowe rejestry są uŜywane do adresowania, lub jako tymczasowe rejestry dla
danych. Rejestr Y nie jest nigdy automatycznie przenoszony na stos. W obsłudze
przerwania naleŜy uwzględniać przenoszenie na i ze stosu uŜywając rozkazów POP i
PUSH.
Licznik rozkazów (PC)
Licznik rozkazów jest 16-bitowym rejestrem uŜywanym do przechowywania adresu
następnej instrukcji, która będzie wykonana przez mikrokontroler w następnym
kroku. Rejestr ten jest automatycznie odświeŜany po wykonaniu kaŜdej kolejnej
instrukcji. 16-bitowy licznik rozkazów pozwala zaadresować do 64kB pamięci.
Wskaźnik stosu (SP)
Wskaźnik stosu jest rejestrem 16-bitowym. Sześć najmniej znaczących bitów
zawiera adres następnej wolnej komórki stosu. Dziesięć najbardziej znaczących
bitów jest zarezerwowanych dla przyszłych rozszerzeń rodziny ST72.
Stos jest uŜywany do przechowywania adresów powrotnych przy wywoływaniu
podprocedur lub obsługi przerwań. TakŜe uŜytkownik moŜe skorzystać ze stosu
uŜywając rozkazy POP i PUSH.
Po resecie mikrokontrolera, lub po instrukcji RSP, wskaźnik stosu jest ustawiany na
ostatnią maksymalną wartość. Wskaźnik jest dekrementowany, gdy dane zostają
przenoszone na stos, lub inkrementowany, gdy są z niego odczytywane. Gdy
zostanie osiągnięta graniczna dolną wartość stosu (stos zostanie przepełniony),
wtedy wskaźnik ponownie będzie wskazywał na maksymalną wartość. W tym
przypadku wcześniej przeniesione dane zostaną nadpisane, a więc utracone.
Wywołanie podprocedury powoduje przeniesienie na stos 2 bajtów, a obsługa
przerwania 5 bajtów.
Rejestr statusu
CC
7
6
5
4
3
2
1
0
1
1
1
H
I
N
Z
C
Rejestr statusu (condition code) jest rejestrem 5-bitowym, który sygnalizuje wynik
działania instrukcji właśnie wykonanej. Bity rejestru statusowego mogą być w
programie uŜytkownika pojedyńczo testowane, by podjąć decyzję o dalszym
działaniu programu, stosownie do wyniku ostatniej instrukcji.
Wskaźnik przeniesienia połówkowego (H)
Bit H jest ustawiany na wartość 1, kiedy następuje przeniesienie z jednej połówki
bajtu na drugą (czyli pomiędzy bitami 3 i 4) podczas wykonywania operacji ADD i
ADC. Bit H jest pomocny podczas wykonywania operacji arytmetycznych BCD.
J. Emilianowicz
Mikrokontrolery rodziny ST7
20 | Strona
Zezwolenie na przerwanie globalne (I)
Kiedy bit I jest ustawiony na wartość 1, wtedy wszystkie przerwania są
zablokowane. Wyzerowanie tego bitu umoŜliwia przyjmowanie i obsługę przerwań.
śądania obsługi przerwania przy ustawionym bicie I są zapamiętywane i obsłuŜone
zaraz po wyzerowaniu bitu I (tylko pierwsze Ŝądanie obsługi dla kaŜdego źródła
przerwań zostaje zapamiętane w postaci ustawienia flagi). Bit I moŜe być
ustawiany/resetowany programowo lub automatycznie po resecie mikrokontrolera
lub po rozpoczęciu obsługi przerwania.
Wskaźnik wartości ujemnej (N)
Kiedy jest ustawiony na wartość 1, to wskazuje Ŝe wynik ostatniej operacji
arytmetycznej lub logicznej, czy operacji na danych, jest negatywny.
Wskaźnik wartości zerowej (Z)
Kiedy jest ustawiony na wartość 1, to wskazuje Ŝe wynik ostatniej operacji
arytmetycznej lub logicznej, czy operacji na danych, jest zerowy.
Przeniesienie/poŜyczka (C)
Kiedy jest ustawiony na wartość 1 wskazuje, Ŝe podczas ostatniej operacji
arytmetycznej wystąpiło przeniesienie lub poŜyczka. Na bit ten mają takŜe wpływ
operacje testowania bitów, porównywania, przesuwania, obracania i ładowania
(patrz: ADD, ADC, SUB, SBC, BTJF, BTJT, RRC, RLC, SRL, SLL, SRA). Przy
operacjach testowania bitów, bit C jest kopią testowanego bitu.
Mapa pamięci
Mikrokontroler jest zdolny zaadresować 64kB pamięci i rejestrów I/O. W pamięci
jest dostępne 128 bajtów rejestrów, 384 lub 512 bajtów pamięci RAM, do 256
bajtów pamięci EEPROM i 4 lub 8kB pamięci programu uŜytkownika. Przestrzeń
pamięci RAM zawiera do 256 bajtów stosu, od 0100h do 01FFh.
Komórki o najwyŜszym adresie zawierają wektory przerwań sprzętowych oraz
programowych.
WAśNE: Obszary pamięci oznaczone jako “Zarezerwowane” nie mogą być nigdy
uŜywane. Próba dostępu do tej pamięci moŜe mieć nieprzewidywalne skutki w
działaniu mikrokontrolera.
0000h
Rejestry HW
007Fh
0080h
384B RAM
01FFh
027Fh
0200h
512B RAM
Zarezerwowane
0BFFh
0C00h
256B EEPROM
0CFFh
0D00h
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 21
Zarezerwowane
BFFFh
C000h
E000h
FFDFh
FFE0h
8kB
pamięci
programu
16kB
pamięci
program
Wektor przerwań
FFFFh
Jak dla większości 8-bitowych mikrokontrolerów, szyna adresowa ST7 jest 16bitowa. To oznacza moŜliwość zaadresowania 65,536 bajtów. Jest to wielkość
wystarczająca dla zdecydowanej większości aplikacji, realizowanych na
mikrokontrolery ST7.
By zwiększyć sprawność
podrzelona na dwie części:
–
–
programowania,
adresowanla
przestrzeń
została
adresy z zakresu od 0 do 255 (0FFh) są nazywane „stroną zerową”, a
dostęp do nich realizowany jest przez adresowanie 8-bitowe,
reszta pamięci, od 256 (80h) do 65,535 (0FFFFh) jest obsługiwana przez
adresowanie 16-bitowe.
UŜywanie strony zerowej doskonale przyspiesza wykonywanie kodu programu przy
częstym dostępie do pamięci, gdy dane są ulokowane w zakresie strony zerowej.
Dodatkowo w tej pamięci są umieszczone wszystkie rejestry I/O.
Rejestry specjalne
Adres
0000h
0001h
0002h
0004h
0005h
0006h
0008h
0009h
000Ah
000Ch
000Dh
000Eh
0010h
0011h
0012h
0014h
0015h
0016h
0020h
0021h
0022h
0023h
0029h
002Ah
J. Emilianowicz
Blok
Port A
Port B
Port C
Port D
Port E
Port F
SPI
MCC
WDG
Rejestr
PADR
PADDR
PAOR
PBDR
PBDDR
PBOR
PCDR
PCDDR
PCOR
PDDR
PDDDR
PDOR
PEDR
PEDDR
PEOR
PFDR
PFDDR
PFOR
MISCR1
SPIDR
SPICR
SPISR
MCCSR
WDGCR
Opis
Dane
Kierunek
Opcje
Dane
Kierunek
Opcje
Dane
Kierunek
Opcje
Dane
Kierunek
Opcje
Dane
Kierunek
Opcje
Dane
Kierunek
Opcje
Rejestr specjalny 1
Dane
Konfiguracja
Status
Zegar / Rejestr statusowy
Watchdog
Mikrokontrolery rodziny ST7
22 | Strona
002Bh
002Ch
0031h
0032h
0033h
0034h
0035h
0036h
0037h
0038h
0039h
003Ah
003Bh
003Ch
003Dh
003Eh
003Fh
0040h
0041h
0042h
0043h
0044h
0045h
0046h
0047h
0048h
0049h
004Ah
004Bh
004Ch
004Dh
004Eh
004Fh
0050h
0051h
0052h
0053h
0054h
0055h
0057h
0070h
0071h
Mikrokontrolery rodziny ST7
EEPROM
TIMER A
TIMER B
SCI
ADC
CRSR
EECSR
TACR2
TACR1
TASR
TAIC1HR
TAIC1LR
TAOC1HR
TAOC1LR
TACHR
TACLR
TAACHR
TAACLR
TAIC2HR
TAIC2LR
TAOC2HR
TAOC2LR
MISCR2
TBCR2
TBCR1
TBSR
TBIC1HR
TBIC1LR
TBOC1HR
TBOC1LR
TBCHR
TBCLR
TBACHR
TBACLR
TBIC2HR
TBIC2LR
TBOC2HR
TBOC2LR
SCISR
SCIDR
SCIBRR
SCICR1
SCICR2
SCIERPR
SCIETPR
ADCDR
ADCCSR
Zegar, reset, zasilanie
EEPROM
Rejestr 2 licznika A
Rejestr 1 licznika A
Rejestr statusowy licznika A
Rejestr HIGH wejścia zapamiętującego 1 licznika A
Rejestr LOW wejścia zapamiętującego 1 licznika A
Rejestr HIGH wyjścia porównującego 1 licznika A
Rejestr LOW wyjścia porównującego 1 licznika A
Licznika A (HIGH)
Licznika A (LOW)
Rejestr HIGH alternatywnego licznika A
Rejestr LOW alternatywnego licznika A
Rejestr HIGH wejścia zapamiętującego 2 licznika A
Rejestr LOW wejścia zapamiętującego 2 licznika A
Rejestr HIGH wyjścia porównującego 2 licznika A
Rejestr LOW wyjścia porównującego 2 licznika A
Rejestr specjalny 2
Rejestr 2 licznika B
Rejestr 1 licznika B
Rejestr statusowy licznika B
Rejestr HIGH wejścia zapamiętującego 1 licznika B
Rejestr LOW wejścia zapamiętującego 1 licznika B
Rejestr HIGH wyjścia porównującego 1 licznika B
Rejestr LOW wyjścia porównującego 1 licznika B
Licznika B (HIGH)
Licznika B (LOW)
Rejestr HIGH alternatywnego licznika B
Rejestr LOW alternatywnego licznika B
Rejestr HIGH wejścia zapamiętującego 2 licznika B
Rejestr LOW wejścia zapamiętującego 2 licznika B
Rejestr HIGH wyjścia porównującego 2 licznika B
Rejestr LOW wyjścia porównującego 2 licznika B
Rejestr statusowy
Dane
Prędkość
Konfiguracja 1
Konfiguracja 2
Preskaler odbiornika
Preskaler nadajnika
Dane
Konfiguracja / Rejestr statusowy
J. Emilianowicz
Strona | 23
PAMIĘĆ
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
temp_tab ds.b 4
; rezerwacja jednego bajtu
; rezerwacja czterech kolejnych bajtów
TuŜ po włączeniu mikrokontrolera zawartość zmiennych jest przypadkowa i naleŜy
pamiętać o ich zainicjalizowaniu.
init_variable
ld A,#0
ld count,A
; przykład inicjalizacji zmiennej
Inkrementacja i dekrementacja zmiennych dozwolona jest jedynie poprzez rejestry
A, X i Y.
increment_variable ; przykład inkrementacji zmiennej
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’
correct dc.b 12
; definicja stałej o wartości 100
table
dc.b $A0,$A1
; definicja tablicy o dwóch bajtach A0 i A1
message dc.b ” START SYSTEMU ” ; definicja tablicy o 16 bajtach,
; wypełniona kodami ASCII
J. Emilianowicz
Mikrokontrolery rodziny ST7
24 | Strona
Stałe umieszczone są w pamięci programu i moŜna je jedynie czytać.
...
ld A,correction
...
add A,correction
...
; odczytanie do akumulatora
; 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
ld A,#lab2.l
; załadowanie akumulatora wartością $12
; załadowanie akumulatora wartością $34
Dostęp do tablic
Przy dostępie do tablic naleŜy wykorzystać adresowanie indeksowe, gdzie indeks
określa, który bajt względem etykiety naleŜy odczytać.
segment ’rom’
message dc.b ” START SYSTEMU
...
” ; definicja tablicy o 16 bajtach,
odczyt_tablicy
ld A,(message,X)
...
Przy odczycie indeksowym naleŜy zainicjować wstępną wartość indeksu oraz w
kolejnych pętlach zwiększać jego wartość.
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 25
segment ’rom’
message dc.b ” START SYSTEMU
...
” ; definicja tablicy o 16 bajtach,
ld X,#0
odczyt_tablicy
ld A,(message,X)
inc X
...
jp odczyt_tablicy
...
J. Emilianowicz
Mikrokontrolery rodziny ST7
26 | Strona
STEROWANIE
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
...
Skoki warunkowe
Na liście rozkazów mikrontrolera ST7 znajduje się grupa skoków warunkowych.
Przy spełnionym warunku realizowany jest skok pod wskazaną etykietę, natomiast
przy niespełnionym warunku przejście do następnego rozkazu.
PoniŜej zamieszczono tablicę ze skokami warunkowymi.
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 27
Rozkaz
JRNM
JRM
JRPL
JRMI
JRNE
JREQ
JRNC
JRC
JRNH
JRH
JRUGT
JRULE
JRUGE
JRULT
Znaczenie
Not Interrupt Mask
Interrupt Mask
Plus
Minus
Not Equal
Equal
Not Carry
Carry
Not Half-Carry
Half-Carry
Unsigned Greater Then
Unsigned Lower or Equal
Unsigned Greater or Equal
Unsigned Lower Than
Symbol
>=0
<0
<>0
=
>
<=
>=
<
Warunek
I=0
I=1
N=0
N=1
Z=0
Z=1
C=0
C=1
H=0
H=1
(C lub Z)=0
(C lub Z)=1
C=0
C=1
...
call opoznienie
...
opoznienie
ld A,#0
opoznienie_petla
dec A
jrne opoznienie_petla
ret
;sprawdzenie, czy odliczono juŜ do zera
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.
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)
J. Emilianowicz
Mikrokontrolery rodziny ST7
28 | Strona
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
btjt PBDR,#7,wylacz_leda
wlacz_leda
...
wylacz_leda
...
Mikrokontrolery rodziny ST7
sprawdz_leda
btjt PBDR,#7,wlacz_leda
wlacz_leda
...
wylacz_leda
...
J. Emilianowicz
Strona | 29
DZIAŁANIA
ARYTMETYCZNE
Dodawanie
i odejmowanie
Dodawanie i odejmowanie realizuje się rozkazami add oraz sub. Dodawać i
odejmować moŜna jedynie do i od rejestru A. Tam teŜ będzie znajdować się wynik.
dodawanie
ld A,zmienna1
add A,zmienna2
sub A,#3F
ld wynik,A
;
;
;
;
przygotowanie pierwszej wartości
dodanie drugiej wartości
odjęcie wartości 3F
zapamiętanie wyniku
Przy operacjach wielobajtowych naleŜy uwzględnić przeniesienie lub poŜyczkę.
Pomagają w tym rozkazy adc oraz sbc. PoniŜej znajduje się przykład dodawania
dwubajtowego.
; liczba 1 w zmiennych zmienna1_h i zmienna1_l
; liczba 2 w zmiennych zmienna2_h i zmienna2_l
; wynik w zmiennych wynik_h i wynik_l
dodawanie_dwubajtowe
ld A,zmienna1_l
add A,zmienna2_l ; dodanie młodszych części
ld wynik_l,A
; zapamiętanie młodszej części wyniku
ld A,zmienna2_h
adc A,zmienna2_h ; dodanie starszych części
ld wynik_h,A
; zapamiętanie starszej części wyniku
MnoŜenie
MnoŜenie realizuje się rozkazem mul. Wynik mnoŜenia jest 16-bitowy.
mnozenie
ld A,zmienna1
ld X,zmienna2
mul X,A
ld wynik_l,A
ld wynik_h,X
;
;
;
;
;
przygotowanie pierwszej wartości
przygotowanie drugiej wartości
mnoŜenie
zapamiętanie młodszej części wyniku
zapamiętanie starszej części wyniku
Dzielenie
Mikrokontroler ST7 nie posiada rozkazu dzielenia. Operacje dzielenia naleŜy
realizować programowo przez wielokrotne odejmowanie dzielnika od dzielnej oraz
równoczesne zliczanie procedur odejmowania. PoniŜej przedstawiono prosty
algorytm dzielenia przez 10.
J. Emilianowicz
Mikrokontrolery rodziny ST7
30 | Strona
By zobrazować działanie procedury podzielmy wartość 23 przez 10 tak, aby
otrzymać osobno 2 i 3.
Licznik
0+1=1
1+1=2
2+1=3
3-1=2
Dzielna
23-10=13
13-10=3
3-10=-7
-7+10=3
Decyzja
wartość odejmowania dodatnia, powtarzamy pętlę
wartość odejmowania dodatnia, powtarzamy pętlę
wartość odejmowania ujemna, cofamy ostatnią pętlę
otrzymano wynik dzielenia, osobno 2 i 3
PoniŜej znajduje się przykładowy program dzielenia przez 10.
ld A,#23
call dzielenie_przez_10
...
dzielenie_przez_10
ld X,#0
; przygotowanie dzielnej
; wyzerowanie licznika pętli
dzielenie_przez_10_petla
inc X
; zwiększenie licznika pętli
sub A,#10
; odjecie 10 od dzielnej
jrpl dzielenie_przez_10_petla ; powtórzenie, jeśli wynik dodatni
dec X
Mikrokontrolery rodziny ST7
; zmniejszenie licznika pętli
J. Emilianowicz
Strona | 31
add A,#10
; dodanie 10 do dzielnej
ld dziesiatki,X
ld jednosci,A
; zapamiętanie dziesiątek ilorazu
; zapamiętanie jedności ilorazu
ret
J. Emilianowicz
Mikrokontrolery rodziny ST7
32 | Strona
PORTY
WEJŚCIA-WYJŚCIA
KaŜdy port wejścia-wyjścia jest kontrolowany przez 3 rejestry: DR, DDR, OR (dla
portu A będą to: PADR, PADDR, PAOR, itd.).
-
-
Rejestr PxDR odpowiada za zapis do portu (w trybie wyjścia) i odczyt z
niego (w trybie wejścia). Spełnia wiec równocześnie dwie funkcje. MoŜna
sie więc domyśleć, ze zapis do niego w trybie wejścia nie da Ŝadnego
efektu.
Rejestr PxDDR odpowiada za kierunek portu, dla ”1” port będzie
skonfigurowany jako wyjście, dla ”0” jako wejście.
Rejestr PxOR to rejestr opcji, odpowiadający za dodatkowa konfiguracje.
Dzięki temu mamy do dyspozycji dwie elektrycznie róŜne konfiguracje
wejściowe, i tak samo dwie elektrycznie róŜne konfiguracje wyjściowe.
JeŜeli naleŜy zasilić diodę LED, segment w wyświetlaczu 7-segmentowym, lub podać
stan wysoki na bazę tranzystora, najodpowiedniejsza konfiguracja jest DDR=1 i
OR=1. JeŜeli natomiast naleŜy odczytać stan podany z klawisza, czujnika, itd.,
najodpowiedniejsza konfiguracja jest DDR=0 i OR=0. Ponadto taka właśnie
konfiguracja jest włączana po kaŜdym uruchomieniu zasilania, lub po sygnale
resetu.
Diody LED
Do portów PB7, PB6 i PB5 są podłączone diody LED tak, jak to jest przedstawione
na rysunku poniŜej.
śeby dioda mogła zostać włączona naleŜy wykonać następujące kroki:
-
zapewnić odpowiednia konfiguracje portu: DDR=1, OR=1
a następnie:
-
by włączyć diodę podać stan wysoki na odpowiedni port: DR=1,
by zgasić diodę podać stan niski na odpowiedni port: DR=0.
port_init
ld A,#%11100000
ld PBDDR,A
ld PBOR,A
;przykład operacji na pojedynczych bitach
led_on
bset PBDR,#7
led_off
bres PBDR,#7
Mikrokontrolery rodziny ST7
J. Emilianowicz
Strona | 33
;przykład operacji na całym bajcie
led56_on_led7_off
ld A,#%01100000
ld PBDR,A
led56_off_led7_on
ld A,#%10000000
ld PBDR,A
Klawisze
Do portów PA2, PF2, PB0 i PB4 są podłączone klawisze tak, jak jest przedstawione
na rysunku poniŜej.
śeby móc odczytać stan klawisza naleŜy wykonać następujące kroki:
-
zapewnić odpowiednią konfiguracje portu: DDR=0, OR=0
a następnie odczytać stan klawisza z odpowiedniego portu PxDR:
-
jeśli DR=1, to klawisz jest wyciśnięty,
jeśli DR=0, to klawisz jest wciśnięty.
port_init
ld A,#%11100000
ld PBDDR,A
ld PBOR,A
;przykład czytania stanu klawisza i sterowania diodą LED
key_check
btjf PBDR,#0,led_on
led_off
bres PBDR,#5
jp key_check
led_on
bset PBDR,#5
jp key_check
J. Emilianowicz
Mikrokontrolery rodziny ST7
34 | Strona
Wyświetlacz
7-segmentowy
Wyświetlacz 7-segmentowy jest podłączony tak, jak jest przedstawione na rysunku
poniŜej (7 segmentów do 7 pinów PD7 do PD1, natomiast bazy tranzystorów do
pinów PA3 i PA2).
śeby móc wyświetlić informacje na jednym z wyświetlaczy naleŜy wykonać
następujące kroki:
-
zapewnić odpowiednia konfiguracje portu D dla siedmiu segmentów:
DDR=1, OR=1,
zapewnić odpowiednia konfiguracje portu A dla baz tranzystorów: DDR=1,
OR=1,
a następnie:
-
-
by przygotować odpowiedni segment podać stan wysoki (DR=1 wybranego
pinu portu D) lub by nie był włączony stan niski (DR=0 wybranego pinu
portu D),
by wyświetlić przygotowana konfiguracje segmentów podać stan wysoki na
bazę wybranego tranzystora: DR=1 portu A, lub by zgasić wyświetlaną
informacje podać stan niski na bazę tego tranzystora: DR=0 portu A.
port_init
ld A,#%11111110
ld PDDDR,A
ld PDOR,A
ld A,#%00001100
ld PADDR,A
ld PAOR,A
;wybranie segmentów do włączenia
segm_init
ld A,#%00111000
ld PDDR,A
digit_on
bset PADR,#2
digit_off
bres PADR,#2
Mikrokontrolery rodziny ST7
J. Emilianowicz

Podobne dokumenty