real - time chip i pmode

, hvor adgang til hurtige chip fra beskyttede tilstand., bidragyder: greg vigneault, {, md > hvad vil nogen her anbefaler som den bedste måde til dos,    > beskyttede tilstand for at få de nuværende tidspunkt * uden * kanon,    > og tilbage til virkelige tilstand, at en standard, dos?,  , hvis din kode har lov til at tale til tidstro ur (rtc) chip,   her ' nogle eksempel kode adgang til rtc direkte.de funktioner,   arbejde udelukkende med 24 timer - klokkeslætsformat (hvis nødvendigt, internt af de rtc,,   de oversætte mellem 12 /24 timer gange og binære /bcd formater)...), (*******************************************************************), program rclock; {kom /fastsat tid /dato direkte fra rtc chip},                          (9. juni i 1994.greg vigneault}, type treg = 0. $d (interval for tiden /dato registrere adresse},        to23 = 0..23) (interval for timer),        to59 = 0..59; (interval for minutter og sekunder), var år, mth, dag, dow, hr, min.: byte;, funktion rtcbusy: boolean, begynder (rtc tid /dato er opdateret?...},      havn [70]: = $; rtcbusy: = (havn [71 $) og 128) = 128,    ende (rtcbusy}, funktion readreg (fo.: treg): byte; begynde {læste en rtc register.},     , hvis fo på [0 - 9] så gentage {-) indtil rtcbusy;,      havn [70]: = fo; readreg: = havn [71 $],    ende (readreg}, procedure writereg (fo: treg; data: byte); (skrive rtc reg...},    var vikar: byte; begynder,     , hvis fo på [0 - 9] så begynde {tid /dato, reg?},        gentager {-) indtil rtcbusy;,        havn [70]: = $b) temperatur: = havn [71 $]; havn [71 $]: = temperatur eller $80,      ende (hvis},      havn [70]: = reg.; havn [71 $]: = data,     , hvis fo på [0 - 9] så begynde,        havn [70]: = $b; havn [71 $]: = temperatur og ikke 80 dollars.      ende (hvis},    ende (writereg}, funktion bcd2bin (bcd: byte): byte; begynde {xlate bcd til binære...},      bcd2bin: = (bcd og $-) + (bcd shr 4) * 10),    ende (bcd2bin}, funktion bin2bcd (bin: byte): byte; begynde {xlate binære til bcd.},      bin2bcd: = (bin mod 10) eller byte (bin div. 10) sømhaj shb 4),    ende (bin2bcd};,,, procedure gettime (var - hr, min, sec: byte),    var vikar: byte; begynder,      sek: = readreg (0); og min: = readreg (2),      hr: = readreg (4); temperatur: = den højtstående repræsentant; hr: = den højtstående repræsentant og ikke 80 dollars.      hvis (readreg ($b) og 4) < > 4 så begynde {xlate bcd bin...},        sek: = bcd2bin (sec); min: = bcd2bin (min); hr. = bcd2bin (hr),      ende (hvis},      hvis (readreg ($b) og 2) < > 2 - (rtc i 12 timer mode?...},        hvis (temperatur og 128) = 128 (p.m.?},          så begynde, hvis (t < 12), inc. (hr. 12),          andet hvis hr = 12, så den højtstående repræsentant: = 0,    ende (gettime}, procedure settime (hr. to23; min, sec: to59),    var vikar: byte. begynder,      temperatur: = byte (hr),      hvis (readreg ($b) og 2) < > 2 - (rtc i 12 timer mode?...},        hvis (t > 12) dec (hr, 12) andre hvis hr = 0, så den højtstående repræsentant: = 12,      hvis (readreg ($b) og 4) < > 4 så begynde {rtc vil bcd - format.},        hr: = bin2bcd (hr); min: = bin2bcd (min); jf.: = bin2bcd (sek),      ende (hvis},      hvis ((readreg ($b) og 2) < > 2) og (vikar > 11. og så hr: = den højtstående repræsentant eller 80 dollars.      writereg (0 sek.); writereg (2 min.); writereg (4 timer),    ende (settime}, procedure getdate (var - år, mth dag: byte); der begyndes,      dag: = readreg (7); mth: = readreg (8); år: = readreg (9),      hvis (readreg ($b) og 4) < > 4 så begynde {xlate bcd til binay...},        dag: = bcd2bin (dag); mth: = bcd2bin (mth); år: = bcd2bin (yr),     ; (hvis},    ende (getdate}, procedure setdate (år, mth dag: byte); begynder,      hvis (readreg ($b) og 4) < > 4 så begynde {rtc vil bcd - format.},        dag: = bin2bcd (dag); mth: = bin2bcd (mth); år: = bin2bcd (yr),      ende (hvis},      writereg (7); writereg (8, mth); writereg (9 år),    ende (setdate}, begynder (rclock},    gettime (hr, min, sek.); getdate (år, mth, dag); writeln;,    skrive (' dato og', mth, og' /', dag, og' /', år, og'.');,   WriteLn ('Time is ',Hr,':',Min:2,':',Sec:2,'.');,   Write ('(BTW, your RTC is in ');,   IF (ReadReg($B) AND 2) <> 2 THEN Write ('12') ELSE Write ('24');,   Write ('-hour mode using ');,   IF (ReadReg($B) AND 4) <> 4 THEN Write('BCD') ELSE Write('binary');,   WriteLn (' format.)');, END {RClock}.,



Previous:
Next Page: