Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Rodzina AVR wykład 2.

Podobne prezentacje


Prezentacja na temat: "Rodzina AVR wykład 2."— Zapis prezentacji:

1 Rodzina AVR wykład 2

2 Lista rozkazów AVR Przykłady programowania

3 Lista rozkazów ATtiny2313/mega8515 3/27
1. Rozkazy arytmetyczne ADD rd,rs ; rd:=rd+rs rd=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-rs rd=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= | ZCNVH SBIW rdd,k ; (rdd+1,rdd):= (rdd+1,rdd)-k ZCNVS

4 Lista rozkazów ATtiny2313/mega8515 4/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= | 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/mega8515 5/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/mega8515 6/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/mega8515 7/27
2. Rozkazy logiczne AND rd,rs ; rd:=rd and rs rd=R0..R31 ZNV ANDI rd’,n ; rd’:=rd’ and n rd’=R16..R31, ZNV n= | OR rd,rs ; rd:=rd or rs rd=R0..R31 ZNV ORI rd’,n ; rd’:=rd’ or n rd’=R16..R31 ZNV EOR rd,rs ; rd:=rd xor rs rd=R0..R31 ZNV

8 Lista rozkazów ATtiny2313/mega8515 8/27
CBR rd’,n ; rd’:=rd’ and (not n) ZNV SBR rd’,n ; rd’:=rd’ or n n= | 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 Lista rozkazów ATtiny2313/mega8515 9/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 C 7  rd  0 7  rd  7  rd  7  rd  7  rd 

10 Lista rozkazów ATtiny2313/mega8515 10/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:= rdb rd=R0..R31, b=0..7 BLD rd,b ; rdb:=T

11 Lista rozkazów ATtiny2313/mega8515 11/27
5. Rozkazy przesłań (nie zmieniają flag) MOV rd,rs ; rd:=rs rd,rs=R0..R31 MOVW rd,rs ; rd+1:rd:=rs+1:rs rd,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/mega8515 12/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’:=n rd’=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/mega8515 13/27
ST X,rd ; RAM[X]:=rd rd=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]:=rd d=0..63

14 Lista rozkazów ATtiny2313/mega8515 14/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/mega8515 15/27
6. Rozkazy skoków (nie zmieniają flag) RJMP adr’ ; PC:=PC+1+adr’ adr’= IJMP ; PC:=Z BRBC b,adrel ; jeżeli SREGb=0 to PC:=PC+1+adrel adrel= BRBS b,adrel ; jeżeli SREGb=1 to PC:=PC+1+adrel b=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/mega8515 16/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 są dostępne dla tych rozkazów

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

18 Lista rozkazów ATtiny2313/mega8515 18/27
RET ; SP:=SP+1 ; PCH:=RAM(SP) ; SP:=SP+1 ; PCL:=RAM(SP) RETI ; SP:=SP+1 ; I:=1

19 Lista rozkazów ATtiny2313/mega8515 19/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 są dostępne dla tych rozkazów

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

22 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 ldi r16,100 ;r1r0:=st.bajt*100 mul r16,r14 add r17,r0 ;dosumowanie do r18r17 adc r18,r1 ret ,r0,r1

23 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 ;r16=st.cyfra*8 add r16,r10 ;r16=st.cyfra*10 add r16,r11 ;r16=NB(r16) ret 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 ,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: 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 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: mov r30,r0 ldi r31,low(2*kody) add r30,r31 ldi r31,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

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:=R23R24 * 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

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: L1wieksza:


Pobierz ppt "Rodzina AVR wykład 2."

Podobne prezentacje


Reklamy Google