\
МИКРОКОНТРОЛЛЕРЫ
\
bo o l W a itS ig n a l (b o o l O N ,in t d e la y , i n t s le e p ,c h a r *msg)
/ / Ожиданием сигнала готовности о т микроконтроллера.
{DWORD
forM odecnStatus;
i f (mag ! — NULL) p r in tf(" % s
\r " ,m s g );
f o r ( i n t iP o z - 0 ; iP o z < d e la y ; iP o z+ + )
/ / Дожидаемся сигнала (PB 1-0)
(W aitC onnEvent (forCom n, £forM odem Status,N U LL);
GetConnModemStatue (forCcnvn, £forM odem Status) ;
i f (ON) / / Дожидаемся ненулевого сигнала.
( i f ( (forM odam Status £ MS_CTS_0N) (— 0) re tu rn tr u e ; )
e ls e
/ / Дожидаемся нулевого
с и г н а л а
( i f ( (forModecnStatus £ MS_CTS_0N)
m m
0) re tu rn tr u e ; )
i f (msg ! * NULL)
/ / Тольно а этом случае выдаем информацию.
p r i n t f ( ”%s
\r" ,m s g ,c h a rs [iP o z % 4 ] ) ;
S le e p (s le e p );
)
re tu rn
f a ls e ;
)
i n t m a in (in t a rg e , c h a r* a r g v [])
{DWDRD
forM odam Status, o o n f l;
i n t
WORD
c o n f - 0x0IC O , t e s t - 16;
WORD
c h ar
Program File[M AX_PA TH], ComPort (MAX_PATH)
bo o l
ru s s ia n “ f a ls e ;
iP o z , і C urs, iNum, F il e l d ;
i n f o [1 0 2 4 ];
* "c o m !:", fo rM s g [2 0 ];
i f (arg e > 1) s tr c p y (P r o g r a m F ile ,a r g v (lJ ); e is e m assag e();
/ / Раэбор параметроа вызова,
i f (a rg e > 2 ££ * a rg v [2 ] ! — ' / ' ) (s trc p y (C o m P o rt,a rg v [2 J );
iNum " 3 ; ) e is e iNum - 2 ;
fo r (iP o z “ iNum; iP o z < a rg e ; iPo z++)
i f (! s t m c n p ( a r g v [iP o z ), M/c : M,3 ) 1( !s trn c n p (a rg v {iP o z ], "/C : ” , 3 ) )
s s c a n f(a rg v [iP o z ] + 3 ," % h x " ,£ c o n f);
e i s e i f ((s tm c n p (a r g v [iP o z ] , " / f " , 2 ) | | !s tm c n p (a rg v [iP o z J , ’’/ F " , 2 ) )
t e s t - 1024;
e i s e i f (!s trn c n p (a rg v [iP o z l , " / r " , 2 ) I I (s tm c n p (a rg v [iP o z ] , ” /R ’\ 2 ) )
ru s s ia n - tr u e ;
e is e m essage() ;
i f ( (forConvn - C r e a te F ile (Com Port, GENERIC_READ fGENERICJWRITE, 0 , NULL,OPEN_EXISTING, FILE_AT77?IBUTE_NORMAL, NULL)) — NULL)
( i f (P ru s sia n ) p r i n t f ( ” * * * %s n o t o p e n ed .
. . \ n M,ComPort) ;
e ls e p r i n t f ( " * * * He удалось получить доступ к % s .
. A n " ,C o m P o rt);
e x i t (2 );
)
e ls e
/ / Порт открыт успешно - считываем файл.
( i f ( ( F il e l d “ _ о р вп (Program File,_0_R D O N LY))
-1 )
/ / Открыть файл не удалось
( i f ( ! ru s s ia n ) p r i n t f ( " * * * C a n \'t open % s .
. . " ,P ro g ra m F ile );
e ls e p r i n t f ( " * * * He удалось открыть файл % s.
. . ’’ ,P ro g ra m F ile );
e x i t ( 2 ) ;
)
_ ls e ek (F ileId ,5 l2 ,S E E K _ _S E T ) ;
/ / Насколько
я
понял стр уктур у файла *.s a v ,
metnset ( in f o ,0 ,s iz e o f ( i n f o ) ) ;
/ / первые 512 байт в нем просто можно выкинуть.
_ r e e d ( F ile ! d ,in f o ,s iz e o f ( in f o ) ) ;
_ c lo s e ( F ile ld ) ;
EscapeComnFunction(forCarm ,CLRBREAK);
EscapeComnFunction (forConm,CLRDTR) ;
EscapeComnFunction (forComn,CLRRTS) ;
i f ((ru s s ia n ) p r i n t f ( ”> Connect progranm ator and p re ss E n t e r .
. . '') ;
e ls e p r i n t f ( " > подсоедините программатор и нажмите E n t e r .
. . " ) ;
g e t o ( s t d in ) ;
EscapeComnFunction (fo re a rm , SETBREAK);
/ / Подаем питание * начинается очистка контроллера.
EscapeComnFunction (forComn,SETDTR) ;
EscapeComnFunction (forComn,SETRTS) ;
S le e p (2 0 0 0 );
/ / Даем аремя варядиться конденсатору программатора!
i f (( W a it S ig n a l(fa ls e ,3 0 0 ,1 0 0 ,(ru s s ia n ? "conn " : "соед " ) )
( i f ((ru s s ia n ) p r i n t f ( " * * * Tim eout w h ile c le a r in g .
. . \ n " ) ;
e ls e p r i n t f ( " * * * Нет отаета aa время о ч и с тк и .
. . \ n " ) ;
g o to e x i t l ;
)
/ / Память программ очищена - начинаем аагрувку программы.
EscapeComnFunction (forComn,SETDTR) ;
/ / Выбираем память программ, а не данных (РВ0—1) .
EscapeComnFunction (forCom n, CLRBREAK);
/ / Даем сигнал насчет э то го (Р В 2 -0 ).
i f ( (W a itS ig n a l ( t r u e , 1 0 0 ,1 0 0 ,! ru s s ia n ? "cm dl+" : "км д 1+"))
( i f ((ru s s ia n ) p r i n t f ( " * * * Tim eout a t f i r s t p a r t o f comnand.
. . \ n " ) ;
e ls e p r i n t f ( " * * * Нет ответа при приеме первой части команды .
. . " ) ;
g o to e x i t l ;
)
/ /
Дождались ответа на пераую часть команды.
EscapeCom nFunction(forConm , SETBREAK) ;
/ / Даем сигнал насчет это го (Р В 2 -1 ).
EscapeComnFunction (forCom n, SETDTR) ;
/ / Сбрасываем си гн ал .
i f ( ( W a it S ig n a l(fa ls e ,1 0 0 ,1 0 0 ,(ru s s ia n ? "cm d l-" : "ю «д 1 -"))
( i f ((ru s s ia n ) p r i n t f ( " * * * Tim eout a t f i r s t p a r t o f com nand.
. A n " ) ;
e ls e p r i n t f ( ''* * * Нет отаета при приеме первой части команды.
. . " ) ;
g o to e x i t l ;
)
28 I
I
Радиолюбитель - 0 4 /2 0 0 5
предыдущая страница 27 Радиолюбитель 2005-04 читать онлайн следующая страница 29 Радиолюбитель 2005-04 читать онлайн Домой Выключить/включить текст