AVR Bascom Schleife mit Zähler funzt nicht - wieso?

Gast #102546
Hi.

ich bin echt ratlos. Zwar bin ich erst anfänger in basic, aber nen
Zähler mit ner Schleife habe ich bisher in jeder Programmiersprache
hinbekommen.

Kann mir evtl. jemand erklären, wieso das folgende nichts funzt?!
Bei jedem Durchlauf soll "I" incrementiert werden.
Sobald I grösser als 10 ist, soll er mir dies über ein LED (LED an)
zeigen. Ist I < 10, bleibt das LED aus.

Nach ein paar Tests konnte ich lediglich feststellen, das I den
Wert 1 erreicht. Es scheint also, als würde er die Funktion oder
das Increment nur einmal ausführen.

(AT90S2313, gecodet mit Bascom)
1
Ddrb = &B11111100
2
Portb = &B00001111
3
Ddrd = &B1001011
4
Portd = &B0000000
5

6
Dim I As Long      'Schleifenzaehler
7
I = 0
8

9
On Timer0 Zeitmesser
10
Config Timer0 = Timer , Prescale = 8
11

12
Enable Timer0
13
Enable Interrupts
14

15
Zeitmesser:
16
' 1 Ueberlauf = 0,1ms
17
  Timer0 = 210      'Startposition
18

19
  If I > 10 Then
20
   Reset Portb.3
21
  Else
22
   Set Portb.3
23
  End If
24

25
  Incr I      'I incrementieren (+1)
26
Return
27

28
Do
29
Loop
Gast
16 Bit Variabeln lassen sich nicht mit If abfragen. Und in einer
Timer-Routine schon gar nicht.

Ich habe mir daran auch mal die Zähne ausgebissen....
Ich glaube da konnte man aber mit dem Befehl Varptr tricksen....

MfG
formtapez
Gast
aha?!
Da ich absoluter basic und MC Beginner bin, könntest du das etwas
genauer erklären, wie ich das hinbekomme?

Der Zähler sollte bis ca. 10000 gehen können.
Da 10000 dann eigentlich 1Sekunde entsprechen würde, wenn ich richtig
liege.
Gast
hallo

fehlt da nicht was?

On Timer0 Zeitmesser
Config Timer0 = Timer , Prescale = 8
 Load Timer 210 'sonst startet er nie!
Enable Timer0
Enable Interrupts

@formtapez
das mit den 16(oder mehr)bit variablen geht schon, nur muss man
aufpassen, dass wärend der If abfrage kein interrupt kommt, der diese
variable ändert sonst = Unfug

Peter

PS: kann mich auch irren (mein Irrtumszähler ist vom Typ Long:)
Gast
auch mit "Load Timer 210" geht es nicht!

Er geht ja mind. einmal in die FUnktion rein, als ich schätze schon
das die Timerfunktion auch ohne dieses "load timer" startet.
Gast
sowas triviales aber auch.
Darauf muss ja erstmal einer kommen, und dann auch noch nen Noob.
;)

Danke Bernd, jetzt funktionert das schonmal.
Dann werd ich mal sehen, wie ich nun weiter komme.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.