Mikroprocesory i mikrosterowniki Instrukcje, tryby adresowania Wydział Elektroniki Mikrosystemów i Fotoniki Na prawach rękopisu. Na podstawie dokumentacji ATmega8535, www.atmel.com. Piotr Markowski
Lista instrukcji ATmega8535
Lista instrukcji ATmega8535 (1) Arytmetyczne i logiczne
Lista instrukcji ATmega8535 Oznaczenia Rd, Rr rejestr uniwersalny X, Y, Z rejestry uniwersalne 16-bitowe P rejestr specjalny K stała (dane) k stała (adres) b,s numer bitu w rejestrze
Lista instrukcji ATmega8535
Lista instrukcji ATmega8535 (2) Skoku/warunkowe
Lista instrukcji ATmega8535 (3) Transferu danych
Lista instrukcji ATmega8535 (4) Na bitach
Lista instrukcji ATmega8535 (5) Specjalne
1.Pierwsze instrukcje
LDI Load Immediate
OUT Store Register to I/O Location OUT P,Rr 0 r 31, 0 P 63
IN - Load an I/O Location to Register IN Rr,P 0 r 31, 0 P 63
Program 1 Zadanie: wysłać 1 na co drugi pin portu A
RJMP Relative Jump
RJMP Relative Jump
INC Increment
DEC Decrement
ROL Rotate Left trough Carry ROR Rotate Right trough Carry
Zadanie: biegnąca dioda
2. Instrukcje skoku warunkowego
Instrukcje skoku warunkowego
BRIE Branch if Global Interrupt is Enabled
BRID Branch if Global Interrupt is Disabled
BRTS Branch if the T Flag is Set BRTC Branch if the T Flag is Cleared
BRHS Branch if Half Carry Flag is Set BRHC Branch if Half Carry Flag is Cleared
BRGE Branch if Greater or Equal (Signed) BRLT Branch if Less Than (Signed)
BRVS Branch if Overflow Set BRVC Branch if Overflow Cleared
BRPL Branch if Plus BRMI Branch if Minus
BREQ Branch if Equal BRNE Branch if Not Equal
BRSH Branch if Same or Higher (Unsigned) BRLO Branch if Lower (Unsigned)
BRSH Branch if Same or Higher (Unsigned) BRLO Branch if Lower (Unsigned) BRSH = BRCC (Branch if Carry Clear) BRLO = BRCS (Branch if Carry Set)
BRBS Branch if Bit in SREG is Set BRBC Branch if Bit in SREG is Cleared
Przykład Pętla opóźniająca BRNE (flaga Z)
Pętla opóźniająca 1 1 2(1) 1 + 255 (1+2) = 766 cykli 0,8 ms 1 + 255 (766+1+2) = 196 095 cykli 200 ms BRNE skocz do OP jeśli flaga Z = 0 Z = 1 0000 0001 -> 0000 0000 R20 R20
3. Instrukcje warunkowe (pominięcia)
Instrukcje pominięcia
CPSE Compare Skip if Equal
SBRS Skip if Bit in Register is Set SBRC Skip if Bit in Register is Cleared
SBIS Skip if Bit in I/O Register is Set SBIC Skip if Bit in I/O Register is Cleared
Przykład Zmiana kierunku obrotu SBRS/SBRC
Zmiana kierunku obrotu 7 6 5 4 3 2 1 0
4. Instrukcje skoku
Instrukcje skoku
IJMP Indirect Jump
RCALL Relative Call to Subroutine
ICALL Indirect Call to Subroutine
RET Return from Subroutine
RETI Return from Interrupt
Przykład - podprogramy
5. Operacje logiczne
Operacje logiczne
AND Logical AND
ANDI Logical AND with Immediate
OR Logical OR ORI Logical OR with Immediate
EOR Exclusive OR
COM One s Complement
NEG Two s Complement
TST Test for Zero or Minus
CLR Clear Register
SER Set Register
6. Operacje arytmetyczne
Operacje arytmetyczne
ADD Add without Carry SUB Subtract without Carry
ADC Add with Carry SBC Subtract with Carry
ADIW Add Immediate to Word SBIW Subtract Immediate from Word
SUBI Subtract Immediate
SBCI Subtract Immediate with Carry
MUL Multiply Unsigned
MULS Multiply Signed
MULS Multiply Signed 0111 1111-127 0111 1110-126... 0000 0001-1 0000 0000-0 1111 1111 - -1 1111 1110 - -2... 1000 0001 - -127 1000 0000 - -128
MULSU Multiply Signed with Unsigned
Mnożenie MUL: 1000 0110 1100 1110 R1 R0 MULS: 0000 0111 1100 1110 R1 R0 MULSU: 1111 0101 1100 1110 R1 R0
FMUL Fractional Multiply Unsigned
Mnożenie ułamków Zapis liczby zmiennoprzecinkowej: 2 0 + 2-1 + 2-2 + 2-3 + 2-4 + 2-5 +... 1000 0000 = 1100 0000 = 0110 0000 = 1111 1111 = 1.9921875 FMUL: x =
FMULS Fractional Multiply Signed
Ułamki ze znakiem 0111 1111 = 0.9921875... 0000 0001 = 0.0078125 0000 0000 = 0 1111 1111 = -0.0078125 0000 0000 + 1... 1000 000 = -1
FMULSU Fractional Multiply Signed with Unsigned
CP Compare
CPC Compare with Carry
CPI Compare with Immediate
7. Operacje na bitach
Operacje na bitach
SBR Set Bits in Register CBR Clear Bits in Register
SBI Set Bit in I/O Register CBI Clear Bit in I/O Register
Rejestry specjalne
LSL Logical Shift Left LSR Logical Shift Right
ROL Rotate Left trough Carry ROR Rotate Right trough Carry + 1001 1100 1001 1100 C=0 ADC C=1 0011 1000
ASR Arithmetic Shift Right
SWAP Swap Nibbles
8. Operacje na SREG
Operacje na rejestrze SREG
Instrukcje CL.. CLI CLT CLH CLS CLV CLN CLZ CLC I T H S V N Z C «0 «0 «0 «0 «0 «0 «0 «0 Clear flag
Instrukcje SE.. SEI SET SEH SES SEV SEN SEZ SEC I T H S V N Z C «1 «1 «1 «1 «1 «1 «1 «1 Set flag
BSET Bit Set in SREG BCLR Bit Clear in SREG
BLD Bit Load from T Flag to Register BST Bit Store from Register to T Flag
9. Tryby adresowania (operacje przesyłu danych)
Tryby adresowania mapy pamięci 0 31 0 63 0 32 rej. uniwersalne 64 rej. specjalne 511 RAMEND 512 bajtów SRAM
Operacje przesyłu danych
Operacje przesyłu danych
Tryby adresowania rejestry uniwersalne
Tryby adresowania rejestry uniwersalne ASR Rd DEC Rd ROL Rd
Tryby adresowania rejestry specjalne
Tryby adresowania rejestry
MOV Copy Register
MOVW Copy RegisterWord movw movw movw movw movw
Tryby adresowania pamięć danych Bezpośrednie: 0 32 rej. uniwersalne Pośrednie: 31 0 63 0 511 RAMEND 64 rej. specjalne 512 bajtów SRAM
Tryby adresowania SRAM
Adresowanie bezpośrednie (LDS, STS)
LDS Load Direct from Data Space STS Store Direct to Data Space
Tryby adresowania mapy pamięci 0 31 0 63 0 511 RAMEND 32 rej. uniwersalne 64 rej. specjalne 512 bajtów SRAM str. 297
Adresowanie pośrednie (LD, ST) Pre Post dekrementowany inkrementowany
Adresowanie pośrednie (LD, ST) Pre dekrementowany
Adresowanie pośrednie (LD, ST)
LD Load Indirect from Data Space to Register using Index X, Y or Z
ST Store Indirect From Register to Data Space using Index X, Y or Z
Adresowanie pośrednie z przesunięciem (LDD, STD) Tylko rejestry Y i Z LDD Rd,Y+q STD Y+q,Rd 0 q 63 Y, Z nie zmieniają się
Tryby adresowania stos
Wysyłanie na stos / pobieranie ze stosu Rd
PUSH Push Register on Stack POP Pop Register from Stack
Tryby adresowania FLASH
Adresowanie pamięci FLASH RJMP, RCALL
Adresowanie pamięci FLASH IJMP, ICALL
LPM Load Program Memory SPM Store Program Memory
LPM Load Program Memory SPM Store Program Memory
LPM Load Program Memory
SPM Store Program Memory
10. Operacje MCU
Operacje specjalne MCU
NOP No Operation
SLEEP
WDR Watchdog Reset
BREAK
Przykładowe zagadnienia sprawdzające
Przykładowe zagadnienia sprawdzające 1. Zapisz liczbę 147 w 8-bitowym kodzie: binarnym, U2, szesnastkowo-dziesiętnym. 2. Wskaż błąd w zapisie instrukcji LDI: LDI R16,R17. W jakich kodach liczbowych należy zapisać R16, R17 dla instrukcji MULS R16,R17? (opanowanie wiedzy na temat wybranych instrukcji: LDI, OUT/IN, ROL/ROR, MULS, EOR, MOV, BRNE, RJMP/IJMP/RCALL, RET/RETI, SBRS/SBRC/SBIS/SBIC, PUSH/POP, SEI/CLI). 3. Zapisz liczbę -1.75 w 8-bitowym kodzie zmiennoprzecinkowym. 4. Adresowanie bezpośrednie vs. pośrednie wyjaśnij różnicę. 5. Jakich rodzajów pamięci dotyczy pojęcie adresowania? 6. Adresowanie post-inkrementowane / pre-dekrementowane wyjaśnij terminy.