HCC!Forth

HCC!forth

ByteForth


7. Voorbeeld van een compleet programma

Het volgende programma krijgt analoge input binnen die gedigitaliseerd wordt. Het resultaat komt als een binair getal op 8 leds te staan.

\ Analoog naar digitaal omzetting met de TLC549IP
\ Codelengte voor de AT89C2051=201 bytes, voor de AT90S2313=292 bytes).

89C2051  TARGET                    \ Compileer voor AT89C2051
$90 SFR LEDS                       \ Poort 1 met 8 leds
$B4 BIT-SFR ADC-KLOK               \ Klokpuls invoer P3.4
$B5 BIT-SFR ADC-DATA               \ Data uitvoer P3.5
$B7 BIT-SFR ADC-SELECTEER          \ Activeer invoer P3.7

: ADC               ( -- u )       \ Doe een AD-omzetting
    FALSE TO ADC-KLOK              \ Stop lezen van analoge invoer
    TRUE TO ADC-SELECTEER          \ Start AD-omzetting
    4 0 DO  LOOP                   \ Conversie duurt min. 17 us 
    FALSE TO ADC-SELECTEER         \ Start uitlezen
    ADC-DATA 1 AND                 \ Lees databit 7
    7 0 DO                         \ Lees resterende 7 databits
        TRUE TO ADC-KLOK
        FALSE TO ADC-KLOK          \ Schuif volgend bit naar buiten
        2 *  ADC-DATA  1 AND  OR   \ Schaal data in en lees volgend bit
    LOOP
    TRUE TO ADC-KLOK               \ Blijf analoge invoer lezen
    ;

: NAAR-LEDS     ( u -- )           \ Print data binair
    INVERT TO LEDS
    ;

: KNIPPER       ( -- )             \ Visualiseer opstarten
    -1 NAAR-LEDS  250 MS           \ Alle leds aan
    0 NAAR-LEDS   250 MS           \ Alle leds uit
    ;

: TOON-ADC      ( -- )             \ Toon omzetting op LEDS
    SETUP  KNIPPER
    BEGIN  ADC  NAAR-LEDS  AGAIN   \ Lees ADC, en toon uitkomst
    ;

' TOON-ADC   RESET-VEC  SET-VECTOR \ Installeer ADC omzetter

\ Einde