of 27 /27
Rodzina AVR wykład 2

Rodzina AVR wykład 2

Embed Size (px)

DESCRIPTION

Rodzina AVR wykład 2. AVR 2 /27. Lista rozkazów AVR Przykłady programowania. Lista rozkazów ATtiny2313 /mega8515 3 /27. 1. Rozkazy arytmetyczne - PowerPoint PPT Presentation

Text of Rodzina AVR wykład 2

  • Rodzina AVRwykad 2

  • AVR */27Lista rozkazw AVR Przykady programowania

  • Lista rozkazw ATtiny2313/mega8515 */271. Rozkazy arytmetyczneADDrd,rs; rd:=rd+rsrd=R0..R31ZCNVHADCrd,rs; rd:=rd+rs+Crs=R0..R31ZCNVHADIWrdd,k; (rdd+1,rdd):= (rdd+1,rdd)+kZCNVS; rdd=R24,R26,R28,R30k=0..63SUBrd,rs; rd:=rd-rsrd=R0..R31ZCNVHSBCrd,rs; rd:=rd-rs-Crs=R0..R31ZCNVHSUBIrd,n; rd:=rd-n rd=R16..R31ZCNVHSBCIrd,n; rd:=rd-n-C n=0..255 | -128..127 ZCNVHSBIWrdd,k; (rdd+1,rdd):= (rdd+1,rdd)-kZCNVS; rdd=R24,R26,R28,R30k=0..63

  • Lista rozkazw ATtiny2313/mega8515 */27CPrd,rs; ustawienie flag Z,N,V,C,H,S jak przy rd-rsCPCrd,rs; ustawienie flag N,V,C,H,S jak przy rd-rs-C; gdy rd-rs-C0 flaga Z pozostaje bez zmianCPIrd,n; ustawienie flag Z,N,V,C,H,S jak przy rd'-n;rd=R16..R31 n=0..255 | -128..127 CPSErd,rs; jeeli rd=rs to pomi nastpny rozkazINCrd; rd:=rd+1ZNVDECrd; rd:=rd-1ZNVNEGrd; rd:=-rdZCNVH

  • Lista rozkazw ATtiny2313/mega8515 */27MULrd,rs; R1R0:= rd rs mnoenie liczb bez znakuZCMULSrd,rs ; R1R0:= rd rs mnoenie liczb ze znakiemZC; rd , rs = R16..R31MULSUrd,rs ; R1R0:= rd rs mnoenie liczby ze znakiem ; przez liczb bez znaku, rd, rs = R16..R23ZC; Z=1 sygnalizuje R1R0=0; C=R1R015=R17

  • Lista rozkazw ATtiny2313/mega8515 */27FMUL rd,rs ; CYR1R0:= SHL(rd rs) mnoenie liczb bez znaku; rd, rs = R16..R23ZC; rd , rs liczby staopozycyjne w formacie 1C.7U; po mnoeniu 16b iloczyn jest przesuwany o bit w lewo; Z=1 sygnalizuje iloczyn=0FMULS rd,rs ; CYR1R0:= SHL(rd rs) mnoenie liczb ze znakiem; UWAGA: (-1) (-1) daje (-1)ZCFMULSU rd,rs ; CYR1R0:= SHL(rd rs) mnoenie liczby ze znakiem ; przez liczb bez znakuZC

  • Lista rozkazw ATtiny2313/mega8515 */272. Rozkazy logiczneANDrd,rs; rd:=rd rsrd=R0..R31ZNVANDIrd,n; rd:=rd nrd=R16..R31, ZNV n=0..255 | -128..127 ORrd,rs; rd:=rd rsrd=R0..R31ZNVORIrd,n; rd:=rd nrd=R16..R31ZNV n=0..255 | -128..127 EORrd,rs; rd:=rd rsrd=R0..R31ZNV

  • Lista rozkazw ATtiny2313/mega8515 */27CBRrd,n; rd:=rd (~n)ZNVSBRrd,n; rd:=rd n n=0..255 | -128..127 ZNV ; ( ORI rd,n)CLRrd; rd:=0rd=R0..R31Z,N,V,S:=0SERrd; rd:=255rd=R16..R31 ; ( LDI rd,255)COMrd; rd7..0:= ~rd7..0rd=R0..R31ZNCVTSTrd; rd rd V:=0; ZNS ; ( AND rd, rd)

  • Lista rozkazw ATtiny2313/mega8515 */273. Rozkazy obrotw i przesuni

    SWAPrd;rd:rd=R0..R31

    ASRrd; ZNCV

    LSLrd;ZNCV

    LSRrd;ZNCV

    ROLrd;ZNCV

    RORrd; ZNCV

  • Lista rozkazw ATtiny2313/mega8515 */274. Rozkazy operacji bitowychCLC; C:=0 SEC; C:=1CLH; H:=0 SEH; H:=1CLN; N:=0 SEN; N:=1CLS; S:=0SES; S:=1CLT; T:=0SET; T:=1CLV; V:=0SEV; V:=1CLZ; Z:=0SEZ; Z:=1BCLRb; SREGb:=0b=0..7 ( CLC,CLH ... CLZ,CLI)BSETb; SREGb:=1b=0..7 ( SEC,SEH ... SEZ,SEI)BSTrd,b; T:= rdbrd=R0..R31, b=0..7BLDrd,b; rdb:=T

  • Lista rozkazw ATtiny2313/mega8515 */275. Rozkazy przesa (nie zmieniaj flag)MOVrd,rs; rd:=rsrd,rs=R0..R31MOVWrd,rs; rd+1:rd:=rs+1:rsrd,rs=R0..R30LDrd,X; rd:=RAM[X]rd=R0..R31LDrd,X+; rd:=RAM[X]; X:=X+1LDrd,-X; X:=X-1; rd:=RAM[X]LDrd,Y; rd:=RAM[Y]LDrd,Y+; rd:=RAM[Y]; Y:=Y+1LDrd,-Y; Y:=Y-1; rd:=RAM[Y]LDDrd,Y+d; rd:=RAM[Y+d]d=0..63

  • Lista rozkazw ATtiny2313/mega8515 */27LDrd,Z; rd:=RAM[Z]LDrd,Z+; rd:=RAM[Z]; Z:=Z+1LDrd,-Z; Z:=Z-1; rd:=RAM[Z]LDDrd,Z+d; rd:=RAM[Z+d]d=0..63LDIrd,n; rd:=nrd=R16..R31n=0..255LDSrd,adr; rd:=RAM[adr]LPM; R0:=ROM[Z]LPM rd,Z ; rd :=ROM[Z]LPM rd,Z+ ; rd :=ROM[Z] , Z:=Z+1

  • Lista rozkazw ATtiny2313/mega8515 */27STX,rd; RAM[X]:=rdrd=R0..R31STX+,rd; RAM[X]:=rd; X:=X+1ST-X, rd; X:=X-1; RAM[X]:=rdSTY,rd; RAM[Y]:=rdSTY+,rd; RAM[Y]:=rd; Y:=Y+1ST-Y,rd; Y:=Y-1; RAM[Y]:=rdSTDY+d,rd; RAM[Y+d]:=rdd=0..63

  • Lista rozkazw ATtiny2313/mega8515 */27STZ,rd; RAM[Z]:=rdSTZ+,rd; RAM[Z]:=rd; Z:=Z+1ST-Z,rd; Z:=Z-1; RAM[Z]:=rdSTDZ+d,rd; RAM[Z+d]:=rdd=0..63STSadr,rd; RAM[adr]:=rdSPM; ROM[Z]:=R1:R0POPrd; SP:=SP+1; rd:=RAM[SP]PUSHrd; RAM[SP]:=rd; SP:=SP-1

  • Lista rozkazw ATtiny2313/mega8515 */276. Rozkazy skokw (nie zmieniaj flag)RJMPadr; PC:=PC+1+adr adr=-2048..2047IJMP; PC:=ZBRBCb,adrel; jeeli SREGb=0 to PC:=PC+1+adreladrel=-64..63BRBSb,adrel; jeeli SREGb=1 to PC:=PC+1+adrelb=0..7BRCCadrel; jeeli C=0 to PC:=PC+1+adrel( BRBC 0, adrel)BRCSadrel; jeeli C=1 to PC:=PC+1+adrel( BRBS 0, adrel)BRHCadrel; jeeli H=0 to PC:=PC+1+adrel(itp....)BRHSadrel; jeeli H=1 to PC:=PC+1+adrelBRNEadrel; jeeli Z=0 to PC:=PC+1+adrelBREQadrel; jeeli Z=1 to PC:=PC+1+adrelBRGEadrel; jeeli S=0 to PC:=PC+1+adrelBRLTadrel; jeeli S=1 to PC:=PC+1+adrel

  • Lista rozkazw ATtiny2313/mega8515 */27BRMI adrel; jeeli N=1 to PC:=PC+1+adrelBRPL adrel; jeeli N=0 to PC:=PC+1+adrelBRTCadrel; jeeli T=0 to PC:=PC+1+adrelBRTSadrel; jeeli T=1 to PC:=PC+1+adrelBRVCadrel; jeeli V=0 to PC:=PC+1+adrelBRVSadrel; jeeli V=1 to PC:=PC+1+adrelBRIDadrel; jeeli I=0 to PC:=PC+1+adrelBRIEadrel; jeeli I=1 to PC:=PC+1+adrelSBRCrd,b; jeeli rdb=0 to pomi nastpny rozkaz rd=R0..R31 b=0..7SBRSrd,b; jeeli rdb=1 to pomi nastpny rozkaz rd=R0..R31 b=0..7SBICpx,b; jeeli pxb =0 to pomi nastpny rozkaz px=0..31* b=0..7SBISpx,b; jeeli pxb =1 to pomi nastpny rozkaz px=0..31* b=0..7* tylko bity portw o adresach 0..31 s dostpne dla tych rozkazw

  • 7. Rozkazy wywoa procedur i powrotw

    RCALLadr; RAM(SP):=(PC+1)L adr=-2048..2047; SP:=SP-1; RAM(SP):=(PC+1)H; SP:=SP-1; PC:=PC+1+adrICALL; RAM(SP):=(PC+1)L; SP:=SP-1; RAM(SP):=(PC+1)H; SP:=SP-1; PC:=Z(Z=R31,R30)Lista rozkazw ATtiny2313/mega8515 */27

  • Lista rozkazw ATtiny2313/mega8515 */27RET; SP:=SP+1; PCH:=RAM(SP); SP:=SP+1; PCL:=RAM(SP)RETI; SP:=SP+1; PCH:=RAM(SP); SP:=SP+1; PCL:=RAM(SP); I:=1

  • 8. Rozkazy wejcia/wyjciaINrd,px; rd:=pxrd=R0..R31, px=0..63OUTpx,rd; px:=rdCBIpx,b; pxb:=0px=0..31* b=0..7SBIpx,b; pxb:=1px=0..31* b=0..7* tylko bity portw o adresach 0..31 s dostpne dla tych rozkazwLista rozkazw ATtiny2313/mega8515 */27

  • Lista rozkazw ATtiny2313/mega8515 */279. Rozkazy sterujceNOP; nic nie rbCLI; I:=0 tzn. zablokuj przerwaniaSEI; I:=1 tzn. odblokuj przerwaniaSLEEP; przejd do trybu pracy z obnionym poborem mocyWDR; zerowanie rejestru zegara watchdogaBREAK; rozkaz do debugingu sprztowego: ; zatrzymuje CPU pod warunkiem zaprogramowania ; bitw konfiguracyjnych JTAGEN lub OCDEN; w przeciwnym razie jest rwnowany NOP

  • 10. Wpyw rozkazw na SREGLista rozkazw ATtiny2313/mega8515 */27

    rozkaz

    flaga

    komentarz

    T

    H

    S

    V

    N

    Z

    C

    ADD,ADC,SUB,SBC,SUBI,SBCI,NEG

    ADIW,SBIW

    CP,CPI

    CPC

    gdy rd-rs-C Z bez zmian

    INC,DEC

    AND,ANDI,OR,ORI,EOR,TST,CBR,SBR,CLR

    COM

    ASR,LSR,LSL,ROL,ROR

    CLT,CLH,CLS,CLV,CLN,CLZ,CLC,BCLR

    zerowanie wskazanej flagi

    SET,SEH,SES,SEV,SEN,SEZ,SEC,BSET

    ustawianie wskazanej flagi

    BST

    OUT SREG,rd

  • AVR - przykady programowania */27;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,sregbcdtonb2B:movr16,r13rcallbcdtonb1B;zamiana ml. bajtu na NB (LSB)movr13,r16movr16,r14rcallbcdtonb1B;zamiana st. bajtu na NB (MSB)movr14,r16movr17,r13;r18r17:=wartosc ml.bajtu w NBclrr18dod100:tstr14;wynik:=LSB+MSB*100breqkoniecsubir17,-100;dodawanie +100 przezsbcir18,-1;odejmowanie -100 r14 razydecr14rjmpdod100koniec:ret

  • AVR - przykady programowania */27; 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 r10andir16,$0F;wydzielenie ml.cyfrymovr11,r16;zapamietanie jej w r11movr16,r10;odtworzenie r16swapr16andir16,$0F;wydzielenie st.cyfryaddr16,r16movr10,r16;r10=st.cyfra*2addr16,r16addr16,r16;r16=st.cyfra*8addr16,r10;r16=st.cyfra*10addr16,r11;r16=NB(r16)ret

  • AVR - przykady programowania */27; Procedura konwersji cyfry szesn. na kod wyswietlacza; 7-segmentowego. ; Poszczeglne segmenty s przyporzdkowane bitom od ; najstarszego nastpujco: hgfedcba. ; parametry: R0 = cyfra hex.;; wyniki: R0 = kod segmentowy;; zmiany: Z;; dugo: 22B/11W (cznie z tablic kodw);HEXDISP:movr30,r0ldir31,low(2*kody) addr30,r31ldir31,high(2*kody)lpm;pobranie kodu wyswietlaczaretkody:.DB 0b00111111,0b00000110,0b01011011,0b01001111.DB 0b01100110,0b01101101,0b01111101,0b00000111.DB 0b01111111,0b01101111,0b00000001,0b01000000.DB 0b00001000,0b01010000,0b01111001,0b01110001; Procedura konwersji cyfry szesn. na kod wyswietlacza; 7-segmentowego. ; Poszczeglne segmenty s przyporzdkowane bitom od ; najstarszego nastpujco: hgfedcba. ; parametry: R0 = cyfra hex.;; wyniki: R0 = kod segmentowy;; zmiany: Z;; dugo: 22B/11W (cznie z tablic kodw);HEXDISP:movr30,r0ldir31,low(2*kody) addr30,r31ldir31,high(2*kody)clrr0adcr31,r0;uwzglednienie ewent. nadmiarulpm;pobranie kodu wyswietlaczaretkody:.DB 0b00111111,0b00000110,0b01011011,0b01001111.DB 0b01100110,0b01101101,0b01111101,0b00000111.DB 0b01111111,0b01101111,0b00000001,0b01000000.DB 0b00001000,0b01010000,0b01111001,0b01110001

  • AVR - przykady programowania */27; Fragment programu realizujcy skok z przecznikiem.; Numer skoku do wykonania znajduje si w rejestrze R10. .....; 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

  • AVR - przykady programowania */27; Fragment programu mnocy 16-bitowe liczby w U2 (ze znakiem); R19..R16:=R23R22 * R21R20clrr2mulsr23,r21 ;iloczyn starszych bajtowmovwr18,r0mulr22,r20 ;iloczyn mlodszych bajtowmovwr16,r0mulsur23,r20 ;iloczyn starszego bajtu przez mlodszysbcr19,r2addr17,r0adcr18,r1adcr19,r2mulsur21,r22 ;iloczyn mlodszego bajtu przez starszysbcr19,r2addr17,r0adcr18,r1adcr19,r2

  • AVR - przykady programowania */27; Fragment programu realizujcy porwnanie liczb w U2.; .....; Zal: L1=R7R6R5 , L2=R12R11R10cpr5,r10;porownanie najmlodszych bajtowcpcr6,r11cpcr7,r12;porownanie najstarszych bajtowbrgtL1wiekszabreqrowneL1mniejsza:rjmp...rowne:rjmp...L1wieksza:rjmp...