PIC - datum a cas.

Snail Instruments snail
Středa Březen 17 14:37:26 CET 2004


>Prictu si potrebny interval k minutam, co pretece pres
>max. dam vzdy do vyssich, 

Jenom pozor, pokud dojde k preteceni pri pricitani k minutam (nastavi se carry), je treba zvetsit udaj hodin o 4 a udaj minut o 16 (256 minut = 4 hodiny + 16 minut). Pokud dojde k preteceni hodin, pricist 10 dni a 16 hodin, preteceni dnu uz je komplikovane. Nejlepe vyjadrit interval jako (dny +) hodiny + minuty a zaridit, aby nedochazelo k preteceni 8 bitovych promennych.

>DD0:	BTFSS	YEAR,0
>	BTFSC	YEAR,1
>	RETLW	D'28'
>	RETLW	D'29'
>
>Nadherna konstrukce - moc libi.

Tak asi proto mam rad assembler. Dovedete si predstavit tu nudnou konstrukci v cecku: if (year%4) return 28; else return 29; :-)

Ted me napada, ze se bere vzdycky promenna year, spravne by se mela brat promenna z prislusneho casu (kuprikladu wyear). Chyba ale nastane zridka, pouze pokud se promenne budou lisit take v letopoctu a ta normalizovana bude uz mit unor. Cili pri zpracovani intervalu delsiho nezli mesic. Uplne spravne by melo byt:

DD0:	incf	fsr,f
	movf	indf,w
	decf	fsr,f
	andlw	0x03
	btfss	status,z
	retlw	D'28'
	retlw	D'29'

a jeste dekrementovat FSR teprve po volani funkce DDAYS

NRM6:	INCF	FSR,F
	MOVF	INDF,W		;(MOVF	MONTH,W)
	CALL	DDAYS
	DECF	FSR,F

J. Hanzal





Další informace o konferenci Hw-list