Wykład 2 - Politechnika Częstochowska

Download Report

Transcript Wykład 2 - Politechnika Częstochowska

Wykład 2
Podstawowe informacje dotyczące
programowania systemów wbudowanych
Programowanie
rdzenia procesora
SAB80C537
dr inż. Andrzej Przybył
Katedra Inżynierii Komputerowej
Politechnika Częstochowska
Wiadomości podstawowe
Przypomnijmy sobie, co będziemy robić:
*) Oprogramowanie (firmware) dla urządzeń wbudowanych stanowi specyficzną
gałąź programowania narzucającą restrykcyjne ograniczenia na rozmiar, budowę
oraz szybkość działania programu (oprogramowanie czasu rzeczywistego, tworzenie
sterowników dla urządzeń oraz systemów operacyjnych dedykowanych dla
konkretnych platform sprzętowych, ...).
• ... a także realizacja typowych algorytmów sterowania, takich jak regulatory typu P-I-D,
regulatory histerezowe, regulatory dwustanowe w reżimie czasu rzeczywistego przy
wykorzystaniu mechanizmu przerwań sprzętowych
• implementacja pomocniczych procedur obliczeniowych: limitowanie zakresu sygnału na
zadanej wartości (nasycanie), operacje typu MAC (Multiply-Accumulate), różniczkowanie
i całkowanie sygnałów
• dostęp i konfiguracja specjalizowanych rejestrów sterujących sterowanych
urządzeń
• komunikacja za pośrednictwem standardów transmisji szeregowej z urządzeniami
wykonawczymi lub pomiarowymi, takimi jak: przetworniki AC, nieulotne pamięci
szeregowe itp.
• realizacja interfejsu użytkownika
*definicja znaleziona, za pomocą wyszukiwarki google, na stronie internetowej
http://www.codeconcept.pl/pl/Services_FW_Embedded.php
2
Symbol graficzny mikrokontrolera,
do użycia na schemacie ideowym w systemie mikroprocesorowym
•
Widoczne są tzw. „nóżki”
mikrokontrolera („piny”), i
oznaczenia ich funkcji.
•
Główną funkcją nóżek kontrolera
są porty wejścia/wyjścia. Porty
są zgrupowane po osiem i
nazwane P0, P1, P2, ... itd. (każdy
port to 8 sygnałów = 8 bitów w
słowie procesora)
•
Pozostałe sygnały to: zasilanie
(VAGND, VSS, VCC) sygnał resetu
(RESET), sygnał zegara
taktującego (XTAL1, XTAL2) itp.
3
Pierwszy program
dla systemu wbudowanego z mikrokontrolerem SAB80C537 (Siemens/Infineon)
– sterowanie portami wyjściowymi (GPIO)
NAME PROGRAM
$INCLUDE (REG517.INC)
; dołączenie pliku definicji rejestrów procesora 80C537
PROGRAM SEGMENT CODE ;definicja segmentu zawierającego kod programu
org 0x0000
;ustawienie adresu początku programu (pierwszej instrukcji)
JMP START
RSEG PROGRAM
;informacja dla linkera - następne dane to kod programu
;(będzie umieszczony w segmencie pamięci CODE)
START :
;… tu zamieszczamy instrukcje, które maja się wykonac jednorazowo po uruchomieniu programu
PETLA: ;poczatek petli glownej programu
mov P1,#00000000b
; wpisanie do wszystkich bitów portu P1 wartości zero
;= ustawienie stanu niskiego na 8 liniach wyjściowych mikrokontrolera
mov P1,#00000010b
; wpisanie do wszystkich bitów portu P1 wartości binarnej
;= ustawienie stanu niskiego na 7 liniach wyjściowych mikrokontrolera,
;oraz stanu wysokiego na linii P.1
;(bit numer 1 – bity są numerowane od prawej do lewej: nr bitu = 76543210
jmp PETLA
END
; instrukcja skoku – zmiana naturalnej kolejności
;wykonywania instrukcji – „skok” do miejsca oznaczonego
;etykieta tekstową ‘PETLA’
poznane instrukcje: MOV, JMP
poznane dyrektywy: ORG, SEGMENT CODE, END
poznana składnia: struktura projektu, adresowanie natychmiastowe (#)
wykorzystanie etykiet, dołączanie plików nagłówkowych ($include)
4
Drugi program
- obsługa portów wejściowych GPIO, np. sygnałów z czujników lub klawiatury
…
org 0x0000
;ustawienie adresu początku programu (pierwszej instrukcji)
ETYKIETA1:
JNB P5.1, STAN_NISKI_NA_LINII_1
; przetestowanie linii wejściowej P5.1 mikrokontrolera i skok do etykiety
;STAN_NISKI_NA_LINII_1 w przypadku wykrycie stanu niskiego
;gdy program dotarł do tego miejsca, to znaczy że na linii P5.1 był stan wysoki
;tu wstawiamy instrukcje procesora, które mają się wykonać w takim przypadku
mov P1,#00000010b
jmp ETYKIETA1
; powrót do początku programu (pętla główna)
STAN_NISKI_NA_LINII_1:
;gdy program dotarł do tego miejsca, to znaczy że na linii P5.1 był stan niski
;tu wstawiamy instrukcje procesora, które mają się wykonać w takim przypadku
mov P1,#00000000b
jmp ETYKIETA1
; powrót do początku programu (pętla główna)
…
poznane instrukcje: JNB oraz JB
5
Mikrokontroler SAB80C537
Jest to jeden z mikrokontrolerów z rodziny ’51 (tzw. „pięćdziesiątka jedynka”). Inne kontrolery z tej rodziny to 80C51,
80C2051, 80C535, itp.
UWAGA – dostępna jest bardzo obszerna liczba publikacji dotycząca procesorów z rodziny ’51 – LITERATURA
Procesory z rodziny ‘51 są najpopularniejszą
oraz produkowaną i używaną do dziś rodziną mikrokontrolerów!
Po lewej SAB80C537 produkcji Intel
(rok produkcji 1980 (!), szybkośc 16
MHz – procesor 12-taktowy.
Wykonywanie jednej instrukcji
zajmuje 12 taktów zegara.
Po prawej SAB-C515 produkcji
Infineon (Siemens) – rok produkcji
1992 – nieco uboższa, kolejna z
odmian podstawowej wersji
procesora 80C51 (zdjęcie po lewej
stronie u dołu)
Strona prawa u dołu – zdjęcie płytki
laboratoryjnej używanej w Katedrze
Inżynierii Komputerowej Politechniki
Częstochowskiej. Widoczne są:
przyciski, potencjometry,
wyświetlacz alfanumeryczny LCD,
wyświetlacz 7-segmentowy LED oraz
w górnej części pamięci RAM i
EPROM i złącze do komunikacji
szeregowej w standardzie RS232.
6
Budowa mikrokontrolera
SAB80C537 (Siemens)/Infineon
W schemacie blokowym wyróżnić można:
• CPU (Central Processor Unit) – centralna jednostka
przetwarzająca odpowiedzialna za wykonywanie rozkazów
procesora.
• Wewnętrzna pamięć RAM 256 bajtów oraz opcjonalna ROM,
•Porty wejścia/wyjścia (I/O – Input/Output) – P0 – P8
•Jednostka mnożąco dzieląca – Div./Mul. –Unit
•Uniwersalne oraz specjalizowane układy czasowolicznikowe, tzw. Timery: T0, T1, T2, Capture/Compare Unit
•Moduły do obsługi komunikacji szeregowej: Serial channel 0
i1
•Przetwornik analogowo/cyfrowy: A/D Converter
•Elementy dodatkowe: oscylator, watchdog, itp.
Uwaga: możliwe jest podłączenie zewnętrznej pamięci o
pojemności maksymalnie 64kbajty. Wykorzystywane są w tym
celu specjalne właściwości niektórych portów I/O. Porty zajęte
do obsługi komunikacji z pamięcią zewnętrzną nie mogą być
użyte do innych celów.
7
Budowa jednostki centralnej CPU
- „rdzeń” mikrokontrolera
•
Procesor 8-bitowy – to znaczy, że jego podstawowa
jednostka przetwarzająca operuje na słowie 8-bitowym
•
Grupa rejestrów uniwersalnych R0-R7
•
Dwa tzw. ”Akumulatory” (A, B ) – nazwa wywodzi się od ich
pierwotnego zastosowania w procesorach: Akumulacji czyli
sumowania. Podstawowy akumulator to A.
Operacje arytmetyczne (dodawanie, odejmowanie, mnożenie,
itp.) oraz logiczne (operacje na bitach typu AND, OR, NOT,
XOR, itp.) dozwolone są tylko na akumulatorach A i B
•
•
Pozostałe rejestry rdzenia procesora są specjalizowane –
służą do konkretnych celów, np.:
–
–
–
–
DPTR – Data PoinTeR – wskaźnik danych w pamięci zewnętrznej.
Jest to jeden z dwu rejestrów 16-bitowych w tym 8-bitowym
procesorze. Służy do zadawania adresu podczas odczytu z
komórki pamięci zewnętrznej. (Do procesora można podłączyć
pamięć zewnętrzną o pojemności maksymalnie 64kbajty = 216
bajtów, która wymaga 16-bitowego adresowania).
PSW – Program Status Word – słowo statusowe programu
składające się z tzw. flag statusowych.
PC - Program Counter – 16 bitowy rejestr wskazujący adres
aktualnie wykonywanego rozkazu z pamięci procesora.
SP – Stack Pointer – wskaźnik stosu, służący do obsługi
specjalnej struktury danych w pamięci wewnętrznej procesora.
8
Podstawowe instrukcje rdzenia procesora
oraz wybrane tryby adresowania
MOV
przykłady użycia:
tryb adresowania rejestrowy:
MOV A,B ;kopiowanie wartości z rejestru B do rejestru A (kierunek operacji dwuargumentowych zawsze z prawej na lewą)
MOV A, R0 ; kopiowanie wartości z rejestru R0 do A
MOV R0, A ; kopiowanie wartości z rejestru A do R0
tryb adresowania natychmiastowy:
MOV A,#10 ;kopiowanie stałej wartości dziesiętnej (podanej natychmiastowo) do
rejestru A
MOV A,#0Ah ;j.w. – ale liczbę dziesięć zapisano w kodzie szesnastkowym
MOV A,#00001010b ;j.w. – ale liczbę dziesięć zapisano w kodzie binarnym
tryb adresowania bezpośredni:
MOV A,10 ;kopiowanie zawartości komórki o adresie 10, z pamięci
wewnętrznej
9
Instrukcje arytmetyczne
ADD, SUBB oraz
flaga przeniesienia/pożyczki AC
przykład użycia:
tryb adresowania rejestrowy (w operacjach arytmetycznych jeden z argumentów
jest zawsze w Akumulatorze A, wynik zawsze zostanie zapisany w A):
ADD A,B ;dodawanie wartości z rejestru B do rejestru A
ADD A, R0 ;dodawanie wartości z rejestru R0 do A
tryb adresowania natychmiastowy:
ADD A,#10 ;dodawanie stałej wartości licbowej (podanej po symbolu # w postaci
dziesiętnej, szesnastkowej lub binarnej) do rejestru A
tryb adresowania bezpośredni:
ADD A,10 ;dodawanie zawartości komórki o adresie 10, z pamięci
wewnętrznej do zawartości A
10
Rejestr statusowy
PSW – Program Status Word
Rejestr zawiera flagi wskazujące na wynik ostatniej wykonanej operacji
arytmetycznej lub logicznej w rdzeniu procesora.
Symbol
Numer Bitu
Opis
CY
7
Flaga przeniesienia i pożyczki
AC
6
Flaga przeniesienia dodatkowego dla operacji BCD
F0
5
Flaga 0 ogólnego przeznaczenia
RS1
4
RS0
3
Wybór położenia banku rejestrów uniwersalnych R0-R7:
RS1,RS0 = 00 = Bank 0, adres 00H-07H
RS1,RS0 = 01 = Bank 1, adres 08H-0FH
RS1,RS0 = 10 = Bank 2, adres 10H-17H
RS1,RS0 = 11 = Bank 3, adres 18H-1FH
OV
2
flaga przepełnienia
F1
1
Flaga ogólnego przeznaczenia
P
0
Flaga parzystości
11
Flaga przeniesienia i pożyczki
CY
funkcjonowanie podczas dodawania
Ustawiana jest, gdy wynik operacji arytmetycznej (np. dodawanie) nie mieści się na
jednym bajcie.
Przykład
mov A, #255
add A, #1 ;w trakcie wykonywania tej instrukcji nastąpi tzw. przeniesienie – czyli
ustawienie flagi CY
Wytłumaczenie:
Wynik prawidłowy to 256, ale maksymalna wartość liczbowa jaką da się zapisać
na 8 bitach (bajcie) wynosi 255.
1111 1111b = 255
+0000 0001b = 1
=1 0000 0000b = 256 (wartość zero na 8-bitowym rejestrze wyniku +
ustawiona flaga sygnalizująca przeniesienie)
12
Flaga przeniesienia i pożyczki
CY
funkcjonowanie podczas odejmowania
Ustawiana jest również, gdy wynik operacji arytmetycznej (np. dodawanie) nie mieści się na jednym
bajcie.
Przykład wystąpienie pożyczki
mov A, #0
clr c
subb A, #1
;konieczne jest skasowanie flagi CY przed wykonaniem
instrukcji odejmowania, gdyż instrukcja SUBB odejmuje od A (oprócz
;argumentu) również wartość tej flagi wynosząca zero lub jeden.
;w trakcie wykonywania tej instrukcji nastąpi tzw. pożyczka – czyli
;ustawienie flagi CY
Wytłumaczenie:
Wynik prawidłowy to -1, ale minimalna wartość liczbowa jaką da się zapisać na 8 bitach w
naturalnym kodzie binarnym (NKB) wynosi 0.
0000 0000b = 255
-0000 0001b = 1
=1 1111 1111b = 255 =w NKB 8-bitów, ale należy uwzględnić, że wystąpiła pożyczka,
prawidłowy wynik = -1)
13
Instrukcje skoków warunkowych
JC, JNC
JC ETYKIETA ;”skok” warunkowy do miejsca oznaczonego
jako ETYKIETA
Warunkiem wykonania skoku jest
USTAWIONA flaga CY
JNC ETYKIETA ;”skok” warunkowy do miejsca
oznaczonego jako ETYKIETA
Warunkiem wykonania skoku jest
SKASOWANA flaga CY
14
Instrukcje skoków warunkowych
JZ, JNZ
JZ ETYKIETA ;”skok” warunkowy do miejsca oznaczonego
jako ETYKIETA
Warunkiem wykonania skoku jest ZEROWA wartość
akumulatora A
JNZ ETYKIETA ;”skok” warunkowy do miejsca
oznaczonego jako ETYKIETA
Warunkiem wykonania skoku jest NIEZEROWA wartość
akumulatora A
15
Trzeci program
konstrukcja prostej pętli
analogiczny zapis w języku symbolicznym
R0=0;
do
...
R0=R0+1
while (R0<10)
org 0x0000
;ustawienie adresu początku programu (pierwszej instrukcji)
mov R0,#0
; ustawienia wartości początkowej zmiennej R0
POCZATEK_PETLI:
;... dowolne instrukcje
mov A,R0
add A,#1
mov R0,A
;zwiększenie wartości R0:=R0+1
mov A,R0
;ta instrukcja jest zbędna (aktualna wartość R0 jest już w A)
clr C
subb A,#10
jc POCZATEK_PELI ; powrót do początku pętli, JEŚLI flaga C jest ustawiona – czyli wartość
;odjemnej (A) była mniejsza od liczby 10
16
Podsumowanie
poznane instrukcje: MOV, JMP, JC, JNC, JZ, JNZ, JB, JNB, ADD, SUBB, CLR C
poznane dyrektywy: ORG
poznana składnia:
adresowanie natychmiastowe (#), absolutne, rejestrowe
wykorzystanie etykiet
dołączanie plików nagłówkowych ($include)
poznane elementy budowy mikrokontrolera:
porty I/O, rejestry uniwersalne A,B, R0-R7, rejestr PSW i flagi statusowe
poznane techniki programowania:
rozgałęzienia programu
konstruowanie prostych pętli
wykorzystanie operacji wielokrotnej precyzji
17
Przykładowe pytania testowe
1.
Opisać rejestry uniwersalne mikrokontrolera z rodziny ’51.
2.
Opisać podstawowe tryby adresowania na przykładzie instrukcji
dodawania?
3.
Co to jest i do czego służy rejestr statusowy PSW?
4.
Jakie są ograniczenia związane ze stosowaniem instrukcji
arytmetycznych w procesorze z rodziny ‘51?
5.
Co to są instrukcje skoków warunkowych?
6.
Skonstruować prosta pętlę programową o podanych parametrach?
18