User Tools

Site Tools


Action unknown: siteexport_addpage
start:eti:carte:10soft54

Programme PIT8254.EXE

Le listing complet de ce programme (USmall_2.pas) ce trouve dans l'annexe.

(0)

Les composants PIT8254 et OneInstance. Ces deux composants ne seront pas visibles lors de l'exécution du programme. L'adresse de base du 8254 (composant PIT8254) a été fixée à 308h et ne peut être modifiée lors de l'exécution du programme.

(1)

La fréquence du quartz utilisée avec le PIT8254 a été fixé à 6MHz. Cette valeur ne peut être modifiée lors de l'exécution du programme.

(2)

Cette boîte d'option permet de choisir quel compteur il faut utiliser pour le générateur. La configuration du compteur est effectuée comme ceci:

NoCompteurChoisi := rgrpCompteur.ItemIndex;
CASE NoCompteurChoisi OF
  0 : BEGIN
        PIT8254.ModeCompteur0 := mcGenerateur;
        Facteur := PIT8254.Compteur0;
      END; {BRANCH OF CASE}
  1 : BEGIN
        PIT8254.ModeCompteur1 := mcGenerateur;
        Facteur := PIT8254.Compteur1;
      END; {BRANCH OF CASE}
  2 : BEGIN
        PIT8254.ModeCompteur2 := mcGenerateur;
        Facteur := PIT8254.Compteur2;
      END; {BRANCH OF CASE}
END; {CASE OF}

Une fois que la configuration du compteur est effectuée, la configuration actuelle du compteur choisi est affichée. En 4, le facteur de division:

aedtFacteur.Text := IntToStr(Facteur);

Et en 6 la fréquence qui sera réellement présente en sortie:

aedtFreqReelle.Text := FloatToStr(PIT8254.Quartz / Facteur);

Après affichage des ces informations, les autres contrôles du programme sont activés

grpbxFacteurDivision.Enabled := TRUE;
grpbxFrequence.Enabled := TRUE;

(3)

Ces boutons permettent de changer le facteur de division. Par exemple, pour le compteur 0 cela donne:

Diminution du facteur de division (augmentation de la fréquence):

Facteur := PIT8254.Compteur0;
Dec(Facteur, Abs((Sender AS TSpinButton).Tag));
IF Facteur < 2 THEN Facteur := 2;
PIT8254.Compteur0 := Facteur;

Augmentation du facteur de division (diminution de la fréquence):

Facteur := PIT8254.Compteur0;
Inc(Facteur, Abs((Sender AS TSpinButton).Tag));
IF Facteur > 65535 THEN Facteur := 65535;
PIT8254.Compteur0 := Facteur;

(4) et (5)

Vous pouvez inscrire directement la fréquence que vous désirer en sortie dans cette zone de saisie. Le facteur de division permettant d'obtenir la fréquence la plus proche de la fréquence saisie est calculé, puis la fréquence réellement présente en sortie est calculée en fonction de ce facteur

TRY
  {Lit la fréquence saisie}
  Frequence := StrToFloat(aedtFreqVoulue.Text);
 
  {Hors limite ?}
  IF Frequence > (PIT8254.Quartz / 2) THEN BEGIN
    Frequence := PIT8254.Quartz / 2;
  END; {IF}
  IF Frequence < (PIT8254.Quartz / 65535) THEN BEGIN
    Frequence := PIT8254.Quartz / 65535;
  END; {IF}
 
  {Cherche le facteur de division le plus proche }
  FacteurSup := Round(PIT8254.Quartz / Frequence);
  FacteurInf := Trunc(Int(PIT8254.Quartz / Frequence));
 
  {Calcule les fréquence avec les facteurs trouvés précédemment}
  FreqSup := PIT8254.Quartz / FacteurInf;
  FreqInf := PIT8254.Quartz / FacteurSup;
 
  {Recherche le facteur de division qui nous permet d'être le plus
  proche de la fréquence voulue}
  IF ((Frequence = FreqSup) OR
   ((FreqSup - Frequence) < (Frequence - FreqInf))) THEN BEGIN
    Facteur := FacteurInf;
  END {IF}
  ELSE IF ((Frequence = FreqInf) OR
   ((FreqSup - Frequence) > (Frequence - FreqInf))) THEN BEGIN
    Facteur := FacteurSup;
  END; {ELSE IF}
 
  {-- Est-ce que les facteurs trouvés sont acceptables ?}
  IF Facteur < 2 THEN Facteur := 2;
  IF Facteur > 65535 THEN Facteur := 65535;
 
  {-- Change la fréquence }
  CASE NoCompteurChoisi OF
    0 : PIT8254.Compteur0 := Facteur;
    1 : PIT8254.Compteur1 := Facteur;
    2 : PIT8254.Compteur2 := Facteur;
  END; {CASE OF}
  {-- Couleur standard de la zone de saisie}
  aedtFreqVoulue.Color := clWindow;
EXCEPT
  {-- Valeur incorrecte => On voit rouge ! }
  aedtFreqVoulue.Color := clRed;
END; {TRY}

On peut relever l'utilisation d'un bloc try…except dans cette procédure. Dans la partie try du bloc, les instructions s'exécutent dans l'ordre normal, sauf s'il se produit une exception; dans ce cas, l'exécution passe directement à la partie except. Si aucune exception ne se produit, le bloc se termine sans utiliser la partie except.

L'utilisation de ce bloc try…except permet donc d'éviter les tests compliqué destinés à valider la valeur saisie, on ne contrôle même pas du tout le texte saisi. Si un problème survient, par exemple si la fréquence saisie est une chaîne de caractères, une exception sera générée lors de la conversion du texte saisi en une valeur réelle (Frequence := StrToFloat(aedtFreqVoulue.Text)). Dans ce cas, on saute directement dans la partie except et on met en rouge la zone de saisie. Mais si aucun problème n'est rencontré, on remet la couleur de la zone de saisie à la valeur standard de Windows.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
start/eti/carte/10soft54.txt · Last modified: 2016/07/24 01:52 by admin