PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : was brauche ich da, Timer oder Interrupt?



Dj_Beat
22.11.2007, 17:17
Hallo! ich wollte mal etwas üben, und weiss nicht wie ich anfangen soll.
ich habe 2 verschidene programme. jetzt möchte ich es so hinkrigen, dass zuerst ein Programm, dann das andere Abläuft. wie mache ich das?

erstes programm:
$regfile = "m8.def"
$crystal = 1000000
config lcd ................... 'lcd konfigurieren
cls 'lcd löschen
do
locate 1 , 1
lcd "hello"
wait 5
locate 2 , 1
lcd "world"
wait 5
loop


und das zweite programm:
$regfile = "m8.def"
$crystal = 1000000
config lcd ................... 'lcd konfigurieren
cls 'lcd löschen
do
locate 1 , 1
lcd "zeile1"
wait 5
locate 2 , 1
lcd "zeile2"
wait 5
loop



das sind z.B. die Programme.
jetzt möchte ich das so machen, dass das 1. Programm 30 sek. abläuft, und dann das zweite 30 sek. und dann von vorne.

was brauche ich dafür? Timer oder Interrupt?
Danke

Dj_Beat
22.11.2007, 17:36
na ja, nicht so ein Sinnvolles beispiel.
besser ist das hier:

programm1
$regfile = "m16def.dat"
$crystal = 4000000
config lcd ............
Enable Interrupts
Config Clock = Soft
Time$ = "02:20:00"
Cls
Do
Locate 1 , 1
Lcd Time$
Loop
End


und das 2. programm:
$regfile = "m16.def"
$crystal = 4000000
config lcd ............
cls
do
locate 1 , 1
lcd "hello"
wait 5
locate 2 , 1
lcd "world"
wait 5
loop

wenn ich möchte dass LCD immer Zeit und "hello world" abwechselnd zeigt.
babei soll ja die Zeit weiterlaufen, in der Zeit wo Hello World angezeigt wird, und nicht wieder von vorne anfangen.
Wie kann man sowas realisieren?

milkbubi
22.11.2007, 19:02
Läuft die Uhr nicht über den Timer automatisch weiter? Hab ich zumindest aus der Hilfe so entnommen.
Und dann einfach zusammenführen die Programme:



$regfile = "m16def.dat"
$crystal = 4000000
config lcd ............
Enable Interrupts
Config Clock = Soft
Time$ = "02:20:00"
Cls
Do
Locate 1 , 1
Lcd Time$
wait ???
cls
locate 1 , 1
lcd "hello"
wait 5
locate 2 , 1
lcd "world"
wait 5
loop
end

so in der Richtung. Wird aber mit Sicherheit nicht besonders genau

mfg milkbubi

Dj_Beat
22.11.2007, 19:08
ich dachte den Befehl "wait" darf man nicht verenden!
dadurch wird ja der komplette mikrocontroller "eingefroren".
da kann die seit nicht mehr weiter laufen, oder?
ich glaube ich habe was verpasst.

milkbubi
22.11.2007, 19:13
Es stimmt schon, dass der eigentliche Prozesser in der Zwischenzeit nichts mehr machen kann aber so wie ich das verstehe, läuft die Uhr weiter.
Dazu ein Zitat aus der Bascom Hilfe:
"The CONFIG CLOCK statement will use the TIMER0 or TIMER2 in async mode to create a 1 second interrupt. In this interrupt routine the _Sec, _Min and _Hour variables are updated."
Da die Timer unabhängig vom rest laufen sollte das also funktionieren.

mfg milkbubi

Windi
22.11.2007, 19:16
wait darf man schon verwenden.
Nur je nach Programm ist das u.U. kontraproduktiv.
Du verwendest in Deinem Programm ja auch wait.
Der Controller "friert" nicht komplett ein. Die Timer (und deine Uhr) laufen dabei weiter.

Dj_Beat
22.11.2007, 19:43
$regfile = "m16def.dat"
$crystal = 1000000

Config Timer1 = Timer, Prescale = 64


Config Pind.0 = Output
Config Pind.1 = Output
Led Alias Portd.0
Luefter Alias Portd.1

On Timer1 Timer_irq


Const Timervorgabe = 1 ' WAS MUSS HEIR REIN?


'Hier werden die Timer aktiviert
Enable Timer1
Enable Interrupts


Do
Toggle Led 'Hier ist mein Hauptprogramm
Loop


Timer_irq:
Timer1 = Timervorgabe 'hier ist jetzt der Lüfter
Set Luefter
Wait 20
Reset Luefter

Return

milkbubi
22.11.2007, 19:52
Hast du eigentlich eine Idee was du machen willst. Denn das hat alles so überhaupt keinen Zusammenhang. Wenn du einfach nur ein bisschen was lernen willst ist das sicher löblich aber dann wär ein Blick ins RN_Wissen vermutlich die beste Möglichkeit, da du dort wahrscheinlich die meisten deiner Fragen schon beantwortet findest.

mfg milkbubi

Dj_Beat
22.11.2007, 20:16
wenn es euch nichts ausmacht, könnt ihr mir hier vielleicht helfen.
http://www.mikrocontroller.net/topic/84449
danke

Torsten_G
23.11.2007, 06:17
Hi,

Wait-Befehle werden vom Bascom-Simulator ignoriert.

Blöd, aber ist leider so...

Verarbeite mal die Tipps der Kollegen und entsorge den Wait-Befehl.
Vor allem das Hochzählen in der ISR ist für Dich interessant!


Gruß

Torsten