I
М И К Р О К О Н Т Р О Л Л Е Р Ы
t
Пример программы на языке С
/*
1
-:ой
6
еа айАб ftodaido a пеб+ad i a la o ia o i in 6 e . Qdxenti adxiti.d a doodd
1
.
касс a6oaS qaiioiai,
65 aai n ia a d a ieiia {
7
ai:бпйааабп^ а йббахеоб
iaiyod . хбахёа D ataFlash т-абас абоаб 1
а
абоаб 2 а ба&бйбв iiaiiO o.
V
fin clu d e м i о8Ь35.h"
fin clu d e
•include " std llb .h "
•include " d a ta !1 a s h . h"
u n sign ed ch ar temp - 0x80;
if((A C SK & 0x02))
/ / ailed oead 6 n 6 d ix d d d i, o i ixafid daiiG d
/ / aieasiO dfloii drlotiiiaeaiO
(
b u ffe r co u n ter *=
0;
P age_cou nter « 0 ;
/ / fiddifi n + .o+ d ea, anee axeaeiu aubii ^aiefidxti
// iiatid aaiiHa
ACSR
OxFD;
/ / i+ en oeii oeada n ed ia ea
)
/ / id id io o iu
void setu p (v o id );
void era sin g (void ) ,
void record in g (v o id );
void interrupt[ADC v e c t] sam ple ready (v o id );
void w rite t o f la s h (u nsign ed char ad d a ta );
void playback (v o id );
void n ext p age_to n ex t b u ffe r (u n sign ed ch ar a c tiv e _ b u ffo r , u n sign ed
in t r^jbe c o u n te r );
void ^ fctorrup t (TIMER1 O V F l.voct] o u t _now( v o id ) ;
void a c tiv e b u ffe r to _sp eak or (u n sign ed ch ar a c t i v e b u f f o r ) ;
/ / aeiaaeiitua la d a ia iiu a
v o la t ile unsigned
char
w ait
0,-
void sotu p (void )
(
1
ИЯШ
0x1)1);
и
SCK. MI SO, MOSI, c s
/ / PH7. PH6, PB‘>, PH4,
// О
l
о
о
//l-o
1
1
PORT» - OxFF;
DDRA =
0x00;
POHTA
0x00;
DKW) - 0x10;
1
) ;
/ / K iddeaoo^aooy 'i566a SPT
IJOD, WP . RDYTlSY, RST
PH3. PH2 . PHI, РН0
0
0
1 0
1 1
0
1
/ / ana айбхай a a u n io ii n ifid iy ie d , ia a5£ad5
/ / i а&дбфз-:1йа бадопохбй (LED iiS d csai)
/ / P ort А ггбА аасуаопу баб a S ia
/ / P ort 1) xid aiiaeyaon y баб aoxa (D4; айб£а)
/ / 'idaduadiej/ ба^баиахй
w h ile ( 1 (PINB & 0 x 0 2 ));
PORTB
~DF CHIP ^SELECT ;
SPUR « BUFFER_1 WRITE;
w h ile
(l (SPSR Sc
. temp));
SpDR * 0x00;
w h ile (I (SPSR
Sc
.
ten «)));
SPDR * (ch ar) (buffer__cou n ter>> 8);
aaddfia
w h ile (1 (SPSR
Sc
temp) ) ;
SPDR ” (ch a r )b u ffe r _ c o u n te r ;
ndddidd)
w h ile (! (Sp Sr
Sc
tatap));
SPUR =■
fla sh _ d a ta ;
w h ile ( 1
(SPSR
Sc
temp) ) ;
ft
xdxaaded c?aiy6in6d oeyoa
/ / абёЬ+dxed D ataF lash
/ / 1eed d id d
q
d ad d ed iey Sddadd+e
/ / I d a a a ii
/ / £го& ахеа «yaaddediey iddd&di-e
/ / id aaaiS + xadafid uaa adda ddodda
/ / x xead ied c?ada5odioy xdddadi-e
/ / ddoda aadana (ia e ft. 2*8 * 256
/ / ixea & iea gaaddadidy Iddadd+e
/ / c?dieft(i a a i iflo а ddaehdd a a ilu 5 SPI
/ / lEeedaied «ydaddadidy idddad-Ed
PORTB j* DF_CHIP_SELECT;
/ / айёёЬ+didd D ataF lash
b u ffor_cou nter+ + ;
i f (b u ffe r_ co u n ter > 528)
If
dftde d
6
dd
6
(^ d iid id i,
61
a a i ftiad
6
aeeiia
/ / (jdidnUaaaony a n b aaieoo ia iy o e
(
buffer__counter ---
0
;
i f (page_.counter < 4096)
If
айёе id iy o ii id < ?d iieid id
{
PORTB &« -DFCIHP SELECT;
If
аёёЬ+ёбй D ataF lash
void er a sin g (v o id )
(
unsigned in t b lo ck co u n ter • 0;
unsigned char ttanp • 0x80;
ACSH |
0x02;
/ / o h o a iia e a o eaaa, iiod<?flaat>uaai, +6i
/ / nedaobuei y o a il i a ieasia au6u c?diefiU daiiOib
// idaduaaidy ga id a u a iti, li d o SPI a o e b : ,! . «adii6udd» flaaedi, idflaild
MSB, 3 aaaxii SPI. F c l/4
SPCR
OxbC;
v h ile (b lock cou n ter < 512)
(
PORTH
8РШ
&- -1)F CHIP SELECT;
BI/XIK KRASE;
/ /
ae6b :-aiea D ataF lash
while
SPUR
( 1 (SPSR &
ton«)) ) ;
(c h a r )(b lo c k cou n tcr> > 3);
/ /
x a ciia ied ^ aaadeaidy
iddaad+e
while
SPUR
( ! (SPSR &
tem p));
- (c h a r )(b lo c k cou n tor< < 5);
/ /
xsoaaxda gaaadoaxey
ia d a a d -e
while
( ! (SPSR &
tem p) ) ;
/ /
xsoaaxed ^aaadsdxdy
iddddd-td
SPDR
0x00;
/ /
l a adasxi
whi 1 e
( ! (SPSR &
ten«)) ) ;
ft
xadaaidd (jdaadodxe^
iddaddtd
юнтн
1
I)F CHIP SKI>:CT;
ft
aU6ob;6 ic a D ataF lash
block cou n ter ►
*;
w hi1e(! (PINH 6 0 x 0 2 ));
/ / im oflaida i-t-dfl&ee afiled
)
SIKIR
0x00;
/ /io o e lx -a id a SPI
>
SPDR ■ Bl_TO_MM_PAGE__PRQG.WITHOUT_ERASE; / / (jdidftdbii aa iiC a
ft
d? dddddd 1 & hoddidod
w h ile
(1(SPSR
&
temp));
ft
xsdadxdd
qhha&ehiey
XdSdad-i-ё
SPDR *
(ch ar) (page._counter>>6);
w h ile
( l (SPSR
Sc
temp)
);
ft
ixe& died ^daddedidy
xadadd-rc
SPDR *
(ch a r)(p a g e_ co u n ter< < 2 );
w h ile
(1 (SPSR
S
l
t e n p ) );
//
iaed&dxdd c?aadd
0
did^
iddadd+o
SPDR *
0x00;
//
ia adeexx
W hile
(! (SPSR
Sc
tem p ));
l l
xaedadied (jaaddedxey
iddadd+e
PORTB
1* DF_CHIP_SELECT;
If
бйёёЬ+Лхоа D ataF lash
p age_cou n ter
++;
}
e l s e
{
PORTB | - 0x08;
If
iidd iid bu LED
^ d iilet I (PIND
Sc
8 ) ) ; / / a&ddii l i e d e x i le d gaidftd id xb id u aid ( e i i i e d 3)
}
}
}
v o id p la y b a ck (v o id )
{
u n sign ed in t page__counter * 0;
u n sign ed in t b u ffe r_ co u n ter - 0;
/ u n sign ed ch ar a c tiv e _ b u ffe r ■ 1; / / a eo e a iu e aoodfl “ A6oa3 1
u n sign ed ch ar temp
m
0
x
80
;
void reco rd in g (v o id )
(
/ / Idaduaaidy g a fd a u a iu , i
'166
SPT d ed b ^ .t, «ааабйбб» бзагб!,
ladaQc
MSB. 3 daasdi SPI. F c l/4
SI>CR
OxbC;
AUMUX
0x00;
ft
AIXISH
OxDI);
/ /
II
while ( I (PINJ) &
8
)) ;
/ /
II
x iid d a o liii5a.i айахаа Аб1 - 0
la o iiiL T d AO ldaxada^xadLdd, fC K /32,
hoado ld a iабас;1 a a i6У
бобе )'5idSOicadorS.y, i i e d idicaoa e x ile d
g a io n e (ex x ’
ie a 3)
TCCR1A = 0x21;
TCNT1 - 0x00;
TIFR » 0x04;
TIMSK « 0x04;
TCCR1B * 0x01;
OCR1B = 0x00;
If
8 add 0E I, eiU ieuc;6d6ny COM1B
If
xdidddidd ft+,6-*-ded 1
/ / ndSifi oddiid idddOtoaie^ h f ^ t d e d 1
/ / da^ddedida idddOiidxdy ia d d iid id ie ^ ft-f,6-rded 1
/ / e x y o . id ad ii+ .d d ft-i ,6+бба 1 * 1
/ / x d id ed ied айбхаххёх ddaenoda ftdaaiaieV D
/ / idd60.Sdxey ^aidaCidiu, Sifld SPI а её Ь ь .г , «аАабйее» ddaidi, Idda06
MSB, 3 daaeci Sp x , F c l/4
SPCR * 0x5C;
Alx:SR
0x00; / / auoob^diea A6i
SPa<
f
0x00;
/ / auedb:a i ca SPT
>
A
void int:errupt[A ix: v e c t] sam ple re o d y (v o id )
(
unsigned char count -■ 0;
while (count < 6) cou n t*
4
;
/ / xa*6iidiea a 6d*axda xan6xdii6d6 deeexa
ajx:sr |
0x40;
/ / hoadd i i a i a i AO xdaxddd^xddxdy
wr
i
to to lla sh (A lx : 0 x 105); / / :oaxda a a ix u o , iddxdda<;xaaxed 8 add
/ / e hiddaxaxda ax o eye
>
void w rite to
i
1
a sh (u n sig n ed char fla s h , d ata)
(
s t a t ic u n sign ed in t b u ffe r co u n ter;
s t a t ic u n sign ed in t page co u n ter;
n ex t.jp a g e_ to _ n ex t_ b u ffo r (a c tiv e _ b u ffe r , page .cou n ter) ; / / -fodied
/ / ftoddieod 0
If
a a66ad 1
w h ile (!(PIN B
Sc
0 x 0 2 ));
/ / is d a a ie a c?dQAd0aie^ £ddddd-*d ddxiCS
/ / d? nodaieou 0 & a66ad 1
w h ile ( (page_counf.er < 4 0 9 5 )t( I (PIND & 2))) // i i o a e x ile d
/ / aiftid£e<;aa&Aidy
/ / ( e i i i e a 1) xaaedod
{
page_.counter++; / / oaiad u d d d ,i nddddbuob n odaiedo
n ex t_ p a g e_ to _ n ex t„ b u ffe r (a c tiv o _ b u ffe r , p a g e_ co u n ter);
a c t i v e _ b u f f e r t o s p e a k e r ( a c t iv e _ b u f f e r ) ;
i f (a c tiv e _ b u fte r ** 1) / / dfidd doodd 1 ^adyddn^ daddaxui d 6 6 a d ii
{
a ctiv e _ b u ffe r + + ; / / 61 on o d id a eea d a i d66ad 2 a ea+dh6aa a e o e a ix a i
----------
1
45
Радионю
6
и
1
еяь
M -12/2004 J
предыдущая страница 44 Радиолюбитель 2004-11-12 читать онлайн следующая страница 46 Радиолюбитель 2004-11-12 читать онлайн Домой Выключить/включить текст