Embedded C and Atmel Avr
Embedded C and Atmel Avr
(~)
c 1I@!i Atmel
Richard Barnett Larry O'Cull Sarah Cox
AVR
O'Cuil,Sarah
Cox
C Programming
division of Thomson
~nffi~~~~.~~rn~.mm~.~~~w. g~~no
Tsinghua Chinese University edition. Press is authorized hy Thomson Learning to publish and distribute exclusively this Simplified Hong Kong, This edition is authorized for sale in the People's export of this edition Republic of China only (excluding of the Copyright or retrieval Macao SAR and Taiwan). publication Unauthorized is a violation Act. No part of this system, without the
may be reproduced
or distributed
of the publisher.
~.~~W~~~~nM~~,
981-243-982-x
~~~ffMn~~~~~ff*~~ffW$*.
~
Jt~T rn!'dX~}r-J*~tR*r"J
1II-iiJ :ft II&~ §(CI P)J& m
ff k~-,%
f:
01-2003-2176
*~MW~.~$*~~~tt~*m~~~, ~~~.~mm~~
!tl:Art
c ~l~!oj
~t¥,
c*rt.- $~*,
f,ijf~~~i¥-.
-~~R-:
~.44 flJi k;
Embedded
ISBN 7-302-06955-7
1.*'..
II
n{rL, AVR®C
*6-:f_!£ff:W-i-t
IV.CDTP368.I@TP312
lli+* ~(2003)~
en
064032
~J
iJl::
*f
http://wWw.tllp.com.
.. , 100084
$. til. ,
010-62770175
.gP.ll!l~:
mfiBfUI: W~
3t .fii ~Iin.:Mi
*1liI:
w tit jlE £~ ~IJJ
Jiut-
&: ff
.Iti
~
:if: *'f $ ·:tH!:i.t1t;l1 ~ t. f.( M h I'JT *: 13,}X260 E!l~. 27 $., iX, 2003 1f: 9 }j m 1 JltZ 2003
~:
fp ,ijlrJ
EP
It:
if~1#;7
mJti Atmel
-I-H£ fl' X1M ~ /f'; raJ Ii'~ if Jj'ij & i l i¥J i~ • ~ -~w;:t'f~Et!.-fit • .f1L IN~ Jt!-¥If¥~ ~~ _ _L~tL*~ Jt!--fI~N*lkit.ml~
0
tt*~~oo~~.*~m~*~~~~~~:
.~~~rlcffi*~~~:
~~~~~~~~M.4~*~~f¥~~*~~ff, ~~ ¥It 1lT 5t ~ 3] c i€f)H~ufl. ¥} ;y :s:j '!ia-M 1:tJt~ mt £;! 1ff~3 W: it 4' b), A:it mffl C ift -j§- fP Jm 12: -1-7: :>J JI[iJ! rf. , ftP.1fJ mt ~ IdJ, '+ j.J £ ~ ?It ~ A 3:\ mffl WJ¥ , i!.lI:~f¥ ff @_ *.m ~~:iE tr f£ll'*A~11}H~~~$-4', rmJL:>f~iiff~@!ft*rtiRo 1 ~(UXAA c l*Er~it):m~~)§ 15 r_tlli1i~J~~~._:~ • ~J.i c itH~fl¥J~~: *~-arIJ,1''Fj;J--~M9XMt-*tl~f¥~~*o 1tik#'t~{£r.
~~~Qml_~~3~~§~~~.~~.~.~~gc • m~~~~£ID~m#I~~~~m~.w~~~Jti~~~I~~~tt*A~om.~
5Jl- ffjj 1£)
e-
~~R~~~~ml~~~~*AA~~~~~~W,~Fn~~~~~*A~~~*
~OO~~,l.m~~~~2~~~.~~n~~~.~mM~~~~.~~ft* m
~~3.
~~~m&m~*~~m~~~~~.~mMo
W ff
Atmel A VR
~~~~~fflT~*~~~~*M~~~.*~.W~OOffl •• ~(ffi~f*~=~.*~.~
If -t·T
0
~~~*~~~.~*m~~.~*~~moml§~~ffi~~mBd~~~.~~3~
• lJ •
AVR
ffiA p;j tYJ 4ij-1'-±Jm~~{~L{itM!:v.. ~ px~1*EtJ ttlltEOOEi<J~)j ~_tfJL~)] x-{ ffi Jli ±:~ I¥J, J3: ~ nr !J~ ij;~ }j 'if ~ ;.g -&Ht!! fE A 1*@ m ~ ffffl '2 f(j
~Q
Mcm~*~,
*~&*m~3~~m~.*~#~$#~. M~~~~~~ft*~~mffiM~**m,
~€£AVROO~#.
0
~mA~~g~~.a&m~~mmaA~OO~¥~~
~
o
EI ~MH
M 1 lit ~Ait
e i.~~ #i.{l;
M 2.
AtmelRise ~JlH
p;j
*.
;tJ.Nlif 7mf2:t~~tf.J¥*Fu~&;It
0
~ $1¥J4ij- 'l'tFm~r-& jpJ:l$~Uffl7J'{9rJ~r¥*W iG ~ 7 ~ulID W3it. ~?¥: ~ z Fn. ~ ~ J5i it<~ IJ. ;fIJ ffl AVR RISC • ~ $IJ3
0
~ 3 if:
*i:tt
~.~~~frffiC~~~~~~.Hffl~o~~,&~~ffl~~fi~*~~~~~$~~
~ffl~o~d.3.~~~g,
.m~~ffl$~.~*~ft.~*.~.~~.~~ha
3liitfH~~.EJt:*~1;i\:ij[
0
*~~
~5i!
~ 4 if:
CodeVisionAVR C
IIIf§1f~
pHi{ CAVR ViH~$~$~jU~ ~£ AVR W:'i-S'J FLASH #fm$!K~~~jOO~f'Fm1¥1. ~tt~ t~1¥1 nJ g1, ii:f~ I!IJ EIi,ffHE t8 )]i If , iJif3J{_0 :ti~~o {tffl CableAVR *ffl J'.:l ¥$ frrBr 911 {iiI t: ~fiJ {tffl Cable A VR ~f4:& 1IJ!1lj; " Il1H:rt E MegaA VR-DEV rr 1tt& MegaA VR-DEV JT-.tst:tR E8~ ~ f5;fQfiiH~l
0
0
.o
_,_ n
• IJJ •
IlfHJt
F ASCII H
*1'{f~
PfH*
£iHt~:S:],*~Q
m~ ••
i!:J_U
0
~ftA
11'J£ ~~if:m
o
*~.OOtt*~~~~£.~m~, ~W~~.~~ft.~~$OO~n~~~~
ra'lW:ift §(#IJ9P C iH*),*~Jm··-~X--Ja-tfll]~*1~Pf!(fl{f*.
~ mr
~a-t, .~~B~mm~m.*.W~7. t~ H fJ'1 fj '7: tit .fir i~ ~ '7 fZ ,mHR ~ N #5tl ft1t it!!. ~~ (fl~ lJft ~ ffl ':h frJ
~#~*R~m~.m~*%~a ~~~B~~~~7
~~£#,±;g:~~~~~.~~n~~~~*~.o~~~~~¥~C~~~&~.~~~~ lllU C $ tP A_-r\.~ %1). FfJM #Hift --&d1HK Ie *-1=5~JE 7 tJ. LW3#~~I¥J~*. *WJtJ.fFAI:¥it¥JJJB~~~(fl:£5~
e
**
-~~~~~~*~, m~¥~mm~~*¥~~B~ff~fiW~~~~
0 ~
1'$0
IY~ VR ~~b\~ A
0
7f 1t
.(l~Wli#.~i.~lfj!#* E)JfbtI¥J ~ ~~ff~fRtIH~ff$X¥1tm. 1E.~1~~1Ff:JJ!m ff2t. Atmel AVRWNftd.~F'ffl'~~if:ffl e reE:tm~~~H&_t, 5'~j](f--·1'-fai**~ft. JL--rE{r,W; 1:').& 41*
*~l¥Ji§lrf Br2{E.~tUfl: AT90S8535QX.-lJ Atmega163 _t~~b\tt., AVR -*_9u1tii~$tl~Ef. -::*:tit ,~~, 1::if] B'~ ~ ~& ~.fir IYJ 11 j\ .1~ tElfbi. LSl!lt. m~ffl EFJ#lJ -T -aT gAtE {:EM Atmel ~ tiIi~ AVR mtJ~$IJW_t;iEtT, fJ.~'B_t j]j~#JElEf.Jfrf-tl~$'£~-&B 16'~:h AVR -*3'~;1tit!!.f}{J~W
Q
m~.~(fl.m~.m~~~~ffNmM.~#~~.~~~~mn~~*.
7J~~-mfRo
§~~AVR¥~~~~~~~.*~~.-*~EEJ~~~~*
*- is f(.j ~:;ff
Richard H. Barnett
I1!TT.~bZ*fj:~
fR*l::*:$
·lV •
IlXA..rt
m±f±l1±1¥J 18 :q::,,- - Kh\$llXAj:tMtnm~~@1:1;'1U8f!(~I1= )A Intel 0ilJ [j<J t 8085 :Jft!&. jlJ 805'1 ffi37~.Aj.IJi~*~~. rmtEOOU;flJm Atrnel AVR N~M.~glHlxAAmUg:*ll ~ ttl tt ff I it fE ~ fX~n:!fi j~ ptj 1-1FXM ~, ftl!!..... rl:tmM • $ ft1 W ~ *A Jt lVf ~I t1= • 1f itvt1fJJ.ili.ffl fiJ1§..fflID lu] t=;::ffilJ ErJJitJij q:r ~ 5J:7~. ftBif,f9-t&:tmiE...tj£4Jl!~JA~~iilJI ft tE:!:l3t±:* ~ffJ{HWHAJ, fIB.~ T 10 :q:: I¥JAA~ ~ -f I \1v.I~~1jJ iEq&~ JJTIii. Barnett IW± a;Jt~~ T 1~ $ :!tIm, 1E.:rfi t1=:tJ £8 f±:*"F r.tl JiM- ~~YIP ffij$IH~7 Charles B. Murphy ~ 1m jriJ 111 A J8 tt..A eg ~Q ill:X ~J1j¥}iff y.... i3: 1'- j;Q il ~ Wp-¥ Jlfr .l:R >,~:J¥: itli:31~ $ 7 .E81±A$r:pM:1fmJll&JEB 225 UI.~~iPo*-KH:ftfr!:=JEBm.---:*~*~ ~o :~U[rff 1:ffriJ Xi J\!.QX;1'f ~iX, n:r bl,3I;ij::E8:t± j,: ~ ffJ Et! 13 765-494-7497 lflftBltt 1EPI tJ 1:tiE tt!. T m~1i~; [email protected] f~
Barnett
0
*!Jf.~
~~*.
Larry D. O'Cull
~~~l'F~
Progressive Resources LLC O'Cull5'G Numeric Controlled.
0- J'1j
tH.t:f!I!.:.¥:~+~1:V: ftf?Jf AAit:h CNC(Computer ~tM;:f41tIEi!~tl*~a<J. Fo*# J1:i] ~ -=f ..L~I¥JJt1tE@i
j)Jt
0
it·~,fftJi~~~~)iX.ffi.19:
•. n~~#~~~*m~19:4H~~#,
O'Cull
~~~*m
.• ftm.~.ffi., ~"~~&*~~#
tEM$ T JL 1f:A'~ ~-=ffO~itt l~I1'F ~&I~~JmI1tJEi. F 1995 ~P.X;JL 7 Progressive Resources 0 ;;] Progressive Resources LLC 0- R] (http./zprllc.comj'e nM. *-.~ft, I ~~~m~r1~ ffJ~rru~7f'ii._I ft *i~il'jifM Atmel AVR J®!rblJ1 a<J~ lfl f 3zQ~:gfffijJ~ ~E.1t*Jti~. -aJlJ.tt:i:5 ~ -f!B~fttjIJ [email protected] lDft!!Itt~II**
o a
Sarah A. Cox
0RJ
~ ftt 7f'ii.'± 1:f
C~~±tEm~.A~~~~#~~*~Nr~.mlfl~~I~~~.~~±~UI.c ~ ~ iE -1-1~:* ttl w.m IU] 0 RJ r:pI ft 11:- .E9: at fa], 11 ~:Wi P-f: it J!IL~ ~~ itt ~ TIlJ, z.J§ ~ 1&:~
~fI~19:itEntkill1*fIJ71J~tijJl!& '317 tEp'x;7g Progressive Resources LLC 0RJ 00"fffF1!fZ frY. tltB ~ ~.!IULc ~ T 1~$ J~)f m~ 19:.ffi.rr~ it J iJ\ ~ IT Progressive Resources 0~ $, Cox .tC:tj;J.:g.f~JJI! § 3f1ttki4, ffifr,j~2itlwd\A'>]m~n~:fH I.'.!ttz:p~lfl3!~ii\W.ffi. § if%~ 7 f~ ~~:IgIG. 1E.m ~ ~i.t .. ~1T" ~5f- ~ JLli'ii.Ji ~ 0~ ~Jl:~Jm 3Z;#:/~1f~ F{flfJOO~ffimr~ jf:m.~~ ~lltz:.j~, j{t!!ll:)!1~$~If~I¥J~IRJ1m1f1lo PtlH£j;J*,tJc ttiH~~~!ft1tf. :kJ Atrnel AVR 5l.I::~~~1;JftitIJt" !m *:g ff fuJ ~ Jt!. ~ ~ @ i-~, it i4f El!T m~itt 1.t:i:5 [email protected] lfl tltB IIX 1ft If*:~
a eeo
31
~
;r. *~~$1lf:(ALU), ;ffi.J¥ ROM b'J. &. 4ftBY~-& ifffM~iU --1'- /j, JIj ffJ Z}=f If 1¥J1i&~ ;M~z- ~ ~~~~a~~~.m*&~~?£.~~I~10~~~*AWA~.~~B~**~~~~
I
*A:rt;mtf;{;j;U~8t~TIJiTJ*~hxEf!.IE4t9='*pt T cpu, ±~9h5tWWfffif ~#I¥JW:ru. it.tIL, ~1~ »;It ~ ff -- ~ It_ f¥J ttt~ -r/ - W {flo _t tk l. 1lXAAmttltlJ~Er'~1tm}Jj1:o!2mijj: Intel 0-i=lHm 8051 ~~IHjL.!f.~pg#, 110" 30 frT ~
Instruments ~National Semiconductor ~Motam Ia, Phil ips/Signetics-, Z ilog , AM D" Hitach i, Microchip 01=.'],
0
fi General
Toshiba
~&;ttftR~~ -Si6:!L$. Arntel JiX-J; FLASH ~1-i1R-*JfRl¥Jtttj'f.'W!~Ao FLASH M-#_nfl~~~ ~'11: (nonvolatilejjll ur ~:mJ:~;rti¥~ff-M@, tim'"; ffltE~W1j_tn, 1I!m:a:-=-g-0Jtj-&-i-lO PC i:t&_l JK frp # ThlLa FH-J"- ~M~~ WA:it ffE ~1fUJlA'~M~ Jj~ , JiJf ~:*: jdiJ1t 7 A tmel 1E 1i& Pi ;ttl B @l ~ 1=:I:qy.J~m.lkff, ~% AVR RlSC(Reduced Instruction Set Computing, ~1iiit!i:f~-4(Jt;)ttjL,\M
fJJ
~1¥J~M .•~~m~n~**~~M~~.~+A~N~~nQ
~ 1--~ f4:t11fQ ~ EfJ ~ A'jJ.. mmt JE =#;- r' j tt x&:li~mt~
,LI:~
.~@~~RWW~~~m~~h~AD~~C.W*~~~ru~~Rm~~~,
IIJ tt ~ttt. it B 1± i!jJ nIT I¥J @ ffl I:~ ff {jt ~ i
§ -mr, ~1ifffJ--1'
0 ~ ~ ~ - ~-
~~~mo~~~~~H~m~~M.£&*~H~mM,
Haiduc ~~I¥J~
c 1ft-§' 7f/i:_I~JM;;l!
0
tW ~ ~ ~ il:, )t:lik ~ ~.fO iIlil m AVR .fIl Jt flk RISC m~1t1J ~ 8'-1 mt 1T, :*~ 71<. -if Ef.J ~ Itfr~ j§J (-1-- ~~j=f q:t ik~ ~ :Bitt-' ill~ •• ~~ft#~~*~~). ~H~~m~~~*H~~~~~"~~m~"OO~*, ~~ ft ffl F ~ T ~ ~ i!* -+£ I¥J Z9J tJL [email protected] n~ a J;] PC ~ £; c itt -g ~rr- , ~ it1;] mttl ft ~ ¥c~ I If $~ ~ ifi -~-~~~f I¥J t~JJ5. fl3-£ 7f J;] A:r\ 1ltt ~ 1t~~ ~ 1:3 c iit ~ 1-t o!!',..t. ~ i:& 5e?lf J'IH81J rti , l;J it3W AA f ~ErJ~*~m/J\, ~~, rlJ~&-ar£m I'J<JftWo *15ffJ § I¥J~ -Wt~7iJM~1!r-m{1t----t-H~~ tfl~~,1.'L jQJlft, *15xt~~~®:(£*AAmtflmlJ~~it _tfl$.t:i~IhA*~, -tE.~- --*#m
iK1--1C'ItUEl.~7fLtPFjjt(lDE)jjJtj.ft.if:(£
trlI¥J
Windows
mfflfiFf9=':i£1f
*~~
~J~~~o
M'
1:ii
1.1
-l8:.J\i\.
~
*:!it § f,"F
r~
c i!~~~
1
I
1.2
1.3
1.4
£*.m.~
51:': :II: ;f!:l 'ffl:lt
1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6
I
4
---4
~!it!fti:~
~itttJ11'm~ ..··· ····· ..·..·· ..··· ..·..··..······· ..····· ···· ···· ·· 1tJit
;t[4t::¥D JE
··
···.·..··· .
·· ····.· .
5
7 8
s:
·..··..·..··· · ·..··..·..·· ··
·..·..···..·..··..·..··..·..···· ··..·..·· ···· ··· ··..·..···..· ·..···.·..·· ·· . ··..·..··· ·····
1.5 1.6
:i.E.:ro=lU:tfl:.it.:rt
M11i::ig~?q=:fIJjf*iE1f:M'··
1.6.2
1.6.3 1.6.4 1.6.5
m*
8
9 10
·..··· ·
~$ft~~.f.t
Ell$E.f,J~
~*~Ji;:.:-r,r
··..·..··
·..·..···..·..··..·..···..·..··..·..······.··· . · · · ·..·..··
···..·.. ··· ·.. ···
· ··
· ··
· ·..·
·· ·
··..·..···
··· ·····..·----.13 ..
· -
10
14
15
16
*=ftf-::&.i:t:j\_
lli.$11t:Jt~
while Vi'EF
do/while ViU
for
··..•.. ··
··
1.7
~1ttliftiiJ
1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6
17 ··· ·· 17
18
Vi:q-;
19
20
23
1:B--iU
· ·· ·
25
29
--30 ··
1.8
B&~
1.8.1 1.8.2
1.8.3
·
Jli~lO~~m~J!.
···..···..·
···..· ·..·..···
ii~il[@l11i: ±mjJ]ffi~
32 33 37
37
·..·..·..··· ··
1.9
mftfO~m
1.9.1 1.9.2
··
··...··...··...···. .· .· .· .·
~m
~f:llll:tll· ..· ··..···..··..·..·..· ·· ·..··..·
··.·..·· .
· ·
40
42
1.9.3
• VIII •
ib!:Ait
1.9.4
c iilf:i~
Atmel AVR
fliiol S§:1&I¥.JWtt-
··..·.. ·..·.. ··
··
··..·····..···44
1.10
!tiftJ ~~m1*
1.10.1 1.10.2
1.10.3
··· ···.··· .
···.· .
··· ···.·48 .
~ftJ ..·····.·· ···..···· ··..·..··· ·· ··..·..··..·..·· ··..·..·· ·· ······.··..·..·..·..··..····..···· ·· ··..··..48 . . M'~J~ffi · ·· ··..·..·..·..···..···· · ··..····· ··50 m{ti]t1ifi;J~-mtt ··· ·..·..··..·..· ····.··..·..·.. 51 .
;l=!:;fflif··
fJz .fDV1:J!(
·· ·· ···..···..·.. ·
··
· ··
·..··.. ·
·.. ·
typedef :iE$f.1'ff
· · ··..·.. ···54
sizeofEJJ1ff
··..·..·..·..··..·..···.·········· ·· ·56 .
1.11
·57
~~fIlJt~·
mtl ....··....·..·..·..·..·..·..···· ..····.····.·..·· ·· ·· ·· ·· ....··.·..····.··.·..·..·..·..·..· ···.·..·..59 ..··· . . ..·..·· . .. . ~ff~3!!:iit· ..·· ·· ..·..·..·..·..·..·..·..·..·..·· ·· ··· ··· ·· ·..·..·..·..·· ..·..·· ·· ·· ..·..·..·..··· ·..·59
62
· · ·..·..··..·..· ···· ·· · ·..·.. ·..·
1.11.3 1. 12 ~
at 1J?t
1.12.1
i!ffl ~ [fff
iA:$;ffL
62
71 71 73
1.13
*./J\~
~J]
1.12.2
·..·..· ·
· ·.. 65
_tm~53·
Atmel Rise
···
*~§*~
~I1H "
···
··
· ···
75 75 75 75 76 77 77 8l 82
t$.:*~.if.iJM~
1f-~#
2.4.1 2.4.2 2.4.3 FLASH
51-~······ ..··..··· ····· ····· ··············· .····· ·····.··· ··· .····· ··· · . . .
·.·
·..· ·· ·
1\~ffM$ ~~fi-M$
EEPROM 1ffiti~
2.5
"P~
1l {lL liD ~ IJ
·..·..·· ·· ··
·..·.. ·..·.. ·· ·.. ·.. ··
··· ·..·..··
,
83 86 88
2.6
1flT
2.7. J
2.7.2 2.73 2.7.4
2.7 itlt-t-Bli-tli:~
itlJ>t-Hlittrt~fOO):E#F~:fU$!tI
Timer 0 Timer 1 Timer2··· ·· ·· ·· ·· ·· ·· ··..·..··..··· ··· ·
93
A~1f~ · ··..·..·· ·..·..·· ·· ··..·
·
93
94
97
108
2.8
1JEffl
UART iltrr$f.f:iM.ffi····
····· · ····· ·
112
[j
• IX·
2.9 ~1t)*U············"·····················"···"··········
2.9.1 2.'9.2 2.9.3
······118
····.·..····.·..·· ··· ······ ..··..· ·118 . . ..···· ·..·· ···..·.. ···..·..·· ·· ··..·.. ·119
·..····· ··· ··
·· ·
·..·
· ·..··122
127 130 132
A VR RIse l[~i-N-1§'t~~~
*1jt
~.3::.I
J'ra-
·136 137
t·.tJL~:-1
.fiF;1l1/0 ~lrf~;rtf:li?EJfi
~ 3.
3.1 3.2 3.3 3.4
139
*~8tjj;·
-T11~A/!fIlijtlj ti-f't~ Ifj 8l§ ~
3.4.1 3.4.2 3.4.3 3.4.4 fl§~
·..·
··
· · ·..· · ·..·
ijri§····· ..········.·····.···..···..······················ . .
········.···139 .
~rI:I ?t:f$I1r~
~Jt.tT~ffi~
3.5
tiFi1£~Affi~······· ..····· ········ ..···.············· ..· ..··· . 3.5.1 !Ji;f!J f.f $ flJ Ji getst) 3.5.2 ~ltE #Ii m tr.r scanf()
3.5.3
* *~* ~:it.13na
m~ m~
rn~
·151
ffi f{ sscanf()
·152
3.6
#i fdef, #ifndef.
#else fil#endi f
m~
3.6.4 #pragma
3.6.5
Jt.f!B*lOm~
3.7
3.8
*1jt/J"..~
~)J
J:m~)]
CodeVisionAVR ~~B41lI5px*~~fI C
l67
*.B_f.f · · ·..·
ij I -~4.3.1 4.3.2
· · ·..·..· ·
··..·..··..·..··
··..·..··..·..· ··· ·
· ··..·..···..·..··..·..··
· · · ·.. 168
168 ··..·..··
168
~JVtJTbt([DE)lf;tt~{t
···..······.········ . ..···..···..···..···..··
iIiii=t1!f
·..··..·;··· ··
·..·..··
·..·.. 171
• X>
ti*A:rt: C~:fj
4.3.3 4.3.4
4.3.5
~~.:t1tf:·················································
ITETJJ[ftf
.:t1*~Ni.$
UART
4.4
tii i.l:il.iZl:;J]:!
ffM~mJt. ft1t
.f:'ilff~~
SRAM····················..······ ··· ..··· ..··············
~if
4.5
~if5fIl~Ji!i:rm
4.5.1 4.5.2
9
· · ······... .. .... .. . · ····· ·· ······.... .. · · · ··· ·
;tIi;ifJ!il fI
tJ::r&;f_!l:i §
4.6
xt § t:iFi'it ~~m.
4.6.1 4.6.2 4.6.3
4.6.4
Zit
FLASH;fn EEPROM
FLASH ~~
· ·· ..·· ..··
fir ··
i* ~{fL
Boot Lock Bit 0 ~ Boot Lock Bit 1
185
185
~.?';
-185
·..·· ..··
186
186
··· ···..··..·186
:;tttm~@B
Chip jl:qij-t Ports ~l:OO --F External IRQ
·· ·..·..···..····· ···
·· ..·..··
186 188
189
4.7
CodeWizardA VR 1't~~fflG:2J
4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4. 7.8
'
:iiii llI! -F
·..···..·..·· ··· ·· ·
··.. ·.. ··
···
··
190
191
-192
:iiii:qij-F -F
· ··
·· _-
193 194
195
ADC ~J1Q
i:E~i"Jitt~
·..··..·
196
4.8
4.9
§¥-~I~
Atmel AVR Studio
4.9.1 4.9.2
4.9.3
207
Wiat.:2J
ir~--1'COFF
208
AJ
AVR Studio
·..···..··
208
209
209
n Jf::t1'ttJttfii,lliil:
• XI·
4.9.4 4.9.5 4.9.6 4.9.7
:7l~,
rf1!t'f~Ji!MJii
.,
-ijtjf_;fUjf1f~Wi.~
4.10
*:i1it/J
~~
!fi
~5.
5.1
4.11
4.12
_LtrL.!t.33
IJlI §:1f~
· ·..···..····· ..··..··
·..···..·..·214
*1l§-W-
····..·
Jt5(Ilfl'@!
-rit-i-tllft
m:
--.,
---
····..·..·· ···
··· ··
gi!~ut:JE5(mt!i1:
ltft_fO ~~ut: iJ!it lfjt ~ M' f-ll ~:fi1f.~AA;fil7f1itjlfr.IW:: ]'!::&1E~~ilI:jlfrf3!: ···· .. ····· .. ······ .. ····· ····
· ····217
··· ····..····· ····..·..····..····..·..218 ···· .. •.. ··218 218
lJ(tRllftf:lt:
5.5 5.6
:1J"19~:rm §: ~-1'-~at~~~fl.
5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 5.6.6 5.6.7 5.6.8 5.6.9 5.6.1 0 5.6.11 5.6.12
··· · ·..···.··219 .
···219 ·· ······.·····.·····.·..···..····· ···..·..·· ... ···219 ·· ··· ······· ..··..······224 --~ ---
1il:jI-~ifatrli_fftf!itit
3fy~iI!i:i!i':l¥.I.itftf-1Q:it ---
liit --
~~~~;fil$.:{1=-7fttM-fJl:
··..·· ·258
··
·284 ·288
5. 7 5.8 5.9
#~~
~3]
*./J"~
J::.;f11.~::g
5.1 0
289
·XII·
iiXA:tC c fAiIi~l=j
~i?Ei~~;tjCodeVisionAVR AVR ~m*IJfi~~
Atmel AVR
11f:1~ A
··
~*
I!f:t*"
~~ ~~
1Jfo1~ B
C D E F G H
··..·369
··········································381 ··..····'.···..··384 .
~~*1fm
ASCII AVR
TheCableAVR
MegAVR-DEV
*~:"i:
m4r~:i[.'itl
·..···.····.··..···.···.····.···.·······397 .. ....
·········· ..···.···.··..··· .··401 ..···· . . .
·..· · ········ ···409 ..
~t~ ~t~
ffB#~3]~~
:JE S/..., #tii£;fniJUJ~~~:m:~ru ~1;t~~m, ~&i3:.tJ:b~ruEt'~1tm~:fJlm~ • jJ 1§.# IJ, eg fl-m~l'i!i ~ ~~5t.'ffi. % I!Jj lO¥-r1 • ~:fj:~BJ:H T~!iFf!ij • im:i3tmtlll;iE.r4~~t.fllS:~ til ~ •
~~*.~~~, ~~~.~~~~~:
*-
• iffii c m~q:r1tmegPJTfflE.~!f{J~* • JM#4fJ l'tf jQ mlJ ifr iD X1~Jf mt fi1" ~ I¥J 11: • -BHt'E1*ff~ii~ g.r1~n~mtliiH:Ul¥Jffi~, • If:m fl;rft " ~JIL ~;j1;JlO)tffl~M1t:kl • m !it Ft''.I1tt~MJl C 1ft §~J:f: ;fC7?c PX if
f!r~~. *
~~
l;.1,jcmt*f5Eif?J-
1.2
511:
*.frm7WC~~$m~*A~.n~B~~~0~TMeg~*~m.'E1~~~ CodeVisionA VR C iif"*eg -tffl7t(f] C ~! Ii j§jf JA~*~:!."Et'l 7fMl. f't.E~3i;.(f] ~;:J '.Q @~. ~~m~~~.~~.~~~eg~~*~~~~~ *=~frm~m~m~M.V~~~~3~~eg:
0
• F 1lJI~.1ON.;.
~m~.•m~~~~~~~~~E~~.~~*~.*.o
.ffl-~~frm~~m(f]~M.~~m#"flm,~~:fJl~ffl~m,
• C~~ifr~~~~~~J~tt~~m~*%~~.~C~~
~~~m~cm~~
re~@~$~~*, ~~.~m~~~W.i\~C~~w~~.m+
.~cm~#~~~~t*m.M.~ffl#~m~:6~n*~41~m~flO*~~~
•• ~-~m~~fl. IDfl
·2 •
AVR
mainOfElltiJ!~~iA7J H:li1E.1:;~ ff91f9J.. E ~Ja i;l]m~J¥I¥J~#tm~fflEt:L~ ~tJ #f~ ~'rH(£·F,majn{)MlRg*m:p egm1:r]. Jk JI:b*iDI¥JftffltR &~19Jtmft~om![:fJA ¥rj:£- -+~IJ&IY~l~Jf~ff ~
~w~~~.
ill~.~.IIc~~~~.~~~-~~
maint)
00.n
-~BM.OO.A~c~km~~F:
void mainO
{
while (1)
/1 do forever ..
&~~WffW~OO~3o~~~~~~~ff~~,
0
B. ~~~~filli~oo~a~~~.
E§ 1J~mJ¥{£;@trl11
#R~UH
~~J-:~f¥::m~*
fF-§*Jt:Jb!1m.£fo
PC
~'HELLO WORLD"
~iliirJtlFt1UIitHfJPl:trJ:., ib:MlliNtr:Q:ffnrtJ~~-~
*H~no~*~.~~.~mff~~~J ~m~~o~~ffl&~~~T~m~~~.A~.~~fte~Z~ff9~*~m:
m:ff~ft*!Jt,
--_§_~J¥t*l.tJ.
~~.~~.~-A~M~*. ~~.~.~~B
.A~@fflm
~ret¥1M;tty:fS'~1'P~#t~ ffii~Aj:"t.~
~.&~.*~#t, ~ft~~~ff~~*~~, ~~.-t-.A~.~~.~Jf.AW£~1m* (i3:1'-x~~ll*ffi:+~~J¥!.f! i¥J~1'-{tr.1i), #,ti~_tOO19lJT~ i¥J whilet l), ~f¥DJ ~~ Illl.iIT~.
m1~~~f~T-nJfiii~ld~M1fJL$ftt While ~#J~~mHff~ "l19='frrtJ t17~lEff.futM1~ T -1"~ mf!ll:~W~if:~(preprocessor compiler)m~IYJ~{9rl #include ~W stdio.h Xftf1t7iJ*f~FfA''1-$5to printf()~I~EBjrHW~tM~, I1J 1j.t£~~J¥!fJ1!:m, £ b.I9 1;] ~P1!fil¥Jf£5t..1fL-T stdio.h cp xftf:qr tU:J.J5 [8~Ti l.}l. ~J!t.m~HH1CMt~JiXt£-~i1i£ .citI¥J{9rl T~ ~-!l-~1I:lf#~gl¥Jj[;ffi, 1-1:
0
Q
~~~~*
.o
Jt:* 5(~*
·3 •
{}
(f] 7fMl
~ta ~, J&Jfl-f"m7ft#J---
"text"
II~/· ... */
~MW~$~OO~Wfi~*ffl.
W~~ •• ~~-fr~~~~ffl~~~m+.
tro
~ <If X;f!lll ~ 1'I;B B9i*A, ftff J EY. ~ it -®ia rtj;J{!!l!U 1I1£ • ~if!~r~5t.~~~t&:g. EI3~£fMr:M~m~-j!*I¥J~-m:lO/~~~.
fli,aX: • *$iRr4!R%:k/J\~
***:
lO/~r~IJ~
•~mnm~~~.*~.~~~~.Rmm~~•oo*~, m • ~~32~~~D
bY: _~~:~j/J \ 'G'
~~
• ~~.W~~ti~~A~~.OO*~ .• A. *HM~~ffl*~m~DrOO~iliT~~*M~~
auto break
bit case
~~~*m~o~~*m*$~~~~*~.
Long
defined
do
while
unsigned
void
extern flash
sfrb sfrw
interrupt
volatile
• ~~ c iH11r £-~rp § EtOfai\;~iR~. ~~I='-~~ ~1-5'31 Em~ "~S" ffl. 'E1j! ~#t(fB] IWJ) ~ mu ~:ro: 1OJf 17 (@J1f1-ff!l/9R;:I!tdf1tf)
0
j~;;bt,t~.afo ~S
.4.
*A.~c fiIilW~
Atrnel AVR
~w~~~~.~~.m~~OO~.M9a~ft~,
g£:I:~ru_
t:1fJ:tE;firFf¥~~ttJ w.-lr-#JB~~fit'
~.~m.a~~m. ~~.~~~
I
~ffJ1fijH!i¥Ji1~
1.4.1
I±! T ~1i~m&Jtj;:/J\e
~
bit
~
1
*'Nf.iL)
0, 1 ~ 128~127
O~255
-m
III
char unsigned char signed char int short int unsigned int sigt!ed int
long int
8 8
8
16 16
16 16
767
- 32 768~32
767 147483647
32
32
- 2 147 483 684~2 O~4 294 967 295 - 2 147 483 648~2
32
147483647
32
32
~~$OOB~WM~,~.~~.~~m$~~~~~Q~.oo*m~~5t.:tEm~tpBtl ~~~tta~.m.FOO~~$~m~.~~~m~o
1.
FciM~.
~.~.~:tE~~OO.~~~.~~OO~M.~~,
Am.m~:tEft*~d~~~.M.
oo~~oo~o~~~.~n.~~OOM.~~, ~•••~®~.OOWm.R~~m~~~~
~ I*J
0
tt--t
til ~~.g, #f ~
f& ~ ff'1·~·$?t 2.
Jlli~.~
jg
0
•5•
~~3£.
I¥J.:ff#iB ~ rBJ. PJtlt~J¥ ~ mff B1Jll~ijJ rtl] (ep W ffl i ~iit~)o ~fiU~:S:ij~~{ffiiJW!J~1~BJz, # ll~1*M'~~~ii~J-m:, PJ,-&!;litMiE~1lT w,1tm ru 'tt~ 'F. ~ }~j:~. {£ maim) fB JQ: 7f M1tJ:t.1r iT 7 ~ ~ 01 jg *) Jtt tj W it 1ft ffi ~ W It1~
0
~ffij5t'.(~9Hffi~S:)~
~~§t
m ~if.~?t~
A ~~~~~~~~tJ:t.iT,
mT~~~**~~m£~c
Jla global variable
z
.
while{l)
lido forever
j~~r.u5E:;I:o 1.4.3
fffi~~ffl
?tlfc!fIJilJ~ l~lUJL.:fffit~(RAM)9=J
1tJ'iEt
• 6·
~AA. c f;;~
1B:rt :
~, .*3~~ ~~~~~.B.~~H~$~~~o*.~~~~~~~m~~~R$ •.
printf("hello world");
lIThe text hello world is placed in program memory
H'11l
*
1.
ff!; ~ff.m
const
-*ffi ~ 7tt.
jf
JlxE5l..:;tt~rulO*/j\.
IT: m~;f.ffi*r-1~m7E
3tf¥1m~raJ~,
re 5t.~11 ~ -;It:l: t$. 3t.ff fit -tE~J¥ 1't rAJ JE . 1:1} it ~~~
l3:~ffWJf~·~f.f~~~J
RAM :Y:rHJo t'{fi~~. px:W1-r-" ~A:
IIJ
rfIj /f
~ fi.-fit tE
RAM
i!~1Tf;.Jjf~
tiffl~*.m~~ttm~£~*~$~%~~OO. MW~~~~~A~PI~tta~~~K
• 7t.:lW~a<J+j~HI1tl*P;:(1,lu 1234) • §tr~7g Ob 1¥J...:::itt$'l*P;:ctln OhiOlOO)
• Htr~~
•
Ox
Ef'~+/\J£iliU~J:tc~n Oxff)
a<J)I..~mtl%i\(1m 0777) ill:ff -Jfu1!t1IJ m PJ !J. £ t1f ±lit. 7E5J...~ it a<J'fiJl AA IJ\~ ffl $i : X • xR~)HIll'ffl.jij" U~ Fnfi U(ftn lOOOOU)
"~1J~Jg 0
• ~~~M-m-.nr ~~)BtI
2.
• }[;M=~*~~11tit~
tJ:ff ~~
uLctm
99UL)
F(iln 1.234F)
• frq~1it.1~Hmm$51~M~*.
{9IJ~U'a'9Jt'A'
~f.t~~.
'¥M=~1f.j.jij"WI!PfffEPf11(lt.1m O~9, A""'-Z). iB ~J~U!JC~1TEp j*I¥J~1-t(m!~1T H r.t~ @*M~*1f1~~%=)~ PJ1JE[J¥1-1~m-:l:PJflgffi$~1 %~I~*({9I1W1'a')o &~;fIFom-t- JI.. jlHM~+ /\i£iliU-m:. jf R=I $iJl ~ iJl®=*. -tB f1J?,{?r~~1'-fro=~-;t.:
• 7·
$. BEL
Back~e
TAB
ftf
'\a'
7F
J;j".liitrtl+*i!~{i.
'\x07'
'\x08' '\x09' '\xOa'
'\b'
'\t'
LF(~Jj.f.f)
'\n'
'\v' '\C '\t'
VT rr
CR
'\XOb'
'\xOc' '\xOd'
h(\)fOi(! '11 ~-cr¥rq;$: ~il!EB ·~u Ef1&_~tI*1R 7t, I;J. ~tiD~fi~* ~ 16' -1' ~ 19JJfm, '\" ~ ··1'.'JI-,%f~. '\\'R:~1'"&~.:j.;tr~ BEL R:r-'1'-!lfilI¥(~N, ~1Bli+.m~YffiL~~jjfflVJ1{3*
a
!&1M~bttBF~o
1.4.4
~*~Q~..\t
f 1it.m 0, one_val JtJ!iIt f :iE itJ b'J.5!i 11u ~ ~ fJJ ~itt , 'W~~Jl :
~ f
zero_val ~.
-m.lt I ;
two_val~.
T 'M'.
iOC.dt~ ffE
#f startMm1u
10.
mmHI9fti~~=¥iOC{xJ.1O
1" nextl -jg 11. next2 -jg 12, next31u 13. ~;ijtffli;.
W~W~*~~~~~~~§tt~~~f'
~xa~#~~~~~.~~.
~~~Xft~m-1'"~*$«~~-1'"~;$:*.~.:
both_leds_on};
~m~~*~m~Q
PORTA=Oxl; leds=red_led_on;
1M ffl
PORTA
*~tt
leds, 7i:t#define
• 8·
~A.A c tii@~
AtmelAVR
13: -:fft'2:1fL2l.5}
!¥J11L:;kJ 2, both_leds_on l¥:Jili~ 30 BlJJ8~t£fj!_J¥tt}ij*f21Mti~~7'6=~&~(LED), ~~Ifj~W: I a1. tI:tJjf; *Oul±\ta 2 a1, ~;:T%~~ ;ttg5(tETf~U¥q::.8<J1j1;ji leds=red_led_on btPORTA=OX I 9!Mtlo #define £ f1Ji ~ ~ fj ff m4'- f1Ji!lt~nff~ ~~J::::f ~ ~ *t.t: ~J - $ 7}, {I::I £ E 1fJI~J m+ H:: c
1¥.!«L7'.1
I. green_led_on
;f¥-
i~ T
1.£ ~J tl~~
fYi: ~ ~~ff ~!:J ~ ~f. g ~f¥ ~ ~ 7} 7f 8'.)- --1'- ~ fi, ttiL!lt;FJl[ ~ff:(£ a
1.4.5
ff1it~~
auto" static ~ register. Auto(automatic)~lAA1-A.I¥J~~~,
~:l:RTFf!f:I:*t 3 f'ft#Mf~~:
mbl.
~ IIi ¥
auto
PJ gl,~'
815-
1. ~~~.
*~~~mo~~~~ma1,
auto int value _I;
~~~m!¥J~M~.t£~~~OOa1*~illfi~~~,
B~~~}ijagH~~~~~~WY,
~bI.~~~ffl~~~ff~*.~~~
.~. ~ji8<Jm~~~d~~o
@~~~8<J~.~~E~~T:
~~~~~~~~~~Am
2.
wt ~
7}DCc
~
D~~.
int value_I; f.ij $~•
-~.M~fflmm~Itt, ~~~.8<JmH::.~!¥J#Hm~~~a
3_
f1§ ~
m JE 5(t){J f£r • it}ij -WX;( -1' f§t~ tt Jt 1m I¥Jm ~ iJ] ~1),iEl tEit ftij fffiji ft ~ fA] ~ m-- &:: WImitt, 't lit fJ] Ml~ ~ • ill!~ ;UHi-Hlt. * 3f:l: 1~j~ EfJ ffi. ~ lEIill: • -ft E
.R. ~
I ~
~it}ij. R}ij~~M~~tt~I¥J.~o
register char value_3;
.~H~.
static int vaJue_2;
a.
~.~I¥J*.m~J
~~$t~ft
ilftE~*~rrM
fiij
~~,
••
1f~~I¥.!~~~
••
m~:
int x;
II II II
char y;
x=12;
y=fcharjx+S x=(int)y;
II x is converted to a character and then 3 is added, and the value is then placed into y Ily is extended up to an integer, and assigned
to x
+~t~~~. Jl: ~
Ildeclare z
~1.1I1~ En:Ritj:t:
Et~*'J'\. :ff1~Hi(y*1O)~-1-*:7if(8 til}*#;: )Eft:. 1.&tE:tttt_t 1¥1~*:mm ttl 1iiiifl[~ I¥.J t~- -1'-* 11EJ(;1l 255. JK~~~J~.1ffi z.Fc 1 I¥J~* 118(Ox76). rm::f~IE~Enm: 630(Ox276)o :tE;j(_m:(f<j~ -1-lffi"fj, ~w:RiJ..j9~ W:B1 16 118 ;miif~ Jll~)HW. f/,\J§fIf_f1l x ;fiI1Jn liJi"i z :mJJt1l:k 268. :iA~F.m~!
y
§~~:R9.t~~A;fi:i11~:iE.IM", '8;m~~
jElJ,
@§ffl.~~~~.*~~#~~*ff~~,
r-{{int)y"1O)+x;
~*~~nl¥JlJ*_~~~.
¥iI~IYJ-*tlTl¥1mpw~: ~ D!lJ¥j£1T1t.~~
a
c i!~I¥.J3{m-tt1lH';o ~a~¥*~*~otE_tID~M~*,
1~.*fti,.
B:m~f~ftz,.
tj,~:Rm~fFttl 1¥11N~tt~f§ff91~:tlt
'*~~fft:1JtfdUJE~1Iff.*1T~~,
~*~.x~6W~lE63.~~~£~.W.~~.~
~tr~~~~"
0
•• ~.~~#~lig
a
~~, '8mOOW~.A.ttl.fF~~M~~~
{4 *~~iK.Ltb~li1Jt! B1, iK~~~~;t #{tffl sfrb W sfrw ~~:R1ftr~*t1t4iJ1'-#tfY; n~~ 'fiB 1/0 12:1i-?tnc;f,-F~aftffJ¥.f~ 1.611~ii~iKJlli$~, ~mrOO~WJtffl lPf~fttT_n 1¥Jm~: T
#include <90s8535.h>
*~.C~~ m7~*ff~~~fl~~~~~~~.~®~W.~~tt--W~~% ••
liregister definition header file for an Atmel A T90s8535
• 10 ~
AVR
Iideclare z
ff~fU~ tJ A ~~lli~ D B (fl'11~f~~:I$]JJ A~, IiSi t.Ji1Jl:!;.fi~~;QHm~!t:Jtf4 90s853S.h ~~JE5L;fffi~(fl1J.it*~m;~g DDRx *HftJlJ7IU;1cJI;:~ tl x(rn ~:£Iftt]!;:Etr.J A, B ~)B1I1JJ~,@{l[JlJ Ttiii ttL ~m:frHH, JYT 1f 110 ~tl~v..JJ4UlJA. ~JIPt, DDRx *{f:tl(flfofi~lli:m~" m~. ~J¥93.ftH1JPI1f~~~{f[fflT tftrl:B:~e~~ DDRx ~ {YIJ~O:
8 {fl~m
Q 0
PIR)L:J;JXr.J-,%fBM*'J\~.,
l3ljJ9WO~-"---}
8 fl[
DDRB = Oxc3
JJ •
:. 0
~~~~-~mffi.
*~ B:ji iR
aJj ~ il;ft
~~~Z~*~~. ~*~
ttl. fi Il}jfi ~t~(fl)g
~it T ~-t-iEJJf{f
- gfl1l!ij T~:I:,
:I:~~~:rt ~ tE
dog==35;
val=dog;
dog=dog+Ox35 ; va1=(2"'(dog+OI72))+6;
y=(m*x)+b
B~~~~fi~~.*~*.~~~~ .• M.~ff~:.-noM~~~€.,
0
1:.f9rJ4'
y=(m*x)+b.
m~ x
5ti1Hli!. ?&Jff:f1fffi*~ga*fI}11nJ: b,
~M~I¥J
.§.M*~~~y.~M~*t~.~*.H~ft*~o*~~.~ft5tT.~~~~~m
• 11 •
1It~i6~:
y=m+x+b. [t:ij y=(m*x)+b:
M~~~m~~~~~~tt~*14~M«~g~~~*7AmEEl.*~.~n
R::-~ EEl
0
*
/ %
.~~*~g.~~~~g.m~~~€.~,~%.~lli.~~*#~
TILi~Jff.T
~
.7.*g.~~~m~.~*, ~~~~~~$~~~~.~,
§M~~.m~~.~
t'F ~
(char" int
r-r tJ;t. IT ~;:}j ~ ~!lJijj ~ T {~- g& Er'1 ti 11:: Ja !fum.f.f ~~i~ t.\ ~ f{~ Jet-I long ~M)®1tffl *- 1-5 ~J!««5tti}m~5~tH 7 tLig.r.L
N ~.
0
ft.
t;r:
"5
CI
Jf1!.&
« » &
A
lilt
;f:itt !:;r
ff~ E1
-e.~tt~.~l¥JfI:it~r
•
•
•
•
: lfR B~jE.~ T ~"Hi f{t&:{fl lfR & , liP ~ 0 ~ 7!J 1. M. I ~ 7i1 0 ffl f1:; ii: f$~. N m ¥.J ~ 11:: -e.=j~HM $li:# T- (~. iB:~~~ f{l¥J tL:i: ~ ~ Jm.ii;;fi 11:: Jill¥J" ~ -*.mJi:l¥Jo ~E.t£~ I'~" EE11t\;ffl~I.:*o li:#I w:;ffi~TX1tiitrO'@~ 2 ;;fi.g.~m*~.11::f{~~=*~~~.~f$~~~.~~~~R::.M~~~~~~ *mJi:~~~#lw~3T~~2.~;;fi#~.~T~f.f~~.~x~%~.~~~fl A ~ Ja] tE 1ff.f~II! 4' I¥J fq % t'l:( ii:it1 H<J ~~::g-:li ~1f~ w:)~-GjH~l'~ %:Jt JEft if % ~~.~f{~SM~~~~~~~~ff~#D~X~%~.~#". ~R::M~Jil.AO l§€.r.t~~t-~11::f{EmUl~~1 at. ~t6l!*~ 1 ~!il~.n={Efijj~Nl:1tliI¥J{f[/F[RJHf("-,~-t~ o. ~-~1g I). gal!;t:tJ 1 liJtJii. fq ~ Wi 1- W! t'F f{~ 1Sr J=J. ~ ~ -1'"~ 1. ;ft ji ~mt JIiJ I
• 12 •
IttA.it
c tII1if!ll1;i
Armel AVR
fEl i9:5E~~¥:r1
y=OxC9o
~
x
-y
~
x"=Ox36
x=y«3
x=Ox48 x=Oxoc
x=Ox09 x=OxC8 x=OxD9
x-=y»4
x=y&Ox3F X9'''1 ~IOxIO
#include <90s8535.h> unsigned char z; void main(void) { DDRB=Oxff; while(1) { z=PTNA&Ox6; POR TD=PORTB,Ox60; PORTB=PORTB&Oxfe;
Ilplus I to port B
~ft~ 0), 1Ifi • a<Jf3'L!l!IJ [u] 1 Htfj fJ~f1:(x faj I HHf -fJ!if1:~ x), J£:~. FJf1fI¥1fl[(:ijfd~~{fl ~ 11 Ef{J r p r~i] t'l~ M,)~1H~Ji ~ 0 T e W3 t'l ijij tJ ~ iM jiJ !j,1& ~:#. fT ~ J:J Er<J - -1'-!ll ~ 1'-V'l • f.§ /F 4? ~ Ilij i11'iffiI D B9Jt1m{fL, 1 (X til !_m PORTB i¥J ft ~tr it m EXi~jf:r1* fti?s 1'" tjfij r=l Ef{J ~ Ul ~ MJ. rm /f~~ ~ MId B9;1t 1mtL n 2 7xH:lf~ PORTB ~Jftli!Jrr_~7J-; T~n{DJiIlitm -1'- o 1111f ~iE.*~fqIij D (J{J-{![~{a; ~
~m~IE~l¥Jm~tt*o*~m.oo~~~$~:mo~~m.l¥Jmmff~.~~~om~~
7 JJf i!i:(masking)fll
J# i!i::&Jtl~IHjffiIE-=iit
<>
• 13 •
:i2$lf::€~~ ~ *~iEJnrt1~'IH!=Jtili~~,113 1:: i¥J~~.z.:h F * j.:(True). J*~ J.;i&(False): Jt fJTlf~~~illi*7J'. ~Ul*7F i!~~~ftll ~ ffl Kr;!iMmilJ t:p. '31!¥!¥~F¥!tl.1TihL;m m ffff 1N FA
0 0
1. ~$I~.~
*l~mMtt~mM7FT~.~.No
t-,l(AND} ~(OR)
&&
.11t: x=S.
(x&&y) (x&y)
y=2;
(xIIY)
(xly)
~*~j.:,
~*~fl.ffiltJm~
~:hWft-~tt~~~~F~i¥Jo
o,
111b(~~-"¥:)o
2.
*~~.f.1
~.~.w~m~~~tto~~~.~.m~-~
~~~~~~j.:,
&~~~.o~~~. ~*~.N.tt~Mm~*~~~*~~lli-~Jt~
~m
~EB~~"
"~~i¥J~~~*f~lli~.~~~?" "~ili~.W~~f~~+~lli~.%.~?"
1-8
t=
«:
<=
AT
>
>=
• 14·
fin: x=3,
y=5o
(x=y}
(x!=y) (x:<y) (x-c=y) (x--y) (x-=y)
Jt
~
..
~
1N '1M
1.6.3
iS~.~"
~ 11&lE.r.f~n~
~ff]~
C*~~.~~aSffff~*m~.~~. ~~mm~•.~~~.~~m~~~~%'=,~.
~~%'=~~ *~jt1HlE.r.r
fr
Mi1i
c itf~Et-JltM,
f.11f c
*1§~ff~1f1iiiaffija)Hiifr
*Jntii~.~
·~JH:;iJHG:ili~%'=l§JiiZ'11AJU
1. 1S±I~.f.1
~m~~N~.&~m~. ftm$~d~~~~~~, ~~
x=x+1
++x;
Ilpre-increment
operation
x++;
lipost-increment
operation
ili~~~e<J.
~*ZA~tr*~~.
{9Ij:Wl r
i=l ; k=2*i++; i=I, k=2·++i;
;li~IIh:., ~2:i1~WEn~lij
l/at completion,
Ilat completion
ft:1~1 ~t.(£
2. ~
r, i Jt~
;J:IHW, N;UQ
1~
i *110 1
¥}fnffi*" 2
l1iitiE.f.I
~.~.R~~*~.n~M
.• tl-~.l.~. ~n~~~fn€~.~:
• 15·
j-; Ilj~j~ Ilj=j-l I
+i;
3. 1!*MfiiE.f";1
Jr. f.f
~.*~.~~~~g.~*~~~~~M~~~~~. ~m$~~LffR~~~~~§~~
0
~~~~m.~~~~~~~~fi~~~~~*~.~~~#E*~Bm~~~.~(=
~J:ruJ ~
a+=3; b - =2; c·=5; d/=a; lIa~a+3
IIb=b - 2
IIc=c:t.5
IId=d/a
al=3; b&=2;
c"=5;
PROTC&=3;
flail of the bits except the lower 2 to 0 !Iand leaving the tower 2 bits unaffected
*#.~~~~~.~~~.~#m~~.~~~~~~m~H~~T~~n~~ m
!t{(ltf
*~it
~tHR·1tt it:A ~
expression_A ? expressionBiexpression
C:
Jj,_t_ifW-~%.it, W~tt7tit.~~~~~ expression __ : :ruJ*~*it:Jt1J •• A ~Jt:A expressionB, =a!ll.HtJ.tT~~A expressionC, ~~~~. *#~~~~~d~~~mJt:
(x<5) ? y-l .y=O;
!J!O~1T
~A;;t
c ~~£j
Atmel AVR
1.6.5
~.f.1ij[;:$t~
~-~*~~~$~.~~~. ~.n~re~g.~7.~.~.~~*fi*~~~~a
5~ ill 7 ~t.b. ftC M.;tr:~;;fi P1 M.;;fi ~lC)a1~
~wm~.~#~&~.~&~~.~~tt~.~~~oo~m~-~~.nA~ffi~~tt~g~
fn ~1t~W
11l~J¥
Q
(Grouping)EiJG
.X:lf*( association)
t&
~!W
O·[]-> ! ~ - (type) ·/%
-- Ji;~~r.r
.. [j~jfr.r j
~*~grt
l(lR~~J.U
2
•
>=-
f:1
- sizeof
ill te
M1.i.¥.ki
M1i¥.ti
"
* & ++ -
3
4
fttLiEfl-rt
w.*:@~n
Lt~~"rt
+«
<
M1i.~t; JAft~;t1
» <=
!=
>
5
6 7
M1r.~'#
Mtr..¥ki
Mli.3I;b·
-&
A
8 9 10
II 12 13 14(:fN: 1t£~
M.1i.?f.ki
}Air "!f:.{1·
tL@JH7
.i!$j~jfr.t
~.J6~:n.
*:1tf: @.~ :ro:
~{j[ili.~
I && II
1:
M.1L~b· Mli..J£ki
M1r..?f.1i
JAfi;PJr.
+ = - = /= *= %= « = »~ &=
1=
Mki~ti
~~.t:1¥.t7± 1.9 ~11l 1.10 ·-PY·rirm, '@1i5:ii;.$:iE·:Jfrf. :tm BlE.1-1(.), lim~ ([1). lf~-rBj~;E.W(-». ~ffJ.m*mlJ~;f$iJ~1\IFrJi1Hl1{~,m, 1Y~~U~~7L~P.1~«J7t* iE§ m fir tt .i5 jJ ~ 1OrBJti} ~:.: ~ ~ • ~p Itt pg~(*) g Jf.1'B= 11l1(vJfuhl(&)€. f..f T lID~ JF'WIJ:f:ij- m WJ fg; £ ttJ :ttIHlI!.M tJ- .L P3 !fJ.: y=3+2*4; Ilwouid yield y= 11 because the * is higher
:RIP (J<] ...
0
IJin precedence
Ilwould yield y=20 because the Ilhighest priority and force the y=4»2*3; y=2*J»4; Ilwould yield y=4»6 Ilwouid yield y=6»4
0 are
the
+ to be done first.
because the
* is higher
Ilin priority than the shift right operation. due to the precedence
£j ~
w. ~ ~
;flH!J.: :flu
ffiftffiMm(J<]~~~~o$*~M~~~~~~~~*~,
*If~~, lllUftffl
of the
* operator.
~~~*~~~.fi.
tiS -'5
*liffi
f!?J& ~ it.
~R~.~
• 17·
iftiUffl*~#llIffiI¥JMi*1t\1T~ tB I¥Jfij~tifi;z. while , do/while ~ for iaiUifL*f2ifjtlm~JREt-J:m:~ switch/case *iUffl-Tfti't-ffl.Jf!.-I¥J~JItJTt1. -#ffl<atJi ~ W¥sf(~1J~$~rFw.m'1l ~W~ -t- -arti~ !¥J:m~~Z -
if/else
<>
1.7.1
while
while
ii] 1¥J~rt.Wlr:
{
._~*1¥1f2 mu 7t ~ Z.-
~ while ift
statements;
}
~ ;fi~ l¥11t\lf j£ A
while
*~*iis it:fJ
;f{( ~F~).
.ooIJ fA
!l!1j::;r;:1ifi~m~. ~ uffflf"
tnt~lHl~i~
while
void main(void)
{
char c=O;
c;
printf("Start while(c<100) {
of program
\nil);
I 00 then ...
printf("c=%d\n"
c++;
} printf("End while(l) of program\n");
Ilincrement
• 18 •
tP:AA
5t. c 1t?t-mtzft1t~ o. if rf1l±1¥:r-J Start of programo ~mt*t.:fJ while mI:£f, c 111»' 0 ~ 99, ~iJ;:1Jo 1, :1tiTfp c t8-fil. 3 C fR:I:t1JJn¥U 1Pf. EBr/FW'J\r too. fmIftili!fL toO H EIJ~ rq: ffi End of program ~ J1t tE while(l )iB-1:iJ _tliw X ~~ lit ~ffl'
~i§IJ
a
+.
Me I!I~ 1 J!ffii~*ffit8~J<5:~. #,fiJi::---r1ir.(l ,~,J!~~~~, ~J1t~~~.),~~~~ •. m~M~t~MIf~~~m+,m~~~~~~-~~.,m~ ---1r:ii! 1T'F 13: ~ 1=Eit1'- #11 LfJ. whi leel)jj II ~ ±t!!t*t.1TM;£F W ll:~J¥ I¥J t*t.1f. ]A it ~:II:if. r 7£ W ::t:t*t.t7 ~ f!iYf: ~~l' # tE I¥J fi: ~ ~ liillJtittiUtE while mJIfF*3 printfOffil2:~1Efrif~~. c ~~~~~~ i!-2:V~£.3li!~.
while(1)iftiOiY-Jffffl+%lJ_§
o
~~~OO#WA~C*~.~:if.~~mm~.R~~.~~~~~.~
while
while(1)
tEJS:1'-iJlJ rep,
~~"{j.J.),
while
~Ra~]A_DA~ili~.m~~*~.~~,~~~mm~~To~~-~~IIJt.~M.
&: IHt,ijO ~
m UfiJfr-1[t*t.trWi~,
HifJ~-~.tL~-fil~J.I O~ rrf§OO, ~f(]¥.fin1t±t!!9ium, it~;ttJ ~ H::;r:"* ~ Er'..r, fA it~ while I.RiJJ i¥J j£ ~ fiihi ~
1.7.2
do/while f/Nq\
mPF!:§ while 11SIf~~1it~1gJ.~IRt.iUfE-:r do/while ~t:ij~5ttt.trml;q::Fn*~ltfTo HPmltf: P>J (f.Ji~HD3§:1>ttl1T-ZX, ~)§ ;S}~JtElTJ!~~fH~m;f1~ ffiJtE while ~~Jq:., Ji::tE~i1\1tJ.1TmlfI¥J fEj~l1U5t*{f*UWiQ do/while I¥J:1BARor:
do/while
0
~th.fffU
l!=Illl1do/while
E!1W m~fI:lff~mlIf-!BM!zJ§
do/while
• 19·
void main(void) {
char
c=O;
c;
printfl:"Start do
of program \n");
printf("c=o/od\n" ,(int)c);
c++;
}while(c<IOO); printft'End while(1) } ofprogram\n");
o.
~ € ttl. i do/while f
1m if,
1.7.3
for
8$
.~B1tt1.tr~iX; Amfl(£ T.
exprl
~.-m:~1:i]. nrtlfflT~~1t*
1* expr2
..
expr2
m *-tkJEJ!:a~~trilt" expr3 -tlt~.-m: iit~, m *nJj,@ *ft exprz , ~;m~I¥J$b.tri!A for fI~~J]I!i$~, tb.ff exprl , t'!.lm:f>t4kf4 expr2 :i!rr3jt-m:, tmJ!t6* J!4k1tf:rlifi~~~.
for.~~
~ttl.ifJtl1ii~t6f4J~~$I1t. ~tr expr3, for qm;q:I¥JJ]I!$,pj:-iX*,J~ exprZ. Yu*~ expr2 ~1i11l. Jj!~~fffllt. :amo~~ : ttl.fflt€~iB-~. For 1iJfa<Jtaf4Jffl hile fI~~7J"mIr: w
~ift~-·- ;mJ¥~mtE.lf~
(I
expr3; }
rrm~-~f~ff:
#lnclllde <stdio.h> void main(void) char c=O; printf{"Start of program m"); llif c less than I 00 then ... for( c=O;c< I OO;c++) c;
,(int)c);
Ilprint c's value each time through the loop Ilc++ is executed before the loop returns to the top sit here ... lIindicate that the program is finished
of program\n");
tt1t;tr£P~:N* Start of program. ~r*5t:l;: c wMiitjg o. 1Atf for 1i.f1-. c b\ 0 mlX;t!Dr/l ~:tIflJ 99. #fE~!¥Jffl1T6f1 tIl7tL ~ c .mbllflJ 100. ::f'fI}/J'\f 100 at, ~:ii for im.f1-o :JT6f1*,M:fi End of program. :m.J¥l!.:ii while(l}iH1:i]XItll~~o
:tE*{fIl~.
1.7.4
if/else ~1JJ
if/else
*~~m~ftfmtv
EfJ*m~ W:*~~:!'J.\1j~1X
1. if lifO
ifiH~%j\;~Or:
if(expression) { statement I; statement2; } if{ expression) statement;
1mW:if j§'Ef.J=«it~;:Jg.(~F.),
_ma,m~~Fo
• 21 •
(t(JiTt1ij~iS1=U ~
2. if/else
l!-1:il
'==i else
miU;ffi
~B9~iUd.~*a~*fI{~~~M1;.~~.~~~~~o -~cl~miU~~~-~ff*iU~Z~~o
._-#?t ~ l¥Jf;;tijfj!tiPjWt~fJ1I&(
if(exprl) statement I; else if ( expr2) statement2; else if (exprJ) statement3 ; else if(expr4) statement4;
if/else iS~,
~J&~:f¥~:
i3:~ if/else miUJ¥:Y~7!.~:f.J~tkfJ-*m~ :tm*~ 1 1--~:i;5:rt exprl 7'-3., !i!IJf.b.1TffliU statementl , ;1t-~mHtAg.o :tm* expr2 jJ.{Jl • .!I!tl~rrmiU statement2, 1t;}t$7t,m~. 1&:Jlt ~ =HE, .un expr 1. exprz, expr3 ttl 1; 1N 9!IJ statemente , ~lf
0
.Ai\; c ~~!:j
foqc=O;c<lOO;c++)
{ if(c<:33) printt{"O<c<3 3 PO); else if((c>32)&&(c<66)) printf("33<c<66"); else printf("66<c<
Atmel AVR
Iluse iflelse
100");
I/print c's value each time Iithrough the loop
printf{"c=%d\n",(int)c);
printf("End while(l)
of programxn");
is finished
tt~o
:t£*lJIJ ~. 1ti5t1J fIJ l±lx**r.1 $: Start of program , 11€w c tE for tfj;Ef~it RWlfflJ"trtiit'j;] o, ?&€1'h.1Tfor ~;Ef. 1t for -Mltgafl;Jt*Jc JA 0 -#(ti::if1Jn I EIf~ 99. #1«l.x1TflJlt;{l. ~ c Ul'J'-J- 33!J1, 1TfiJX*¥r.f$ O<c<33; ~ c 1R:tE 34 ~ 65 z.rBJ!f1. 1T~;t*~~:tl 33<c<66; :PJl;!;f! c {i~:tE.l:~ffi:mJ ~ 1T~X*~~$: 66<C<100~ ~ c ij:f;!Jj]jUIOO Irt, for mllftlt51L 1J£pj[**r.f$ End of program, ~1¥;i1tAX~~M'
I
~ m,m*~~ i$dfLB''1~~
#include <90s8535.h> #define testport void main(void) {
~M§~M~~fl;J~~tt*,
m~~.-~~1¥. m~~.~.~*A.D~.-Q*1T
0
llregister
definition
PORTA
bit mask= 1·
Ilvariables
for( cnt=O; cnt<8 ;cnt+-l-) { lithe instructions if(test_prot else printf("Bit %d low .\n".(int)cnt);
&
printf("Bit
• 23 •
while(l )
*19IJitffl7 8 ~#iPF!¥J for 1t§PF. lij;-{rr~l&ti):~ W:W bit_mask !¥J«I.M. fftra. ,Eij 1 ~m~.7~~~~m~*oox~mo,Eij~m~~. ~~m.~Mm~.-m~~~~-m~ {ffij;-~mlPFM Ia]. if/else MJ:ii~,Eij ~-m I¥J if iffI~~ {£ if ~:ii* aq *{4~1t] J!-1'*n~
0 ~. 0
~~~~~~.
~~~~~ffl~w~g.m~~~~!¥J~o
3. ~#~;l.t:it
if/else
if (expression_A)
statement 1;
else
statemenrZ;
expression_A
?statementl
:statement2;
tE 1»._tp;§#%~9=J
~ !J!1j~tT
statement2
0
filHtX>tj£.~~:a:;
expression_A
*m.
Prl*«I~ ••
fJtfl"
steternent l ,
-~~~~.
(x<5)?y=J
*#~it:~~~~~~m~:
: y=0: II if x is less than 5,then y=l,else
y=D
fff1lJ,Eij T;f:fl!@i£~J:\';~«I*~;jf~tr-*m1t]BJ<~mitt1t]
m~~~:
switch( expression) case const I: statement I; statement2; case const2; statement3; statement4; case constx; statementfi;
• 24 •
statemente; default: statement7; statement8;
*AA. c !IJ~~
Atmel AVR
~itA
expression
ff.J{i~m-.(constl
1b.:fT~itAEt9m.lll[!;; ~
*iU$:t£~-t-~iU*Etq* #f:MJJ8!ftt!'
0
mil] ~
i:ij" ilt ~,
mR:: £~~-1£&1f
#fti/Hl1.~mtt£
switch
~ Ic ~.tJ1~~1b.tr~J*~
#include <stdio.h> #include <90s8535.h> Ilregister definition header file for an Atmel AT90s8535
void main(void)
{ unsigned char c; while(l) { c=PINA & Oxf; switch(c) case '0'; Ilread the lower nibble of port A
printfi" c is a 5 m");
M:~~")tm;~ilifittl
2 pJ; 3. }j~ ~
X 4=:=r 1'1 ~
c is a 5;
tI:1X:;$:?lff*
*:::[:11*
7f~Mj[~
jzp*f:~.f'~~iti3:JI:I:;(£ QX;jcT 4.
.§.:tt1.tTT:@:¥3B'.; case
iB-t=I].
JJ!~1Jt:ff default
*"
0.. 1~ 5
I
!ftW
it}il].
fiNt±:Ix
~€
c is 4 or is >50 -
~J¥~:i5@}fU
while ~:tt:tf'JJJi!tfII,
·25·
1.7.6
i~1:iJ
while, do/while 5fJt switch
break,
*~t& for,
m1i]t¥JtJ:t.1J'
1. break break
i~1iJ
e
ittiUJ::fBI~:JA for, while .. do/while ~ switch ii-t]q:rilltl:l tIlJ5J!j.3:Jl:hi~iU.~tEJt:ftE.* iD ~ W , Jj~~ break ijfiU ~ 7tJA E ~ lWEB*iO:I}( q:r~ ill ~ ~W~ft~#c~mtr~~~m.ili&4,cm~~~JAO.m~IOO.~~.m~~~~ OQ t'£~ while :f}iIT-~, c ~mJ~ 101, r&RitA1T breakiil:V. :iHlli~m while:f}ilf, ~~tA1T9r Ji!: while fJelf tE7H~ while :flIT- I.{-I, c?Bi:19:j;J 0, X:~ §J ¥~rJ-J fJilf ~~#Jj(;@& JHMIf ~
0 0
*"
#include
<stdio.h>
break;
++c; printf("c=o/od\n" ,e); } c=O; } }
Jlclear c and then things will begin again. Ilprinting the values O~ lOO,O~ 100,etc ..
2. continue i8-i:3J
continue it ilf ~F¥.!IT tf!lit:i1t 11" -".. :(.x while, do/while !!X; for *iiJ T fJe;Ef. continue {E ~ iftiU .1l::fIlfijf1U ~~tT1JW ~ break If 8.~M ~l~jjlJtE ~ continue i~i[JIm MJ].!$7fMifJe ~, ji'jj break ~iV1G~:iHllittIf<>
#include <stdio.h>
void main(void)
{ int c; while( I) {
·26·
c=O;
*A7t c f1i1i!§
Atmel AVR
while(l)
{ if(c> 100)
the
~U17 i!tt~*iU.fll
3. goto ~1:i]
~*~~,cm~B~W*,
printf()it:t1iJ
0
.~100o~~,fi~~.~~,~~~~m~~8~R~~
~o*~m~*.~~~~~~ffI.~~*«~~~~~, #~ff~*~.~~~~~
A~
~~
m Ij,~
goto
iB~!¥-J lW
~1!f
goto identifier;
#include <stdio.h>
void main(void) {
start again:
c=O;
d= - I; while( I)
(
if(d=~)
goto start_ again; II(stuck? bail out !)
++c; printf'('c:%d\n",c); } }
tE WrJ ~. c lDd 1JJ~ {t 1.:1 ::f ~ I¥J Ui if (d==c )itH=i] ID!~~ 3l::2: i¥.J iR • ,R ~ ~ ttl~ • ~ .I; t@: ttl.fi-itiiiJ d=c, tmJl c +T~T 100. fJ;r.,-fr c j,i:Lj 1 l¥Jit!fF. WtrtB c 'IA. 1!fn3£1t while 1fj~Q c lDd egiR~][ffi& I llflJ C 'lAAT IOOe § C ~T 101 aj. continue i~HtI~;rE"I~++c lDprint£() i~ii]. :tm:!il! if(d:;;;;=c)~., pij'IAttl~~1f goto i~1ij. ffF¥WttW¥~ start_again t;F~., !a:!il!1.:I-j§
0
R-j§~t.H~ilic~.,
MO~l00~
M1:ti~1JIJIji~:AM:St
*W*~~~~§l¥Jm-M~.
.~~~~~~*~.~-~~.~*[email protected].
*1.:IM*~~~§.,A~~~~~: • ttim~~~*ot~JfjijT"VL~jHr~demI¥Hf" (w:lttt: ~OZ1BT:?tJJemfi-ff*fF, :ltW- itffiiiJ\.tI D) • 1!irtP f0 Jf Jt§ I'm jij f'Z 1::~1'-~ ~ T ~:lz: ::::ytl % 00 • p;J :Yt 1T jij t~lJ'm~:tE "l$ #J "
m*~~ml.m~~~~o~~~T-~~.i¥.J~~:
mf.l:*
rr.(Lemon)~"f.1t(Cherry)
*~ ~*~ ifi
JJ'{§IJft~t:p7J"1[7
while,
£i!$Jifr~a<J1tm.
IlPhase 1....
#include <9058515 .h> #define xtal 4000000L #detine baud 9600 #include <stdio.h> I· processor specific infonnation*1
[Hz]./
*1
iitA~ c ~f]1~
char seed; count; delay;
Atmel AVR
char
int
void main(void)
{ PORTA DORA DORB
= = =
OxFF;
// Initialize the 1/0 ports // port A all inputs II port B.I is an output (light)
OxOO:
OxOO;
DDRB =Ox02;
/1
11 II
UBRR""xtallI 6lbaud-l ;
while(l) { II do forever.. II Wait for a button and II let the counter roll over and
while(PINA.O)
seed++;
= third
seed; II preload the columns II mix up the numbers II while waiting for button release.
do
{ first third
1\""
seed» seed»3;
I;
II Exclusive
second== seed»2;
A=
II can really stir up the numbers. II keep rolling over the seed pattern
seed++; } while(PINA.O
is pressed
for( count=Ojcount-cf
;count++)
off..
• 29·
Ilshow values ..
IIThree "Cherries" 3»
IIOne "Cherry"
II (second=vS) JI (third
out:One Dime\n");
1.8
~4t.
mB~m~*OO-#M.,~~~~~~$*~fflo~~m~~~.~X~~~~dMfi~
~$
&~{tffl .. ~.OO-~~~~~.£~~~~~OO~.,
ffi~ffl**-~Ww~~~~~*~~~~*~$*o~#~~~~~~~~~~~~.
~~~.~§OO&~7.fiM2~ff*.~
.• M~~tt,
.~~*~~~*~.~m~.~.~&~~.~ •• ,~~~~§m;g~ft.~~
{13~!§{JlRff~~o
sleept) ;
out
printf{"this
is a parameter
c=getchan);
Ilgetehar will return a value from the standard input
lI*Ait
staternentx; }
tii~~
Atmel AVR
-1" -t f
fI}
fEr.oo~m~.tim~~.oo~~~~,~~m,*Mmdn~~,&~:tJ~.whl~mo void ~~£-#fi~l¥J~m, Jij·f-maA~~9JG.~@Jtil:tJ~::k+(zero size) flJ~l¥Jlt1A~~A1~ Jiff t:), ~-1'"A :~Hr.J I! f( Il)HJfF : PF
0
*Ii1~
@J -
getchar()
1.8.1
Mi~~Jl i?i§~Hltq
*~~f(~.~.-~*M~~~o~~~~~~~ffl&~.~~~m~m
of global variable would be first
•.
&~._
int varl,var2,var3;
Iideclaration
int functionl(jnt }
void function2(void) {
w~~w~~~~m~~oom~*~oo~~~.a
~JM~D
M.~rum~~~~.~M.~~~~~~~ili~BOO~~~M*.
,-
~&T~m~T.~
void main(void)
{
IImain
Ildeclaration offunctions here now generate a II"Function Redefined Error" int function 1(int x,int y)
{
void function2(void)
{ }
,@_o
~.~~~5tmT~~~~~~~
tAiliW~iitfl mainOmB
'tJiJijffl i¥J
• 32·
void function2(void) {
{b;Aj\
c iillll=;i
Atmel AVR
W!2J. R~fF Lj-r ftffl:iZ Jlli &: ;tt 9:1filename.h ~ i:'!--;g- 7 [:$ ~ ~ ()<J ~ 19. ~ ~J X 1tt- Htr jjf 00 -T!--f it fflT printf() 8EJ ~, ~ 1JIJ 1*~ • -*:!Jr.tf jJJJ!l1:: F IW, {S B 001*~ a fk x 14 stdio.h t:p :is: 1$ PI1~~~ffft! PI~ a ~ff!¥J Jf !J..1:!1 115 ~
include<fitename.ht=ijl-til.
0 j 0
~~, ~~=a*.~.~~fi~~~.m~~.OOm4.n~~~~~00~.~.~~
~I.
0
X#.~~HM.~~~~~Q.~$~~~m~At:p~fiT~~a
1.8.2
fi§~~
@Jill
lIz is modified
~.
return
~$t£~.IflEr'~*~o
:tmJJ!~ return
f7~!m:
z=x+y;
return
return (v*v*v);
ffi~~~~m~~~~~*~~~-.*,
void main(void) {
~:tmft~W()<J.m~ff~o
~t
#:i ~PPr:
1.8.3 JiV=l~f&
-~.~~~~~~~~*~*o~~:
:
ff ~ ..t ~ 3R ~ 1 li~ 7F
#include <stdio.h> int fact(int n) { jf{n=O) return 1; else
n!=n*(n-l)*(n-2) ..*2*1
n!=n*(n-l)!'
J3fT12J,Ui{7J\~!I~(t:rfifftmr:
by
Ilotherwise
Ilcompute
5! .recursively
WAA
while(J)
ttiJ.IJfDt*~ -tx, n I¥-J-mmt~ 1 n ~T 0 at. PR~l':P}iffijffl*~. rm J!~fjj]ffi 1 ~ff!J1f51 ~~1'-~@}Eru ~**~m~t.!tJti.Ei@1, JA ffij ~ fJ:~:i!& @] t~maim) tb. rr I¥J ffl. tE maim) fll ~ ~p En j&. 1m~ ~ iJliJ rr
~ ~!~
fact01Bt~~
n if.!Iffl Bj.
'Bi,ij)ffl{j;: *!it n - 1
a
Mfi4='
ffl
JljEru~. ~ a-wrwtl4='1115:
(passed parameter) address
Total
int n return
2 bytes
2 bytes
return value
2 bytes
6 bytes, per recursion .minimum
~~._~.m.
0
X>jTi'~Jt § i9)~ :&l:m.Er~Jf1t. ¥fiti·rtf'ij1'-~I~, ~ .±mrlf7tfM:~ IJ\BtIf"\W#C*{!~~£ ~ -ar~tEo ~7C$*~it.*ftIII1iA$%~~AiIJfElflq:.~!)!, ~m. T mainOffi~*{t;tt~Eb 'ri switch/case i~1:U~ffl-f+t$.1m7F
0
II
II
1/
1/ Phase 2..
/* processor
specific information *1
tt Number
to
char
int
delay;
#define JACKPOT #define DIME #define NICKEL #define ZERO void flash { for(count { for(delay PORTB.l
=
payouts */
2
I
*1
1* readable to humans ·1
o
n)
/I flash the lights a number
Iightsfchar
of times
0; count «: n; count++)
= 0;
1;
if((first = 3) && (second = 3) && (third = 3» return JACKPOT; else if(first else if(first else return ZERO; 1/ otherwise - you lose .. return DIME;
=
II if all "cherries" ..
= 3»)
= 3) U (second = 3) II (third
return NICKEL;
void main(void) { int i; PORTA = OxFF; II declare a local variable for temporary II Initialize the 1/0 ports II port A all inputs use ..
DDRA=OxOOj DDRB
=
OxOO;
DDRB =Ox02; II 1/ /I Initialize the UART control register RX & TX enabled. 8 data bits UCR~x18; initialize the UART's baud rate UBRR=xtaIl16!baud-l;
~A:tt c ~~q
whlle(1) { while(PINA.O) seed++; 1/ do forever ..
Atmel AVR
II Wait for a button and /1 let the counter roll over and II over to form a seed.
"= seed»
A=
I;
second== seed»2; seedcc-J; seed++; } while(PINA.O flash _lights(S)~ first third &= 3;
II keep rolling over the seed pattern = 0); 1/ while the button is pressed
/1 flash the lights 5 limes .. II limit number to values from 0 to 3
second &=- 3;
prin t f(" - > 0/1><1. o/o.d , o/od < - \0", firest, second, thi rd); II determine a payout ..
i = get_payout();
switch(i) { case ZERO: printt{"Paid break; out: ZERO\n"); II now print the payout results
case
break;
case DIME: printf("Paid break; JACKPOT: printf("Paid break; out: JACKPOT!!\n"); out: One Dirne\n");
Case
} }
1~tt ~ ~Jl1'£ c :fD q:.:ff tf i: rz a9 @EJH. IN 'B iiJ it.itl±.J¥:tkif J!~!fX it I¥J5I!:flf 3ti~ I¥J J.J ~~o~*~~~~~~~%~~Mm#~~m*~n~~~~~~~~~, ~~$#M#~ M*~.m~m~~~B~~ili~m~*.~.~*m,
1.9.1
**
*'
mfl'
m~.~.~g~*n*o
0
*fp;
mtt•• ~3M~.OOm.~hlo~~-~Arul¥J~~ ~Ba9#.ft*re~~.M~~16Q~ m~~.gl¥J~~~M~, m~~nOOm#&:;Yg16~ 1¥J{l, ~tf~r1=*~ Rlf 8-fiL -g~~7mtt. ~~~~mttmm~~~:I:~:bl:. ~~~~.~m*~~.$~m~:bl: ~~~~~Wo.~hlill.N~)U.~.~hl.~~:bl:~~.N#~m#.~mtt~mo~. 'J I ffl ~.r1=(*)~13m~f~ rtJ ftJ~:bl:e\J#IJ:(Zo: ~ ':f!f
0
~~~~~~*~~.~oo~~,
p ~tr9~hl~~J~,
t?\)§)1iUl~5e:l: b,
b=.a,
char a.b;
p=&aj
"'p=b;
W*A~
c iJij;ffi!:~
Atmel AVR
ft~ff~.~ffap~~~~_M~~~.b~m.~~~~ffi~~~*a=b~~~~M i!®~f'FIM. &3t¥-i;:r1M: b ~M-mt.J p mf~~ a<J{Il(~ ~); p _MtllPJ a l¥J:l1hhl.. i!f=f1fM
Fiji!kAEjl~ £ EtJw=~:
b=p ; p=a ; /I b will be assigned a value of p, an address. not what p points to.
~OOEtJ~.M-m*~~~~~~~~,
~ 'J I/tQ §
faj
ffir!.
~~£.m• • ~M*o~*~~h~
0
taft:iE# ijj fr:ij ¥ ~ r.f-J EtJ r ~ 12: -i- ( bt tltl~ A~ ill ~ £-7
{frEtJ*ff~ D~ili{f[_TH~:B~
ildedare out_port Ilassign out_port as a pointer
D) rmfJt
*1ft!
•• tt~.
TIM • if]1f --1'- 8
OxAAo fijf¥i£
PJm~t.J:
iffiirM¥k*out_port
./F~':tIJt§m~L~p~
int "'pi; int "'*p2;
~C*~M~~.~1fm~mff~m#~~~~,MT~#~~~~
a
'WlJWl:
•• ~*~~~;R
Ilpl is a pointer to an integer IIp2 is a pointer .to a pointer to an integer IIp3 is a pointer .to a pointer, lito an integer to a pointer
int
>I:"p3;
int iJ; pl=&i; p2=π p3:&p2; Ilpl is assigned that address ofi IIp2 is now pointing to the pointer to i IIp3 is pointing to the pointer that is pointingtoi Iitherefor, Ilj is assigned the value pointed to by the value Ilpointed to by the value pointed to by p3
j=i;
Ilanyquestion??
~fmft~a~~~hl1f~.
:l1h~JE.1M
I
~* Hm
~~~.tlm~l¥Jm+*.~,.~~i&~#
••
~mff
int *ptr;
long *lptl";
ptr=ptr+l;
lptr=lptr+I ;
IImove the pointer to the next long integer 11(4 bytes away)
~ § ±I-1'-{trif.
0
¥11.
ffij Iptr;f$i9J 4
~11. ;is:~~tJ't:;ifJ_,g
§ ~~
ptr+ +;
Ilmove the pointer to the next integer location 11(2 bytes away)
-lptr;
to
ttl j; fa] fj€ iJ Im.@ .rf(*)l0 ltJjfu iLI:;E~ f{j( &)~}! ftiE. Vi. A fl:ll i@i tt Jt 1JLE ffltE~ ~
p .and then
c=*++p;
c=(.p)++;
IJassign c the value pointed to by p .and then //increment the value pointed to by p leaving lIthe value ofp untouched
jg @] ~
ffi .m~ § ftJtl return rl iM itH=a ~ _R W~:lS ]-1'-il. Yo @ !J!IJft.lflt!l!!~§]llftjJQEtJUlg Jy~"FOO~ swap20fli~:
0
~* ~
• a, int *b)
{
int temp;
temp=sb; *b=.a;
IJplace value pointed to by b into temp IImove the value pointed by a into location
ilXAA:
/1 pointed to by b
c f:i~_bj
Atmel AVR
ta=temp;
}
*~~~~.~~a~b~ili.
int v l , v2 ;
swap2(&vl, &v2) ;
~m~.~.Mm~~.~m#. ~~:
IJpass [he addresses of v l and v2
ffJ1mr:
~ swap20 PJ§ 1& 1t m J f{(ii I¥J ft!!:I1t, 1l ~ 3Z~ jtJt VI f:O V2 i¥J U1 {~;ii ft 6'1:l:1~!l 1It if m, tE *jf- ffF.~ ~ Ea It(1m scanf()) qJ it!. ~ is: ff: H: stdio. h q..l JE 5( ~ scanfl) ~ ~ it ilf JA fi'F iff. ~ AI~~ I2J.mA{tErJ1rj:titL&~ t-*~, Tf~:tETffttH.:p t~JEBtlt'lll ~ M scanfO~ ~~$l.~~
~r~
0
int x,
.z;
~~~w~km~.m.3.d~~Ao
1.9.2
;JS:- scanf()~ •
.#J JA;f*fl!ftWA'f!~!&
~+i!ffltJ~~til.
#~A~.
x , y;fP z Ip
scanfO
flm
0 ~
~~~-n, R~MffiBm~Bm~.~+.:
int digits] I0]; char str[20] ;
~1l d!lj ~ F
1ft.g£~
str[O],
str(l
J.
5E>(F' H_ij -fiT ldl'ELti51JJtmft l£~Jtltm.:p. M~1tiil~$:H:f~1UF~-ff:~:H.!K~r:p, .(E maim) fEI~~iTij'UM ruiJjU~~T-Et'.f~m t:p jft.~f!lJJ~~IDJ, JtU1iiT~ffTf~ft.r::p, l1 iH~' RAM ~ #~r8J iffl RAM Tffltj~:t£~11$tl~~~"~tt~/j,. - ---t-AtrHt~WM1f-t~m4?tm-F JiJT7i\:
0 Q
lItHt
array[O]=12.
C @ -¥3-:f: ~
~~~~~~~~ffi~~~~oM~
array(3]=56 .. array[4];;;;94.,
I
·41 •
?J&!1lff.1m?tff-1m~"P i¥Ji!:ttff.fitl.!¥Jl; ~
'1f ~:fff~i(!j[;, j'8.J§it1{'{ft i:J INil 6 _t ~}1(~ 13 _t1¥J1t~~ tE~-t-ff.11tif!7CI¥J~1@~Jtre1tI~
~~~~-f$. &:,~j!IJ'Jt.'~
digits[5]ti*~1£9!l_I~tfiltA~~llm
Itllltm 2 iT ~ t\,~~~itjl:Jm~it;1{'{,*
numb.
.1t~~
{13~lli:tJt~a:eg~*~
nz:.
-t-~
T ±mhl~'1I(!!giLI:'1l fflff-1mi(!ft).
~m.m~m~M*~~m~~:
~m~ff-
••
~*~7~~~~l¥Jg.,
:(£~.ff,j* ~,
C
WmffR*~ W~
~W~ §i9Jftffl~!¥J
~Mn. d~$.~~~~f,j$M~o
~~~WOO*~~I.
char str[ 12];
.~m~~m~~~f~~m. X$~~~~~~o*%$~.~~X~f~~m,
e
~e~~~~$~~.~~.~,
p~~~m*~~~
cstrt9:Jt~~ 16-i'-ui, 1;tiI~¥M**~lf 15-t-f~' ~-1'-1i1~~rq:<> flm;gj§B\I~ i1lnJijlmff{iiJ~~~J.m.jC~ ~~f=f.1lJ Rffl - ---t-;g ~*'1~m -1'-flffil¥J:m 1 -1" ~. &~ ~i3 rat. Itgililit ~f(m I¥Jm -1' 7G~ f(~±m:l1L ~rTIff~ ~ ~: ~ *i91J~.
<>
0
char stog[20];
char *p;
p=stng;
II P is pointing to stng[O]
~~$m*.¥~M.~fn~~~*fi~Jm, Mm~~~~$fi&6 •• A~~~ (Liquid crystal display. LCD) IP.t mt fm ~;iS: ¥F ~ rOO t8 i91J ~ i1t~ ~ 1:[ ft 'j IflHi ~ riJJ ~ ~ Iffl i¥J PI 1i T ~ tt.. ~ j! 1'-f7~T q. . itffl $~It putcharO*~ -1'-* tI Ii. ~ ~tlf~jjJ tm ~ - 1'- qf tr tffij tll¥J fiF ~tHIDJtH 19:1i-:
WAA c ~fiq
void main(void) { for(i=O;i<15ji++) putchar(s[i]); p=s; for(i=O;i<15;i++) putchart "p++ ) while(1) }
Atmel AVR
Ilprint each character of the array Ilby using i as an index Ilpoint to string as a whole Ilpoint each character of the array Iland move to the next element Ilby incrementing the pointer p
Wffl¥J~-iflI5t1tffl for milf*.-t-tlE:fDtrtB~ml¥J_1-*:f{f ..ttm for 1mlfit~fttFj;J~51 *f&!~ ~ ra!l EfJ 4ij --1'* 1'f , lJ -if: 'Bur b'J, lit~ ~ 3ltl putcharO PEl~ till:5t1t ffl mtt *i)] Iii] ~ ~gj[.~. P=S: (OJ *~m~-1-5C~I¥JHfi.7G" ~f3 for milf1tmmtt(_-CX!StJll)
iJ_mn*i1i
putcharr),
~tt~m
~-. --ji, 1m~9XJt:~ti !1t!: ~ l¥J tit tlf ~IJJliF Il]1m 1;:
Cm~~~~~~me~$m~m~~€,
int two_d[51[IO];
two_d[O][O] , two_d[O][I], two_d[l][O] two_d[3}[OJ. ,two_d[1][1] two_d[3}(1), two dC2]{Ol , two_d[2][I] two_d[4J[OJ ,two_d[4J(IJ
two_d[O][9] two_d[I][9J.
,two~dI4][2] ,
int matrix[3][4]=={O, 1,
2,3,
4.5,
6, 7,
8, 9, io, 11 };
~~I~i1IM-T~~jg:~~
:ct~~~~1t*(look.lJ_p.table,
LUT)-t-7t-~ffl
PJflJ" :
19IJ ft ff] m_ JE: ~ -1- Et! i.Hi IR, ~ if :ttf"f H1, ~ ~ -rr ~ - J~ llQ ~~!il 1=1 11~.. it ~ffi. ilJ m 1t!r~*;f.!. #H-=lWi~~3t~~fil¥J9;lt-j ASCII o!l(;ffJ=#J:tE*~J ~-(f115E~J~etkeycodeO g Mmmfi~m, #~.row~c~I¥J~, ~m~~~mIo~ff~"#M.tF~ft~~.~~
~*:rr
-=
#include <stdio.h>
#define #define
TRUE ) ; FALSE 0; "'row ,char ·col) routine gets the key press and
char getkeycode(char
lithe getkeycode
llreturn TRUE if a key is pressed ,FALSE if not 1*look up table for ASCII values.' constchar keys[4][3]={ 'I', '2', '3', '4'. '5', '6', '7', '8', '9'. void main(void) { char row, col; char i; while(1) ( i=getkeycode(&row,&col); Ilwhile forever .... '.' , '0' '#'}'
..
IffRUE,ifthere if(i=TRUE)
Iland row and col contain which key Iionly print the key value that is pressed putchar(keys[ } } row] [colj);
tzii it :!iJ ~
~-#£~~£~=m~mm~~*~$~mo~~~~T-~*~m, ~~$~m.w
.P.iJ
H<r§t ~ ~ ~
char day ~of_the_ week[7J[1 O]={ "Sunday". "Monday", "Tuesday". "Wednesday". "Thursday". "Friday", "Saturday"} ;
~~~~m~, ~~*A~~~~*~o~~~~~¥~$*~~~,~~~~.~~
D
printf()&§fiWf~*~$
m~~m=.~.~¥M$.
¥n
* tr.J :g ~:fBi
iA ~ ~ ~ ~1 q I
jj9
printf("%s",day_of _the_week[3J);
m#¥1 1'8J*? 1m -1" ~:bo ~:r:JJ ~~:t£ -r·'8 ff] I=lT ~ J5Y.ffl~· fB ~ 1:em tli rPJ i*J ~ Fr~t~tt-it if Pi!~ JA 1t 13(; ~ ~ it ta "P iT ~ m" m rilJ m Ii ~ tIJ #tE. it.if fB ~ ~ ~ 1m 15i\: fti ~ i*;tt 1m Pn If( ~ ~ i!PTL;lfB{m*12JJitM~Et'1tAffmt. 1ra~-iE.1i$AJ •• El tii&" 1-t.:~a F lID~ -1- JA m 1& t~n 1f. if-J imI m PilIi I¥J #11 ~ it ffl scanfi) m 1& JA t$ m tfu A ~ M- ~~~ A Ul i$. Ul ~ ¥IJfN: It. J;l. if ~1*~ :2.l::ff. 1~ 6 ffi:!J.) P,J ~p 51! tfu A Ul~ if Er''1, JiW fune _ num ber it ~ffi li tEHt~t_H Er''1Wt ~ 10 :ff fune _number ~ '31~ fr'~lf(mfi~]!litm:~fp. fp ~fli it]:it8. @J ~ru ~ void I¥HiR l1!: Et''1 -1-t~# 1 ,8 TiA-I W ~IJ Et''1 ffi 1&tiT- ;1lUf~.it: J : A
~*
it~m~
-gJt~~~,
~JPJif1jli~
ft~.~
M-ij-(llPjij~JE:.11=)~ W~il$~;f$iRr.7g~ 1m faj 1!€ iE:W M • tJ, ~ ~ 1ti# fp t~~ I¥J PElIi I¥J is:. ~ f'tij !1(! I¥J 15i\:itl:1riIJ m:
0 ~
(·fp)O;
void do~up_task(void)
{ printf("up selectedin");
J
void do_down_task(void) { printf("down } void do _lefl_ task(void) selected\n");
t
printf(" left selectedvn"); ) void do _right_ tasktvoid) { printf("right selected\n");
void (*stack_list[6])(void)={ do _ start _ task; do_stop_task; do_up_task; do _ clown _ task; do_left_task; do _right_task; }; void main(void) {
int rune_number;
void('" fp )(void); while(l) { printf("\n
I*fp is a pointer
to a function'v
scanf{"%d".&func
if((func _number>O)&&
{
fp=task_Hst[func_numher (*fp)O;
·46·
*Aft:; c f;;~~
Atmel AVR
• 1 ilq\f§ljJjli §; C $#
~J i!~ ~ lift'
*~ ~ * *~t5:rm ~
$
~j1i
!¥J 9~ ~
1/
II
.1
[Hz] */
1+ Saud rate
1*
this gets
definition
*/
#s
int
#define JACKPOT #define DIME #define NICKEL #define ZERO enum {BAR,
1* this defines give different payouts *1 1* names in order to make the code more *1
/* readable to humans s/
CHERRY};
char
II
n) 0;
II
flash the lights a number of times count++) II flash light when done ..
count « n;
for(delay
= 0;
·47·
} int get_payout { if(flrst (void)
= CHERRY)
&&
(second ~
CHERRY)
&&
third ~
CHERRY»
II if all
"cherries" ..
II
&&
(second
= CHERRY
~I(third = CHERRY»
II
if any are
== second)
(second == third»)
void main(void) (
int i;
PORT A = OxFF;
= seed;
II preload the columns /I mix up the numbers /I while waiting for button release.
seed»l; seed»3;
II Exclusive
second== seed»2;
I\=.
= 0);
II
1/
second &=3;
• 48·
third &= 3;
~A:t\;
c tj¥-E!:i
Atmel AVR
BY NAME!!
kindjthirdj);
ZERO;
prlntff'Paid out: ZERO\n");
break;
case
break; case break; case break; } }
NICKEL:
printfl"Paid out: One Nickehn");
DIME:
printf("Paid out: One Dime\n");
JACKPOT:
JACKPOT!!\n
lt
);
~~~m-m~~~~.~~m~~~~ffl,~~~Affl~~W~~~~~~#*~.*~~a W~~.~~~*~&~~~,~~~ffl~~~~*~T~~**~~~~~~~~Jij~~
f_!{I, ~ ~~
0
~;MJ~:ttm1*Jij*#-1"tJFlr(eJG~f$rfx.t~i1:ill:tr7t~IL
ffif:*-J~ c iit~~ff9='
<>
••
M~»
:@~ffi~!.f)~mX1~~#E::f:t:m
1.10.1 ~~
atJ~rt~
~ ft;J ~
IY-J 1111;; ~
Jfu ~
m.
~*fr~~~OO~~.~~~~~Mo
struct structure _ tag_ name { type member_1; type member _ 2; type member_x; };
*~ ~ fit ft
IRj ,
struct structure _ tag_ name { type rnember jl ; type member_2; type memberjx; }structure _ var _name;
1f;fj_ff~, _- _fi~tt]I¥J,mf&JE)(~ T 1:.JG, structure_tag_name fPAr-1'"01t:~J1£jj!r-r, *f5a_ijiK1'P~?tHr>J!af'LJo rooEt-J7J'~JF~ varl ~ var2 Wj-t-~f~' %~ var3 YiIfaft1?tiJH.o
struct struct_tag_name varl.var2,var3[5];
~&.:
~~ •• ~§*~fit~~~~~,
~.*~X~~,
§MX~M~,m~~.~m#&m~M~~m~om #*~re#M.~~,R~~~~~M~~.~~*~~OOo
Pi I¥J~!T.t.
BtE!a~~nX.1J.l:g~tt~*:
int month;
Iideclare a structure variable and initialize struct DATE date _ of_ birth=] 2.21.1961};
it
tmr:
~~~~~-fit~.~~~.~~~f~~~$~M~
struct LOCA nON int x; int y; I/this is the location coordinates x and y
•• &~m~o~~-fiMft1~~
~;
struct P ART {
~AA
char part_name[20}; long int sku;
t1ii~!:i
Atmel AVR
struct LOCACTION
}widget;
x_location=widget.bin.x; y~Iocation=widget.bin.y;
widget.bin.x=l wldget.bin.y=Zs;
O;
x, int y)
//initialized
'E~:iS@]~;Ml
ft! sku,
I¥JtfOO.7GP1b'Hl-m:ti5'~ltjf~:ii~m~" part _ name .fE JS 1'-t5;MJ is I!!i Zru-m 5! T ~ 1:mi I¥J~ ~ jij"j1( Jffi: tnrf rr9 % It.-m::
PART.
bin.x ~ bin.x
<>
I
1t'fl1¥J
.E&
t6*~. part_name
1.10.2
e<J-m:tiJ;;
100
~~ltm
struct PART { char part_name[20]; long int sku; struct LOCACTION } widget(lOO]; bin; /I a string for the part name Ila sku number for the part
i11lill ~ 9:l [J{J 7Ji'tdnf!.tl! - # [J{J. pt- [J{J ::f rR"J z.~ tE T ~ ~ ~:II -1'-~ JE widget B"n¥ fiIi $. Jt, J:lf ~ ffffl ~fl..iT 'F 00 I¥J:S IJij :
x_'ocation=widget( 12J. bin.x;
*~e<J~ :s I
• 51 • II the x coordinate y _Iocati on =widget [12].bin.y; of the bin of the widget 12 of the bin of the widget 12
lithe y coordinate
m~~~m~.~~~~~~~.~trm~~o
struct DATE int month; int day; int year; } struct DATE birthdates[3]={ {
~~~~~W~~~n~£;
~~~~m~~~Fom*g%reW~~mg~*, ~~~~
1.10.3
:Jiia1!6~tf(Jm*
Jt n ~ z.0
~JtftB~
widget
fiJ§-n-4tf
};
struet PART { char part_name[20]; long int sku; struct LOCACTION }; bin; II a string for the part name Iia sku number for the part Ilits location in the warehouse
this_ widge1->sku=1234;
(*this_ widgetr.sku=
1234;
G§ AI this_widget
& widget
iKn:
M~£~~~, ~~~~~.~~M~~.W~ttX.£~~~*~~M~,
* (this_ widget.partname[Oj). rm:iZ~
~j_tAl widget
~*~~~ ••
!¥J±tB:l:j_L
M~~~~m~~~M~fi<Jmft,
~a~AI~m.
~~~~.~B%OO, .~ •• &#~~~fi<J~~~~~m#m~*~.
u
~~~~~m~~-~~~M~~m~oM~~bft~
WA
§slffll¥-J"~ ~*~'WlJtmr:
char ·string;
int position; Ilits position in a list struct LIST_ITEM "next jtem; II a pointer to another }item.il~m2; item.next_item=&item2; Ilassign the pointer with the address of the item2 /lstructure of the same type
item.next_ item-s-position
AI next_item mJfiJ!¥J
item2.position
position
~#JJ:£m
~1f)--F
:!:tFJHt
~ffl.~~~®~~~M~~~o~ffl~~~~-ff~TM~:
·53·
union union _tag_name type member _1; type member_2; type member }union_ var_name; x;
• *~!i!!
~ffl~~~~.*~gm~TH~B~~ren~~~ffl~~~~~~L~$~m~~-~
Efo} 1f fit U:
union SOME_TYPES{ char character; int integer; long int long_one;
} my space;
long_one(4 *i'i)~A/J'\
till
, my _ space.character=Ox my _ space.integer=Ox
12;
1234.
~m~~~.m~i'i~~~~OO~~~~~*W$~.~~fi~m.
0
H~~~~~m~
~ffl.~-#~~HMft".~g»~.~n~~~m~~~m*M~AOO •• M~~M*. 1Ii!i~-/J\$~ tEmrm~{9IJT!fl, ~J!,j~m (r{JN~IOCtk:T m~ffl ~.t'i!i~~lO~~flUif:fttm{ilJ S1:~ATJt:~*lt(8 i!L)OO~ ... flUifft7f JIlJ. H~I¥1.1Ii!i{g::fI¥iJ"1cmPT11m¥l'l7X~3Cfli!!. l PT11~*7X~3C~ .•• ~ ••
o
ifffl~m~Q
~~T~.~~~~A~O~ft~-~16~OO~!floml#~~~m3~~~~.m2#~~
#include <delay.h> #include <90s85IS.h> void main(void) { unsigned whHe(I) { port _ w=PINA; port_w «""8; port_w ~=PINB; int port _ w;
~o*wm*~~~~u~~mm~.fi~~•• ~m~~~~~~l'l~_~.M-#m~ft~~~-#m~m.~~~~~c~~OOl¥1m
*AA c ~~1:i
printf(" 1 6-bits=%d04x\n" }
Atmel AVR
.port , w); I/put the combined value out to lithe standard output
~ffl~ffl~~~~n~m~~~~#~~~~
#include #include <delay.h> <90s8515.h>
void main(void)
Iideclare the two types of data in lIa union to occupy the same space ... union ( unsigned char port_b[2];
lithe union eliminates the need II to combine the data manually printfi" 16-bits=%d04x\n" .port, w);
} Ilput the combined value out to
1.10.5
j(
typedef @.f.1
c *i§3tr.fB~rt1fi~M~
0
fJllt;!Jl:
~.~Q
typedefiE.~
ft.ilf.14~~~~pr~
1u ~:l:~~fl~~jaJ
typedefunsigned
char byte;
f_W.tE~IJ~
byte ~ word
ETlj,ffl
char
~~1O
unsigned int
~M~~.
byte varl;
word var2;
char age;
'int home_room~number;
}student;
1£ tfiD ifff! J;!~ff~ #define miD~ It-t ffl T 3mrl;t 5l.t H~*ffi. m~fflTF~~~ru~~~~m~~ili~~J;!~n~~f¥o
1.10.6
*~1~:f;tl. ~ m f¥ ZlJ
tT
typedef
EBtfiD W
ft:
ill: ,j:HtI.1a
1¥~32
tfM'~,
§ i9J7Hfc
1JIl:tm
bit running;
lithe compiler allocate a single bit of IIstorage for this flag .. lithe only two possibilities for value are 1 and 0
~N~~~~,
~QN~~~~~~ffi~~.
{fL~£~eT£*~£-~~*~o@~~m~~~A~ttijif.~x~~
~~B~F~M~~r:
struct structure _ tag_ name {
unsigned int bit _1 :1; unsigned int bit_2:1; unsigned int bit_l5: 1; }struct_ Val' _ name;
unsigned intbit_15:1; };
1r5t~llin)G_M~(7!.~ ~
Ri&~1'- 'a'45-(:)~t&-m:m$ int 5J~JIM '1' ffl) 89 (16 it. i~-1'-~ f1;J ~ I¥J
~.~g
*
~~
machine.stopped=I
machine.running=O;
machine.counter++;
• 56 ~
i(XA;tt: C ~.fMlj
AtmeJ AVR
typedef struct bit~O:J; bitL}; bit_2:1; bit_3:1; bit_ 4:1; bit_5:1; hit_6:1; bit_7:I~
[bits;
t# -F
£(.J# de fine
ffl
/lhltfields can be used in assignments PORTB.bit~3=1 PORTB. bit_ 5=0; Ilbitfields can be used in conditional if(PORTB.bit_211 PORTB.bit_l) PORTB.bit_ 4=1; expressions ;
1.10.7
sizeof
m.f.1
f=1::-1-5Jfl
c iif
int
id _number;
}students] toO];
x=sizeoffint);
x=sizeoflvalue); x=sizeofflong);
x=sizeofl array); x=sizeof(record); x=sizeof(students);
IIthis would set x=z.since an int is 2 bytes IIthis would set x=2,slnce value ia an int IIthis would set x=4,since an int is 4bytes II x= x=sizeofrlongj+array
/lx=24+2 for the character _ width" array _length=4 string plus the integer characters
If 3'" 2=24
Ilx=lOO Elements*(24
Ilx= I 00·(24+2)=2600!!
+sizeoftintj)
JJ1iiHlHm:~~rf*~ ~1J'jlb1~f4::rf11f.ft.~~Cf.([rm-1tlD~~~~.)It-t.
iI&'*5i:~~~f1Jollrl.
m.~Il~-=:
l1jU~jfjIJBitffl tli.ftJ~it. Harvard
*~~(SRAM) ... ~~(FLASH)~ CodeVisionAVR EEPROM
~M~
I;:..( itffl
lD;t:tftBtiUwBgl;!l
0
~itl¥J,*iA~ §i9J*re(~{j!mfj~B:Jl~r1~t'@'T)J!tE SRAM rr:i£tr~ flash wt const ::X:tI~IlT FLASH ~~~(~r¥:£ra])~ Mft&~ff EEPROM
e
1IttPJ
t:p ~3f::ii:, ~1t ffl~.¥ eeprom ~:l:pia)j!;J,JE~ flash.ffi eepron ~tt~ 1¥J~1l:§i,R;+:5t:l:~o , flash :tI11* const dee~m.~lli.,~&W.~~gl;~~~M~:5tre~~m~~.~~~~M.~.t:po~~
~m!FIlAilflLit~
flash eJ?; eeprom
m_~.*!;}:t£1mJll:t'lf SRAM
~m~pi~~m.~~~ PfVtff It-t:r-,,~ ~ e ~
flash int flash char char_constant='a'; flash long long jntconstantl flash
~.*ZE.l2;_~7J'\~~:I:~r;lm
~
0
FLASH ~ EEPROM
~~:I:,
g
~~1t~~pia)j
FLASH ~ EEPROM
9=rl¥Jmftlt-f1it~ fflJU
••
~fm~#.~~USffi~a~~~~~
••
**.!
ff~
int
integer_array
I []={ 1.2,3 };
Iffhe first two elements will be I and 2 ,the rest will be O. flash int integer ~ array2[] = {1,2};
·58·
flash int multidim_array[2,31={
ittA~
c iJiiW!.] Atmel
AVR
{1 ,2,3 },{4,5,6}};
int a;
EEPROM
~rHJ~~~~Xgqff1ift.5t:l:I3:~"
cycly _count;
3'f-! :
eeprom int
[se:
lIallocate
A it; ¥ €1t 9J ~
~~**~~WW*ft~~,
?±~~.~~~
•.
m~~~SMM~~Q
M*-~~N$~fflMr~~~W~~nA~OO~
char mystring[30]=" This string is placed in SRAM";
mIJi$<¥~$~:tE
5tDC30 ~¥il ~ ~~
FLASH
t!8rJILl:U'l
:#-iixiB~H1J!ijjlb]
mystring,
ff~-Hr::p :
rp5E1To fuHl~r¥tE:@rrAIHS]jf&WX>t~f~ $:iiHffit&, 9l1J~ rBJ 1; T [fj .il: SMM ~ IQ]fJ ¥~ fll. r.J- $ EJ llifill 1& J1i J!ij:ff- ~:tE FLASH f
*"
~ ftm EEPROM W: itit{if: f1it. 1JIUW i3:f'tl4tl I:9!.tTI # 1t~ Jl §:ff 1f .Ei~ ~ 1it t:& 5t ffJ fi m~~#1i?±~g~~P~~T~~~~J!*~~~BmB~,~~~~~trR1~~~,it~*
a
**, ~~~B+E~.~M~~~*oMTfi.~~ill~B~m~~_a
I
Et! 11t, Ii:m{7H'1:~ X~ ~ @'~fl~ E(.J o¥7j(R ttBJ w.a~W:-FIR~I¥:JIi:~ EEPROM ift~ ---r~irrM. fI~1f;ilHfEl!3$:i&~Y&z. WIlTJ?J 1At:f~11iIf~JM:*~xB i3:lW.~TEPROM ~fitft.*~ l¥J~i!:&JtE@.{t~~tt ~ :tE*$*t. E m ~ i3:1-"fffit~g •• ~fmj£tr 10000 iX~~fto Mi~t1Ttt*I¥J1tJl, ~~fFgqli: § 1f~Wi
EEPROM
c
0
*~~
~~O
~I[m.~.
*!R~~I:: ~fl
1.11.2
mtt
~~~~.~
I
~~~fiM~,
••
EEPROM~
ffM:HeIR~, m~ll,.f-_lJlJtt*5t1£~~?t SRAM I=f :tE:i3:#111N5fF0-E ~ ~ ~tfi!~ char ~ int ~ m. iJl ffll¥:rff.1m:He~ru.~'1l!ttNii!~~, tJ.1f~t.tiIiw:He~~~:i:pX;iEiiJi (f<J ft~*~~~~*~~~o~~*fl~h~e~romm*W~~~. M~:
FLASH
Q
~.~m#~~~.~n~~~~~g~.m#~m
I*pointer to a string that is located in SRAM +1 char "'ptr_to_ram="This string is placed in SRAM";
I+pointer to a string that is located in FLASH "'I char ·p(r~to_flash="This string is placed in FLASH";
I*pointer to a string that is located in EEPROM *1 char *ptr_to_eeprom="This string is placed in EEPROM";
111tB'! I¥JSRAMIR~ 'eL ffi-1'-l$ jg '6!~:B X #(Register ftiJJ:He OO~O.~~:He~x~*m~~, ~AI~~d«.ff~"~o~ ~~--1-wUL1-'6!ff:B, 1fffl.ff.1m~ register ~11Ji1'irQ
A VR
register int abc:
••
*Wt.tili*B.~.0-
!lP'it*- 1fffl register ~tffi:M=, flU il:He1£I:lT Jifi; 1J § z;jr~ 3t.it Ej~ --1-!& 11 1- '6!.ff.~ LfJ
~ it~.0-Ejtl'6!ff:Hel=f. ~iH~i:&o
volatile int abc;
lii~1f:ffl
volatile
~11Ji1'ir" ~W*flUif:B~~.iJT~tEMiiilltiBi:5'r
~111t~~~~~~m~~~(~~~~£-#W~~~M~~~~,AmM~T:tE~~~ffl ~ff~'itm). SRAM *l¥Jmffl~ff~-m-1fm volatile ~tffino :i3:#, 4ijiXtE111tB'!iIJIJ 3tt1l~MJ§Jg@J¥UlE-;t~~~. SRAMt:pl¥.l~iifl~o m&fl0-~~'6!~~~~~~.~~?tSAAMI¥J~~g~~~~~.~~~o~afl0-~ ~~~3~I¥.lR$~.~M?tSAAM~.I¥J.mtt •• ~~~~~0-~OO~~~.
sfrb ~O sfrw
~.~.tE
~D~:9~~ii11-fflT~~:HeXftt~ ~nt. ~flm~ffl*~i}ffAij~:He SRAM {flll .. I/O GDd.~.x#t:p~-~*m.11-~~~~~o sfrb ~ sfrw ~~*-aiJf~il3 IN 1OOUT n:t.tiIim~J!m*-ttffllJ AVR mtB'!ftiJJ31¥J '6!~ I/O
VO
0
fi~"
I"'Define the Special Function sfrb PINA""Ox19; Registers(SFR)*' 118-bi1 access to the SFR input port A
*AA
sfrb sfrb TeNT I L=Ox2c; TCNTl H=Ox2d;
C :!'#9~l..j
Atmel AVR
sfrw
TCNTI =Ox2c;
int)
IlWrite to TCNTIL
& TCNTlH
registers
jjjill#Hf[~ j!J~ Ilft nll 7£ 1/0 *:ff:Z I¥J-7 Z~. nr lj,ft ilf X11/0 ~:ff#:iJ11Tw:-~ AgVi 11:1] ~ f!I j~xt*:ff~ff'~lli:~~-ijj IIll 1/0 :&imiiftffl CBI, SBL SBIC 1DSBIS j§m,**~f_w.l¥J. P,JT t;J, tr 1tffl sfrb ~ ~ lf1, fffl: ±fg hll'fl m: rn! ~m:tEOxoo,.._, Ox1F .L rBJ 1£ it ffl sfrw F ~ 8>f. 11 #i1k hl1!Hlii 1£ OxOO--- Ox 1E Z rBJ fJlJ P.n :
n=~*
void main(void)
DDRAO=l; DDRA.l""O;
Iiset bit 0 of Port A as output Iiset bit 1 of Port A as input 11se1 bit 0 of Port A to a 1
PORTAO=I;
while(1 )
if(P]NAl)
PORTA. 0=0;
imlit.
sfrb
~n sfrw ~.~-fiL-r~If:-:Jf~$7T1fffl#include
ffi~~m,*Ag~X149='
:A~11f
~~. ~~~X#~~~~~~~~~*~o~tt~~x#~~~~~~I¥JOO$~. ;!t ftE lli.-r( l£W )kmffl ~ff 9=J 1J!fflAg)~~:ttl ~ '-P Em 1f ffl ~:ffH ~
!::l. ~:& ·-t-Eil~il:#~{lt:I¥JA~~~Jt14(90s8515.h):
III/O registers definitions sfrb ACSR=8; sfrb UBRR:.9; sfrb UCR=Oxa; for the AT90S8515
~H~~
~J.
sfrb USR~Oxb; sfrb UDR=Oxc; sfrb SPCR=Oxd; sfrb SPSR=()xe; sfrb SPDR=Qxf; sfrb PIND=Ox 10; sfrb DDRD=Ox 11 ; sfrb PORTD=Ox12; sfrb PINC""Ox13; sfrb DDRC=Ox14; sfrb PORTC=OxI5; sfrb PINB=Ox16; sfrb DDRB=OxI7; sfrb PORTB=Ox18 sfrb PINA=0x19; sfrb DDRA=Qxla; sfrb PORTA=Oxlb; sfrb EECR=Oxlc; sfrb EEDR=Oxldj sfrb EEARL=Ox 1e; sfrb EEARH=Oxlf; sfrb EEAR=Ox1e; sfrb WDTCR =Ox2] ; sfrb ICRIL=Ox24; sfrb ICRIH=0x25; sfrb ICRl=0x24; sfrb OCRIBL=Ox28~ sfrb OCRIBH=Ox29; sfrb OCRIB~x28; sfrb OCR 1AL=Ox2a; sfrb OCR} AH"'Ox2b; sfrb OCRIA=Ox2a; sfrb TCNTlL=Ox2c; sfrb TCNTIH=Ox2d; sfrb TCNT1 =Ox2c~ sfrb TCCRIB=Ox2e; sfrb TCCRIA=Qx2f; sfrb TCNTO=Ox32; sfrb TCNRO=Qx3 3;
.AAC$1f~it-
• 61 •
• 62·
sfrb MCUSR=Ox34; sfrb MCUCR=Ox35;
sfrb TIFR=Ox38; sfrb TIMSK=0x39; sfrb GIFR=Ox3a; sfrb FIMSK=Ox3b; sfrb SPL=Ox3d; sfrb SPH=Ox3e;
~Ai\
sfrb SREG=Ox3f;
IIInterrupt
vectors definitions
#define EXT_INTI
1.12
~at~*
~m~~~it1t~~meg~h.~~~.~~~.o 1.12.1
~atfiJ¥~it~R1t~:t&~iAjJH:R5kffij#~eg:9.tJm, R~tr:t£~~T Linux ~ UNIX ~ili 1t*!JtJJ{Jj(~rHn.:H_t.<> ~~Y...t.#~~-ruHtt, tEtll$~~r. *Aj\~~£$~1ffl~1:A.tr~It-t!ltJ£o -~m.OOfi~m.~.~ff<>g&~G~@~:t£~~#~~. m~ffl~a~It-t~£.~ *ma~~nm*m~ft~~~n, ~:t£*E~R1~~~ttm.~~~1:A.ff~~~~~nog &~ f!J.I ftJ¥1i R~ Xi?'~$~d it(:Qu ~j WiA.)1£. e~ :±I~ m. fJ itt fF W~ $... :9/- EEltit 4 - eg A VR l' 'QCtlJ I:U Il(.3 DY ~i:-flfi 1-R1 fi. j:£ ~ t1- Xi f@J A. ~ it fF f±l1fnJ m.
Q
1l!m IfJ Ii
c ~
~ Wi~ 83Ji;J $~;~$~£1lfij [~~~J¥~1t 9=r eg~1r;.. mt~~WG1T 1fT IW-..t. IT£. ~1-M! ~ #?~~~~~ffl~~**~~~~tE~Wiffi~~rr~~W1:A.trm, ~~~ffi~~~~~~~
iJ!I~(interrupt service routine. ISR)o ~
_§.
ISR
aAVR~,
~~~~~.~3W@~~.~ ••
~~~*~-~*§~hl~~~~a~~~hl~~~~.o
~*~~. *~~f~~~.@~~.
EfJijI¥J~~~ift~~"
0
~ £!firF~~ ~IYJrtJ:ltlU:E rtJ. MPT ~Jj!:i:tm=Bm~ RETI(RETum from Interrupt):lS.@]3itliE 1iH~*:{)t~g RET! f!J4-#Ft~~.#~1~Jf fit:ffYiJ "1f~~, #:mfi~itltft~12:~.QX;~B({ IYJr
~ ~m~.L.m -~m~
AVR
0
~~.L.
tlU~1t~:H~1fit$~Jij~tp~Mo
AVR Ji!!J;;:.
rOO3T7UllilYJ
!f.f~1YJ
~-~~~tto~~~~~*.~ffi~*~ft*~~~*$,
JlInterrupt vectors definitions #define EXT _lNTO 2 #define EXT_INTI 3 #define EXT INT2 4 #define EXT INT3 5 #define EXT #define EXT lNT4 6 INTS 7
*R~M~~~~~3~~~
#define EXT INT6 8 #define EXT !NT7 9 #define TIM2_COMP 10 #define TIM2 OVF 11 12
#define TIMI_CAPT
#define TIM I OVF I 5 #define TIMO COtvIP 16 #define TIMO OVF 17 #define SPI STC 18 #define USARTO_RXC 19
#define USARTO ~ DRE 20 #define USARTO_TXC #define ADC_INT 22 #define EE RDY 23 #defme ANA _ COMP 24 #define TIMI COMPC 25 21
·64·
#define USARTI_RXC #define USARTl_DRE #define USARTl_TXC #define TWI 34 #define SPM~RDY 35 31 32 33
$tAA c ~W ~
Atmel AVR
it 1'- ,,11~ -E11! ~ 1'0&rp Itfi~ I'f.J ~::f:;ffi ~ It\ EfJ ~ ~ rtl~~ '31 ~ ISR. I'lTkiJI:tt:f:tJilfHW::f: interrupt *~mJ&~~~tfPr.f;*:itt1TF~
interrupt [EXT _IINTOJ void external jntntvoid) f·CaHed automatically on external interrupt 0*/
,u
*'~~
ffl Ef'.l~
*ilf interrupt itiR 1£~ t] 1€. ~ ijI~ Lf1!tfi~ i¥J 1tiJ:il1tliL ~ .~::f: M[ 1]7ftm, f812;f ~ m I 1'- jtJ • R: :j::B_ rtI• • JiJT ttfl J¥ 1Jl1if W. -ffffl ~ 3; ~j; Lf11tfi FiJ ii ~ [2] 7f 1.tti (fJ JA - a tpWT~q'jIJfJJMt«:, :# il3tfif~,$J 9-IWT, [SR ~Qfw.t£1ffuJIJot1~fA1T ISR ~fIE;JSfi51 1f11tJ fl. {t!11 f:£ti;#:..t.:f:ff-{E "iJfilffl#" • t:: ,~,R:lJfJE SA 7;; void ~~ ~-rfR")t=f1¥J mt ffiI, /Ffft:; !OJ ISR f$ J~HfiiJ ~IL f a.A~~~tp. ~ItfiR •• ~~~m~~fAfiQt£~m$*~.4~~&~, ~~~~ .i"iU1£ mainO~~~~~ while(I)tJB~o t£iK®tti51 'f. mainO~!i&JU~:x.N.!1lJ:j1HTwMt«:. ffij
0
0 0
*.~.~~Itfi~~~~ff~$~.~G*o
11110 register definitions #include <90s8515 .h> for the AT90S85 I 5
overflow
TIMERI
Iiset the 110 ports and initialize TltvlERl DDRB=OxO 1; TCCRIA=O; TCCR1B=5; TIFR=O; TIMSK=Ox80; GlMSK=O; #asm("sei"); fiPORTB.O pin is an output IfflMERl IffIMERl is disconnected clock isxtaV1024 IfpresetTIMERl interrupt flags interrupt from pin OCI, no PWM
overflow
while(l)
lithe rest is done by the"timerl_overflow"function }
;;$:1JJJ ~.
mainO~~ffl
BJ*-f1)'ft
while(l)~
LED
0
~t$-r
timerl_overflow
1.12.2
~~*Jl
t.J IYI J.t~~FF~:i:~r.t!fiilr Jit1tFWtft~mo A, i!
:a:11ttt~fft:p,
4:R~mr£Jit:tE
switch/case
110*,
*~~
~J 1:i!iT Jj~J~U!l
.AJt c ~;fi
~ Atmel AVR
u 0-----.
::>
.......
I
0-
1:1::_
~¥'.
!ffi
U)
Z
"'I
-I..cl
a:~
... ::
I W
-111 0«:
Q~,
2~
a:~
..... ~
..;f
·67·
#includt: <90t>8515.h:> #include #define #define # defi nc #define #define #define #define #define #define char time_left; int current_ state; char flash_toggle; II This enumeration <delay.h> EW _RED _LITE PORTB.O EW -YEL LITEPORTB.I EW_GRN_LITE NS _ RED
_ LITE
I· definitions
to actual outputs
./
*/
creates a simple way to add states to the machine generate an integer value for each name making the code easier to maintain. EW_WARNING, NS_MOVING, NS_WARNING. FLASHER};
1/ by name.
Enumerations
II automatically,
enum {EW_MOVING,
= I;
= 0;
=
I;
II north-south
0;
= 0;
= 0;
if(PED _XING_EW
II FOUR_
10)
WAY _STOP)
*AA c ~~ ~ Atmel
AVR
1/ time expired.
so ..
0;
OJ I; II north-south has the red .. If and east-west has the yellow
= 0;
I; = 0;
='
itltime_left
{ return;
!= 0)
--time left:
.
II return to main /I time expired. /I so ..
FLASHER;
else
/I otherwise ..
move
case
NS MOVING:
EW_GRN_LITE::; NS_GRN_LITE= NS_RED_LITE EW_RED_LITE EW_YEL_LITE 0; 1;
= 0;
1;
= 0;
NS _YEL_LITE = 0;
if(PED_XlNG_NS { /I
II FOUR_WAY_STOP)
itl.time left
1= 0)
=time Jeft;
return;
II
return to main
= 5;
=
current_ state
II
= O. = OJ
= = =
II north-south
1;
if(time_left
{
!= 0)
-time_left;
return; II return to main
}
iftFOUR_ WAY _STOP) current_state else
II time expired,
so ..
= FLASHER;
time_left
current
} break; case FLASHER:
II time expired.
II to the next state
move
= 0; = 0;
= 0; = 0;
1; &. 1)
II toggle LSB ..
NS_RED~LIlE= EW_RED_LITE
1;
= 0;
} else {
NS_RED_LITE EW_RED_LITE
= 0;
=
I;
II alternately
II
= EW _ WARNJNG;
II then return to normal
default: current_state break; } = NS_ WARNING; /I set any unknown state to a good onel!
void maine void) DDRB""OxFF; DDRA=OxOO; II portb all out II porta all in
Do Statest):
*{JlJrp,
delay_msOffi~ffl
~~tTt1i!m
trl¥J*~~~~~*~~~*H15I¥Jrp~~ff~Mo ik~m Do_States()'tit.fP~ffl-~tx. mE tE:lS@J!J majn()ffi~z mr.Rtttrr1~j>l¥Jm~ 1!ftij 3ft current state J1Irt Do_StatesO;fH~t~~fF¥1rto PED_XING_EW" PED_XING_NS ~ FOUR_ WAY _STOP 4i1trAJ1Iii~~atfBJ~;pJBXm.ftI¥J~12(91:M"IW*)*.F 1:iE~fJL5mr:I¥JN~ 33: 1'-7J\{Jl1 t/EJl:9 iU IE'm I¥J f¥ $tJ I¥J):}J ~~ ~ gs1J rOJ ~ trtr at, 1¥J ~t.1f~ ~ ~ iT 1£ tt-tQ
~~*fO~n,
PORTB
?IVmZ9Jl¥J~t1JI~JfO*gs1J~l¥JiI~.:trmainO~1¥J tt~:
0
1J~~.~ffH~n~.M.tr~~tt"~58~.trW~.~.-ffA.VM~
PED_XING_EW
!lJ!; PED_XING_NS
FOUR_WAY_STOP 7f~,
~4R#f-@fftEi:&~:I5"
~mrJjl1TBtIaJ1>-T
•. ~~
1iE5tj!~~c
mpnoo,~~"~a.*,~.AD,,m.~
•••
~~~ff~t¥-~~1i!ffl~~m~~
W~~
·71 •
m,~~~~ffl~~~mT~~#~3~~~+~flmo ~ it: r\:fO r.r ({y, m I/O it ft)~~ T tk:fT.#: fif1:: 1UjIflJ wrjz _*14 ~ ~mfl ]jj: 1fu*it~ In iE:JJ:M-iElfiJt2:*IJ~~, Pu while, do/while, for 1mIf .. switch/case 1I1 if/else *~-~itm, *]f; PX; fB ~ • rli~ ~ff ~ :ttvff mt *¥~frffiT~m~wrlUtt~m~~~~~~~m~.~1fu.~fflT~~Pu~re~~tktr ~~~ftM~. ~*X~~ftt ~~~M~c.~~§~m.~~~~~~~o
0
0
~*~~~~~TC~~~~*~~o~_~~.~~~~~&~~m~~~~. ~~~
*~Jl7f~ill1f
c ift~fi~a9~~mo
JE.
1.14
1.
t$ J3
>!'~.1U1It_(l.4 11). ffH~W, r~*BIJJliEiJB~pr~(1.41t): A. ';t- x, iIl:!9 789 B. ~. fred. l[i{ii1ffilE 3---456 c. ~. sensor_out, tt~71' - 10..... -+45 D. 1-f 10 1'-]1j~~~.~tlL ~1''7G~a9l[i{ii1mml:!9 fE E. F. G.
*2.
23---345
-1'-ti.1iJ Press
tlitt arry ... ptr,
m~ ffi 3---567
t::::()x23;
here to end
B<1¥:M-$1itt
a9ft*mpx;~ft~
3. MroofttfjiYJ*1f:31({il(1.611)
A. unsigned char t;
itJij~*~~.:m
l¥JiK7tjjHi:J.J 22, 21 ..
23
Ile=?
~t£*{tf:i!1i]~~tF,
A. (x=Ox45) B. (xly)
*,JttfirOOl¥Jti~ltiE£1N. ;!t~
x=Ox45;
y=Oxc6(1.6lj):
c. (x>y)
KtA5l:
D. (y - Ox06=Oxc)
c .f1~ Atmel
AVR
5. ~rOO~J¥~&f&jgtr
unsigned int value=O;
unsigned char loop _count; for(loop _ count= 123;Ioop _ count< 133;loop _count++) value+=10; //value=?? 6. ~fiJ¥~&f&JErr
FcI¥J5tilbJ{iil(l. 713):
{ value+r;
}whiJe (cntr-c l 0); j/value=?? 7. xtli~~~aiEtr Cntr=??
€1¥J5t:i:)j(iil(1. 7 13)
ft5:Efl:
unsigned char nwn_array[]={ 1.2.3.4.5.6~7.8.9,10.11~12}; (1.9 )j( num_array[3]=? unsigned int*ptr_array; (1.913) ;
11)
'lNJj;;fl:
unsigned int num _array[]= {I 0.20.30,40.50,60.70} unsigned int x.y; ptr _ array=nwn _array;
x=·ptr_array++;
y=*ptr _array++; x=?? y=?? ptr_array=??
10. fAjj~-a
c m1§ff\:~. ;n~-t--if~fl~L
7J\ ~
##f 21¥J
IfffjJt H
21-26
iXlil1i9:iUij{f,dllq:r
lWiiHWfl·I¥] >J ~~
1.15
l.
J:.~~ ~
fj;fJit, ~wlflIUiJ\~-"i'":mJ¥, :tE~X£.aH9:~.L1T~f-~$
0
Drools!!
fMi;E} liP. 7J\")3: 1'-~1Hiij ~ 4 tX., a<J:m ffffl while 1ilti1tfi:l,:~, 1T~l3:1"W:* 3 {X., ffffl do/while 1ilf*1TfpUl1'-~~ 5 {Xo
for
~ ~liJ¥ , itffl
i9:it-lilf. it.~rru(J<J~~., iQJ~ Jit~ *M.~~ A .. B~ C(.UL1iJ~~.J~'.)9='ittfj.:#f~ ::'=tJ$~IJ~X£~tfj 19:~ .L c :m~iiJ ~J.lI¥.J.:Xft -tAl 50 ~ftJit, 50 ~_R 25 ~ft~OlltlldR :*I¥Jn& tE~*iEtifBit.~.(J<J;lI!r1Jitm iEtifB<J5e.:XJJ'lfl~~~~ T)" a 1t b'J:Wrf1JA1T~ ~ *(x, y. z ~ qq ffil1.l~~f£lIl): n&a<JW~x._R*.y.ft •• z~_R •• ~~1J.ft WJ¥JEtr~*, 1T~tJt*Ja.wJt" 3.~~.2~OO~~.~::'=31'-.A~~~M-~.lliftW~~,~ft~1T~*~$The
2.
*,
4.
5.
ilf£:Vit1f41PHfij~Yifijr:::J B~
tI::I
t1ti:s:j
ttl
OxOO OxOI
Ox02
).,
ObOOOOOOOO ObOOOOllll
Obll110000
*"
Ox03
Ox04
OxOS
Ox06 OX07 Other
OblOOOOOOI Oblll11111
€'Jit--1""liJ¥*tifB}E*~.a<Jfff*mU'o 7. €lJJl~1'-f¥.J¥. ~li J¥tJtHf$:tE f£ m~ ;jf1t~ JE I¥.J F ~ -1'- 'E!~ ,qt 9i month, day ~#.J {j~L lflyeM~~~f£mc~~mW~~Al-~Rli~~B~B~~~a~~8~~~8$:tEf£m9=' ~~~~H~lli*. ~~~~~~~-~I.,f¥.J¥~~~f£m*tr;jf1t*~~~~~S, ~~ 1TCn-*~,~ H/J,j:: S ffi,m.,g± lIi:tEf£m~ a<J1!lJ1'"1t51 8.• ~.7ma<Jft~, itmmft*~.~~.ma 9. M ~~t-~J¥. 1tffl ~fl¥.IA PEl~ getchar()*~JtR ~1'-fr.t, 1I.\Jff*)3: 1'-f~~{t1l.r~]I
6.
I 0
m~ 1.10 l'l~li~~ffla<J~~.
It:A.it
c ~~~
Atmel AVR
1m -* [ll; ~
if:ffl printfO
:tIo-* Jiiij D A
* ~~Itfi~~~~~~~~~m~~~.*rr.~~~~o
EBiill*-Tm!&i~&'~¥r.Jl¥Jiill,
10.
OOU:#J OxOlllJiH±:!3jtliffiHJH, 1!f!JW~ Ox80 ~1±I~tl~D 'B1~ tp Itfi :& 1:B1. ffJH JHflHii! 14 tp Wi f.f - m ,~1J EjJ ~Hg.m tDtr I±I t5t ~ "
B~
'~Jat rr $1;t 1:
Atmel Rise It
2.1
II
~*~#
~a*$~~~, e&••~~~~3~
• J.E~ ~:m~ RIse ~¥-l1M~B'lfIH*,. #tf-iJt'8Et~n~·#t~rEij~*H-B
• ~~~jM~Btl~iIl7tftC~~-Jm § • :(£ i~f*=' ffl ~ WI e 9 if: • tfiIj ~ c .f~J¥ !J. ~ ~ na if! sq I/O {f:* • Bffl AVR tI¥-l1t~~I¥J±'~7rW:*f&¥~~-Tii1t-&9* • fffifjO £i e lMF¥*7E~ trim ffi • OOii AVR 1CiiHa§W~. #mll5E;tt~~
~ f~!R
2.2
RIse mt~~~~*MtJc Ill]IiiBtl:rJi! ~ffirm15. *llm;-m jc § 7 r}j:tt&ill!ffll¥1 ~trm;~: 19: t~~, 3;t~~1ft 7 M~.mii ~j!#;m iR • mt IRJ fiB 11'] i
A VR
!J.@~*~7.#M~~~~~~.m~, ~~~~~~~H-M~o
*.~~:m~T*RB&9~#~~:#~M~~~~o
••• WE~MT~~H-#t~~oo.
rlfj9=i.
~47.~+M~~~*B~~~.#sq~.*w:~n~,~ffimOO~~~m~*~9=', ••
~:(£-~~~~~m~~fi*&9~., ~~&~iliT~~ffl~~.~*llM~~*~&.Tk m. ~~~~~.~~~#~~~~Wmffi~~o
~ Jt;Effl
••
iUJlii § Ertl!Jl: ~ ~
e
afiM*~~~~
mill
*
0
ftC
lli-f ~
Atmel
ilf~
lit ~
Atmel
~
~J}jfj~
Atmel AVR
0
RIse W~iMBo
*ltfrm;1t#*~;fiJe
eomputing(.mfijjitfH8'-+~
I
Instruction Set
-ItXAA
c tiI~l:;J
Atmel AVR
~1'fijf*~ml f~+~) -{:gWtJ! iJt, M~ ~ 4'irIj,f~ffl r[ Et~m~~(Machine-level)m+. rmft DJ f1f M ~ 11J!iJt ~ Jl:b fi mlI Ef.rm z.Pfi~ fJ$m ~ fi:l!J:l, )~dNAI~~ ftr+ I¥J .~ fir ~ f{ § J!tk + l:.1. ~ m :l':d> I 1Lt$m~ DJ ~tE-~5tt:I..t~I?tf!f J*JM ~ Ji;J:£. :m*1tffl IPS{Millions of Instructions per M Second. m:tp Pfi~1T Ef 7J *m~f{)*OOtit.itJ:l, E8 -1'fl BMHz 1J>ff!f~* B<J VR 5tt:I..tft. A PT~tE-l!P#pgth1T TIJJ*ft:bA<Jm~. if?~J!#f:i5: 8 1'- MIPS l¥J~ltc 8
0
Ui
•• ~Pfi
~.Jt~~
M~¥-~~~~Am@m.~m~~~~~w#m*A<J*~e~-~m~~~#~~*fift
1-tB'~!lt3!l!~~. ~ff. M~~;#W;A~- -~ 1/0 t1jL$'~~ AND~ OR, XOR M#;ltft!rm+$:!&~i$<ft#ij
~~P(EXtf;lt~1IM.#~)~flr)i;{f[Bt.
.~WBDM:m
Jiffl
U~oo~~w~rep~A~M~ttB<Jm~~:h~~~;
PORTA
=
PORTA
IOx4;
MMUifi~m~~m.~*.~~~.~~fi~~.~.m~=#~M.W~.~~~A<Ja
f-t~;
~~~~mmB~ItE~fi~OO~~~Bt.
tJ;111Hl~;Jj~~:
IN
~*.~~.®.~M.m~~OO~~Et-J~~
MOV
LOl OR
OUT ~~$~ft:
SBI
'E71':hW71'~CPU(Centra1 Processing Unit), fffifl~® I/O~ CPU W?tJ1;:ftffJlj~~a<JW?tJ rm1Tfi#~~ I/O $71' JEm;ltm ~OO, .~&ffl~*AM7Moam~~~*.moo~~W~71'mM~.-~$~~~M~a
AVR
~OO~M~~.
~*.~~ ••ffl5~m+~re¥-Q~.~~~~.
OXlB,2
~ 2.
AtmelRise ~ftfi
• 77·
*~t'.!
1¥#I ••
2.4.1
FLASH
f'!i~fffilH
FLASH~~ff~3ifi7GJ!-1-tt!&:IaI::.9 OxOOOO ~ FLASH(fAJ1¥}t¥Mft.. ffl'tlf{J~:l:EHA l 1*1¥.r Atmel AVR.~*IJ3-tk:Jj!o FLASHf\:pq#~a~~F!lr !ktt(non-volatile)1¥~~. ~p~ Et!i1j 1ft iJJ ttn tI. Ja'. ~1¥t£ _m 00 ~ ~Jmill~ ~ m !k fff ~ 1;lBtffl * 1¥fit rlT ttl.tr f\:~'lU Ii;l :.9l! ~ ~~~~~~W~E~~~*1¥t£#fit3~o~~1¥~a~~$~fffit.7G~16N~,.~# filifi7GIlT~~iW-1' 16{ft*l¥.im-B~m.o 002-1 ~t±I T FLASH~pq#fita.7UI¥.r#M3~M ~
0
*:1;:.
f+- t;II;TtM~*JH~m_
fifilHl¥JJ](ijI,
$.
M.nAmf\:~1¥Mfi£m~ttl.ffft~~~.~~~. m~~~m~~ffS~*M FLASH~S. &;'~lljfij;1tim~:1Jt!#;iSo 1N.LIt. JAS~ 11l1¥.r1bLt*if. 1:::R~-1'.R w:e<J?+fiI alfflB" .~J:., 't-tE.R~m*fffit1tT~trff.pq~~.o 'ii.~*#jIJ FLASH e<Jlf1fll. ruT FLASH 11:pq1¥fitft.ifi~*lll¥.it&~. ~ §l;IJi1k~~px.~(int)A"l\~5P.:ii"
2.4.2
1l.1'-¥filH
0
AVR1rl:Jma~WrM1¥Mft.-A2:-e!.ni -1'fft![lR:ll:I¥J~/13#~1K 3 1'ijifflIi~*ffft.. 1l.~ 64 l' I/O ~#a, z..J§'Jii.t~P3$ SRAM" ~fflI~1¥MB-A2:fflT#~~~mrrtt~~~~$~:I:~~im~If1t'.!I¥.r~~.
Atmel
.{L\:;I¥.iIRJ:i£~ 32 ~~~~
·78·
AVR
!:1ffl T' -fffit± ~ 5t:. 64 -t- 1/0 ~ * H 9W filHi=:1#1tts! 1: 110 ~~.fJl:91- ~ I¥J 1& ITOP3 $ SRAM $J H tl JilIJ i'F jg illffll¥J 5f:!f fffir ~ rEi) • lil] B1 tk ~!l.tW 3 ~ ft~
0 0
g
~~fffit~Enflj(MI!I:WlOO2-2
/Fo
$.lI/; 'T
Af$rJViH2:t1J~~W.
I+-SRAM :7fflb'T
~;;§ 'iIf#~(SREG) ,~;Jt 64
1'-'llf.fHifFJJ
--
Ox60
uo ~Jk
Ox51(I10
f4~
I/O
iiimii1fa~!:RT
321' 8 f.ljmJF.lIfF:~#~
~.ff-" ~ffH
I{RI) O(RO)
14---
1. fW#H
mmI~.*~~mY.m~M3.~~32-t-¥n.~~*ffft.~*.H~WI¥J-fffit. j[; - ff, 9. :l!iE:f. 00 ff \r 8'j9X ~ ~J fiij 1¥1 itJt:~ !'L B fn~ Ii'f Jij T -ff iItI ftij $1e., ~ If1ffl T * {¥ M~~~~, ~~fflT-ffMm~*~B~ffl~-fffir~¥~~m~oMffij~ZI ~~ft~~rr~ ~B1~fflg~32~I~~ff3.~®~*ft~~ffl-.~C.~.*~~, ITO~~~~~M *1Qiij~~. ~~~frh~fflK:~*~· ..
2.I/O.~H
~ff3!i!ll ~~ T ~ffl~ff.uE!fiEtJ.iWi 64 -t-~l1l¥Jf{~-fffit.~r8](~~OO 2-2)., ;Jt~ 89 4ij: -ff3 m~ fJt M~ ~ $~ i*J $I¥J 1/0 :Sr~ ~ f11M ** ~ ~~ 1m ~ ff~ I¥J r~ ~ff l1l ff. ~ l1J (jJ l21.*~~ffl I/O .ff~*~ jgil£:!ijjiJ. EnI/O :SrHi ~J:Jt r::J. {Em 1 jJtJ:l, ftfrH:.~1&~i1>fllffl 110~.ffH89~FF PORTA l1J DDRAo :tEJ~~JlliiJlFF~ ~ [/0 if ~~ £* TiE ---i'#tr ~ D ~ A~~IOC~1mEtJ :« ~ 2-1 m~:t;.fJl #tr$ffil tl ;ffl~1If(:e::p I¥J1 1 -t- I/O ~-ffg~~~
I/O
g 0
-t-.
*
I/O DDRA
2 - 1 ~ milO If1'=fB
SRAMi1t±.lt i.jt Port A Port B P}I
IfffH~
1/0
.1'=fB i'IUIt
OxlA
Ox3A
Ox37
Ox3B
~ffmJE rJiJ if1f:a I¥1ltii~ rtu ltif:M 1¥.l~ If!~ 1'¥=Pir ~A~JM41
DDRB
PORTA PINB
Oxl7 OxlB
Ox16
Port A
PortH
Ox36 Ox5F
SREG
OxlF
~Jl~~;;ii~1'¥:ft
JiBi1I::~-1' SARM *fuitl:., i!~~FF 9!l:lM.1f\'~ffl C m1'-~~~.m*fuitl:~#~.¥OO. ~~~~m :It!!.f1J:#LXt¥J. mF~fjl-b1~~tnJEl:§ JIO JiBhlffi*OOotm*¥7M:ff3k AVR m+~
I/O
0
-1'
BX;~l[~iI~OOi$fHlPsJ~. #~2.111L ffiMr c ifr~~J¥ In mi1!i, I/O *-ffe!¥.J~ *ffl~*ttJtght1W1.ftll! {Eb~, c 1ft 1f~if. Jt~~~ ~~j;lliRJS @~ *E8* )( ~& 't::lDJiB:W:!¥.J ~~*~ 00 4ij1'-Wf¥1W¥-§.1f --t-#include ~~#, ~~~#~~*.~x~~~*~~~Z~ftOO~hlo ~~#~~w~ml.~B~
0
W~JiB~fl~~7QrWOOC*~~f¥~~T~W~~Z..~m7*:ff:ft~*ID~~~Do
# include <90s8535.h:> maint) { DDRA=OxFF; II all bits of Port A are output
DDRB ""OXOO
while (1)
{ PORTA = PINB; }
~ooOOWJ¥lUmPINB ]/0 *ff:e*~A'3I~ PORT B aeJ~j~. ffl PORTA ;tfff:.*1E~* ~ttlJiJ Port A Ef!J~W.9:r" c m1§~*emmWFFm 1 trB1#include ~X1't·~ I¥JJER f£.ffl ~f¥. :ft;g**$ltffMfi'iOO;tfffti*fuitl:. *iJIJtp~ 90s853S.h ~flfo ,~Ef.J~*, c ~§~ife5¥tJffl I/O *-ff~fFj;JV1ttQ*tl3Pim I/O e!#ii~lJ<J~D<> ""fWi4 4~I!Jj~tQ$lJ~~4ij-t 110 7r~ !;J.~~'"tff];fft~1¥J 1/0 It:ffel¥Jfflrt;;~J}Jfllie
3. 5 RAM
SAAM:ff•• ~~~ffl*ff:.W~~m~:ff$~.we9:rOO~.,*m~-ff.~~3n~D SRAM f¥.fitH~~~OO 2-3 m~" :W1l!J2-3 PJflJ' • .ff SRAM 9:r~&fl~jjlJErJ-ffM::lRrEijyJ(;Pi:ff7ttko ~m~f«h\ $H~:ff •• W~~.!¥.J~~~~M:ff •• m$*M-fffit~o&.~~.m-fffit~~.~~ *ljffl:ff.eQ
SRAM
Erl/t
I&:A~
c t;;~~
Atmel AVR
*- f JU*~IU~*~fi~!r!
lfO-It
I-+-
ffM'i-f-
ox 0000
:rufF:
~WHm.~~~.B~~*~~~~~.~ili@M~~#.OO~~M*~~~.MOO~ ~ ~111¥J fi~ ~f-_t. CodeVision A VR C i!13~~3gl;mW31'-:lt~: ffi; €1f:lt~(System Stack) ~~~ft~(data stack)" *€1f:lt~M. SRAM jg~l¥Jmi$Jffla, T#1itffOO~~:il&@J:Itk~~~ m ~3~~~mA; ••• ~.ft~m~~~~w,~~~~~~.~I¥JI*~~~mffi~I*, m~ff •• H.m, ~~~~OO~$~.o S~Mfi.~.~m~~~~w~~, fS~§~~ffl~~~~~~~~~Te.~~~~ *~~.HffM®fflmlli*l¥Jff •• 2~ ••• ~~~~fflWili~.ti*~~~-~.B~ LIFO(Last in First out. J§":llBt 1±I)8<JI*~it;I'F.*'TI¥Jlt~(:tm t 1IiJ-*ifl¥JiEt)ftl:lim:~~; mi _m iJIT mt:ff I¥J (fa ~ ~ ~ T _til .t;008<1 Jj~*~) EJ l-!1.M..~5!'tl1±l •• ~ ~~mft(Stack Pointer, SP)t~ rtJ ~ mr~ ffl 00 ff 1itiftLM~ 37 ~~mftA~m~~-1'-W~mT~ •• ~.~I¥J~.ift~o~8<JI~~it;I*~~: (1) ~lf*'TOO.~~$j~~1i.~ Ifit. ~lm3~;fUm SP *t.i:llif¥.Ji'{fi.t¥J#1it3:1t!!JIl:" i¥I1:Wl ~ ~ ~ ~ WJ I¥Jp ~ W ErJ 1i;lE 0x200, !itO~ ~ g.~ ht19: SRAM ~ I¥J x200 ~.ff S O Jmhl: 9=J (2) i3:Bf~ SP ~(1i£d>jtl Ox1FF. ~1f1~3!!fi:JfMi~tr~ ~-t-m~o iti3:frI!1J:a.:~, SP .~~ .ff$.~-~~m~~~~~.~~ff.HM~. it~€I¥J.~~. ~lm3~~~.R.€-~l:lim:~~~~~mo~~.I~It'FM~
0 ~
*"
~~WBtRf~t!KIfimp;;* JA.~9=J5!'tll±lli~lf1. SP 8<Jil:1tJZElPM1m 1. Bit~ SP l*J11 SP ,~~m~ r-- ilJm -1'Tf¥.ht:lt~fi.I¥J~.3:1t!!JIJ:(2if~), M:lfU~Jlift;fJ[] it 1 Z€, ~~~~~ffispm~~~~L-~mT#~lt~~~M.~o ~~~Hm~~~SP~8<JJmhlMft~~*ili ••••• ~~Q~~.~M.~~8<J •• c~~~1'-N~~M, XMhl~*WitsP9=J, ~~m~~~~-~EJm~~Mift~~m~ .~l¥Jtl:tF"J"~~OO-4 WT7J'o 2
(I)
~ 2"
• 81 •
tJJ!Ih*#-,
~_~:
~~~~
....---:---:------.
>...J..U!~~
S~
~~...__._.joxJSF ~~...__._.jOX25E
~~.........joxlSB
.Jt;;W:
O>:25D OX25C
~-~;
~~SP
~
~~M
.
til
SP: ~X25C
OX25¥ {)XlSE
~
.
:1'-'<1'
ox2SD
Ox25C
~~---.-.lOx25A
.
.
,
"
...,.......'"""'-----i~ ere,
......... L •• _. ... __ ...
: anilabk
i ore.
,
7 _ .... "
i'lx2SA
QXJ5B
.t
..
,
. .~.r' '...__
SRAM
L~'
.tI!!:bI: sp,
~X1SB ~
newm.ta .
OxJSF Ox15E
Ox25C OX25B OXlSA
OX25D
~able :..~~"I,W"I."
etc.
it.: m1fU;q
available
, jjij::r;t!i'1EJmt!~II!t~attHE ~lII::I:. 1
2-4
:'tE;!l!;,t
m~~~~~B~~~.~. m~~~.~~~ftW~A~~~~o
IIJ
;lfUi if!ft:
~itii~~ffla<J~lfit. SRAMtBitffl~ff:fijfjt •• ~i1~}y\ SUM ~Maa<JJ(EtlIHf~. rEJ J:l!IfItJ .~~f;!t~aaq SUM ::k'J'R:lfml¥J. ml?J~~ffl ~M~~f!trI1i:ltfX-1'~l!If£l3~::;trtJ r. ~~~m/F~#Z9JJlJ::;t~~, l?J1ro"l1:~fn~B::m:~lUTvt, :I&~~F'M'.m:~~"mm:~T ~
0
~•• ~ili*.~~§.~m~~~OO~M.ft~~.~.
~~~~~~~¥.~~~.~~~mffi*~~,~~~SUM~~m~~Ma~~m§ 5t::k, )}.. RAMI¥J $ lffiil !trr M f$; ~. ~ILIA ~fX ~ 3iIi tfHIt. ~ 7t itii~ S JY!
~~ .•• ~~.m:~T~m,fi~~ft~~~~~ffi~I¥JM*a
2.4.3 EEPROMfffilB ff:.3 q:r a<J EEPROMJR~~-tk r:tJ J?1 il/~4~~ *=ii~fJl£flij ~ jg~ -e;'M'lJim *ff$J!5 jJ,t~fi1i~lj.JS:lFfm~*=~~.f;!*~a¥&~)Em ~J!:m. EEPROMI¥Jlt!tIl:lIl:~ OxOQQ, _*a<J
a
~hlm~.*fmffl~A_~~.Ba
~~oo~mAA~m~~E~ROM~~R~*.~~~~~.~~~~~Sff:~~mBml¥Jo
Jft
2 .lJ'iJlJIJi ~: A 5~
1i~ EEPROM ffiit.~~il~a<J, ill.tll&ffl'8*ff$:-Ri~~:II:<> 1A:~ffif/g EEPROMa<J ~Dffl-~.8~~~.-~*~.~~~~~<>*:II:.m~~ffM.*~. jt:S:~fl::kW1t~~f~!ll::@:a~~gL JR1~, ~. 1 ~B~tllJtl:i1T, EEPROMRfm~~lf~
~.~$*~.
~~~~~~m*~-~~.~.2~~lli~l¥J.z.
~R:~~m-w*<>~~~~~§
tt'*AA
~*~fY. ,-~. *~~1'- 2 *~*.IPfI¥J~1m. ~}§~~m_t~jtl PC trt9=Jntrr7tfJT ?±:*~~Et.*I¥Ji9:itrr. ~:ftHgjctt~~M<ttP*ilH~'} !~~ rpm(Revolutions Per Minute. ~]}fJtl~.). ~m».. -1-S2~@~9=J~te~~tftff#Z)iJ$dJJ:Et-J1iI11*~fi~*ic3R~ i;iJ *tir ~ rpm. 11~ -~ ~!Sit 1£ f{ {fir ,1: 00I¥J RTD( ~ ~_[:a: lt ~~~ ~)~ ~ ill} iG JK iJI$IY~m\lt ~
*.ftREma~lf1f-Em.m.
0
~~ru.~.*~.~*.*~, ~~.~~: fX ~ Em ::gtR~ -1- £ T Atmel Mega 163 ~ rltlJ ~ 89li 1m:*.~ m 3t ~1~ fiit ftRM iJ! . W ~~~~~~*ffl**.-~158~mfi~.~*.~.m~om~~.
f@J
a
[Q]
::g.~~. ~ ~ -t- ~
rr B<J}j~-
~$ftR~M~MAa~M~~*~.ili~m~$~~.
{§~Mf~ ;$:~
W H: 1'-!if ~
,m,
~~*MOO~~~R##.
m%
Q
tI!~!IJ89 ~~~~;EJtpX;~. ffEJiJTffif~1~~Jff,ft£!AQEJ-1'-~~-t:*~~m*1E'BffJ:i!J!J PC ;fn~ ~ f~ I¥J tt ~ ff J!~ ~ - r ~t;F='~ R: sjti~~~ I¥J ~ i1j -t: 7EJJJG l3:~ I fF R 5t;. ;& ffJ 51:: tI! Mt· - "F ~~~~ N 1¥~fi fit:/G~~f!W??J.!}IJJiJTfl~.mfD5ll:W~~. JiJTJ!:ffntIY1~1mmt H::(_f}i§ *# ~. ~!Wi -ml¥J.m 89 ,g.1"t1 , JiJTB' JiJTJ;~ ~ jj!i tll Em U 1Wi •• 'F :
*~
~*.
I
JE~*
~t.~
X 60 .tV/]} X 1 mlty
= 120 (~_[)
~1fiifO~~ 1 rpm.
M ::gtR~ 1I!tit ~ ij f if EJ<J rpm illm j;J 2 000 ~ rm'3If1~J~Ji'm:~~ 100° F--250° r, ~tR~* rpm
I
11.~
~~.#-m~m~,.~M~1'-~m.m.a.~~~mA~~.m(~~.~~M:h~
l'f'l1. ,g.jt 41'-flJ): 1¥M3:: fa] :kJ :
120
ffjj:h71¥fil~Lt~1m. ~1Rf~-1'-fi1A/J\89~{M"
mw.j'~,;tt:rm.1¥J
m X 5 f11 I~ll=600
*11
40
~~~o*~~~~7m*.~M~ •
12:~~Jitl~~~ft~ ~
finh~.*. ~.~.~~~~Em~.*~~*~a-.~*.
~l~JJ1J,~~P:i!iM~:ff
1 024
~Tli1mff~U9r.
f~Ha!ffli.*~ 25 ~f'l1~*i5t:l#.~fO*~
~ft.~~o.~~~~~~,
~
¥~89tim*li(Ml.t; mm.~89~$~ ••
f11£r-}
••
SRAM
~~~lf-r*t
•• , ~M~1'-*~.~ffl~mfi~ •• J:.
~~~*
~~&£
~.ftMl.~B~W~M7, ~~~~~~~~#M~~~o*~I¥J§~.~m~~~ ~1J1!tL(~·-~~~~~J ~$1)~tmfllJIfF~ ~ ~ Wi. ~;g JiR5(' gr:iJ!: ~ ~~w.~ru:t!:~If{Jfj~¥At. #iJl~B~~lJ-l".pWi H[i~~ff (Inerrupts Service Routine, ISP). ~BIl ~ fi~ £;f1j@: I¥J 9=J .& ~ at .~tr ~1.I: • 9=J ft 1ffl~ ~ ItIT
*"
m: 2.
AtmelRise!1J:J!lB
·83·
~ •• ili~~~&~~~.~.ftm~~~~~.¥~.#£~~ •• *~m~~~~*ili. it~ aq ~ m*u ffl tp ~ JUUi* ~ rHl(tF fj W. :!Ii] ifHg -it ~ ~ m) , 9l ~ tE~ ~ tw (5L I±\ & iJll=f Ifj I 1lT a-1 t+1Il ~~m~~~ •• ~w~~m.~W~ffi~~m.~fio ~~tF~mm~~~~fftm.a.~~n~A.*Gw.~~.~~m+aq~hffi~. A~ n jJff!tR:: it.aq":tul:1l ~ ~ W ft~~-R!I R::i!f ~~ 1ft~~~ ft fn • m-1-., -#f~ Jl111m ft~ 1:: I¥J li~#mRr. ~m.*~w.~~-~~~ .• ~~fi~~~w#~~~m.m~~mJl~~ *B~.ml¥J.D~.~~.~*~R::~~~1-~*tp~.l~ff:!li], ~~.~~~~*nI wtp. -I~.m~.~~~1-~~~.o tplfjaq~m. f~~ftM~W~~¥~*1::.~ft # m~••• n •• *.-R!I.~tFM$I±\*o ~Ifj&~m.&, ~m.*~.~~~~OO~~I*~c.1-*~~~-~m~~~#. fi~hl~~.~~~.~.~tp~m*~~~~~hl~ffi~~*m.+~~ffi@aqtp~~.tpD ~*~~~~.~~li%~7~mtt~~traqm+m. ~~~~~tp~ffl*~aq~~~.D~
€. fi~th.trffi@l~ff"2J~m+, WIi*fIJ tplt'Tijll*fi~f\~~#7ftra~tr '£~ ~. M! @] ~:IlI:(1A;ff ji; ~ ~ FPth.tr 'F-aq fI!!:IlI:)~ ~ # Jtl ~!1f. tx~ W ~ ~ nil aq.J§ ~ i!iU R::ETI n=f;ij + i!~m+!if.l:iS §J :itB:IlI:(retum address)JA R iif Bm f *!1f.~txtF~l±\, ~~~~~tp~~~~H~~~th.tro
*m ~
2.5.1
IJ'iln
~~:YlWfifffiJEo tFlt'T~.~~~~~~I*,d~~~~~ma~M~~Ifj.-~~#~M~:.-~. ~~~I~~tplfjaqm~~~~ .=~~mm~~~~M~aqtF~nffD ±:1$ ~ ~ B<J J#-1Fii~:m: ~ 9J ~ ~ ffl JlJ ~ ~ 1M~ #fiaq iMill: 11tI:JiJ 1" jjlm Iff mfi( General ~ tp Interrupt Mask. GIMSK)~~fi~ 00 2-5 m7l'
a
..
i:I!! .tit
icl ••
1 2
iff
jttlq:.1f1j
it
it 7~aull{!L.
INTO ~ IjIfI i¥Jljj!ft fff -if
INTI
aI,I
_tlt!_. Watchdog
1i~
7H$q:.*T
_7Hlll ~ If1T
2
0
I
3 4
5
i;l1j$tfJil#fff~
~itll1ftl:t~
2 -iJit~ftll1l3
2
2~itnt.~1±l
~itll1a-tI_l±I
·84·
iP:AAJjfi_!::jj C
Bit 7 Bit 6 Bit 5 Bil4
Atmel AVR
Bil)
Bil2
Bill
8itO
~.ffl*5i~5'Hffi9JltJfl¥.JgINTO tL~5i*;r$9JWi O(-1'"~H~f!~JJ.!f4w~. tiil iEffl Ti"i#iB:!/gNTO t¥JSIJJ4J). I ~fffiil INTI {fr!i!IJ5l:~;'H~U9JWi 1., :tm~m1"tltH!LmW:jfT. ].l!1j ~~~1'"9J~~m~N~~~~~-~~ffl~ ~fl~~a<JJJ.! ~ 1±I!JI!.7£ R1. fJlJ:Wl -5 JE1ll ~ 14ffi [NT 1 mffif GIMS K 9JEt:J INT 1 {fr1frll!. ~I¥.J ir :Wl*~~JE 1. ~--ttpltJf~*tttR:&~ {a:N;:tm~ INTI ifrfitI1g O. ~i~:Ula<Jil.~I¥J1i *~.~O. W~~~~~*~~~.~£om~:!/gT~.~tp~~ff~I~. ~~.~9J~
GIMSK
~~o
5l: l{J ItJT t¥J -= Z:f7 YJt~ 19: il tL -T ~ fI.s* ~ ~ ffft-(Status t.f m Register. REG) r.p I¥J 1::fi:ij tp~ x S ~11L i&-;!v~1znr%J&t¥J;
# asm(ltsei")
mifiHtL
#inclode <90s8S35.h>
interrupt [EXT_INTO) { PORTA = PORTA "-Oxl; } void main(void) void ext_intO_isr(void)
liport A LSB set for output Iiset the INTO bit to enable external interrupt 0
Ilset the ISCOl to activate on a falling edge
~iJ~~J¥*tlm :9~tfflcplfi *~u.:iitt?± Port A 1: 0 nrl¥J LED n- 4ij~it~:tE INTO ~IHtPI¥J 0 #(mlBpl~·*Bt.art A 1: 0 1fL1¥! LED $t~~It9* ~ 002-6 f8'ili 7 ~~J¥;ffiS(flH!{ifiittlll~ P
0
RESET
)(TAI.2
~AOC7)PA1
(AD06)PA:I!
(ADC4)1111.4
XTAl.l
(ADC3)""3 (A.C1C2)1'A2
(ADC1)PA1
AREF
Ava;; .<iBND
IADCO)PAO (MI$0)P98
(SCK)P87
c~
vee
eND
~~
(AINOJPB2
{'ro5C2)PC1 {rOSC2)PC6
PC4
F'C5
[0C2Jf'07
~p
00 2-6 ~1fif'1J¥tiJ!#i!~r¥I
*t!t:i!1'"~~B1.
(fH~f~B~cpJ6f[ilJ.Q
1T~w.~mf
interrupt
lfM1. :igR:i:7~tMi*BJtm3fl¥Jm~~-1'-cpJ6fm*~J¥"
fAfil3:iitl
RET 2e
m~~*.
~~mAt.mm.#:H(fl~3~~~~~~~*~~~.I(?±~~~*~~~.e~WffiA iltt. ~ :~nr-t'}if ttHi2 rfl.fi:W 1 5l(lili B113: 1'- ill~ &:. ;{OH~J, RETI -1'"
*). ~
[EXT_INTO] ~
{t~ 2, ~
*~ISR~~OO.~~hl,,:ig~~~~~I¥J~.$
Q
~ ISR
Nff(flm
3 tT~-~fl~l¥J1Atr~iU Port A
4ij~~~th.fTlff,
e
14m OR
If{JMfEHfL
*iIT"*fMlu.: Port A
GIMSK
{j!;~$r:p~ 0 Fmltt
••
MCU