Visio AVR v2
description
Transcript of Visio AVR v2
Καταχωρητές:R16-R25,
R26:R27 XR28:R29 YR30:R31 Z
MOVW R17:R16,R21:R20MOV R16,R20
R0
MOV R0,R20MOVW ...
PROGRAM MEMORY
LPM //όπου δείχνει ο Ζ
LPM R20,ZLPM R20,Z+
STACK POP R2
PUSH R4 SRAM
LD R20,X //also Y,ZLD R20,X+ // sameLD R20,-X //same
LD R20,Y+2 //also Z
ST X,R20 //also Y,ZST X+,R20 // sameST -X,R20 //same
ST Y+2,R20 //also Z
IMMEDIATE(NUMBER)
LDI R20,$F5
LDS R20,$F5FF
I/O REGISTERSDDRA/B/C/D
SP etc
IN R2,PINA
OUT PORTB,R21
OUT DDRB,R3
AVR Moving Data
MOVW Rb+1:Rb,Rn+1:Rn
MOV Rb,Rn
POP Rb
PUSH Rb
LPMLPM Rb,ZLPM Rb,Z+
IN Rb,PINA/B/C/D
OUT PORTA/B/C/D,Rb
OUT DDRA/B/C/D,Rb
LD Rb,X/Y/ZLD Rb,X/Y/Z+ LD Rb,-X/Y/Z
LD Rb,Y/Z+#number
ST X/Y/Z,RbST X/Y/Z+,RbST -X/Y/Z,Rb
ST Y/Z+#number,Rb
LDI Rb,#number
LDS Rb,#number
Rn and Rn+1 must be neighboors, same for Rb ; Copy data from Rn:Rn+1 to Rb:Rb+1
Any Rb, Any Rn; Copy data from Rn to Rb
Any Rb; Copy data from pointed by SP address to Rb
Any Rb; Copy data from Rb to pointed by SP address
Any Rb ; Copy data from pointed by Z address of Program Memory to RbAny Rb ; Copy data from pointed by Z address of Program Memory to Rb, increase Z after
Any Rb, Any Port ; Copy data from I/O Resgister to Rb
Any Rb, Any Port ; Copy data from Rb to I/O Resgister
Any Rb, Any Port Sreg ; Copy data from Rb to I/O status Resgister
Any Rb, any pointer ; Copy data from pointed by pointer address to RbAny Rb, any pointer ; Copy data from pointed by pointer address to Rb, increase pointer afterAny Rb, any pointer ; Copy data from pointed by pointer address to Rb, decrease pointer beforeAny Rb, pointers Y and Z ; Copy data from pointed by (pointer + #number) address to Rb ; pointer doesn’t change
Any Rb, any pointer ; Copy data from Rb to pointed by pointer addressAny Rb, any pointer ; Copy data from Rb to pointed by pointer address, increase pointer afterAny Rb, any pointer ; Copy data from Rb to pointed by pointer address, decrease pointer before
Any Rb, pointers Y and Z ; Copy data from Rb to (pointed by pointer address + #number), pointer doesn’t change
Rb: R16-R31,#number is 8-bit ; Copy the value of #number to Rb (immidiate)
Any Rb, #number is 16-bit ; Copy #number address of Ram to Rb
Copy data from pointed by Z address of Program Memory to R0
ST - LD (για αντίστοιχες διευθύνσεις)
Registers and Actions
R0
R1
LPM
...
R16
...
R23
R26
R27
R28
R29
R30
R31
SUBI R20,$3F
SBCI R17,$2A
ANDI R24,$FE
ORI R18,$01
CPI R22,$2C
LDI R20,$2A
SBR R28,$FE
CBR R30,$10
SER R31
MULS R21,R17
X
Y
Z
ADIW Zh:Zl,$01
SBIW R25:R24,$02
R24
R25
MULSU R23,R20FMUL R21,R22
FMULS R21,R22FMULSU R21,R22
I/O
Αποτελέσµατα MUL
CBI $12,3
63
...
31
0
... SBI $02,1
SBIC $10,4
SBIS $1A,2
Registers
SBCI Rb,#number
SUBI Rb,#number
ANDI Rb,#number
ORI Rb,#number
CPI Rb,#number
MULS Rb,Rn
CBR Rb,#number
SER Rb
MULSU Rb,Rn
FMUL Rb,Rn
FMULS Rb,Rn
FMULSU Rb,Rn
ADIW Rb+1:Rb,#number
SBIW Rb+1:Rb,#number
CBI #num1,#num2
SBIC #num1,#num2
SBI #num1,#num2
Rb 16-31, #number 8-bit; Αφαίρεση µε κρατούµενο από το Rb τιµή #number ; Αποτέλεσµα στον Rb
Rb 16-31, #number 8-bit; Αφαίρεση από το Rb τιµή #number ; Αποτέλεσµα στον Rb
Rb 16-31, #number 8-bit; Λογικό AND του Rb µε τιµή #number ; Αποτέλεσµα στον Rb
Rb 16-31, #number 8-bit; Λογικό OR του Rb µε τιµή #number ; Αποτέλεσµα στον Rb
Rb 16-31, #number is 8-bit ; Copy the value of #number to Rb (immidiate)
Rb 16-31, Rn 16-31; Multiplies (signed) Rn*Rb ; Αποτέλεσµα στους R1:R0
Rb 16-31, #number 8-bit; Clear bits of Rb according to #number ; Αποτέλεσµα στον Rb
Rb 16-23(sign), Rn 16-23(unsign); Multiplies (signed) Rn*Rb ; Αποτέλεσµα στους R1:R0
Rb 16-23(uns 1.7), Rn 16-23(uns 1.7);Fractional multiplies (uns 1.15) Rn*Rb ; Αποτέλεσµα
στους R1:R0
Rb 16-23(sig 1.7), Rn 16-23(sig 1.7);Fractional multiplies (sig 1.15) Rn*Rb ; Αποτέλεσµα στους
R1:R0
Rb 16-23(sig 1.7), Rn 16-23(uns 1.7);Fractional multiplies (sig 1.15) Rn*Rb ; Αποτέλεσµα στους R1:R0
Rb 24-31, #number 8-bit; Add word Rb+1:Rb with #number ; Αποτέλεσµα Rb+1:Rb
Rb 24-31, #number 8-bit; Sub word from Rb+1:Rb the #number ; Αποτέλεσµα Rb+1:Rb
#num1 0-31, #num2 is 8-bit ; Clear bits of #num1 I/O according to #num2;
#num1 0-31, #num2 is 8-bit ; Skips a command if #num1 I/O bits (according to #num2) are cleared
#num1 0-31, #num2 is 8-bit ; Set bits of #num1 I/O according to #num2;
Rb 16-31, #number 8-bit; Σύγκριση του Rb µε τιµή #number ; Αποτέλεσµα ΠΟΥΘΕΝΑ !
LDI Rb,#number
SBR Rb,#number Rb 16-31, #number 8-bit; Sets bits of Rb according to #number ; Αποτέλεσµα στον Rb
Rb 16-31; Sets all bits of Rb ; Αποτέλεσµα στον Rb
SBIS #num1,#num2 #num1 0-31, #num2 is 8-bit ; Skips a command if #num1 I/O bits (according to #num2) are set
Jump Conditions
SREG
I T H S V N Z C
BRIEBRTS
BRTCBRTS
BRHCBRHS
BRVC
BRGEBRLT
BRNEBREQ
Condition
Rd > Rs
Rd >= Rs
Rd == Rs
Rd != Rs
Rd <= Rs
Rd <Rs
Signed Unsigned
BREQ noBRGE yes
no: jump outyes:
BREQ noBRSH yes
no: jump outyes:
BRGE yes
BRSH yesor
BRCC yes
BREQ yes BREQ yes
BRNE yes BRNE yes
BRLT yesBREQ yesjump out
yes:
BRLO yesBREQ yesjump out
yes:
BRLT yesBRLO yes
orBRCS yes