Temps réel de la puce dans pmode


Comment accéder en temps réel la Puce à partir du mode Protégé.

l'auteur: GREG VIGNEAULT

{
MD>Ce que quelqu'un ici recommander comme étant le meilleur moyen pour DOS
>le mode protégé pour obtenir l'heure actuelle du jour *sans* retournement
>retour au mode réel pour en faire un standard de DOS appeler?

Si votre code est autorisé à parler de l'horloge temps réel (RTC) de la puce,
ici & #39 s un exemple de code pour accéder à la CCF directement. Les fonctions
travailler uniquement avec 24 heures format de temps (si nécessaire, à l'interne par le CCF,
ils traduisent entre 12/24 h la fois et binaire/BCD formats)...
}

(*******************************************************************)
PROGRAMME de RClock { Get/Set Time/Date directement à partir de RTC puce }
{ 9 juin 1994. Greg Vigneault }
TYPE de Treg = 0..$D { plage de temps/jour un registre des adresses }
To23 = 0..23 { plage pendant des heures }
To59 = 0..59 { gamme pour les minutes et les secondes }
VAR An, Mois, Jour, DoW, Hr, Min, Sec : OCTET

la FONCTION RTCbusy:BOOLEAN BEGIN { RTC temps/date de mise à jour?... }
Port[$70] := $A RTCbusy := (Port[$71] ET 128) = 128
END {RTCbusy}

la FONCTION ReadReg (Reg:Treg):BYTE BEGIN { lire un CCF registre... }
SI Reg DANS [0..9], PUIS RÉPÉTEZ {attente} JUSQU'PAS RTCbusy
Port[$70] := Reg ReadReg := Port[$71]
END {ReadReg}

PROCÉDURE WriteReg (Reg:Treg de Données:BYTE) { écrire RTC reg... }
VAR temp:OCTET de COMMENCER
SI Reg DANS [0..9] THEN BEGIN { heure/date reg? }
RÉPÉTER {attente} JUSQU'PAS RTCbusy
Port[$70] := $B temp := Port[$71] Port[$71] := temp OU $80
END{SI}
Port[$70] := Reg Port[$71] := Données
SI Reg DANS [0..9] PUIS COMMENCER
Port[$70] := $B Port[$71] := temp ET PAS $80
END{SI}
END {WriteReg}

la FONCTION BCD2Bin (BCD:BYTE):BYTE BEGIN { xlate BCD en binaire... }
BCD2Bin := (BCD ET $0F) (BCD(SHR 4) * 10)
END {BCD2Bin}
FONCTION de Bin2BCD (Bin:BYTE):OCTET BEGIN { xlate binaire BCD... }
Bin2BCD := (Bin MOD 10) OU de l'OCTET((Bin DIV 10) SHL 4)
END {Bin2BCD}

PROCÉDURE GetTime (VAR Hr,Min,Sec:OCTET)
VAR temp:OCTET de COMMENCER
S := ReadReg(0) Min := ReadReg(2)
H := ReadReg(4) temp := Hr Hr := Rh ET PAS $80
IF (ReadReg($B) ET 4) <> 4 ALORS BEGIN { xlate BCD à la poubelle... }
S := BCD2Bin(Sec) Min := BCD2Bin(Min) H := BCD2Bin(Rh)
END{SI}
IF (ReadReg($B) ET 2) <> 2 THEN { CCF posté à 12 h la mode?... }
IF (temp ET 128) = 128 { P. M.? }
PUIS COMMENCER SI (Hr < 12) THEN INC(Rh,12) FIN
ELSE if H = 12 H := 0
END {GetTime}

PROCÉDURE SetTime (Hr:To23 Min,Sec:To59)
VAR temp:OCTET de COMMENCER
temp := OCTET(Rh)
IF (ReadReg($B) ET 2) <> 2 THEN { CCF posté à 12 h la mode?... }
IF (Hr > 12) PUIS le DEC(Rh,12) d'AUTRE SI H = 0, ALORS H := 12
IF (ReadReg($B) ET 4) <> 4 ALORS BEGIN { RTC veut BCD format... }
H := Bin2BCD(Rh) Min := Bin2BCD(Min) S := Bin2BCD(Sec)
END{SI}
IF ((ReadReg($B) ET 2)<>2) ET (temp > 11) PUIS H := h OU $80
WriteReg(0,S) WriteReg(2 Min) WriteReg(4,Rh)
END {SetTime}

PROCÉDURE GetDate (VAR An,Mois,Jour:BYTE) COMMENCER
Jour := ReadReg(7) Mois := ReadReg(8) An := ReadReg(9)
IF (ReadReg($B) ET 4) <> 4 ALORS BEGIN { xlate BCD pour binay... }
Jour := BCD2Bin(Jour) Mth := BCD2Bin(Mth) An := BCD2Bin(An)
END {SI}
END {GetDate}

PROCÉDURE SetDate (An,Mois,Jour:BYTE) COMMENCER
IF (ReadReg($B) ET 4) <> 4 ALORS BEGIN { RTC veut BCD format... }
Jour := Bin2BCD(Jour) Mth := Bin2BCD(Mth) An := Bin2BCD(An)
END{SI}
WriteReg(7,Jour) WriteReg(8,Mth) WriteReg(9,An)
END {SetDate}

BEGIN {RClock}
GetTime (H,Min,Sec) GetDate (An,Mois,Jour) WriteLn
Write ( & #39 Date est & #39 ,Mth, & #39 / & #39 ,Jour, & #39 / & #39 ,An, & #39 . & #39 )
WriteLn ( & #39 Temps est & #39 ,Rh, & #39 : & #39 Min:2, & #39 : & #39 ,Sec:2, & #39 . & #39 )
Write ( & #39 (BTW, votre RTC est & #39 )
IF (ReadReg($B) ET 2) <> 2 ALORS Écrire ( & #39 12 & #39 ) SINON Écrire ( & #39 24 & #39 )
Write ( & #39 heures de mode à l'aide de & #39 )
IF (ReadReg($B) ET 4) <> 4 ALORS Écrire( & #39 BCD & #39 ) SINON Écrire( & #39 binaire & #39 )
WriteLn ( & #39 format.) & #39 )
END {RClock}.









Temps reel de la puce dans pmode


Temps reel de la puce dans pmode : Plusieurs milliers de conseils pour vous faciliter la vie.


Comment acceder en temps reel la Puce a partir du mode Protege.

l'auteur: GREG VIGNEAULT

{
MD>Ce que quelqu'un ici recommander comme etant le meilleur moyen pour DOS
>le mode protege pour obtenir l'heure actuelle du jour *sans* retournement
>retour au mode reel pour en faire un standard de DOS appeler?

Si votre code est autorise a parler de l'horloge temps reel (RTC) de la puce,
ici & #39 s un exemple de code pour acceder a la CCF directement. Les fonctions
travailler uniquement avec 24 heures format de temps (si necessaire, a l'interne par le CCF,
ils traduisent entre 12/24 h la fois et binaire/BCD formats)...
}

(*******************************************************************)
PROGRAMME de RClock { Get/Set Time/Date directement a partir de RTC puce }
{ 9 juin 1994. Greg Vigneault }
TYPE de Treg = 0..$D { plage de temps/jour un registre des adresses }
To23 = 0..23 { plage pendant des heures }
To59 = 0..59 { gamme pour les minutes et les secondes }
VAR An, Mois, Jour, DoW, Hr, Min, Sec : OCTET

la FONCTION RTCbusy:BOOLEAN BEGIN { RTC temps/date de mise a jour?... }
Port[$70] := $A RTCbusy := (Port[$71] ET 128) = 128
END {RTCbusy}

la FONCTION ReadReg (Reg:Treg):BYTE BEGIN { lire un CCF registre... }
SI Reg DANS [0..9], PUIS REPETEZ {attente} JUSQU'PAS RTCbusy
Port[$70] := Reg ReadReg := Port[$71]
END {ReadReg}

PROCEDURE WriteReg (Reg:Treg de Donnees:BYTE) { ecrire RTC reg... }
VAR temp:OCTET de COMMENCER
SI Reg DANS [0..9] THEN BEGIN { heure/date reg? }
REPETER {attente} JUSQU'PAS RTCbusy
Port[$70] := $B temp := Port[$71] Port[$71] := temp OU $80
END{SI}
Port[$70] := Reg Port[$71] := Donnees
SI Reg DANS [0..9] PUIS COMMENCER
Port[$70] := $B Port[$71] := temp ET PAS $80
END{SI}
END {WriteReg}

la FONCTION BCD2Bin (BCD:BYTE):BYTE BEGIN { xlate BCD en binaire... }
BCD2Bin := (BCD ET $0F) (BCD(SHR 4) * 10)
END {BCD2Bin}
FONCTION de Bin2BCD (Bin:BYTE):OCTET BEGIN { xlate binaire BCD... }
Bin2BCD := (Bin MOD 10) OU de l'OCTET((Bin DIV 10) SHL 4)
END {Bin2BCD}

PROCEDURE GetTime (VAR Hr,Min,Sec:OCTET)
VAR temp:OCTET de COMMENCER
S := ReadReg(0) Min := ReadReg(2)
H := ReadReg(4) temp := Hr Hr := Rh ET PAS $80
IF (ReadReg($B) ET 4) <> 4 ALORS BEGIN { xlate BCD a la poubelle... }
S := BCD2Bin(Sec) Min := BCD2Bin(Min) H := BCD2Bin(Rh)
END{SI}
IF (ReadReg($B) ET 2) <> 2 THEN { CCF poste a 12 h la mode?... }
IF (temp ET 128) = 128 { P. M.? }
PUIS COMMENCER SI (Hr < 12) THEN INC(Rh,12) FIN
ELSE if H = 12 H := 0
END {GetTime}

PROCEDURE SetTime (Hr:To23 Min,Sec:To59)
VAR temp:OCTET de COMMENCER
temp := OCTET(Rh)
IF (ReadReg($B) ET 2) <> 2 THEN { CCF poste a 12 h la mode?... }
IF (Hr > 12) PUIS le DEC(Rh,12) d'AUTRE SI H = 0, ALORS H := 12
IF (ReadReg($B) ET 4) <> 4 ALORS BEGIN { RTC veut BCD format... }
H := Bin2BCD(Rh) Min := Bin2BCD(Min) S := Bin2BCD(Sec)
END{SI}
IF ((ReadReg($B) ET 2)<>2) ET (temp > 11) PUIS H := h OU $80
WriteReg(0,S) WriteReg(2 Min) WriteReg(4,Rh)
END {SetTime}

PROCEDURE GetDate (VAR An,Mois,Jour:BYTE) COMMENCER
Jour := ReadReg(7) Mois := ReadReg(8) An := ReadReg(9)
IF (ReadReg($B) ET 4) <> 4 ALORS BEGIN { xlate BCD pour binay... }
Jour := BCD2Bin(Jour) Mth := BCD2Bin(Mth) An := BCD2Bin(An)
END {SI}
END {GetDate}

PROCEDURE SetDate (An,Mois,Jour:BYTE) COMMENCER
IF (ReadReg($B) ET 4) <> 4 ALORS BEGIN { RTC veut BCD format... }
Jour := Bin2BCD(Jour) Mth := Bin2BCD(Mth) An := Bin2BCD(An)
END{SI}
WriteReg(7,Jour) WriteReg(8,Mth) WriteReg(9,An)
END {SetDate}

BEGIN {RClock}
GetTime (H,Min,Sec) GetDate (An,Mois,Jour) WriteLn
Write ( & #39 Date est & #39 ,Mth, & #39 / & #39 ,Jour, & #39 / & #39 ,An, & #39 . & #39 )
WriteLn ( & #39 Temps est & #39 ,Rh, & #39 : & #39 Min:2, & #39 : & #39 ,Sec:2, & #39 . & #39 )
Write ( & #39 (BTW, votre RTC est & #39 )
IF (ReadReg($B) ET 2) <> 2 ALORS Ecrire ( & #39 12 & #39 ) SINON Ecrire ( & #39 24 & #39 )
Write ( & #39 heures de mode a l'aide de & #39 )
IF (ReadReg($B) ET 4) <> 4 ALORS Ecrire( & #39 BCD & #39 ) SINON Ecrire( & #39 binaire & #39 )
WriteLn ( & #39 format.) & #39 )
END {RClock}.


Temps réel de la puce dans pmode

Temps réel de la puce dans pmode : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation