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







Zitieren

Lesezeichen