4.5.Programowanie sterowników.
Poszczególne instrukcje języka programowania sterownika mają różną długość. Zaprogramowane rozkazy sterownik wykonuje sekwencyjnie. Po ostatniej instrukcji wykonywana jest pierwsza. Znając czasy interpretacji poszczególnych rozkazów można oszacować czas wykonania pętli programu. Czas wykonania pętli programu zależy od sposobu zapisania algorytmu sterowania odpowiednimi rozkazami.
Poniżej zostanie przedstawiony sposób programowania, który wykorzystuje między innymi firma WES.
Argumenty instrukcji.
Rozkazy dla sterowników mogą być bezargumentowe, jednoargumentowe lub dwuargumentowe. Odpowiednim rozkazom przypisane są ściśle określone argumenty:
-wejścia I;
-wyjścia Q;
-flagi F;
-markery M;
-zegary T;
-liczniki C;
-negacje wyżej wymienionych argumentów.
Flagi są to komórki pamięci pomocniczej ogólnego zastosowania (np. do zapamiętywania pewnych informacji), które mogą być przez programistę zapisywane i odczytywane. Po resecie sterownika flagi są wyzerowane.
Markery są komórkami pamięci o ustalonej przez system zawartości. Mogą być tylko odczytywane.
Zegary służą do pomiaru czasu rzeczywistego. Czas może być ustawiony zewnętrznie z wykorzystaniem odpowiednich grup wejść lub ustalany na stałe w programie sterowania. Po resecie sterownika zegary mają wartość logiczną 1.
Liczniki służą do detekcji określonej liczby impulsów. Przez impuls rozumiemy zmianę z 0 na1 logiczne dowolnego argumentu np.: wejścia w czasie nie krótszym od obiegu pętli programu. Podobnie jak w przypadku zegarów odpowiednia nastawa może być zmienna lub stała. Po resecie sterownika liczniki mają wartość logiczną 1.
rozkaz |
argumenty |
działanie |
LD |
I Q F M |
start logiczny |
LD |
NI NQ NF NM |
start logiczny z negacją |
LD |
T C |
start logiczny |
LD |
NT NC |
start logiczny z negacją |
AND |
I Q F M |
iloczyn logiczny |
AND |
NI NQ NF NM |
iloczyn logiczny z negacją |
AND |
T C |
iloczyn logiczny |
AND |
NT NC |
iloczyn logiczny z negacją |
OR |
I Q F M |
suma logiczna |
OR |
NI NQ NF NM |
suma logiczna z negacją |
OR |
T C |
suma logiczna |
OR |
NT NC |
suma logiczna z negacją |
AND-LD |
|
iloczyn logiczny bloków |
OR-LD |
|
suma logiczna bloków |
OUT |
Q F |
instrukcja wyjścia |
OUT |
NQ NF |
instrukcja wyjścia z negacją |
RES |
Q F |
reset (wyzerowanie) |
SET |
Q F |
set (ustawienie) |
JMP |
etykieta |
skok warunkowy |
NOP |
|
nic nie rób |
TIM |
_,#___ |
zegar ustawiony wewnętrznie |
TIM |
_,'_ |
zeg. ust. zewn. jednocyfrowy |
TIM |
_,”__ |
zeg. ust. zewn. dwucyfrowy |
CNT |
_,#___ |
licznik ustawiony wewnętrznie |
CNT |
_,'_ |
licz. ust. zewn. jednocyfrowy |
CNT |
_,”__ |
licz. ust. zewn. dwucyfrowy |
END |
|
koniec programu |
Tab.1.Lista instrukcji.
4.5.1.Instrukcje LD, AND, OR, OUT.
Początek każdej linii logicznej oznaczamy używając instrukcji LD (load).
Przykład.1.
LD I10
OUT Q1
Połączenie szeregowe realizujemy instrukcją AND.
Przykład.2.
LD I2
AND I3
OUT Q5
Połączenie równoległe realizujemy funkcją OR.
Przykład.3.
LD F1
OR I10
OUT Q6
W instrukcjach LD, AND, OR, OUT argumenty mogą być również zanegowane.
Przykład.4.
LD NM2
AND NI2
OR NQ3
OUT NF7
4.5.2. Instrukcja AND-LD.
Instrukcje służą do zapisywania złożonych równań logicznych bez przymusu dodatkowego używania flag - pamięci pomocniczej. Spełniają rolę nawiasów w algebrze Boo'ela.
W przypadku potrzeby realizacji iloczynu logicznego między dwoma lub więcej blokami można użyć instrukcji AND-LD.
Przykład.5.
LD F5 pobranie wartości logicznej flagi
OR I3 suma logiczna z wejściem 13
LD Q1 pobranie wartości logicznej Q1
OR M6 suma logiczna z markerem M6
AND-LD iloczyn bloków a i b (iloczyn sum log.)
OUT Q16 wynik do Q16
4.5.3.Instrukcja OR-LD.
Instrukcja ta służy do równoległego łączenia bloków.
Przykład.6.
LD I1
AND I2 blok a
LD NI3
AND F2 blok b
OR-LD suma logiczna bloków
OUT F3
4.5.4.Instrukcja TIM.
Instrukcja TIM służy do pomiaru czasu rzeczywistego, realizacji opóźnień. Jest to instrukcja dwuargumentowa. Pierwszym argumentem jest numer używanego zegara. Drugi argument podaje nastawę zegara - czas po upływie którego zegar ma zmienić swoją wartość logiczną. Nastawa może być podana na jeden z trzech sposobów:
# oznacza, że nastawa jest niezmienna, ustalona w trakcie programowania;
” oznacza, że nastawą jest wartość w kodzie BCD odczytywana przez sterownik z odpowiednich wejść obiektowych, odczytywane są dwie cyfry (od 01 do 99) czyli czas można ustalić od 0.1s do 9.9s;
' oznacza, że nastawą jest wartość jednej cyfry w kodzie BCD odczytywana przez sterownik z odpowiednich wejść obiektowych, tym sposobem czas można nastawić w granicach od 0.1s do 0.9s.
Ponieważ nastawę dla zegara można wprowadzać różnymi sposobami, instrukcja TIM ma trzy postacie:
TIM T1,#2 zaprogramowanie zegara T1, czas 0.2s, nastawa stała
TIM T1,'2 zaprogramowanie zegara T1, nastawa
jednocyfrowa z kanału 2
TIM T2,”1 zaprogramowanie zegara T2, nastawa dwucyfrowa z kanału 1.
Przykład.7.
LD I2 po pojawieniu się sygnału I2
TIM T5,#25 i upływie 2.5s
LD T5
OUT Q1 ma być ustawione wyjście Q1
4.5.5.Instrukcja CNT.
Instrukcja CNT (counter) służy do zliczania impulsów. Programowanie liczników jest zbliżone do programowania zegarów. Instukcja TIM jest dwuargumentowa. Pierwszym argumentem jest numer licznika (jednocześnie zliczać może do ośmiu liczników). Drugi argument podaje nastawę licznika - ilość impulsów, po detekcji których licznik zmieni swoją wartość logiczną.
Nastawa może być podana na jeden z trzech sposobów:
# oznacza, że nastawa jest niezmienna, ustalona w trakcie programowania, jej wartość numeryczna może wynosić od 1 do 9999;
” oznacza, że nastawą jest wartość w kodzie BCD odczytywana przez sterownik z odpowiednich wejść obiektowych, odczytywane są dwie cyfry (od 01 do 99);
' oznacza, że nastawą jest wartość jednej cyfry 1-9 w kodzie BCD odczytywana przez sterownik z odpowiednich wejść. Instrukcja CNT może mieć trzy postacie:
CNT C1,#10 licznik C1, nastawa stała 10 impulsów
CNT C2,”2 licznik C2, nastawa z kanału ”2
CNT C5,'3 licznik C5, nastawa z kanału '3
4.5.6. Instrukcja NOP.
Instrukcja nic nie rób NOP (no function) może służyć np. do rezerwacji miejsca w programie lub zmniejszenia częstotliwości cyklu programu sterowania. Jest instrukcją bezargumentową.
4.5.7. Instrukcja JMP.
Instrukcja skoku warunkowego JMP (jump) w połączeniu z etykietą powoduje, że fragment programu między JMP a instrukcją zaetykietowaną może być niewykonywany.
Zaetykietować można każdą instrukcję, która znajduje się po rozkazie JMP, czyli dozwolone są tylko skoki w przód. Dwie lub więcej instrukcji nie może być zaetykietowane tą samą etykietą, ale ta sama etykieta może być związana z dowolną liczbą rozkazów JMP.
Etykieta to ciąg dowolnych znaków alfanumerycznych, lecz nie więcej niż pięciu, poprzedzony znakiem dolara $. Etykietą nie może być nazwa rozkazu lub argumentu. Bezpośrednio po etykiecie przed instrukcją zaetykietowaną musi wystąpić dwukropek :.
Przykład.8.
LD F1
TIM T1,#25
LD T1 T1 = 1 tylko przez okres cyklu programu
OUT NF1
JMP $et skok w funkcji stanu zegara T1
LD Q1
OUT NQ1 zmiana stanu wyjścia co 2.5s
$et: NOP instrukcja zaetykietowana
Impulsy z zegara przekształcone zostały na impulsy o stałym wypełnieniu i przypisane wyjściu Q1.
4.5.8. Instrukcja RES.
Rozkaz RES (reset) zeruje argument. Argumentem instrukcji RES jest wyjście Q albo flaga F, nie można używać negacji.
Przykład.9.
LD I1
OUT Q1
LD I2
AND I3
RES Q1
4.5.9. Instrukcja SET.
Rozkaz SET (set) ustawia argument. Argumentem instrukcji SET jest wyjście Q albo flaga F, nie można używać negacji. Rozkaz ten można interpretować jako instrukcję RES z zanegowanym argumentem.
Przykład.10.
LD I1
OUT F1
LD I2
AND I3
SET F1
4.5.10. Instrukcka END.
Instrukcja END oznacza koniec programu. W każdym programie ostatnią instrukcją musi być END, jednocześnie rozkaz ten może wystąpić tylko raz.
Poniżej zostanie przedstawiony inny sposób programowania wykorzystywany między innymi przez firmę DIGICOM POLAND.
Program sterowania odwzorowuje sposób funkcjonowania obiektu na ciąg logicznych rozkazów. Każdy rozkaz jest zbiorem poleceń dla procesora. Rozkazy są zapisywane w formie mnemotechnicznych symboli.
Tab.2. Lista instrukcji.
Tab.3. Przykłady programowania.
Operacje we/wy mikrokomputerów jednoukładowych rodziny MCS-51.
MCS-51 jest rodziną mikrokomputerów 8-bitowych, w której skład wchodzą układy wymienione w tabeli 4.
Typ |
Technologia |
Pojemność i rodzaj pamięci programu |
Pojemność wewnętrznej pamięci danych (bajty) |
8051 AH |
HMOS II |
4K ROM |
128 |
8031 AH |
HMOS II |
- |
128 |
8751 H |
HMOS II |
4K EPROM |
128 |
80C51 |
CHMOS |
4K ROM |
128 |
80C31 |
CHMOS |
- |
128 |
87C51 |
CHMOS |
4K EPROM |
128 |
8052 |
HMOS II |
8K ROM |
256 |
8032 |
HMOS II |
- |
256 |
8732 |
HMOS |
8K EPROM |
256 |
Tab.4. Rodzina mikrokomputerów MCS-51.
Opis działania układów rodziny 80C51.
Opis ogólny.
Układy 80C31/80C51/87C51 tworzą rodzinę mikrokontrolerów wykonywanych w technologii CMOS. Układy te zawierają pamięć ROM 4K8 (80C51) lub EPROM (87C51), 1288 RAM, 32 linie wejścia/wyjścia, dwa 16-bitowe liczniki/timery, pięć żródeł przerwań o strukturze dwu poziomów zagnieżdżonych priorytetów, szeregowy port wejścia/wyjścia (do wykorzystania w komunikacji systemów wieloprocesorowych jako rozszerzenie wejścia/wyjścia albo jako w pełni dwukierunkowy kanał UART) oraz obwody oscylatora i zegara.
Opracowanie zawiera szczegółowy opis mikrokontrolera (rys. ), z uwzględnieniem:
-sterowników portów i ich dziłania jako portów wejścia/wyjścia i, dla portu 0 i 2, jako elementów magistrali;
-timerów/liczników;
-interfejsu szeregowego;
-systemu przerwań;
-ustawienia stanu początkowego (RESET);
-trybów pracy ze zmniejszonym poborem mocy dla układów CMOS.
a) b)
Rys. . Mikrokontroler 80C51; a) rozmieszczenie wyprowadzeń; b) symbol logiczny.
Cykl pracy mikrokomputera.
Cykl maszynowy został podzielony na sześć stanów, składających się z dwóch faz: P1 i P2, każda o długości jednego cyklu zegara. Tak więc pełny cykl maszynowy trwa 12 cykli zegara, nazywanych od S1P1 (stan pierwotny, faza pierwsza) do S6P2 (stan szósty, faza druga). Zwykle operacje arytmetyczno-logiczne mają miejsce w fazie pierwszej, a przesłania międzyrejestrowe w fazie drugiej. Rysunek () pokazuje przebieg pobrania i wykonania przykładowych rozkazów. Ponieważ na zewnątrz mikrokomputera nie są dostępne sygnały zegarów faz pierwszej i drugiej, na rysunku umieszczono, w celach orientacyjnych, przebieg sygnałów XTAL2 i ALE.
Rys. (). Sekwencje pobrania/wykonania rozkazów: a) rozkaz 1-bajtowy, 1-cyklowy, np. INC A; b) rozkaz 2-bajtowy, 1-cyklowy, np. ADD A,# data; c) rozkaz 1-bajtowy, 2-cyklowy, np. INC DPTR; d) rozkaz MOVX.
Sygnał ALE (adress latch enable) jest zwykle aktywny dwa razy w ciągu jednego cyklu maszynowego: po raz pierwszy w fazach S1P2 oraz S2P1 i po raz drugi w fazach S4P2 oraz S5P1.
Wykonanie rozkazu jednocyklowego rozpoczyna się w fazie S1P2, gdy kod operacyjny zostaje przesłany do wewnętrznego rejestru rozkazów mikrokomputera. Jeżeli z kodu operacyjnego wynika, że jest to rozkaz 2-bajtowy, brakujący bajt jest pobierany w stanie S4 tego samego cyklu maszynowego. W przypadku rozkazu 1-bajtowegoodczyt pamięci programu w stanie S4 również ma miejsce, lecz pobrany bajt (który jest kodem następnego rozkazu) jest ignorowany, a licznik rozkazu kończy się podczas S6P2.
Rejestry funkcji specjalnych.
Mapę obszaru pamięci wewnętrznej nazywanego obszarem rejestrów funkcji specjalnych (SFR) przedstawia rys. . Nie wszystkie adresy obszaru funkcji specjalnych są wykorzystane. Odczyt spod tych adresów zwróci dane przypadkowe, a zapis jest bezskuteczny. Program użytkownika nie powinien zapisywać „1” pod adresy niezaimplementowane, ponieważ w nowych układach rodziny 80C51 mogą one mieć znaczenie wywołujące nowe funkcje.
F8 |
|
|
|
|
|
|
|
|
FF |
F0 |
B |
|
|
|
|
|
|
|
F7 |
E8 |
|
|
|
|
|
|
|
|
EF |
E0 |
ACC |
|
|
|
|
|
|
|
E7 |
D8 |
|
|
|
|
|
|
|
|
DF |
D0 |
PSW |
|
|
|
|
|
|
|
D7 |
C8 |
|
|
|
|
|
|
|
|
CF |
C0 |
|
|
|
|
|
|
|
|
C7 |
B8 |
IP |
|
|
|
|
|
|
|
BF |
B0 |
P3 |
|
|
|
|
|
|
|
B7 |
A8 |
IE |
|
|
|
|
|
|
|
AF |
A0 |
P2 |
|
|
|
|
|
|
|
A7 |
98 |
SCON |
SBUF |
|
|
|
|
|
|
9F |
90 |
P1 |
|
|
|
|
|
|
|
97 |
88 |
TCON |
TMOD |
TL0 |
TL1 |
TH0 |
TH1 |
|
|
8F |
80 |
P0 |
SP |
DPL |
DPH |
|
|
|
PCON |
87 |
Rys. . Mapa obszaru pamięci rejestrów funkcji specjalnych 80C51.
Akumulator.
ACC jest rejestrem akumulatora. Tym niemniej, w mnemonikach instrukcji odwołujących się do niego, jest oznaczany po prostu jako A.
Rejestr B.
Rejestr B jest wykorzystywany w operacjach mnożenia i dzielenia. Inne instrukcje mogą go wykorzystywać jako dodatkowy rejestr roboczy.
Słowo stanu programu PSW.
Rejestr PSW zawiera informacje o stanie programu, jak to przedstawia rys. .
|
CY |
AC |
F0 |
RS1 |
RS0 |
OV |
- |
P |
|
Symbol |
Pozycja |
Nazwa i znaczenie |
CY |
PSW.7 |
Wskaźnik przeniesienia |
AC |
PSW.6 |
Wskaźnik przeniesienia pomocniczego (dla operacji na liczbach dziesiętnych kodowanych BCD) |
F0 |
PSW.5 |
Wskaźnik 0 (dla dowolnego wykorzystania przez użytkownika) |
RS1 |
PSW.4 |
Bity sterujące 1 i 0 wskaźnika banku rejestrów, ustawienie i zerowanie |
RS0 |
PSW.3 |
programowo dla wybrania żądanego banku rejestrów |
OV |
PSW.2 |
Wskaźnik nadmiaru |
- |
PSW.1 |
Wskaźnik definiowany przez użytkownika |
P |
PSW.0 |
Wskaźnik parzystości, ustawiany/zerowany automatycznie w każdym cyklu maszynowym jako najmłodszy |
Rys. . Rejestr słowa stanu programu PSW.
Układy te mają możliwość programowego przełączania w dwa tryby zmniejszonego poboru mocy - tryb bezczynności (idle) i tryb obniżonej mocy (power-down). Tryb bezczynności wstrzymuje funkcjonowanie jednostki centralnej, podczas gdy RAM, timery, port szeregowy i system przerwań kontynuują pracę. W trybie obniżonej mocy podtrzymywana jest zawartość RAM, ale wstrzymane działanie oscylatora, co zawiesza wykonywanie wszystkich funkcji.