Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Rodzina AVR wykład 2. AVR 2/27 Lista rozkazów AVR Przykłady programowania.

Podobne prezentacje


Prezentacja na temat: "Rodzina AVR wykład 2. AVR 2/27 Lista rozkazów AVR Przykłady programowania."— Zapis prezentacji:

1 Rodzina AVR wykład 2

2 AVR 2/27 Lista rozkazów AVR Przykłady programowania

3 Lista rozkazów ATtiny2313/mega8515 3/27 1. Rozkazy arytmetyczne ADDrd,rs; rd:=rd+rsrd=R0..R31ZCNVH ADCrd,rs; rd:=rd+rs+Crs=R0..R31ZCNVH ADIWrdd,k; (rdd+1,rdd):= (rdd+1,rdd)+kZCNVS ; rdd=R24,R26,R28,R30k=0..63 SUBrd,rs; rd:=rd-rsrd=R0..R31ZCNVH SBCrd,rs; rd:=rd-rs-Crs=R0..R31ZCNVH SUBIrd,n; rd:=rd-n rd=R16..R31ZCNVH SBCIrd,n; rd:=rd-n-C n= | ZCNVH SBIWrdd,k; (rdd+1,rdd):= (rdd+1,rdd)-kZCNVS ; rdd=R24,R26,R28,R30k=0..63

4 Lista rozkazów ATtiny2313/mega8515 4/27 CPrd,rs; ustawienie flag Z,N,V,C,H,S jak przy rd-rs CPCrd,rs; ustawienie flag N,V,C,H,S jak przy rd-rs-C ; gdy rd-rs-C 0 flaga Z pozostaje bez zmian CPIrd,n; ustawienie flag Z,N,V,C,H,S jak przy rd'-n ;rd=R16..R31 n= | CPSErd,rs; jeżeli rd=rs to pomiń następny rozkaz INCrd; rd:=rd+1ZNV DECrd; rd:=rd-1ZNV NEGrd; rd:=-rdZCNVH

5 Lista rozkazów ATtiny2313/mega8515 5/27 MULrd,rs; R1R0:= rd · rs mnożenie liczb bez znakuZC MULSrd,rs ; R1R0:= rd · rs mnożenie liczb ze znakiemZC ; rd, rs = R16..R31 MULSUrd,rs ; R1R0:= rd · rs mnożenie liczby ze znakiem ; przez liczbę bez znaku, rd, rs = R16..R23ZC ; Z=1 sygnalizuje R1R0=0 ; C=R1R0 15 =R1 7

6 Lista rozkazów ATtiny2313/mega8515 6/27 FMUL rd,rs ; CYR1R0:= SHL(rd · rs) mnożenie liczb bez znaku ; rd, rs = R16..R23ZC ; rd, rs – liczby stałopozycyjne w formacie 1C.7U ; po mnożeniu 16b iloczyn jest przesuwany o bit w lewo ; Z=1 sygnalizuje iloczyn=0 FMULS rd,rs ; CYR1R0:= SHL(rd · rs) mnożenie liczb ze znakiem ; UWAGA: (-1) ·(-1) daje (-1)ZC FMULSU rd,rs ; CYR1R0:= SHL(rd · rs) mnożenie liczby ze znakiem ; przez liczbę bez znakuZC

7 Lista rozkazów ATtiny2313/mega8515 7/27 2. Rozkazy logiczne ANDrd,rs; rd:=rd and rsrd=R0..R31ZNV ANDIrd,n; rd:=rd and nrd=R16..R31, ZNV n= | ORrd,rs; rd:=rd or rsrd=R0..R31ZNV ORIrd,n; rd:=rd or nrd=R16..R31ZNV n= | EORrd,rs; rd:=rd xor rsrd=R0..R31ZNV

8 Lista rozkazów ATtiny2313/mega8515 8/27 CBRrd,n; rd:=rd and (not n)ZNV SBRrd,n; rd:=rd or n n= | ZNV ; ( ORI rd,n) CLRrd; rd:=0rd=R0..R31Z,N,V,S:=0 SERrd; rd:=255rd=R16..R31 ; ( LDI rd,255) COMrd; rd:= not rdrd=R0..R31ZNCV TSTrd; rd and rd V:=0; ZNS ; ( AND rd, rd)

9 Lista rozkazów ATtiny2313/mega8515 9/27 3. Rozkazy obrotów i przesunięć SWAPrd;rd:rd=R0..R31 ASRrd; ZNCV LSLrd;ZNCV LSRrd;ZNCV ROLrd;ZNCV RORrd; ZNCV C 7 rd 0 C 0 C C 0 C

10 Lista rozkazów ATtiny2313/mega /27 4. Rozkazy operacji bitowych CLC; C:=0 SEC; C:=1 CLH; H:=0 SEH; H:=1 CLN; N:=0 SEN; N:=1 CLS; S:=0SES; S:=1 CLT; T:=0SET; T:=1 CLV; V:=0SEV; V:=1 CLZ; Z:=0SEZ; Z:=1 BCLRb; SREG b :=0b=0..7 ( CLC,CLH... CLZ,CLI) BSETb; SREG b :=1b=0..7 ( SEC,SEH... SEZ,SEI) BSTrd,b; T:= rd b rd=R0..R31, b=0..7 BLDrd,b; rd b :=T

11 Lista rozkazów ATtiny2313/mega /27 5. Rozkazy przesłań (nie zmieniają flag) MOVrd,rs; rd:=rsrd,rs=R0..R31 MOVWrd,rs; rd+1:rd:=rs+1:rsrd,rs=R0..R30 LDrd,X; rd:=RAM[X]rd=R0..R31 LDrd,X+; rd:=RAM[X] ; X:=X+1 LDrd,-X; X:=X-1 ; rd:=RAM[X] LDrd,Y; rd:=RAM[Y] LDrd,Y+; rd:=RAM[Y] ; Y:=Y+1 LDrd,-Y; Y:=Y-1 ; rd:=RAM[Y] LDDrd,Y+d; rd:=RAM[Y+d]d=0..63

12 Lista rozkazów ATtiny2313/mega /27 LDrd,Z; rd:=RAM[Z] LDrd,Z+; rd:=RAM[Z] ; Z:=Z+1 LDrd,-Z; Z:=Z-1 ; rd:=RAM[Z] LDDrd,Z+d; rd:=RAM[Z+d]d=0..63 LDIrd,n; rd:=nrd=R16..R31n= LDSrd,adr; rd:=RAM[adr] LPM; R0:=ROM[Z] LPM rd,Z ; rd :=ROM[Z] LPM rd,Z+ ; rd :=ROM[Z], Z:=Z+1

13 Lista rozkazów ATtiny2313/mega /27 STX,rd; RAM[X]:=rdrd=R0..R31 STX+,rd; RAM[X]:=rd ; X:=X+1 ST-X, rd; X:=X-1 ; RAM[X]:=rd STY,rd; RAM[Y]:=rd STY+,rd; RAM[Y]:=rd ; Y:=Y+1 ST-Y,rd; Y:=Y-1 ; RAM[Y]:=rd STDY+d,rd; RAM[Y+d]:=rdd=0..63

14 Lista rozkazów ATtiny2313/mega /27 STZ,rd; RAM[Z]:=rd STZ+,rd; RAM[Z]:=rd ; Z:=Z+1 ST-Z,rd; Z:=Z-1 ; RAM[Z]:=rd STDZ+d,rd; RAM[Z+d]:=rdd=0..63 STSadr,rd; RAM[adr]:=rd SPM; ROM[Z]:=R1:R0 POPrd; SP:=SP+1 ; rd:=RAM[SP] PUSHrd; RAM[SP]:=rd ; SP:=SP-1

15 Lista rozkazów ATtiny2313/mega /27 6. Rozkazy skoków (nie zmieniają flag) RJMPadr; PC:=PC+1+adr adr= IJMP; PC:=Z BRBCb,adrel; jeżeli SREG b =0 to PC:=PC+1+adreladrel= BRBSb,adrel; jeżeli SREG b =1 to PC:=PC+1+adrelb=0..7 BRCCadrel; jeżeli C=0 to PC:=PC+1+adrel( BRBC 0, adrel) BRCSadrel; jeżeli C=1 to PC:=PC+1+adrel( BRBS 0, adrel) BRHCadrel; jeżeli H=0 to PC:=PC+1+adrel(itp....) BRHSadrel; jeżeli H=1 to PC:=PC+1+adrel BRNEadrel; jeżeli Z=0 to PC:=PC+1+adrel BREQadrel; jeżeli Z=1 to PC:=PC+1+adrel BRGEadrel; jeżeli S=0 to PC:=PC+1+adrel BRLTadrel; jeżeli S=1 to PC:=PC+1+adrel

16 Lista rozkazów ATtiny2313/mega /27 BRMI adrel; jeżeli N=1 to PC:=PC+1+adrel BRPL adrel; jeżeli N=0 to PC:=PC+1+adrel BRTCadrel; jeżeli T=0 to PC:=PC+1+adrel BRTSadrel; jeżeli T=1 to PC:=PC+1+adrel BRVCadrel; jeżeli V=0 to PC:=PC+1+adrel BRVSadrel; jeżeli V=1 to PC:=PC+1+adrel BRIDadrel; jeżeli I=0 to PC:=PC+1+adrel BRIEadrel; jeżeli I=1 to PC:=PC+1+adrel SBRCrd,b; jeżeli rd b =0 to pomiń następny rozkaz rd=R0..R31 b=0..7 SBRSrd,b; jeżeli rd b =1 to pomiń następny rozkaz rd=R0..R31 b=0..7 SBICpx,b; jeżeli px b =0 to pomiń następny rozkaz px=0..31 * b=0..7 SBISpx,b; jeżeli px b =1 to pomiń następny rozkaz px=0..31 * b=0..7 * tylko bity portów o adresach są dostępne dla tych rozkazów

17 7. Rozkazy wywołań procedur i powrotów RCALLadr; RAM(SP):=(PC+1) L adr= ; SP:=SP-1 ; RAM(SP):=(PC+1) H ; SP:=SP-1 ; PC:=PC+1+adr ICALL; RAM(SP):=(PC+1) L ; SP:=SP-1 ; RAM(SP):=(PC+1) H ; SP:=SP-1 ; PC:=Z(Z=R31,R30) Lista rozkazów ATtiny2313/mega /27

18 Lista rozkazów ATtiny2313/mega /27 RET; SP:=SP+1 ; PC H :=RAM(SP) ; SP:=SP+1 ; PC L :=RAM(SP) RETI; SP:=SP+1 ; PC H :=RAM(SP) ; SP:=SP+1 ; PC L :=RAM(SP) ; I:=1

19 8. Rozkazy wejścia/wyjścia INrd,px; rd:=pxrd=R0..R31, px=0..63 OUTpx,rd; px:=rd CBIpx,b; px b :=0px=0..31 * b=0..7 SBIpx,b; px b :=1px=0..31 * b=0..7 * tylko bity portów o adresach są dostępne dla tych rozkazów Lista rozkazów ATtiny2313/mega /27

20 Lista rozkazów ATtiny2313/mega /27 9. Rozkazy sterujące NOP; nic nie rób CLI; I:=0 tzn. zablokuj przerwania SEI; I:=1 tzn. odblokuj przerwania SLEEP; przejdź do trybu pracy z obniżonym poborem mocy WDR; zerowanie rejestru zegara watchdoga BREAK; rozkaz do debugingu sprzętowego: ; zatrzymuje CPU pod warunkiem zaprogramowania ; bitów konfiguracyjnych JTAGEN lub OCDEN ; w przeciwnym razie jest równoważny NOP

21 10. Wpływ rozkazów na SREG Lista rozkazów ATtiny2313/mega /27

22 ;Procedura konwersji 4-cyfrowej liczby w spakowanym BCD ;na 2-bajtowa liczbę w NB ;wykorzystuje procedure zamiany 1B w BCD na 1B w NB ;parametry:r13,r14 liczba w BCD LSB first ;wyniki:r17,r18 liczba w NB LSB first ;zmiany:r13,r14,r16,sreg bcdtonb2B: movr16,r13 rcallbcdtonb1B;zamiana ml. bajtu na NB (LSB) movr13,r16 movr16,r14 rcallbcdtonb1B;zamiana st. bajtu na NB (MSB) movr14,r16 movr17,r13;r18r17:=wartosc ml.bajtu w NB clrr18 dod100:tstr14;wynik:=LSB+MSB*100 breqkoniec subir17,-100;dodawanie +100 przez sbcir18,-1;odejmowanie -100 r14 razy decr14 rjmpdod100 koniec: ret AVR - przykłady programowania 22/27 ldir16,100;r1r0:=st.bajt*100 mulr16,r14 addr17,r0;dosumowanie do r18r17 adcr18,r1 ret,r0,r1

23 ; Procedura zamiany 2 cyfr BCD na 1B NB ; parametry:r16 - para cyfr w BCD ; wynikir16 - wartosc w NB ; zmiany:sreg,r10,r11 bcdtonb1B: movr10,r16;kopia do r10 andir16,$0F;wydzielenie ml.cyfry movr11,r16;zapamietanie jej w r11 movr16,r10;odtworzenie r16 swapr16 andir16,$0F;wydzielenie st.cyfry addr16,r16 movr10,r16;r10=st.cyfra*2 addr16,r16 addr16,r16;r16=st.cyfra*8 addr16,r10;r16=st.cyfra*10 addr16,r11;r16=NB(r16) ret AVR - przykłady programowania 23/27 movr10,r16 ldir16,10;r1r0:=st.cyfra*10 mulr16,r10 movr16,r0;iloczyn do r16 addr16,r11;dosumowanie ml.cyfry ret,r0,r1

24 AVR - przykłady programowania 24/27 ; Procedura konwersji cyfry szesn. na kod wyswietlacza ; 7-segmentowego. ; Poszczególne segmenty są przyporządkowane bitom od ; najstarszego następująco: hgfedcba. ; parametry: R0 = cyfra hex.; ; wyniki: R0 = kod segmentowy; ; zmiany: Z; ; długość: 22B/11W (łącznie z tablicą kodów); HEXDISP: movr30,r0 ldir31,low(2*kody) addr30,r31 ldir31,high(2*kody) lpm;pobranie kodu wyswietlacza ret kody:.DB 0b ,0b ,0b ,0b DB 0b ,0b ,0b ,0b DB 0b ,0b ,0b ,0b DB 0b ,0b ,0b ,0b ; Procedura konwersji cyfry szesn. na kod wyswietlacza ; 7-segmentowego. ; Poszczególne segmenty są przyporządkowane bitom od ; najstarszego następująco: hgfedcba. ; parametry: R0 = cyfra hex.; ; wyniki: R0 = kod segmentowy; ; zmiany: Z; ; długość: 22B/11W (łącznie z tablicą kodów); HEXDISP: movr30,r0 ldir31,low(2*kody) addr30,r31 ldir31,high(2*kody) clrr0 adcr31,r0;uwzglednienie ewent. nadmiaru lpm;pobranie kodu wyswietlacza ret kody:.DB 0b ,0b ,0b ,0b DB 0b ,0b ,0b ,0b DB 0b ,0b ,0b ,0b DB 0b ,0b ,0b ,0b

25 AVR - przykłady programowania 25/27 ; Fragment programu realizujący skok z przełącznikiem. ; Numer skoku do wykonania znajduje się w rejestrze R ; jezeli w tablicy skokow JMPTAB uzyje sie rozkazow jmp ; to potrzebny jest na wstepie rozkaz ; 'lsl r10 lub add r10,r10 (rozkaz jmp ma dlg. 2W=4B) ldi r30,low(JMPTAB) add r30,r10 ldi r31,high(JMPTAB) clr r10 adc r31,r10 ijmp..... JMPTAB: rjmp PROG1 rjmp PROG2.... rjmp PROGN

26 AVR - przykłady programowania 26/27 ; Fragment programu mnożący 16-bitowe liczby w U2 (ze znakiem) ; R19..R16:=R23R24 * R21R20 clrr2 mulsr23,r21 ;iloczyn starszych bajtow movwr18,r0 mulr22,r20 ;iloczyn mlodszych bajtow movwr16,r0 mulsur23,r20 ;iloczyn starszego bajtu przez mlodszy sbcr19,r2 addr17,r0 adcr18,r1 adcr19,r2 mulsur21,r22 ;iloczyn mlodszego bajtu przez starszy sbcr19,r2 addr17,r0 adcr18,r1 adcr19,r2

27 AVR - przykłady programowania 27/27 ; Fragment programu realizujący porównanie liczb w U2. ;..... ; Zal: L1=R7R6R5, L2=R12R11R10 cpr5,r10;porownanie najmlodszych bajtow cpcr6,r11 cpcr7,r12;porownanie najstarszych bajtow brgtL1wieksza breqrowne L1mniejsza: rjmp... rowne: rjmp... L1wieksza: rjmp...


Pobierz ppt "Rodzina AVR wykład 2. AVR 2/27 Lista rozkazów AVR Przykłady programowania."

Podobne prezentacje


Reklamy Google