AVR Architecture and Assembly Language Programming
AVR Architecture and Assembly Language Programming
Hassan SHARABATY
EEE Department, Faculty of Engineering
University of Turkish Aeronautical Association
352*5$0
5
7KHYDVWPDMRULW\RI$95UHJLVWHUVDUHELWUHJLVWHUV
520 5
3URJUDP 5
%XV
06% &38 %XV /6%
«
5
7KH*35VRI$955±5DUHORFDWHGLQWKHORZHVW 5
,QWHUUXSW 2WKHU
26& 3RUWV
8QLW 3HULSKHUDOV
ORFDWLRQRIPHPRU\DGGUHVV$OORIWKHVHUHJLVWHUVDUHELWV *35V
,2
7KHJHQHUDOSXUSRVHUHJLVWHUVLQ$95FDQEHXVHGE\DOO
3,16
DULWKPHWLFDQGORJLFLQVWUXFWLRQV
2
6RPHVLPSOHLQVWUXFWLRQV
/RDGLQJYDOXHVLQWRWKHJHQHUDOSXUSRVHUHJLVWHUV
/',LQVWUXFWLRQ /RDG ,PPHGLDWH
5
WKH/',LQVWUXFWLRQFRSLHVELWGDWDLQWRWKH $/8 5
5
JHQHUDOSXUSRVHUHJLVWHUV,WKDVWKHIROORZLQJ
«
65(* , 7 + 6 9 1 = &
&38
5
IRUPDW 5
/',5GNŁ5G N 5
3&
«
¾ . LVDQELWYDOXHWKDWFDQEHGRU))+
5
,QVWUXFWLRQGHFRGHU
¾ 5G GHVWLQDWLRQLV5WR5 5
,QVWUXFWLRQ5HJLVWHU
UHJLVWHUV
([DPSOH
/',5ORDGVWKH5ZLWKWKHYDOXHLQGHFLPDO
/',5[RU /',5ORDGVWKH5ZLWKWKHYDOXH+
6RPHVLPSOHLQVWUXFWLRQV
$ULWKPHWLFFDOFXODWLRQ
7KHUHDUHVRPHLQVWUXFWLRQVIRUGRLQJ$ULWKPHWLFDQGORJLFRSHUDWLRQV
VXFKDV
5
$''68%08/$1'HWF $/8 5
5
«
65(* , 7 + 6 9 1 = &
$''5G5VÎ 5G 5G5V
&38
5
5
$''5VWR5GDQGVWRUHWKHUHVXOWLQ5G 5
3&
«
([DPSOH ,QVWUXFWLRQGHFRGHU
5
5
,QVWUXFWLRQ5HJLVWHU
$''55Î 5 55 UHJLVWHUV
4
$VLPSOHSURJUDP
:ULWHDSURJUDPWKDWFDOFXODWHV
«
65(* , 7 + 6 9 1 = &
&38
5
5
5
3&
«
5
,QVWUXFWLRQGHFRGHU
5
,QVWUXFWLRQ5HJLVWHU
UHJLVWHUV
$VLPSOHSURJUDP
:ULWHDSURJUDPWKDWFDOFXODWHV
LDI R16, 19 ;R16 = 19
LDI R20, 95 ;R20 = 95
LDI R21, 5 ;R21 = 5
ADD R16, R20 ;R16 = R16 + R20
ADD R16, R21 ;R16 = R16 + R21
2U
LDI R16, 19 ;R16 = 19
LDI R20, 95 ;R20 = 95
ADD R16, R20 ;R16 = R16 + R20
LDI R20, 5 ;R20 = 5
ADD R16, R20 ;R16 = R16 + R20
7KHQG ZD\LVUHFRPPHQGHGZK\"
6
$VLPSOHSURJUDP
:ULWHDSURJUDPWRDGGWKHIROORZLQJQXPEHUV
++
6RPHVLPSOHLQVWUXFWLRQV
$ULWKPHWLFFDOFXODWLRQ
68%5G5V
5
Î 5G 5G± 5V $/8 5
5
«
65(* , 7 + 6 9 1 = &
&38
5
5
([DPSOH 5
3&
«
8
6RPHVLPSOHLQVWUXFWLRQV
$ULWKPHWLFFDOFXODWLRQ
«
,1&5Î 5 5 65(* , 7 + 6 9 1 = &
&38
5
5
5
3&
«
5
,QVWUXFWLRQGHFRGHU
5
'(&5G5G 5G± ,QVWUXFWLRQ5HJLVWHU
UHJLVWHUV
([DPSOH
5$0 ((3520
&RGHPHPRU\ 'DWDPHPRU\
10
AVR Memory Organization
¾ 2XUSURJUDPLVVWRUHGLQFRGHPHPRU\VSDFH
ZKHUHDVWKHGDWDPHPRU\ VWRUHVGDWD
5$0 ((3520
&RGHPHPRU\ 'DWDPHPRU\
11
¾ (DFKORFDWLRQRIWKH65$0FDQEHDFFHVVHGGLUHFWO\E\LWV
DGGUHVV WRVWRUHDQ\GDWDZHZDQWDVORQJDVLWLVELW8VLQJ
/'6 676 LQVWUXFWLRQV
¾7KHVL]HRI65$0FDQYDU\IURPFKLSWRFKLSHYHQDPRQJ
16
PHPEHUVRIWKHVDPHIDPLO\
Using instruction with Data Memory.
/'6/RDGGLUHFWIURPGDWDVSDFH
Unleash your Creativity! ORDG 5G ZLWK WKH FRQWHQWV RI ORFDWLRQ .
/'65GN5G >N@
G
([DPSOH
. LV DQ DGGUHVV EHWZHHQ WR ))))
/'65[
:ULWH SURJUDP WR
DGG WKH FRQWHQWV RI
ORFDWLRQ [ RI 65$0
WR ORFDWLRQ [
18
Using instruction with Data Memory.
([DPSOH .LVDQDGGUHVVEHWZHHQWR))))
¾ ([DPSOH:ULWHSURJUDPWRDGGWKHFRQWHQWVRIORFDWLRQ[WR
ORFDWLRQ[DQGVWRUHVWKHUHVXOWLQORFDWLRQ[
19
6ROXWLRQ
LDI R20, 0xCA ;R20 =CA+ = 11001010
STS 0x35, R20 ;[0x35] = R20 = CA+
¾ ([DPSOH:ULWHDSURJUDPWKDWFRSLHVWKHFRQWHQWVRI
ORFDWLRQ[RI5$0LQWRORFDWLRQ[
6ROXWLRQ
LDS R20, 0x80 ;R20 = [0x80]
STS 0x81, R20 ;[0x81] = R20 = [0x80]
20
Using instruction with Data Memory.
¾ ([DPSOH$GGFRQWHQWVRIORFDWLRQ[WRFRQWHQWVRIORFDWLRQ[DQG
Unleash your Creativity! VWRUHWKHUHVXOWLQORFDWLRQ[
6ROXWLRQ
LDS R20, 0x90 ;R20 = [0x90]
LDS R21, 0x95 ;R21 = [0x95]
ADD R20, R21 ;R20 = R20 + R21
STS 0x313, R20 ;[0x313] = R20
¾ ([DPSOH:KDWGRHVWKHIROORZLQJLQVWUXFWLRQGR"/'65
$QVZHU
,WFRSLHVWKHFRQWHQWVRI5LQWR5DVLVWKHDGGUHVVRI5
21
¾ 7KH,1LQVWUXFWLRQWHOOVWKH&38WR
ORDGRQHE\WHIURPDQ,2UHJLVWHU
WRWKH*35
([DPSOH
Î 5 63+
22
IN instruction (IN from I/O location)
Unleash your Creativity! ([DPSOH
,15[ ORDG5ZLWKWKHFRQWHQWVRIORFDWLRQ5 3,1'
ZULWHWKHHTXLYDOHQW/'6LQVWUXFWLRQ"
7RZRUNZLWKWKH,2UHJLVWHUVPRUHHDVLO\ZHFDQXVHWKHLUQDPHVLQVWHDG RIWKHLU
,2DGGUHVVHV
([DPSOH:ULWHD SURJUDPWRDGGVWKHFRQWHQWVRI3,1'WR3,1%DQGVWRUHVWKH
UHVXOWLQORFDWLRQ[RIWKHGDWDPHPRU\
,153,1' ORDG5ZLWK3,1'
,153,1% ORDG5ZLWK3,1%
$''55 5 55
676[5 VWRUH5WRGDWDVSDFHORFDWLRQ
23
¾ 287 LQVWUXFWLRQWHOOVWKH&38WRVWRUH
WKH*35FRQWHQWWR WKH,2UHJLVWHU
([DPSOH287[(563+ 5
25
&20 5G
7KLVLQVWUXFWLRQFRPSOHPHQWV LQYHUWVWKHFRQWHQWVRI5GDQGSODFHVWKH
UHVXOW EDFNLQWRWKHVDPHUHJLVWHU
([DPSOH
6HQGWKHYDOXH LQWR3257&7KHQLQYHUWLWEHIRUHVHQGLQJLW
DJDLQWR3257&
26
Unleash your Creativity!
27
5
DQELWUHJLVWHU,WFRQWDLQVLQIRUPDWLRQ $/8 5
5
DERXWWKHVWDWH RIWKH SURFHVVRU
«
65(* , 7 + 6 9 1 = &
,WLVDOVRUHIHUUHGWRDVWKHIODJUHJLVWHU
&38
5
5
5
7KH ELWV & = 1 9 6 DQG + DUH FDOOHG
3&
«
28
AVR Status Register (SREG)
Unleash your Creativity! &DUU\)ODJ&%LW
([DPSOHV
5 &
/',5[ ; )ODJQRWDIIHFWHGNHHSVWKH
/',5[)) ; YDOXHFRUUHVSRQGLQJWRWKH
$''55 SUHYLRXV DULWKPHWLFDO
RSHUDWLRQ
5 &
/',5[ ;
/',5[ ;
68%55
29
7KH]HURIODJUHIOHFWVWKHUHVXOWRIWKHODVWDULWKPHWLFRUORJLFRSHUDWLRQ
,IWKHUHVXOWLV]HURWKHQ=
,IWKHUHVXOWLVQRW]HURWKHQ=
¾ ,1&'(&DIIHFW1=96
30
AVR Status Register (SREG)
Unleash your Creativity!
1HJDWLYHIODJ1%LW
5HSUHVHQWWKHVLJQ RIWKHODVW DULWKPHWLFDO RUORJLFDO RSHUDWLRQ
,IWKH06% 'ELWRIWKHUHVXOWLV]HUR SRVLWLYHUHVXOWWKHQ1
,IWKH06% 'ELWWKHUHVXOWLVRQH QHJDWLYHUHVXOWWKHQ1
7KHSURFHVVRUGRHVQ¶WNQRZVLIWKHUHVXOWLVWREHLQWHUSUHWHG
DV³VLJQHG´RU³XQVLJQHG´1IODJLVDOZD\VJHQHUDWHG,WLV
WKHSURJUDPPHUUHVSRQVLELOLW\WRFKHFNRUQRW1IODJ
31
:URQJ 7KHDQVZHULVLQFRUUHFW
DQGWKHVLJQELWKDVFKDQJHG
,QJHQHUDOWKHFDUU\IODJLVXVHGWRGHWHFWHUURUVLQXQVLJQHGDULWKPHWLF
RSHUDWLRQV ZKLOHWKHRYHUIORZIODJLVXVHG WRGHWHFWHUURUVLQVLJQHG
DULWKPHWLFRSHUDWLRQV
32
AVR Status Register (SREG)
Unleash your Creativity!
6LJQIODJ6%LW
33
([DPSOH6KRZWKHVWDWXVRIWKH&+DQG =IODJVDIWHUWKHDGGLWLRQ
RI[DQG[)LQWKHIROORZLQJLQVWUXFWLRQV
LDI R16, 0x38 ;R16 = 0x38
LDI R17, 0x2F ;R17 = 0x2F
ADD R16, R17 ;add R17 to R16
6ROXWLRQ
)
5 [
& EHFDXVHWKHUHLVQRFDUU\EH\RQGWKH'ELW
+ EHFDXVHWKHUHLVDFDUU\IURPWKH'WRWKH'ELW
= EHFDXVHWKH5WKHUHVXOWKDVDYDOXHRWKHUWKDQDIWHUWKHDGGLWLRQ
34
AVR Status Register (SREG)
Unleash your Creativity!
([DPSOH6KRZWKHVWDWXVRIWKH&+DQG= IODJVDIWHUWKHDGGLWLRQ
RI[&DQG[LQWKHIROORZLQJLQVWUXFWLRQV
LDI R20, 0x9C
LDI R21, 0x64
ADD R20, R21 ;add R21 to R20
6ROXWLRQ
&
5
& EHFDXVHWKHUHLVDFDUU\EH\RQGWKH'ELW
+ EHFDXVHWKHUHLVDFDUU\IURPWKH'WRWKH'ELW
= EHFDXVHWKH5WKHUHVXOWKDVDYDOXHLQLWDIWHUWKHDGGLWLRQ
35
([DPSOH6KRZWKHVWDWXVRIWKH&+DQG= IODJVDIWHUWKH
VXEWUDFWLRQRI[IURP[$LQWKHIROORZLQJLQVWUXFWLRQV
LDI R20, 0xA5
LDI R21, 0x23
SUB R20, R21 ;subtract R21 from R20
6ROXWLRQ
$
5
& EHFDXVH5LVQRWELJJHUWKDQ5DQGWKHUHLVQRERUURZIURP'ELW
= EHFDXVHWKH5KDVDYDOXHRWKHUWKDQDIWHUWKHVXEWUDFWLRQ
+ EHFDXVHWKHUHLVQRERUURZIURP'WR'
36
AVR Status Register (SREG)
Unleash your Creativity! ([DPSOH6KRZWKHVWDWXVRIWKH&+DQG= IODJVDIWHUWKH
VXEWUDFWLRQRI[IURP[LQWKHIROORZLQJLQVWUXFWLRQV
LDI R20, 0x52
LDI R21, 0x73
SUB R20, R21 ;subtract R21 from R20
6ROXWLRQ
') 5 ')
& EHFDXVH5LVELJJHUWKDQ5DQGWKHUHLVDERUURZIURP'ELW
= EHFDXVHWKH5KDVDYDOXHRWKHUWKDQ]HURDIWHUWKHVXEWUDFWLRQ
+ EHFDXVHWKHUHLVDERUURZIURP'WR'
37
([DPSOH6KRZWKHVWDWXVRIWKH&+DQG=IODJVDIWHUWKH
VXEWUDFWLRQRI[&IURP[&LQWKHIROORZLQJLQVWUXFWLRQV
LDI R20, 0x9C
LDI R21, 0x9C
SUB R20, R21 ;subtract R21 from R20
6ROXWLRQ
&
&
5
& EHFDXVH5LVQRWELJJHUWKDQ5DQGWKHUHLVQRERUURZIURP'ELW
= EHFDXVHWKH5LV]HURDIWHUWKHVXEWUDFWLRQ
+ EHFDXVHWKHUHLVQRERUURZIURP'WR'
38
Flag bits and decision making
+RZWKHVHIODJELWVDUHXVHIXOWRPDNHGHFLVLRQ"
Unleash your Creativity!
68%55
2QHMXPSLQVWUXFWLRQV
%UDQFKLI/RZHU
%UDQFKLI6DPHRU+LJKHU
%UDQFKLI(TXDO
%UDQFKLI1RW(TXDO
%UDQFKLI0LQXV
%UDQFKLI3OXV
%UDQFKLI2YHUIORZ)ODJLV6HW
%UDQFKLI2YHUIORZ)ODJLV&OHDUHG
39
40
Example 1
Unleash your Creativity!
:ULWHDSURJUDPWRLQFUHDVHV5LI 5 5
6ROXWLRQ 1R
LI5 5
<HV
68%55 =ZLOOEHVHWLI5 5
,1&5
1(;7
41
Example 2
Unleash your Creativity!
:ULWHDSURJUDPWKDWLQFUHDVHV5LI 55
6ROXWLRQ
68%55 &ZLOOEHVHWLI55
%5&&/ LI&DUU\FOHDUHGMXPSWR/
,1&5
/
42
Example 3
Unleash your Creativity!
:ULWHDSURJUDPWKDWLQFUHDVHV5LI 5! 5
6ROXWLRQ
68%55 &ZLOOEHVHWLI55
%5&6/ LI&DUU\VHWMXPSWR/
,1&5
/
43
Example 4
Unleash your Creativity!
¾ :ULWHDSURJUDPWRVWD\LQWKH
ORRSWHVWLQJ3,1%XQWLOLWKDVD
YDOXHRWKHUWKDQ]HUR
6ROXWLRQ
44
Example 5
:ULWHDSURJUDPWRGHWHUPLQHLI5$0ORFDWLRQ[FRQWDLQV
Unleash your Creativity!
WKHYDOXH,IVRSXW[LQWRLW
6ROXWLRQ
(480</2& [
/'650</2&
7675 VHWWKHIODJV= 1
= LI5KDV]HURYDOXH
%51(1(;7 EUDQFKLI5LVQRW]HUR=
/',5[ SXW[LI5KDV]HURYDOXH
6760</2&5 DQGVWRUHDFRS\WRORF
1(;7
45
Example 6
)LQGWKHVXPRIWKHYDOXHV[[)DQG[(3XWWKHVXPLQWR
Unleash your Creativity!
/', 5
68% 55
%5&6 ,)B<(6
'(& 5
-03 1(;7
47
Looping in AVR
Unleash your Creativity!
,QWKH$95WKHUHDUHVHYHUDOZD\VWRUHSHDWDQRSHUDWLRQPDQ\WLPHV
2QHZD\LVWRXVHDGHFUHDVLQJFRXQWHUZLWK%51( LQVWUXFWLRQ
/', 5QQXPEHURIUHSHWLWLRQV
%$&. VWDUWRIWKHORRS
ERG\RIWKHORRS
ERG\RIWKHORRS
'(&5Q GHFUHDVHWKHFRXQWHU5Q = ZKHQ5Q
%51(%$&. %UDQFKWR%$&.LI= LH 5HSHDWWKHORRS
3ULRUWRWKHVWDUWRIWKHORRSWKH5Q LVORDGHGE\WKHQHHGHGQXPEHU
RIUHSHWLWLRQV
48
Looping in AVR
Unleash your Creativity!
:ULWHDSURJUDPWKDWH[HFXWHVWKHLQVWUXFWLRQ
³$''55´WLPHV
6ROXWLRQ
/',5 5
/
$''55
'(&5 5 5
%51(/ LI= MXPSWR/
1RWHWKDWWKHODVWORRSFDQEHUHSHDWHGD
PD[LPXPRIWLPHVZK\"
49
Looping in AVR
Unleash your Creativity!
([DPSOH:ULWHDSURJUDPWR DFOHDU5
EDGGWR5WHQWLPHV
6ROXWLRQ FVHQGWKHVXPWR3257%
50
Looping in AVR
Unleash your Creativity! :ULWHDSURJUDPWKDWFDOFXODWHVWKHUHVXOWRI«
6ROXWLRQ
%51( / LI=
51
Looping in AVR
Unleash your Creativity!
:ULWHDSURJUDPWKDWFDOFXODWHVWKHRGGQXPEHUV«
6ROXWLRQ
LDI R20,0 5
5
LDI R16,1
5 55
LDI R17,2
52
Looping in AVR
Unleash your Creativity!
/RRSLQVLGHDORRS
([DPSOH:ULWHDSURJUDPWR
DORDGWKH³3257&´UHJLVWHUZLWKWKHYDOXH[
6ROXWLRQ E&RPSOHPHQW³3257&´ WLPHV
53
Calling a Function
Unleash your Creativity!
([DPSOH 7RJJOHDOOWKHELWVRI3RUW%HYHU\VHFE\VHQGLQJWRLWWKH
YDOXHVDQG$$FRQWLQXRXVO\
'(/$<BVHF
«
5(7 UHWXUQWRFDOOHU
54
Time delay
Unleash your Creativity!
machine cycle
LDI R16, 19 1
LDI R20, 95 1
LDI R21, 5 1
ADD R16, R20 1
ADD R16, R21 1
5
55
Time delay
Unleash your Creativity!
123 1RRSHUDWLRQMXVWZDVWHVFORFNF\FOHV
'HOD\VHF
machine cycle
LDI R17, 200
1
L1: LDI R16, 250
1 [
L2: NOP
1 [ [
NOP 1 [ [
DEC R16 1 [
[
BRNE L2 2 [ [
DEC R17 1 [
BRNE L1 2 [
56
Calling a Function
([DPSOH 7RJJOHDOOELWVRI3RUW%E\VHQGLQJWRLWWKHYDOXHVDQG$$
Unleash your Creativity!
FRQWLQXRXVO\3XWDWLPHGHOD\EHWZHHQHDFKWUDQVPLWWLQJRIGDWDWR3RUW%
/', 5+,*+5$0(1' ORDG63+
287 63+5
/', 5/2:5$0(1' ORDG63/
287 63/5
%$&. /', 5[ ORDG5ZLWK[
287 3257%5 VHQG+WRSRUW%
&$// '(/$< WLPHGHOD\
/', 5[$$ ORDG5ZLWK[$$
287 3257%5 VHQG[$$WRSRUW%
&$// '(/$< WLPHGHOD\
5-03 %$&. NHHSGRLQJWKLVLQGHILQLWHO\
'(/$<
/', 5[)) 5 WKHFRXQWHU
$*$,1
123 QRRSHUDWLRQZDVWHVFORFNF\FOHV
123
'(& 5
%51( $*$,1 UHSHDWXQWLO5EHFRPHV 57
5(7 UHWXUQWRFDOOHU
58
Stack memory and Stack Pointer SP in AVR
¾ ,W¶VPDLQO\XVHGWRVWRUHVRPHQHHGHGLQIRUPDWLRQIRU
FDOOV DQGLQWHUUXSWV
6WDFN
6WDFNORFDWLRQLQ65$0" 63
1RWH
7KH6WDFN3RLQWHU63SRLQWVWRWKH7RS2I6WDFN726
7KHVWDFNLV/,)2PHPRU\/DVW,Q)LUVW2XW
59
% POP R0
+RZVWDFNVDUHDFFHVVHG LQWKH$95"
6WRULQJ LQIRUPDWLRQRQWKHVWDFNLVFDOOHGD386+
6WDFN
386+ 5V 3XVKWKHUHJLVWHU5V RQWRVWDFNPHPRU\ 63
61
+RZVWDFNVDUHDFFHVVHGLQWKH$95"
6WDFN
3235G UHWULHYHWKHGDWDIURPVWDFNPHPRU\
EDFNLQWR 5G
=
($
$
CALL FUNC_NAME
RS&RGH RSHUDQG
INC R20
L1: RJMP L1
$ FUNC_NAME:
$ ADD R20,R21
63 % SUBI R20,3
3& &
%
& RET
'
6WDFN
63
¾ &DOOLQVWUXFWLRQ
3XVKWKHDGGUHVVRIWKHQH[WLQVWUXFWLRQRQWRWKHVWDFN
63
'HFUHPHQWWKHVWDFNSRLQWHU 0$,1
&$// 'HOD\
7UDQVIHUVFRQWUROWRWKDWVXEURXWLQH
HQGRI0$,1
'HOD\
5(7 HQGRIVXEURXWLQH
¾ 5(7LQVWUXFWLRQ
&RS\EDFNWKHWRSORFDWLRQVRIWKHVWDFNWRWKH3URJUDP&RXQWHU3&
WKH\VKRXOGFRQWDLQWKHDGGUHVVRIWKHLQVWUXFWLRQEHORZWKH&$//
,QFUHPHQWWKHVWDFNSRLQWHU
64
Some Instructions Using a GPR as Operand
Unleash your Creativity!
7KHVHLQVWUXFWLRQVRSHUDWHRQDVLQJOH*35UHJLVWHUDQGSODFHWKHUHVXOW
LQWKHVDPHUHJLVWHU
65
7KHVHLQVWUXFWLRQVRSHUDWHRQWZR*35UHJLVWHUVRIVRXUFH5UDQG
GHVWLQDWLRQUGDQGWKHQSODFHWKHUHVXOWLQWKHGHVWLQDWLRQUHJLVWHU5G
66
5HIHUHQFHV
Unleash your Creativity!
)RUIXUWKHUUHDGLQJVWXGHQWVDUH
UHIHUUHGWR
67