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