BP SSEP wyklad2


Katedra Mikroelektroniki i Technik Informatycznych
Politechnika Aódzka
Systemy sterowania
w elektronice przemysłowej
Wykład 2
dr inż. Bartosz Pękosławski
Aódz, dn. 8.03.2012
Plan wykładu
1. Asembler  zapis stałych liczbowych
2. Asembler AVR  przegląd wybranych instrukcji
3. Stos
4. Przekazywanie parametrów do podprogramu
5. Obsługa przerwań
2
Asembler  stałe liczbowe
Przykłady:
1234 - wartość dziesiętna
'A' - kod ASCII znaku  A
$102A - adres (zapis heksadecymalny)
0x2F - wartość heksadecymalna (szestnastkowa)
0b01010111 - wartość binarna
1 << 6 - wartość 0b01000000 = 0x40
Równoważne instrukcje:
LDI R21, 0b01001000
LDI R21, 0x48
LDI R21, (1 << PB6) + (1 << PB3)
3
Asembler - rodzaje instrukcji
instrukcje przesyłu danych,
instrukcje arytmetyczne,
instrukcje operacji bitowych,
instrukcje porównań,
instrukcje skoków bezwarunkowych,
instrukcje skoków i powrotów z podprogramów,
instrukcje skoków warunkowych,
instrukcje dodatkowe.
4
Asembler  instrukcje arytmetyczne
r1, r2 = R0..R31
rh = R16..R31
rd =R24,R26,R28,R30
k63 = 0..63
c255 = 0..255
Również mnożenie (wynik R1:R0):
MUL r1, r2
MULS r1, r2
MULSU r1, r2
FMUL r1, r2
FMULS r1, r2
5
FMULSU r1, r2
Asembler  instrukcje arytmetyczne
Reprezentacja liczb całkowitych w kodzie binarnym 8-bitowym:
KOD Liczba bez znaku Liczba ze znakiem
0111 1111 127 127
0111 1110 126 126
.... ... ...
0000 0001 1 1
0000 0000 0 0
1111 1111 255 255  256 =  1
1111 1110 254 254  256 =  2
... ... ...
1000 0001 129 129  256 =  127
1000 0000 128 128  256 =  128
Uzupełnienie do dwóch (Two's complement, U2)  zapis liczb całkowitych,
wartość ujemna  W zakodowana na N bitach odpowiada kodowi KOD = 2N  W
Operacje dodawania i odejmowania w U2 są wykonywane jednakowo dla
liczb ze znakiem jak i bez znaku
6
Asembler  instrukcje arytmetyczne:
wybrane przykłady (dodawanie)
Instrukcja Początkowa Wynik SREG
zawartość
rejestrów
ADD R21, R22 R21=0xFF R21=0x21 C=1
R22=0x22
INC R21 R21=0xFF R21=0x00 Z=1
(C bez zmian)
ADC R21, R22 R21=0x11 R21=0x34 C=0
R22=0x22
C(SREG) = 1
ADIW R24, 2 R24=0xFF R24=0x01
R25=0x00 R25=0x01
7
Asembler  instrukcje arytmetyczne:
wybrane przykłady (odejmowanie)
Instrukcja Początkowa Wynik SREG
zawartość
rejestrów
SUB R21, R22 R21=0x01 R21=0xFF C=1
R22=0x02 N=1
DEC R21 R21=0x01 R21=0x00 Z=1
SUBI R21, 2 R21=0x02 R21=0x00 Z=1
(C bez zmian)
SBC R21, R22 R21=0x03 R21=0xFF C=1
R22=0x03 N=1
C(SREG)=1
SBCI R21, 3 R21=0x04 R21=0x00 C=0
C(SREG)=1 Z=1
SBIW R24, 4 R24=0x03 R24=0xFF
R25=0x01 R25=0x00
8
Asembler  instrukcje arytmetyczne:
wybrane przykłady (mnożenie)
Instrukcja Początkowa Wynik SREG
zawartość
rejestrów
MUL R21, R22 R21=0xFF (255) R0=0x02
R22=0xFE (254) R1=0xFD
(64770)
MULS R21, R22 R21=0xFF (-1) R0=0x02
R22=0xFE (-2) R1=0x00
(2)
MULSU R21, R22 R21=0xFF (-1) R0=0x02 C=1
R22=0xFE (254) R1=0xFF
(-254)
9
Asembler  instrukcje operacji bitowych
10
Asembler  instrukcje operacji bitowych:
wybrane przykłady (przesuwanie)
Instrukcja Początkowa Wynik SREG
zawartość
rejestrów
LSL R21 R21=0x81 R21=0x02 C=1
LSR R21 R21=0x81 R21=0x40 C=1
ROL R21 R21=0x81 R21=0x03 C=1
C(SREG)=1
ROR R21 R21=0x81 R21=0xC0 C=1
C(SREG)=1
ASR R21 R21=0x81 R21=0xC0 C=1
SWAP R21 R21=0x23 R21=0x32 -
11
Asembler  instrukcje operacji bitowych:
wybrane przykłady (bitowe)
Instrukcja Początkowa Wynik SREG
zawartość
rejestrów
AND R21, R22 R21=0x21 R21=0x20
R22=0x20
ANDI R21, 0x02 R21=0x21 R21=0x00 Z=1
OR R21, R21 R21=0x21 R21=0x21
R22=0x20
ORI R21, 0xFF R21=0x21 R21=0xFF
EOR R21, R22 R21=0x21 R21=0x01
R22=0x20
COM R21 R21=0x01 R21=0xFE
NEG R21 R21=0x01 R21=0xFF
12
Asembler  instrukcje porównań
13
Asembler  instrukcje porównań:
wybrane przykłady
Instrukcja Początkowa Wynik SREG
zawartość
rejestrów
CP R21, R22 R21=0x03
R22=0x02
CP R21, R22 R21=0x03 Z=1
R22=0x03
CP R21, R22 R21=0x03 C=1
R22=0x04 N=1
CPC R21, R22 R21=0x03 C=1
R22=0x03 N=1
C(SREG)=1
CPI R21, 3 R21=0x04
TST R21 R21=0x00 Z=1
14
Asembler  skoków warunkowych
15
Asembler  instrukcje skoków
warunkowych: wybrane przykłady
Instrukcja SREG Skok
BREQ etykieta Z=1 tak
BRNE etykieta Z=0 tak
BRCS etykieta C=1 tak
BRCC etykieta C=0 tak
BRSH etykieta C=0 lub Z=1 tak
BRLO etykieta C=1 i Z=0 tak
BRMI etykieta N=1 tak
BTPL etykieta N=0 tak
BRGE etykieta N=0 i V=0 lub tak
N=1 i V=1
BRLT etykieta N=1 i V=0 lub tak
N=0 i V=1
16
Stos
Stos  obszar pamięci danych, do którego dane są
odkładane na wierzch i pobierane z wierzchołka
Struktura LIFO (Last-In-First-Out)
17
Stos
1. Stos rosnący, wskaznik stosu wskazuje na pierwszy wolny adres
2. Stos rosnący, wskaznik stosu wskazuje na ostatni zajęty adres
3. Stos malejący, wskaznik stosu wskazuje na pierwszy wolny
adres (AVR)
4. Stos malejący, wskaznik stosu wskazuje na ostatni zajęty adres
Wskaznik stosu  rejestry 8-bitowe SPH i SPL
18
Stos - instrukcje
PUSH r1 - odłożenie wartości rejestru r1 na stos
POP r1 - zdjęcie ze stosu wartości i zapisanie w rejestrze r1
Automatyczna aktualizacja wskaznika stosu
Liczba użytych instrukcji PUSH i POP jednakowa
(inaczej - przepełnienie stosu)
Odwrócona kolejność odkładanych i zdejmowanych wartości
Przed użyciem należy ustawić jednorazowo wskaznik stosu na adres
powyżej $5F
19
Stos - przykład
.include  m32def.inc
.equ RAMEND = $85F
....
LDI R16, HIGH(RAMEND)
OUT SPH, R16
ustawienie wskaznika stosu (koniec pamięci SRAM)
LDI R16, LOW(RAMEND)
OUT SPL, R16
....
PUSH R2
PUSH R3
POP R5
PUSH R1
POP R7
POP R8
....
20
Podprogram
 przekazywanie parametrów (rejestry)
....
LDI R16, 0x23
zapisanie wartości parametrów do rejestrów
LDI R17, 0x45
RCALL podprogram
....
podprogram:
MUL R16, R16
MUL R17, R17
ADD R16, R17
RET
21
Podprogram
 przekazywanie parametrów (stos)
....
LDI R16, 0x23
LDI R17, 0x45
zapisanie wartości parametrów na stos
PUSH R16
PUSH R17
RCALL podprogram
POP R17
POP R16 Adres powrotu
....
Parametr 2
Parametr 1
podprogram:
IN ZH, SPH
IN ZL, SPL
Trudniejszy sposób, ale możliwość przekazania
SBWI Z, 1
dużej liczny parametrów i rekurencyjnego
LD R17, -Z
wywoływania podprogramów
LD R16, -Z
...
22
RET
Podprogram
 kopia wartości rejestrów roboczych
....
LDI R20, 0x0A
next:
pętla indeksowana R20
RCALL podprogram
DEC R20
BRNE next
....
podprogram:
PUSH R20
PUSH R21
Rejestr R20 zachowuje oryginalną wartość
LDI R20, 0x0B
....
POP R21
POP R20
RET
23
Przerwania
Przerwanie (interrupt, IRQ)  sygnał powodujący wstrzymanie
wykonania aktualnego programu i wykonanie procedury obsługi
przerwania (interrupt handler)
yródła przerwań (ATmega):
przerwania zewnętrzne (zmiana stanu wejść),
timery,
interfejsy UART, SPI, 2-wire,
przetwornik A/C,
komparator analogowy,
pamięć EEPROM
Brak konieczności odpytywania urządzenia (odczytywania rejestru
w pętli)  program główny może realizować inne zadania
24
ATmega 32  przerwania zewnętrzne
25
ATmega 32  przerwania zewnętrzne
Rejestr sterujący (maskujący):
Rejestr flagowy:
Rejestr sterujący 2:
26
Wektory przerwań
Priorytet
27
Wektory przerwań
W pliku  m32def.inc :
.equ INT0addr=$002; External Interrupt0 Vector Address
.equ INT1addr=$004; External Interrupt1 Vector Address
.equ INT2addr=$006; External Interrupt2 Vector Address
.equ OC2addr =$008; Output Compare2 Interrupt Vector Address
.equ OVF2addr=$00a; Overflow2 Interrupt Vector Address
.equ ICP1addr=$00c; Input Capture1 Interrupt Vector Address
.equ OC1Aaddr=$00e; Output Compare1A Interrupt Vector Address
.equ OC1Baddr=$010; Output Compare1B Interrupt Vector Address
.equ OVF1addr=$012; Overflow1 Interrupt Vector Address
.equ OC0addr =$014; Output Compare0 Interrupt Vector Address
.equ OVF0addr=$016; Overflow0 Interrupt Vector Address
.equ SPIaddr =$018; SPI Interrupt Vector Address
.equ URXCaddr=$01a; USART Receive Complete Interrupt Vector Address
.equ UDREaddr=$01c; USART Data Register Empty Interrupt Vector Address
.equ UTXCaddr=$01e; USART Transmit Complete Interrupt Vector Address
.equ ADCCaddr=$020; ADC Interrupt Vector Address
.equ ERDYaddr=$022; EEPROM Interrupt Vector Address
.equ ACIaddr =$024; Analog Comparator Interrupt Vector Address
.equ TWSIaddr=$026; Irq. vector address for Two-Wire Interface
.equ SPMRaddr=$028; Store Program Memory Ready Interrupt Vector Address
28
Przerwania  procedury obsługi
.include  m32def.inc
....
.cseg
.org $0000
RJMP start
wektor przerwania
.org $....
RJMP procedura
....
start:
LDI R16, HIGH(RAMEND)
OUT SPH, R16
LDI R16, LOW(RAMEND)
OUT SPL, R16
SEI
....
procedura:
....
29
RETI
Przerwania  przykład
.include  m32def.inc
.cseg
.org $0000
RJMP start
.org INT1addr
RJMP int_1
start:
LDI R16, HIGH(RAMEND)
OUT SPH, R16
LDI R16, LOW(RAMEND)
OUT SPL, R16
LDI R16, 1 << INT1
włączenie przerwania INT1
OUT GICR, R16
SEI
....
int_1:
INC R20
RETI
30
Dziękuję za uwagę.


Wyszukiwarka

Podobne podstrony:
BP SSEP wyklad5
BP SSEP wyklad7
BP SSEP wyklad4
BP SSEP wyklad3
BP SSEP wyklad1
BP SSEP wyklad11
BP SSEP wyklad13
Sieci komputerowe wyklady dr Furtak
Wykład 05 Opadanie i fluidyzacja
WYKŁAD 1 Wprowadzenie do biotechnologii farmaceutycznej
mo3 wykladyJJ
ZARZĄDZANIE WARTOŚCIĄ PRZEDSIĘBIORSTWA Z DNIA 26 MARZEC 2011 WYKŁAD NR 3
Wyklad 2 PNOP 08 9 zaoczne

więcej podobnych podstron