Das Programm kann helfen Bascom Timersteuerung zu verstehen

Basis:
-https://www.roboternetz.de/phpBB2/vi...ighlight=timer
In HiTechs Post der Code über Timer

-RNBFRA Beispielprogramme von der CD

Code:
'(###################################################

                     Timertest.bas
            Schrittmotoren Mit Timern Steuern...
                    Auf Dem Rnbfra 1.1

                Moritz Wurth 10.05.2004

#####################################################       ')
Declare Sub Ledein(id As Word)                              'Subs zur Ledanzeige deklarieren
Declare Sub Ledaus


Dim Rightspeed As Byte                                      'Variablendefintion XXXspeed als Geschwindigkeitsangabe
Dim Leftspeed As Byte                                       ' XXX = Right bzw Left für die jeweilige seite

Dim Rightstatus As Bit                                      'Intern ben. Variable
Dim Leftstatus As Bit                                       'Intern ben. Variable
Dim Temp As Byte                                            'Intern ben. Variable
Dim Tempspeed As Byte                                       'Intern ben. Variable


$baud = 9600
$crystal = 8000000
                                                             'Ports für Schrittmotoren/LED einstellen
Config Pinc.5 = Output
Config Pinc.3 = Output

Config Pinc.4 = Output
Config Pinc.2 = Output

Config Pind.6 = Output

Const Writepowerport_adr = &H72
Const Readpowerport_adr = &H73

Dim I2cdaten As Byte


Config Timer0 = Timer , Prescale = 256                      'Timer festlegen, Prescale legt fest welche X Takte der Timer aufgerufen wird
On Ovf0 Tim0_isr                                            'Wenn Timer0 ausgelöst wird, rufe Tim0_isr auf

Dim I As Integer                                            'Taktzähler
Dim Cnt As Byte


                                                            'Timer anschalten
Enable Timer0                                               'Interrupts anschalten
Enable Interrupts

'-----------------------------------------------------------------------
' Ab hier reguläres Programm
' Hier: An den 4 LED wird Binär bis 16 gezählt
' alle 1.6 Sekunden (16 * 100ms) wird die Geschwindigkeit auf dem Rechten Motor um 1 erhöht, links erniedrigt


Rightspeed = 50                                             'Startgeschwindigkeit 50

Do
  Cnt = Cnt + 1
  Call Ledein(cnt)                                          'LED setzen
  If Cnt = 15 Then                                          'Wenn 1 mal durchlaufen wurde
  Cnt = 0                                                   'LED zähler wieder auf 0
  Rightspeed = Rightspeed - 1                               'Rechts eins erniedrigen
  Leftspeed = 50 - Rightspeed                               'Links ebenfalls verändern
  If Rightspeed = 0 Then                                    'Wenn alles einmal durch ist (Rechts auf 0)
   Stop Timer0                                              'Timer stoppen
   Portd.6 = 0                                              'Schrittmotoren aus
  End If
  End If
   Waitms 100
Loop


Tim0_isr:
  I = I + 1
  Temp = I Mod Rightspeed

  If Temp = 0 Then
  Rightstatus = Not Rightstatus
  Portc.2 = Rightstatus
  End If

  Temp = I Mod Leftspeed
  If Temp = 0 Then
  Leftstatus = Not Leftstatus
  Portc.3 = Leftstatus
End If

Return


End

Sub Ledein(id)
   I2cstart
   I2cwbyte Writepowerport_adr
   I2cwbyte Id                                              'Datenbyte an PCF I2cstop
   I2cstop
 End Sub


Sub Ledaus()
   I2cstart
   I2cwbyte Writepowerport_adr                              'Schreibbefehl an PCF schicken
   I2cwbyte 0                                               'Datenbyte an PCF
   I2cstop
End Sub