	PROGRAMMATION DES TIMERS (2)
	****************************

	Comme promis, voici de quoi calculer vos valeurs DATA et
CONTROL pour une frquence donne. Le programme en GFA doit etre
transposable  n'importe quel autre langage sans trop de difficults.
Les possesseurs du FORTH n'auront pas  se soucier de ce calcul qui
est gr automatiquement par leur jeu d'instructions.

LES VARIABLES
-------------

	Le tableau DIVIS%() contient les diviseurs possibles de la
frquence de base gale  2457600 hertz. DFINF% est l'cart
entre la frquence voulue et celle s'en approchant le plus par dfaut.
CINF% et DATINF% sont les valeurs CONTROL et DATA de cette frquence.
Le systme est reproduit avec DFSUP%, CSUP% et DATSUP% pour la
frquence d'approchant le plus par excs.

L'UTILISATION
-------------

	Lancez (RUN) et entrez simplement la frquence souhaite. Vous
obtenez en retour les CONTROL et DATA des deux frquences encadrant
votre demande. Il se peut que vous obteniez une seule rponse:
	- soit parceque la valeur exacte a t trouve (avec 9600
	hertz par exemple)
	- soit parcequ'il n'y a pas de frquence par excs (valeur
	trop grande) ou par dfaut (valeur trop petite).

LE PROGRAMME
------------

	Les carts sont initialiss au maximum en donnant la valeur
BASE% 	DFINF% et DFSUP%. Le compteur de boucle est directement la
valeur CONTROL. Remarquez les tests sur la valeur DATA qui doit etre
un octet de 1  255.

DIM divis%(7)
divis%(1)=4
divis%(2)=10
divis%(3)=16
divis%(4)=50
divis%(5)=64
divis%(6)=100
divis%(7)=200
base%=2457600
INPUT "Frquence voulue:",fv%
dfinf%=base%
dfsup%=base%
FOR cont%=1 TO 7
  f%=base%/divis%(cont%)
  dat%=f%/fv%
  IF dat%<255
    finf%=f%/(dat%+1)
    IF (fv%-finf%)<dfinf%
      dfinf%=fv%-finf%
      cinf%=cont%
      datinf%=dat%+1
    ENDIF
  ENDIF
  IF dat%>0 AND dat%<256
    fsup%=f%/dat%
    IF (fsup%-fv%)<dfsup%
      dfsup%=fsup%-fv%
      csup%=cont%
      datsup%=dat%
    ENDIF
  ENDIF
NEXT cont%
IF dfsup%<>0 AND cinf%<>0
  PRINT
  PRINT "Valeur par dfaut:";INT(base%/divis%(cinf%)/datinf%+0.5)
  PRINT "     avec CONTROL=";cinf%;" et DATA=";datinf%
ENDIF
IF dfinf%<>0 AND csup%<>0
  PRINT
  PRINT "Valeur par excs :";INT(base%/divis%(csup%)/datsup%+0.5)
  PRINT "     avec CONTROL=";csup%;" et DATA=";datsup%
ENDIF

	N'tant pas un spcialiste du GFA, ce programme ne demande
qu' etre amlior...

CONCLUSION
----------

	N'oubliez pas qu'il vous faudra toujours passer par
l'assembleur pour crire la petite routine excute par le Timer. Par
exemple, si vous utilisez le FORTH, sachez que vous pouvez inclure le
source assembleur au sein meme de votre listing FORTH. Ce source sera
assembl par l'assembleur de votre choix (j'ai test MAD MAC et
ASSEMBLE avec succs) et link au FORTH de manire presque
transparente.
	A une prochaine fois!

	Guillaume TELLO
	gtello@wanadoo.fr