.


:




:

































 

 

 

 


AVR

AVR

. ATMEL AVR Studio, ATMEL AVR In-Circuit Emulator. , AVR. Microsoft Windows 3.11, Microsoft Windows95 Microsoft Windows NT. MS-DOS.

, , . , , . 120 . , . , , .

:

[:] [] []
[:] [] []

:

; []

. (;) . , .

:

label:.EQU var1=100; var1 100 ( )
.EQU var2=200; var2 200

test: rjmp test; ( )
;

;

, , , .

AVR

ADD Rd,Rr Rd = Rd + Rr Z,C,N,V,H,S  
ADC Rd,Rr Rd = Rd + Rr + C Z,C,N,V,H,S  
SUB Rd,Rr Rd = Rd - Rr Z,C,N,V,H,S  
SUBI Rd,K8 Rd = Rd - K8 Z,C,N,V,H,S  
SBC Rd,Rr Rd = Rd - Rr - C Z,C,N,V,H,S  
SBCI Rd,K8 Rd = Rd - K8 - C Z,C,N,V,H,S  
AND Rd,Rr Rd = Rd Rr Z,N,V,S  
ANDI Rd,K8 Rd = Rd K8 Z,N,V,S  
OR Rd,Rr Rd = Rd V Rr Z,N,V,S  
ORI Rd,K8 Rd = Rd V K8 Z,N,V,S  
EOR Rd,Rr Rd = Rd EOR Rr Z,N,V,S  
COM Rd Rd = $FF - Rd Z,C,N,V,S  
NEG Rd (. ) Rd = $00 - Rd Z,C,N,V,H,S  
SBR Rd,K8 () Rd = Rd V K8 Z,C,N,V,S  
CBR Rd,K8 () Rd = Rd ($FF - K8) Z,C,N,V,S  
INC Rd Rd = Rd + 1 Z,N,V,S  
DEC Rd Rd = Rd -1 Z,N,V,S  
TST Rd Rd = Rd Rd Z,C,N,V,S  
CLR Rd Rd = 0 Z,C,N,V,S  
SER Rd Rd = $FF None  
ADIW Rdl,K6 Rdh:Rdl=Rdh:Rdl+K6 Z,C,N,V,S  
SBIW Rdl,K6 Rdh:Rdl=Rdh:Rd K6 Z,C,N,V,S  
MUL Rd,Rr R1:R0 = Rd * Rr Z,C  
MULS Rd,Rr R1:R0=Rd * Rr Z,C  
MULSU Rd,Rr R1:R0=Rd * Rr Z,C  
FMUL Rd,Rr R1:R0=(Rd * Rr) << 1 Z,C  
FMULS Rd,Rr R1:R0=(Rd *Rr) << 1 Z,C  
FMULSU Rd,Rr R1:R0=(Rd * Rr) << 1 Z,C  

 

RJMP k PC = PC + k +1 None  
IJMP (Z) PC = Z None  
EIJMP (Z) STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND None  
JMP k PC = k None  
RCALL k STACK = PC+1, PC = PC + k + 1 None 3/4*
ICALL (Z) STACK = PC+1, PC = Z None 3/4*
EICALL (Z) STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND None 4*
CALL k STACK = PC+2, PC = k None 4/5*
RET PC = STACK None 4/5*
RETI PC = STACK I 4/5*
CPSE Rd,Rr , if (Rd==Rr) PC=PC 2 or 3 None 1/2/3
CP Rd,Rr Rd -Rr Z,C,N,V,H,S  
CPC Rd,Rr Rd - Rr - C Z,C,N,V,H,S  
CPI Rd,K8 Rd - K Z,C,N,V,H,S  
SBRC Rr,b , if(Rr(b)==0) PC=PC+2or3 None 1/2/3
SBRS Rr,b , if(Rr(b)==1) PC=PC+2o 3 None 1/2/3
SBIC P,b , if(I/O(P,b)==0) PC=PC+2or3 None 1/2/3
SBIS P,b , if(I/O(P,b)==1) PC = PC + 2 or 3 None 1/2/3
BRBC s,k , SREG if(SREG(s)==0) PC = PC + k + 1 None 1/2
BRBS s,k , SREG if(SREG(s)==1) PC = PC + k + 1 None 1/2
BREQ k , if(Z==1) PC = PC + k + 1 None 1/2
BRNE k , if(Z==0) PC = PC + k + 1 None 1/2
BRCS k , if(C==1) PC = PC + k + 1 None 1/2
BRCC k , if(C==0) PC = PC + k + 1 None 1/2
BRSH k , if(C==0) PC = PC + k + 1 None 1/2
BRLO k , if(C==1) PC = PC + k + 1 None 1/2
BRMI k , if(N==1) PC = PC + k + 1 None 1/2
BRPL k , if(N==0) PC = PC + k + 1 None 1/2
BRGE k , ( ) if(S==0) PC = PC + k + 1 None 1/2
BRLT k , ( ) if(S==1) PC = PC + k + 1 None 1/2
BRHS k , if(H==1) PC = PC + k + 1 None 1/2
BRHC k , if(H==0) PC = PC + k + 1 None 1/2
BRTS k , T if(T==1) PC = PC + k + 1 None 1/2
BRTC k , T if(T==0) PC = PC + k + 1 None 1/2
BRVS k , if(V==1) PC = PC + k + 1 None 1/2
BRVC k , if(V==0) PC = PC + k + 1 None 1/2
BRIE k , if(I==1) PC = PC + k + 1 None 1/2
BRID k , if(I==0) PC = PC + k + 1 None 1/2

, . CALL, ICALL, EICALL, RCALL, RET RETI, PC 16 (128KB ). 128KB, .

 

MOV Rd,Rr Rd = Rr None  
MOVW Rd,Rr Rd+1:Rd = Rr+1:Rr, r,d even None  
LDI Rd,K8 Rd = K None  
LDS Rd,k Rd = (k) None 2*
LD Rd,X Rd = (X) None 2*
LD Rd,X+ - Rd = (X), X=X+1 None 2*
LD Rd,-X - X=X-1, Rd = (X) None 2*
LD Rd,Y Rd = (Y) None 2*
LD Rd,Y+ - Rd = (Y), Y=Y+1 None 2*
LD Rd,-Y - Y=Y-1, Rd = (Y) None 2*
LDD Rd,Y+q Rd = (Y+q) None 2*
LD Rd,Z Rd = (Z) None 2*
LD Rd,Z+ - Rd = (Z), Z=Z+1 None 2*
LD Rd,-Z - Z=Z-1, Rd = (Z) None 2*
LDD Rd,Z+q Rd = (Z+q) None 2*
STS k,Rr (k) = Rr None 2*
ST X,Rr (X) = Rr None 2*
ST X+,Rr - (X) = Rr, X=X+1 None 2*
ST -X,Rr - X=X-1, (X)=Rr None 2*
ST Y,Rr (Y) = Rr None 2*
ST Y+,Rr - (Y) = Rr, Y=Y+1 None  
ST -Y,Rr - Y=Y-1, (Y) = Rr None  
ST Y+q,Rr (Y+q) = Rr None  
ST Z,Rr (Z) = Rr None  
ST Z+,Rr - (Z) = Rr, Z=Z+1 None  
ST -Z,Rr - Z=Z-1, (Z) = Rr None  
ST Z+q,Rr (Z+q) = Rr None  
LPM R0 = (Z) None  
LPM Rd,Z Rd = (Z) None  
LPM Rd,Z+ - Rd = (Z), Z=Z+1 None  
ELPM R0=(RAMPZ:Z) None  
ELPM Rd,Z Rd =(RAMPZ:Z) None  
ELPM Rd,Z+ - Rd = (RAMPZ:Z), Z = Z+1 None  
SPM (Z) = R1:R0 None -
ESPM (RAMPZ:Z)=R1:R0 None -
IN Rd,P Rd = P None  
OUT P,Rr P = Rr None  
PUSH Rr STACK = Rr None  
POP Rd Rd = STACK None  

* , . LD, ST, LDD, STD, LDS, STS, PUSH POP, .

LSL Rd Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7) Z,C,N,V,H,S  
LSR Rd Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0) Z,C,N,V,S  
ROL Rd C Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) Z,C,N,V,H,S  
ROR Rd C Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) Z,C,N,V,S  
ASR Rd Rd(n)=Rd(n+1), n=0,...,6 Z,C,N,V,S  
SWAP Rd Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) None  
BSET s SREG(s) = 1 SREG(s)  
BCLR s SREG(s) = 0 SREG(s)  
SBI P,b I/O(P,b) = 1 None  
CBI P,b I/O(P,b) = 0 None  
BST Rr,b T T = Rr(b) T  
BLD Rd,b T Rd(b) = T None  
SEC C =1 C  
CLC C = 0 C  
SEN N = 1 N  
CLN N = 0 N  
SEZ Z = 1 Z  
CLZ Z = 0 Z  
SEI I = 1 I  
CLI I = 0 I  
SES S = 1 S  
CLN S = 0 S  
SEV V = 1 V  
CLV V = 0 V  
SET T T = 1 T  
CLT T T = 0 T  
SEH H = 1 H  
CLH H = 0 H  
NOP None  
SLEEP ( ) None  
WDR None  

 


.

:

Rd: ( )
Rr:
b: (3 ),
s: (3 ),
P: (5-6 ),
K6; (6 ),
K8: (8 ),
k: ( ),
q: (6 ),
Rdl: R24, R26, R28, R30. ADIW SBIW
X,Y,Z: (X=R27:R26, Y=R29:R28, Z=R31:R30)

. . , , .. .

BYTE
CSEG
DB EEPROM
DEF
DEVICE
DSEG
DW EEPROM
ENDM, ENDMACRO
EQU
ESEG EEPROM
EXIT
INCLUDE
LIST
LISTMAC
MACRO
NOLIST
ORG
SET

.

.BYTE -

BYTE . , BYTE . , . ( .CSEG DSEG). .

:
:.BYTE

:
.DSEG
var1:.BYTE 1; 1 var1
table:.BYTE tab_size; tab_size

.CSEG
ldi r30,low(var1); Z
ldi r31,high(var1); Z
ld r1,Z; VAR1 1

CSEG -

CSEG . , . . , . ORG . CSEG .

:
.CSEG

:
.DSEG;
vartab:.BYTE 4; 4

.CSEG;
const:.DW 2; 0x0002
mov r1,r0;

DB - EEPROM

DB EEPROM. , DB . DB . (CSEG) EEPROM (ESEG). , - . (-128..255), , , . , ( - ), , , DB.

:
:.DB _

:
. CSEG
consts :. DB 0, 255, 0 b 01010101, -128, 0 xaa

. ESEG
const 2:. DB 1,2,3

DEF -

DEF . . . .

:
.DEF _ =

:
.DEF temp=R16
.DEF ior=R0

.CSEG
ldi temp,0xf0; 0xf0 temp (R16)
in ior,0x3f; SREG ior (R0)
eor temp,ior; temp ior

DEVICE -

DEVICE . , , . , , EEPROM . , .

:
.DEVICE AT90S1200 |AT90S2313 | AT90S2323 | AT90S2333 | AT90S2343 | AT90S4414 | AT90S4433 | AT90S4434 | AT90S8515 | AT90S8534 | AT90S8535 | ATtiny11 | ATtiny12 | ATtiny22 | ATmega603 | ATmega103

:
.DEVICE AT90S1200; AT90S1200

.CSEG
push r30;
; AT90S1200

DSEG -

DSEG . , . BYTE . . ORG . .

:
.DSEG

:
.DSEG;
var1:.BYTE 1; 1 var1
table:.BYTE tab_size; tab_size .

.CSEG
ldi r30,low(var1); Z
ldi r31,high(var1); Z
ld r1,Z; var1 r1

DW - EEPROM

DW EEPROM. , DW . DW . (CSEG) EEPROM (ESEG). , - . (-32768..65535), , , .

:
:.DW expressionlist

:
.CSEG
varlist:.DW 0, 0xffff, 0b1001110001010101, -32768, 65535

.ESEG
eevarlst:.DW 0,0xffff,10

ENDMACRO -

, . MACRO.

:
.ENDMACRO

:
.MACRO SUBI16;
subi r16,low(@0);
sbci r17,high(@0);
.ENDMACRO

EQU -

EQU . . .

:
.EQU =

:
.EQU io_offset = 0x23
.EQU porta = io_offset + 2

.CSEG;
clr r2; r2
out porta,r2; A

ESEG - EEPROM

ESEG EEPROM. EEPROM, . EEPROM DB, DW . EEPROM . ORG EEPROM. .

:
.ESEG

:
.DSEG;
var1:.BYTE 1; 1 var1
table:.BYTE tab_size; tab_size .

.ESEG
eevar1:.DW 0xffff; 1 EEPROM

 

EXIT -

EXIT . (. INCLUDE), INCLUDE. , .

:
.EXIT

:
.EXIT;

INCLUDE -

INCLUDE , EXIT, INCLUDE. INCLUDE.

:
.INCLUDE "_"

:
; iodefs.asm:
.EQU sreg = 0x3f;
.EQU sphigh = 0x3e;
.EQU splow = 0x3d;

; incdemo.asm
.INCLUDE iodefs.asm;
in r0,sreg;

LIST -

LIST . , . , NOLIST .

:
.LIST

:
.NOLIST;
.INCLUDE "macro.inc";
.INCLUDE "const.def";
.LIST;

LISTMAC -

LISTMAC . .

:
.LISTMAC

:
.MACRO MACX;
add r0,@0;
eor r1,@1
.ENDMACRO;

.LISTMAC;
MACX r2,r1; ( )

MACRO -

MACRO . . , . 10 , @0-@9. . ENDMACRO. , LISTMAC. +.

:
.MACRO

:
.MACRO SUBI16;
subi @1,low(@0); 0 1
sbci @2,high(@0); 0 2
.ENDMACRO;

.CSEG;
SUBI16 0x1234,r16,r17; 0x1234 r17:r16

NOLIST -

NOLIST . , . , . LIST

:
.NOLIST

:
.NOLIST;
.INCLUDE "macro.inc";
.INCLUDE "const.def";
.LIST;

ORG -

ORG , . SRAM (), , EEPROM EEPROM. ( ) . EEPROM , 32 ( 0-31 ). EEPROM - .

:
.ORG

:
.DSEG;

.ORG 0x37; SRAM 0x37
variable:.BYTE 1; 0x37H

.CSEG
.ORG 0x10; 0x10
mov r0,r1; 0x10

SET -

SET . . EQU SET.

:
. SET =

:
.SET io_offset = 0x23
.SET porta = io_offset + 2

.CSEG;
clr r2; 2
out porta,r2; A

, , . 32-.

:

, ( ).

, SET

, EQU

, :

( ): 10, 255

( ): 0x0a, $0a, 0xff, $ff

: 0b00001010, 0b11111111

( ): 010, 077

PC - (Programm Counter)

, ( , ). , .

  !
  ~
  -
  *
  /
  +
  -
  <<
  >>
  <
  <=
  >
  >=
  ==
  !=
  &
  ^
  |
  &&
  ||

 

:!
: 1 0,
: 14
: ldi r16,!0xf0; r16 0x00

: ~
:
: 14
: ldi r16, ~0xf0; r16 0x0f

: -
:
: 14
: ldi r16,-2; -2(0xfe) r16

: *
:
: 13
: ldi r30, label*2

: /
:
: 13
: ldi r30, label/2

: +
:
: 12
: ldi r30, c1+c2

: -
:
: 12
: ldi r17, c1-c2

: <<
:
: 11
: ldi r17, 1<<bitmask; r17 1 bitmask

: >>
:
: 11
: ldi r17, c1>>c2; r17 c1 c2

: <
: 1 ( ), 0
: 10
: ori r18, bitmask*(c1<c2)+1

: <=
: 1 ( ), 0
: 10
: ori r18, bitmask*(c1<=c2)+1

: >
: 1 ( ), 0
: 10
: ori r18, bitmask*(c1>c2)+1

: >=
: 1 ( ), 0
: 10
: ori r18, bitmask*(c1>=c2)+1

: ==
: 1 ( ), 0
: 9
: andi r19, bitmask*(c1==c2)+1

:!=
: 1 ( ), 0
: 9
:.SET flag = (c1!=c2); flag 1 0

: &
:
: 8
: ldi r18, High(c1&c2)

: ^
:
: 7
: ldi r18, Low(c1^c2)

: |
:
: 6
: ldi r18, Low(c1|c2)

: &&
: 1 , 0
: 5
: ldi r18, Low(c1&&c2)

: ||
: 1 , 0
: 4
: ldi r18, Low(c1||c2)

:

LOW()

HIGH()

BYTE2() HIGH

BYTE3()

BYTE4()

LWRD() 0-15

HWRD() 16-31

PAGE() 16-21

EXP2() 2 ()

LOG2() log2()



<== | ==>
| : . ?
:


: 2016-03-28; !; : 807 |


:

:

,
==> ...

1740 - | 1679 -


© 2015-2024 lektsii.org - -

: 0.166 .