Odpocet casu

VA Elektronik - Andel Vladimir ing. vaelektronik
Středa Březen 17 11:42:00 CET 2004


> > Jsem zacatecnikem v programovani 51.Chtel bych realizovat
> > minutky, tzn nastavit cas,  minuty:sekundy a po spusteni
> > odpocitavat ubehnuty cas do 0. Dynamicke zobrazovani na
> > 4-mistnem LED displeji, blikani dvojic cisel pro nastavovani
> > mam vyreseno. Nevim jak resit odpocitavani casu?
> > Diky za radu, eventuelne komentovanou rutinu.
>
Ja jsem to psal uz davno a v cecku. Nejdriv se cislo (typu unsigned char,
tedy
byte) normalne dekrementuje, potom se zavola Dekodect. Do Pomcas se da to
cislo, do Maxcas maximalni cislo, do ktereho se pocita.

/* ------------------  dekadicka uprava pri odecteni  ----------------- */
byte Dekodect(byte Pomcas, byte Maxcas)
{
if((~Pomcas&0x0F)==0) Pomcas-=6;
if(Pomcas==249) Pomcas=Maxcas;
return(Pomcas);
}

Tady je assemblersky preklad. Je to sice trochu delsi, ale zase univrezalni.
             ; FUNCTION _Dekodect (BEGIN)
;---- Variable 'Pomcas' assigned to Register 'R7' ----
;---- Variable 'Maxcas' assigned to Register 'R5' ----
                                           ; SOURCE LINE # 358
                                           ; SOURCE LINE # 359
                                           ; SOURCE LINE # 360
0000 EF            MOV     A,R7
0001 F4            CPL     A
0002 540F          ANL     A,#0FH
0004 7004          JNZ     ?C0039
0006 74FA          MOV     A,#0FAH
0008 2F            ADD     A,R7
0009 FF            MOV     R7,A
000A         ?C0039:
                                           ; SOURCE LINE # 361
000A EF            MOV     A,R7
000B B4F902        CJNE    A,#0F9H,?C0040
000E AF05          MOV     R7,AR5
0010         ?C0040:
                                           ; SOURCE LINE # 362
                                           ; SOURCE LINE # 363
0010         ?C0041:
0010 22            RET
             ; FUNCTION _Dekodect (END)


Andel
www.mirnet.cz/vaelektronik  ,  vaelektronik@mirnet.cz.






Další informace o konferenci Hw-list