INSTRUKCJE / KOMENDY / ROZKAZY: PRZEGLĄD I KILKA PRZYKŁADÓW DLA PRZYPOMNIENIA, GŁÓWNE REJESTRY ROBOCZE CPU: rodzina 51 AVR ARM 8 bit 8 bit 32 bit A akumulator B akumulator pomocniczy R0 R7 rejestry robocze (x 4) R0 R31 R0 R15 PSW rejestr wskaźników SREG CPSR (SPSR) PC licznik rozkazów PC PC = R15 SP wskaźnik stosu SP SO = R13 Piotr MALECKI 1/38
OPERACJE (rozkazy) PROCESORÓW CYFROWYCH TWORZĄ GRUPY: OPERACJE ARYTMETCZNO-LOGICZNE OPERACJE TRANSFERU DANYCH OPERACJE WARUNKOWE OPERACJE STERUJĄCE 8051 FAMILY ARITHMETIC and LOGIC INSTRUCTIONS Code Addressing flags cycles ADD A,Rr A,direct A,@Ri A.#data C,N,V 1 ADC A,Rr A,direct A,@Ri A,#data C,N,V 1 SUBB A,Rr A,direct A,@Ri A,#data C,H,V 1 INC A Rr direct @Ri DPTR 1 DEC A Rr direct @Ri 1 MUL AB C,V 4 DIV AB C,V 4 DA A C 1 ANL A,Rr A,direct A,@Ri A,#data direct,a direct,#data 1(2) ORL A,Rr A,direct A,@Ri A,#data direct,a direct,#data 1(2) XRL A,Rr A,direct A,@Ri A,#data direct,a direct,#data 1(2) CLR A CPL A SWAP A gdzie r = 0 : 7, i = 0,1 #data = 0 : 255 @ oznacza adresowanie pośrednie, Direct ozb=nacza adresowanie bezpośrednie Piotr MALECKI 2/38
INSTRUKCJE ARYTMETYCZNE RODZINY 8051 Piotr MALECKI 3/38
NOTACJA SYSTEMY LICZBOWE - REPREZENTACJA LICZB UJEMNYCH - ZMIENNOPRZECINKOWYCH INTERPRETACJA Piotr MALECKI 4/38
INSTRUKCJE LOGICZNE RODZINY 8051 Piotr MALECKI 5/38
Piotr MALECKI 6/38
INSTRUKCJE PRZESYŁANIA DANYCH RODZINY 8051 Piotr MALECKI 7/38
Piotr MALECKI 8/38
INSTRUKCJE MANIPULUJĄCE BITAMI RODZINY 8051 Piotr MALECKI 9/38
Piotr MALECKI 10/38
INSTRUKCJE STERUJĄCE RODZINY 8051 Piotr MALECKI 11/38
DYREKTYWY ASEMBLERA Dosyć uniwersalne, mogą występować w nieco zmienionych formach (np..org), ale zwykle w tych samych znaczeniach Piotr MALECKI 12/38
;Warm boot application example WARM EQU 30H ;First location of the four bytes in RAM. WARM1 EQU 55H ;First predetermined value. WARM2 EQU 0AAH ;Second predetermined value. WARM3 EQU 33H ;Third predetermined value. WARM4 EQU 0CCH ;Fourth predetermined value. WARMBT EQU 0 ;Warm boot status bit. ORG 0 START: JMP MAIN ;Bypass interrupt vectors. ORG 26H MAIN: MOV R0,#WARM ;Pointer for first byte. CJNE @R0,#WARM1,COLD ;Test first byte. INC R0 ;Pointer for second byte. CJNE @R0,#WARM2,COLD ;Test second byte. INC R0 ;Pointer for third byte. CJNE @R0,#WARM3,COLD ;Test third byte. INC R0 ;Pointer for fourth byte. CJNE @R0,#WARM4,COLD ;Test fourth byte. SETB WARMBT ;This is a warm start. JMP INIT ;Continue application. COLD: CLR WARMBT ;This is a cold boot. MOV R0,#WARM ;Pointer for first byte. MOV @R0,#WARM1 ;Load the four bytes for future test. INC R0 ; MOV @R0,#WARM2 ; INC R0 ; MOV @R0,#WARM3 ; INC R0 ; MOV @R0,#WARM4 ; INIT: ;Continue with the ;application. Przykład nieco trickowego programu informującego programistę (8051), czy program rozpoczął pracę po załączeniu zasilania mikrokontrolera ( warm start ), czy po wykonaniu reset ( cold start ) POMYSŁ PROGRAMU OPIERA SIĘ NA OBSERWACJI, ŻE PAMIĘĆ RAM (OGRANICZAMY SIĘ DO ARCHITEKTURY 805x) JEST INICJOWANA W ZAKRESIE SFR, NATOMIAST DLA POZOSTAŁEJ PRZESTRZENI ADRESOWEJ PRZYJMUJE, PO ZAŁĄCZENIU ZASILANIA, WARTOŚCI PRZYPADKOWE. INNE AKCJE RESET, NIE POWODUJĄCE PRZERWY ZASILANIA NIE ZMIENIAJĄ ZAWARTOŚCI RAM. END Piotr MALECKI 13/38
REJESTRY AVR 32 8-BITOWE REJESTRY ROBOCZE OSTATNIE 3 PARY TWORZĄ TRZY REJESTRY 16-BITOWE X, Y, Z Piotr MALECKI 14/38
Adres bezpośredni, pojedynczy rejestr Adres bezpośredni, dwa rejestry Bezpośrednie adresowanie przestrzeni I/O (rejestry konfiguracyjne układów peryferyjnych) Piotr MALECKI 15/38
Adres bezpośredni, immediate variable Adres pośredni z przesunięciem Piotr MALECKI 16/38
Pośrednie adresowanie danych Pośrednie adresowanie danych z pre-dekrementacją Piotr MALECKI 17/38
Pośrednie adresowanie danych z post-inkrementacją Adresowanie pamięci kodu ( word boundary )!!! Piotr MALECKI 18/38
Adresowanie pamięci kodu z post-inkrementacją np. w LPM Z+ Bezpośrednie adresowanie pamięci kodu Piotr MALECKI 19/38
Pośrednie adresowanie pamięci kodu w rozkazach IJMP i ICALL Adresowanie względne pamięci kodu w rozkazach RJMP i RCALL Piotr MALECKI 20/38
AVR ARITHMETIC and LOGIC INSTRUCTIONS Code arguments affected flags cycles ADD Rd,Rs Z,C,N,V,H,S 1 ADC Rd,Rs Z,C,N,V,H,S 1 ADIW RR,c63 Z,C,N,V,S 2 SUB Rd,Rs Z,C,H,N,V,S 1 SUB Rh,c255 Z,C,N,V,S,H 1 SBIW RR,c63 Z,C,N,V,S 2 SBC Rd,Rs Z,C,N,V,S,H 1 SBC Rd,c255 Z,C,N,V,S,H 1 AND Rd,Rs S,V,N,Z 1 ANDI Rh,c255 S,V,N,Z 1 OR Rd,Rs S,V,N,Z 1 ORI Rh,c255 S,V,N,Z 1 EOR Rd,Rs S,V,N,Z 1 COM Rd S,V,N,Z,C 1 NEG Rd H,S,V,N,Z,C 1 SBR Rh,c255 S,V,N,Z 1 CBR Rh,c255 S,V,N,Z 1 INC Rd S,V,N,Z 1 DEC Rd S,V,N,Z 1 TST Rd S,V,N,Z 1 CLR Rd S,V,N,Z 1 SER Rh 1 MUL Rd,Rs Z,C 2 MULS Rh,Rh Z,C 2 MULSU Rh,Rh Z,C 2 FMUL Rhd,Rhs Z,C 2 FMULS Rhd,Rhs Z,C 2 FMULSU Rhd,Rhs Z,C 2 Doskonałe dokumentacje ATMELa http://www.atmel.com/webdoc/avrassembler/ Zbiorcze listy instrukcji oraz szczegółowe opisy z przykładami Lub wiele innych źródeł http://www3.imperial.ac.uk/pls/portallive/docs/1/32785698.htm http://avr.8b.cz/asmhelp/html/instructions.html Where: d,s = 0 : 30, h = 16 : 30, hd, hs = 16:23 c63 = 0 : 63, c255 = 0 : 255 Piotr MALECKI 21/38
ZBIORCZE LISTY ROZKAZÓW MIKROKONTROLERÓW ARCHITEKTURY AVR PRZYKŁADOWE ODWOŁANIA DO OPISÓW WYBRANYCH INSTRUKCJI (sieć lub.pdf file) - ADC, FMUL (?), Piotr MALECKI 22/38
Piotr MALECKI 23/38
ZBIORCZE LISTY ROZKAZÓW MIKROKONTROLERÓW ARCHITEKTURY AVR PRZYKŁADOWE ODWOŁANIA DO OPISÓW WYBRANYCH INSTRUKCJI (sieć lub.pdf file) BRGE, BRBC (równoważne!) Piotr MALECKI 24/38
Piotr MALECKI 25/38
ZBIORCZE LISTY ROZKAZÓW MIKROKONTROLERÓW ARCHITEKTURY AVR PRZYKŁADOWE ODWOŁANIA DO OPISÓW WYBRANYCH INSTRUKCJI (sieć lub.pdf file) IN, OUT, PUSH, POP POP: (SP pre-incremented), PUSH: (post-decrement) Piotr MALECKI 26/38
Piotr MALECKI 27/38
UWAGA NA ADRESOWANIE PRZESTRZENI I/O IN / OUT LD / ST Piotr MALECKI 28/38
ZBIORCZE LISTY ROZKAZÓW MIKROKONTROLERÓW ARCHITEKTURY AVR PRZYKŁADOWE ODWOŁANIA DO OPISÓW WYBRANYCH INSTRUKCJI (sieć lub.pdf file) Piotr MALECKI 29/38
51 AKUMULATOR ACC.7 ACC.6 ACC.5 ACC.4 ACC.3 ACC.2 ACC.1 ACC.0 PSW PROGRAM STATUS WORD CY AC F0 RS1 RS0 OV F1 P 7 6 5 4 3 2 1 0 CY carry flag AC aux. Carry F0, F1 general purpose RS1, RS0 reg. bank select OV overflow flag P parity bit RODZINA AVR Piotr MALECKI 30/38
Piotr MALECKI 31/38
Piotr MALECKI 32/38
Piotr MALECKI 33/38
Piotr MALECKI 34/38
POLE WARUNKÓW W ROZKAZACH ARM Piotr MALECKI 35/38
Piotr MALECKI 36/38
ASEMBLERY I KOMPILATORY SKROŚNE (ASSEMBLERS & CROSSCOMPILERS) TWORZĄ WYNIKOWY ZBIÓR W FORMACIE.hex, A ROZMAITE PROGRAMATORY ŁADUJĄ TEN ZBIÓR DO PAMIĘCI KODU MIKROKONTROLERA JEST TO ZBIÓR ASCI. KAŻDA LINIA TEGO ZBIORU, O MAKSYMALNEJ DŁUGOŚCI 27 BAJTÓW MA STRUKTURĘ PODANĄ W TABELI: Piotr MALECKI 37/38
KAŻDA LINIA ZAKOŃCZONA JEST SUMĄ KONTROLNĄ POMNOŻONĄ PRZEZ (-1), BY WŁĄCZONA DO SUMY DAWAŁA WARTOŚĆ ZERO ZDARZA SIĘ, ŻE PROGRAMATORY PRODUCENTÓW MODYFIKUJĄ.hex FILE W PROCESIE DIALOGU ZE SPRZĘTOWYM MINI-LOADEREM ZASZYTYM W MIKROKONTROLERZE Piotr MALECKI 38/38