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
Lesezeichen