start:eti:carte:sources:uchrono
uChrono.pas
UNIT Uchrono; {----------------------------------------------------------------------------- NOM DE L'UNITE : UCHRONO.PAS BUT : Chenillard inversé pour effectuer un relevé sur le décodage d'adresse et une écriture en sortie sur un des ports du PPI 8255. AUTEUR : Stéphane Claus DATE : Janvier 1997 MODIFIE LE : 12.04.1997 - EDT:01 RAISON : - Ajout d'un message d'avertissement lors de l'ouverture de la fiche pour avertir l'utilisateur que cette fonction n'est pas précise et qu'il vaut mieux utiliser un programme sous DOS. - Ajout de commentaires REMARQUES : -----------------------------------------------------------------------------} {=============================================================================} INTERFACE {============================================== I N T E R F A C E } {=============================================================================} USES SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, DigDisp, StdCtrls, Buttons, ExtCtrls; TYPE TfrmChronoPPI = CLASS(TForm) digdspTitre: TDigitalDisplay; bitbtnOK: TBitBtn; bitbtnAide: TBitBtn; grpbxGenerateur: TGroupBox; bitbtnStart: TBitBtn; bitbtnStop: TBitBtn; rgrpPort: TRadioGroup; scrbarDelay: TScrollBar; lblPause: TLabel; PROCEDURE FormActivate(Sender: TObject); PROCEDURE bitbtnStartClick(Sender: TObject); PROCEDURE bitbtnStopClick(Sender: TObject); PROCEDURE FormClose(Sender: TObject; var Action: TCloseAction); procedure bitbtnOKClick(Sender: TObject); procedure scrbarDelayChange(Sender: TObject); PRIVATE { Private-déclarations } PUBLIC { Public-déclarations } END; {CLASS} VAR frmChronoPPI: TfrmChronoPPI; {=============================================================================} IMPLEMENTATION {================================= I M P L E M E N A T I O N } {=============================================================================} {$R *.DFM} USES UPrincpl, VCL8255; VAR StopTest : BOOLEAN; Delai : INTEGER; FUNCTION Delay(DelayMS:LONGINT):BOOLEAN; {----------------------------------------------------------------------------- BUT ........... : Remplace la fonction DELAY qui existrait sous DOS ENTREE ........ : DelayMS = Délai d'attente en MS bit = le no du bit à changer (entre 0 et 7) SORTIE ........ : TRUE s'il a été demandé à l'application de quitter EFFETS DE BORDS : -- REMARQUE(S) ... : -- -----------------------------------------------------------------------------} VAR ET : LONGINT; BEGIN ET := GetTickCount; REPEAT Application.ProcessMessages; UNTIL Application.Terminated OR (GetTickCount-ET > DelayMS); Result := Application.Terminated; END;{FUNCTION Delay} PROCEDURE TfrmChronoPPI.FormActivate(Sender: TObject); {----------------------------------------------------------------------------- BUT ........... : Initialisation de la fiche en fonction des paramètres actuels du programme ENTREE ........ : -- SORTIE ........ : -- EFFETS DE BORDS : -- REMARQUE(S) ... : -- -----------------------------------------------------------------------------} VAR Msg : STRING; BEGIN Caption := Application.Title; { Titre de la fenêtre } IF debugmode THEN BEGIN { Couleur de la fenêtre } Color := debugcolor; END {IF} ELSE BEGIN Color := clBtnFace; END; {ELSE} rgrpPort.ShowHint := affichehint; { Affichage des Hint } bitbtnStart.ShowHint := affichehint; bitbtnStop.ShowHint := affichehint; scrbarDelayChange(Sender); { Affichage du délai } {EDT:01 Message d'avertissement } Msg := 'NE PAS UTILSER CE MODULE' + #10 + 'Mais le programme CHRONO.EXE sous DOS' + #10 + 'Ainsi, vous ne serez pas perturbé par le multitâche de' + ' Windows...' + #10 + #10 + #10 + 'P.S.: QUITTEZ Windows avant d''exécuter CHRONO.EXE !!!...'; MessageDlg(Msg, mtInformation, [mbOk], 0); END; {PROCEDURE FormActivate} PROCEDURE TfrmChronoPPI.bitbtnStartClick(Sender: TObject); {----------------------------------------------------------------------------- BUT ........... : Petite boucle de test pour efectuer le relevé des différents signaux de synchronisation autour du PPI 8255 ENTREE ........ : -- SORTIE ........ : -- EFFETS DE BORDS : -- REMARQUE(S) ... : Cette procédure est identique aux procédures Chenillard et Pattern du composant PPI8255 -----------------------------------------------------------------------------} CONST valeur : ARRAY [1..8] OF BYTE = ($7F, $BF, { Valeurs à cérire sur le port.. } $DF, $EF, { ..utilisé pour les mesures.. } $F7, $FB, { ..c'est un bit à 0 qui se.. } $FD, $FE); { ..déplace } VAR NoValeur : BYTE; { Valeur actuellement écrite sur le port } BEGIN rgrpPort.Enabled := FALSE; { On ne change plus de port } IF NOT debugmode THEN BEGIN CASE rgrpPort.ItemIndex OF { Configure le port choisi en sortie.. } 0 : BEGIN { ..et les autres en entrée } frmMain.PPI8255.ModePortA := mpSortie; frmMain.PPI8255.ModePortB := mpEntree; frmMain.PPI8255.ModePortC := mpEntree; END; {BRANCH OF CASE} 1 : BEGIN frmMain.PPI8255.ModePortA := mpEntree; frmMain.PPI8255.ModePortB := mpSortie; frmMain.PPI8255.ModePortC := mpEntree; END; {BRANCH OF CASE} 2 : BEGIN frmMain.PPI8255.ModePortA := mpEntree; frmMain.PPI8255.ModePortB := mpEntree; frmMain.PPI8255.ModePortC := mpSortie; END; {BRANCH OF CASE} END; {CASE OF} NoValeur := 1; { Commence par la première valeur } Delai := scrbarDelay.Position; StopTest := FALSE; { Et c'est parti } REPEAT CASE rgrpPort.ItemIndex OF { Ecrit la valeur sur le port } 0 : BEGIN frmMain.PPI8255.PortA := valeur[NoValeur]; END; {BRANCH OF CASE} 1 : BEGIN frmMain.PPI8255.PortB := valeur[NoValeur]; END; {BRANCH OF CASE} 2 : BEGIN frmMain.PPI8255.PortC := valeur[NoValeur]; END; {BRANCH OF CASE} END; {CASE OF} Inc(NoValeur); { Passe à la valeur suivante } IF NoValeur > 8 THEN NoValeur := 1; Application.ProcessMessages; { Pour sortir une fois de la boucle } IF Delai > 0 THEN Delay(Delai); { Attend doudou dit donc } UNTIL StopTest; {EDT:01 Active à nouveau le choix du port } rgrpPort.Enabled := TRUE; { On peut de nouveau changer de port } END; {IF} END; {PROCEDURE bitbtnStartClick} PROCEDURE TfrmChronoPPI.bitbtnStopClick(Sender: TObject); {----------------------------------------------------------------------------- BUT ........... : Arrête d'envoyer la séquence de test sur le port choisi ENTREE ........ : -- SORTIE ........ : -- EFFETS DE BORDS : -- REMARQUE(S) ... : Cette procédure est identique aux procédures SetFStopChenillard et SetFStopPattern du composant PPI8255 -----------------------------------------------------------------------------} BEGIN StopTest := TRUE; { Arrête le test } (*EDT:01 Ca n'a rien à faire ici, cette ligne ! } rgrpPort.Enabled := TRUE; { On peut de nouveau changer de port }*) END; {PROCEDURE bitbtnStopClick} PROCEDURE TfrmChronoPPI.FormClose(Sender: TObject; var Action: TCloseAction); {----------------------------------------------------------------------------- BUT ........... : S'assure que le test est arrêté lors de la fermeture de la fiche ENTREE ........ : -- SORTIE ........ : -- EFFETS DE BORDS : -- REMARQUE(S) ... : -- -----------------------------------------------------------------------------} BEGIN bitbtnStopClick(Sender); END; {PROCEDURE FormClose} PROCEDURE TfrmChronoPPI.bitbtnOKClick(Sender: TObject); {----------------------------------------------------------------------------- BUT ........... : Arrête le test et ferme cette boîte de dialogue ENTREE ........ : -- SORTIE ........ : -- EFFETS DE BORDS : -- REMARQUE(S) ... : -- -----------------------------------------------------------------------------} BEGIN bitbtnStopClick(Sender); Close; END; {PROCEDURE bitbtnOKClick} PROCEDURE TfrmChronoPPI.scrbarDelayChange(Sender: TObject); {----------------------------------------------------------------------------- BUT ........... : Affiche le délai entre chaque changement d'état du port. ENTREE ........ : -- SORTIE ........ : -- EFFETS DE BORDS : -- REMARQUE(S) ... : Ce délai est changé par la ScrollBar scrbarDelay -----------------------------------------------------------------------------} BEGIN lblPause.Caption := 'Pause: ' + IntToStr(scrbarDelay.Position) + ' [ms]'; END; {PROCEDURE scrbarDelayChange} {=============================================================================} { INITIALISATIONS ------------------------------------------- Initialisations } {=============================================================================} INITIALIZATION END. {UNIT Uchrono}
start/eti/carte/sources/uchrono.txt · Last modified: 2016/07/24 02:21 by admin