1 / 27

Rodzina AVR wykład 2

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

logan-lott
Télécharger la présentation

Rodzina AVR wykład 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Rodzina AVRwykład 2

  2. AVR 2/27 Lista rozkazów AVRPrzykłady programowania

  3. Lista rozkazów ATtiny2313/mega85153/27 1. Rozkazy arytmetyczne ADD rd,rs ; rd:=rd+rsrd=R0..R31 ZCNVH ADC rd,rs ; rd:=rd+rs+C rs=R0..R31 ZCNVH ADIW rdd,k ; (rdd+1,rdd):= (rdd+1,rdd)+k ZCNVS ; rdd=R24,R26,R28,R30 k=0..63 SUB rd,rs ; rd:=rd-rsrd=R0..R31 ZCNVH SBC rd,rs ; rd:=rd-rs-C rs=R0..R31 ZCNVH SUBI rd’,n ; rd’:=rd’-n rd’=R16..R31 ZCNVH SBCI rd’,n ; rd’:=rd’-n-C n=0..255 | -128..127 ZCNVH SBIW rdd,k ; (rdd+1,rdd):= (rdd+1,rdd)-k ZCNVS ; rdd=R24,R26,R28,R30 k=0..63

  4. Lista rozkazów ATtiny2313/mega85154/27 • CP rd,rs ; ustawienie flag Z,N,V,C,H,S jak przy rd-rs • CPC rd,rs ; ustawienie flag N,V,C,H,S jak przy rd-rs-C • ; gdy rd-rs-C0 flaga Z pozostaje bez zmian • CPI rd’,n ; ustawienie flag Z,N,V,C,H,S jak przy rd'-n • ;rd’=R16..R31 n=0..255 | -128..127 • CPSE rd,rs ; jeżeli rd=rs to pomiń następny rozkaz • INC rd ; rd:=rd+1 ZNV • DEC rd ; rd:=rd-1 ZNV • NEG rd ; rd:=-rd ZCNVH

  5. Lista rozkazów ATtiny2313/mega85155/27 MUL rd,rs ; R1R0:= rd·rs mnożenie liczb bez znaku ZC MULS rd’,rs’ ; R1R0:= rd’·rs’ mnożenie liczb ze znakiem ZC ; rd’,rs’ = R16..R31 MULSU rd”,rs” ; R1R0:= rd”·rs” mnożenie liczby ze znakiem ; przez liczbę bez znaku, rd”,rs” = R16..R23 ZC ; Z=1 sygnalizuje R1R0=0 ; C=R1R015=R17

  6. Lista rozkazów ATtiny2313/mega85156/27 FMUL rd”,rs” ; CYR1R0:= SHL(rd”·rs”)mnożenie liczb bez znaku ; rd”,rs” = R16..R23 ZC ; 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 znaku ZC

  7. Lista rozkazów ATtiny2313/mega85157/27 2. Rozkazy logiczne AND rd,rs ; rd:=rd and rsrd=R0..R31 ZNV ANDI rd’,n ; rd’:=rd’ and nrd’=R16..R31, ZNV n=0..255 | -128..127 OR rd,rs ; rd:=rd or rsrd=R0..R31 ZNV ORI rd’,n ; rd’:=rd’ or nrd’=R16..R31 ZNV n=0..255 | -128..127 EOR rd,rs ; rd:=rd xor rsrd=R0..R31 ZNV

  8. Lista rozkazów ATtiny2313/mega85158/27 CBR rd’,n ; rd’:=rd’ and (not n) ZNV SBR rd’,n ; rd’:=rd’ or n n=0..255 | -128..127 ZNV ; ( ORI rd’,n) CLR rd ; rd:=0 rd=R0..R31 Z,N,V,S:=0 SER rd’ ; rd’:=255 rd’=R16..R31 ; ( LDI rd’,255) COM rd ; rd:=not rd rd=R0..R31 ZNCV TST rd ; rd and rd V:=0; ZNS ; ( AND rd, rd)

  9. C 7 rd  0 7 rd  0 7 rd  0 7 rd  0 7 rd  0 C C C C 7 6 5 4 3 2 1 0 0 0 Lista rozkazów ATtiny2313/mega85159/27 3. Rozkazy obrotów i przesunięć SWAP rd ;rd:rd=R0..R31 ASR rd ; ZNCV LSL rd ; ZNCV LSR rd ; ZNCV ROL rd ; ZNCV ROR rd ;ZNCV

  10. Lista rozkazów ATtiny2313/mega851510/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:=0 SES ; S:=1 CLT ; T:=0 SET ; T:=1 CLV ; V:=0 SEV ; V:=1 CLZ ; Z:=0 SEZ ; Z:=1 BCLR b ; SREGb:=0 b=0..7 ( CLC,CLH ... CLZ,CLI) BSET b ; SREGb:=1 b=0..7 ( SEC,SEH ... SEZ,SEI) BST rd,b ; T:= rdbrd=R0..R31, b=0..7 BLD rd,b ; rdb:=T

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

  12. Lista rozkazów ATtiny2313/mega851512/27 LD rd,Z ; rd:=RAM[Z] LD rd,Z+ ; rd:=RAM[Z] ; Z:=Z+1 LD rd,-Z ; Z:=Z-1 ; rd:=RAM[Z] LDD rd,Z+d ; rd:=RAM[Z+d] d=0..63 LDI rd’,n ; rd’:=nrd’=R16..R31 n=0..255 LDS rd’,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/mega851513/27 ST X,rd ; RAM[X]:=rdrd=R0..R31 ST X+,rd ; RAM[X]:=rd ; X:=X+1 ST -X, rd ; X:=X-1 ; RAM[X]:=rd ST Y,rd ; RAM[Y]:=rd ST Y+,rd ; RAM[Y]:=rd ; Y:=Y+1 ST -Y,rd ; Y:=Y-1 ; RAM[Y]:=rd STD Y+d,rd ; RAM[Y+d]:=rdd=0..63

  14. Lista rozkazów ATtiny2313/mega851514/27 ST Z,rd ; RAM[Z]:=rd ST Z+,rd ; RAM[Z]:=rd ; Z:=Z+1 ST -Z,rd ; Z:=Z-1 ; RAM[Z]:=rd STD Z+d,rd ; RAM[Z+d]:=rd d=0..63 STS adr,rd ; RAM[adr]:=rd SPM ; ROM[Z]:=R1:R0 POP rd ; SP:=SP+1 ; rd:=RAM[SP] PUSH rd ; RAM[SP]:=rd ; SP:=SP-1

  15. Lista rozkazów ATtiny2313/mega851515/27 6. Rozkazy skoków (nie zmieniają flag) RJMP adr’ ; PC:=PC+1+adr’adr’=-2048..2047 IJMP ; PC:=Z BRBC b,adrel ;jeżeli SREGb=0 to PC:=PC+1+adreladrel=-64..63 BRBS b,adrel ;jeżeli SREGb=1 to PC:=PC+1+adrelb=0..7 BRCC adrel ;jeżeli C=0 to PC:=PC+1+adrel ( BRBC 0, adrel) BRCS adrel ;jeżeli C=1 to PC:=PC+1+adrel ( BRBS 0, adrel) BRHC adrel ;jeżeli H=0 to PC:=PC+1+adrel (itp....) BRHS adrel ;jeżeli H=1 to PC:=PC+1+adrel BRNE adrel ;jeżeli Z=0 to PC:=PC+1+adrel BREQ adrel ;jeżeli Z=1 to PC:=PC+1+adrel BRGE adrel ;jeżeli S=0 to PC:=PC+1+adrel BRLT adrel ;jeżeli S=1 to PC:=PC+1+adrel

  16. Lista rozkazów ATtiny2313/mega851516/27 BRMI adrel ;jeżeli N=1 to PC:=PC+1+adrel BRPL adrel ;jeżeli N=0 to PC:=PC+1+adrel BRTC adrel ;jeżeli T=0 to PC:=PC+1+adrel BRTS adrel ;jeżeli T=1 to PC:=PC+1+adrel BRVC adrel ;jeżeli V=0 to PC:=PC+1+adrel BRVS adrel ;jeżeli V=1 to PC:=PC+1+adrel BRID adrel ;jeżeli I=0 to PC:=PC+1+adrel BRIE adrel ;jeżeli I=1 to PC:=PC+1+adrel SBRC rd,b ; jeżeli rdb=0 to pomiń następny rozkaz rd=R0..R31 b=0..7 SBRS rd,b ; jeżeli rdb=1 to pomiń następny rozkaz rd=R0..R31 b=0..7 SBIC px’,b ; jeżeli px’b =0 to pomiń następny rozkaz px’=0..31*b=0..7 SBIS px’,b ; jeżeli px’b =1 to pomiń następny rozkaz px’=0..31*b=0..7 * tylko bity portów o adresach 0..31 są dostępne dla tych rozkazów

  17. Lista rozkazów ATtiny2313/mega851517/27 7. Rozkazy wywołań procedur i powrotów RCALL adr’ ; RAM(SP):=(PC+1)L adr’=-2048..2047 ; 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)

  18. Lista rozkazów ATtiny2313/mega851518/27 RET ; 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

  19. Lista rozkazów ATtiny2313/mega851519/27 8. Rozkazy wejścia/wyjścia IN rd,px ; rd:=px rd=R0..R31, px=0..63 OUT px,rd ; px:=rd CBI px’,b ; px’b:=0 px’=0..31*b=0..7 SBI px’,b ; px’b:=1 px’=0..31*b=0..7 * tylko bity portów o adresach 0..31 są dostępne dla tych rozkazów

  20. Lista rozkazów ATtiny2313/mega851520/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. Lista rozkazów ATtiny2313/mega851521/27 10. Wpływ rozkazów na SREG

  22. ,r0,r1 ldi r16,100 ;r1r0:=st.bajt*100 mul r16,r14 add r17,r0 ;dosumowanie do r18r17 adc r18,r1 ret AVR - przykłady programowania 22/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,sreg bcdtonb2B: mov r16,r13 rcall bcdtonb1B ;zamiana ml. bajtu na NB (LSB) mov r13,r16 mov r16,r14 rcall bcdtonb1B ;zamiana st. bajtu na NB (MSB) mov r14,r16 mov r17,r13 ;r18r17:=wartosc ml.bajtu w NB clr r18 dod100: tst r14 ;wynik:=LSB+MSB*100 breq koniec subi r17,-100 ;dodawanie ‘+100’ przez sbci r18,-1 ;odejmowanie ‘-100’ r14 razy dec r14 rjmp dod100 koniec: ret

  23. ,r0,r1 mov r10,r16 ldi r16,10 ;r1r0:=st.cyfra*10 mul r16,r10 mov r16,r0 ;iloczyn do r16 add r16,r11 ;dosumowanie ml.cyfry ret AVR - przykłady programowania 23/27 ; Procedura zamiany 2 cyfr BCD na 1B NB ; parametry: r16 - para cyfr w BCD ; wyniki r16 - wartosc w NB ; zmiany: sreg,r10,r11 bcdtonb1B: mov r10,r16 ;kopia do r10 andi r16,$0F ;wydzielenie ml.cyfry mov r11,r16 ;zapamietanie jej w r11 mov r16,r10 ;odtworzenie r16 swap r16 andi r16,$0F ;wydzielenie st.cyfry add r16,r16 mov r10,r16 ;r10=st.cyfra*2 add r16,r16 add r16,r16 ;r16=st.cyfra*8 add r16,r10 ;r16=st.cyfra*10 add r16,r11 ;r16=NB(r16) ret

  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: • mov r30,r0 • ldi r31,low(2*kody) • add r30,r31 • ldi r31,high(2*kody) • clr r0 • adc r31,r0 ;uwzglednienie ewent. nadmiaru • lpm ;pobranie kodu wyswietlacza • ret • kody: .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. • ; 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: • mov r30,r0 • ldi r31,low(2*kody) • add r30,r31 • ldi r31,high(2*kody) • lpm ;pobranie kodu wyswietlacza • ret • kody: .DB 0b00111111,0b00000110,0b01011011,0b01001111 • .DB 0b01100110,0b01101101,0b01111101,0b00000111 • .DB 0b01111111,0b01101111,0b00000001,0b01000000 • .DB 0b00001000,0b01010000,0b01111001,0b01110001

  25. AVR - przykłady programowania 25/27 ; Fragment programu realizujący skok z przełącznikiem. ; 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

  26. AVR - przykłady programowania 26/27 ; Fragment programu mnożący 16-bitowe liczby w U2 (ze znakiem) ; R19..R16:=R23R22 * R21R20 clr r2 muls r23,r21 ;iloczyn starszych bajtow movw r18,r0 mul r22,r20 ;iloczyn mlodszych bajtow movw r16,r0 mulsu r23,r20 ;iloczyn starszego bajtu przez mlodszy sbc r19,r2 add r17,r0 adc r18,r1 adc r19,r2 mulsu r21,r22 ;iloczyn mlodszego bajtu przez starszy sbc r19,r2 add r17,r0 adc r18,r1 adc r19,r2

  27. AVR - przykłady programowania 27/27 ; Fragment programu realizujący porównanie liczb w U2. ; ..... ; Zal: L1=R7R6R5 , L2=R12R11R10 cp r5,r10 ;porownanie najmlodszych bajtow cpc r6,r11 cpc r7,r12 ;porownanie najstarszych bajtow brgt L1wieksza breq rowne L1mniejsza: rjmp ... rowne: rjmp ... L1wieksza: rjmp ...

More Related