Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: 20ms Interrupt Kategorie: Programmierung Basic (von Kay - 23.12.2004 1:30)
 Als Antwort auf Re: 20ms Interrupt von Nico - 22.12.2004 19:57
> Wait timer                        ???Soll jetzt warten bis die 20ms abgelaufen sind bevor es weiter geht
>.....
> Da die Schaltung für eine uhr sein soll müssen die 20ms eingehalten werden.
> Wenn ich mit Pause 1  arbeite, wird doch zur pause 1(20ms) die Dauer der Rechenvorgänge dazu addiert... oder?  

huhuz nico,

nein! wenn die abarbeitung des programms auf den pausebefehl rasselt,
bleibt für n * 20 ms echt einfach alles stehen und dann geht es mit dem
nächsten befehl nach pause weiter.
wait hält ebenfalls den gesamtem programmablauf an, allerdings
geknüpft an eine bedingung.
zum beispiel
wait abs(timer - timerstart) >= 1  (wenn du den freilaufenden timer benutzen willst).
belies dich bitte noch mal genau über die  funktionsweise des 20-ms-timers.
in deinem fall müsstest du also vor den port-operationen eine variable mit dem
wert des timers füttern, dann die portspielereien abrasseln lassen und anschließend
oben getipperte wait-anweisung verwenden,  die wartet, bis der zyklus beendet ist.

> Hier sollen die 20ms starten

timerini = timer

da1=on                               Schaltet den Zustand 1 auf dem Schieberegister Ic
pulse da2                            Speichert die 1 für den ersten Speicherplatz
da1=off                               Schaltet den Zustand 0 auf dem Schieberegister Ic
For I = 1 to 7
pulse da2                           Speichert die 0 für die nächsten 7 Speicherplätze
next I

wait abs ( timerini - timer ) = 1

 ......... hier gänge es dann weiter

fraglich ist allerdings, ob du es mit basic schaffst, diese ganzen dinge in einem
20-ms-schlitz abzuarbeiten... könnte knapp werden. für die variable timerini musst
du übrigens ein word opfern (wird dir klar, wenn du über die funktion TIMER alles
weißt).
mit dieser abfrage kannst du übrigens die routine erst dann starten lassen, wenn gerade
ein neuer 20-ms-schlitz begonnen hat. zum bleistift so:

timerini = timer
wait abs (timer - timerini) = 1
   da1=on
   pulse da2
   da1=off
   For I = 1 to 7
      pulse da2
   next I
wait abs (timer - timerini) = 2

mach dir aber nen programm, mit dem du todsicher prüfen kannst, ob du die vorgänge
in der zeit  durchbekommst, sonst geht das logischerweise nicht auf.

 Antwort schreiben

Bisherige Antworten:

Re: 20ms Interrupt (von Kay - 23.12.2004 8:29)
    Re: 20ms Interrupt DANKE!! (von Nico - 24.12.2004 12:10)