Danke für die Antwort.
Geren poste ich den kompletten Code:
Code:
Declare Function Tastenabfrage() As Byte
Declare Function Wegmessunglesen(byval Slaveid As Byte) As Integer
Declare Sub Wegmessungstart()
Declare Sub Batteriespannung()
Declare Sub Drehen()
Declare Sub Fahren()
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 16000000 'Quarzfrequenz
$baud = 38400
'********** I2C initialisierung **********
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
I2cinit
'********** A/D Wandler initialisierung **********
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1
Start Adc
'********** Variablendeklaration **********
Dim Taste As Byte
Dim Ton As Integer
Dim Volt As Single
Dim Flag_akku As Bit
Dim Flag_lcd_toggle As Bit
Dim Timerx3 As Integer
Dim Entfernung As Integer
Dim Timer_weg As Long
Dim Flag_weg As Integer
Dim Test As Integer
'********** Konstantendeklaration **********
Const Ref = 5 / 1023 'Für Batteriespannungsberechnung
Const Srf02_slaveid = &HE0 'Standard I2C Adresse von SRF02
'********** Timercofig **********
Config Timer0 = Timer , Prescale = 1024 'Konfiguriere Timer1
Enable Timer0 'schalte Den Timer1 ein
On Timer0 Isr_von_timer0 'verzweige Bei Timer1 überlauf Zu Isr_von_timer1
'********** Motorenconfig **********
Config Pinc.6 = Output
Config Pinc.7 = Output
Config Pind.4 = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pind.5 = Output
'********** Start LCD config **********
Config Pinc.2 = Output
Config Pinc.4 = Output
Lcdpower Alias Portc.2
Lcd_rw Alias Portc.4
Lcd_rw = 0
Lcdpower = 0
Wait 1
Config Lcd = 20 * 4a , Chipset = Ks077
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Portc.3 , Rs = Portc.5
Config Lcdbus = 4
Initlcd
'********** Ende LCD config **********
Enable Interrupts
Cls
Locate 2 , 8
Lcd "Bereit"
'********** Initialisierung abgeschlossen **********
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
'********** Programme **********
Do
If Flag_akku = 1 Then
Call Batteriespannung()
If Volt <= 9 Then
Lcdpower = 0
Flag_lcd_toggle = 1
Locate 2 , 3
Lcd "Akkus wechseln"
Else
Flag_lcd_toggle = 0
End If
Flag_akku = 0
End If
If Timer_weg > 10000 Then
Entfernung = Wegmessunglesen(srf02_slaveid)
Locate 4 , 1
Lcd "Entfernung:" ; Entfernung ; "cm"
Call Wegmessungstart()
Timer_weg = 0
Else
Incr Timer_weg
End If
If Entfernung < 100 Then
Portc.6 = 1
Portc.7 = 0
Portd.4 = 1
Portb.0 = 1
Portb.1 = 0
Portd.5 = 1
Else
Portc.6 = 0
Portc.7 = 1
Portd.4 = 1
Portb.0 = 0
Portb.1 = 1
Portd.5 = 1
End If
Loop
End
Isr_von_timer0: 'isr Von Timer0
Incr Timerx3
If Timerx3 >= 5000 Then 'Timer0 verlangsamen
Flag_akku = 1 'Batteriespannung überprüfen
Timerx3 = 0
End If
If Flag_lcd_toggle = 1 Then 'LCD toggeln (wanrhinweis)
Toggle Lcdpower
End If
Return
Sub Drehen()
Portc.6 = 1
Portc.7 = 0
Portd.4 = 1
Portb.0 = 1
Portb.1 = 0
Portd.5 = 1
End Sub
Sub Fahren()
Portc.6 = 1
Portc.7 = 0
Portd.4 = 1
Portb.0 = 1
Portb.1 = 0
Portd.5 = 1
End Sub
Sub Wegmessungstart()
I2cstart
I2cwbyte Srf02_slaveid
I2cwbyte 0
I2cwbyte 81 'in Zentimetern messen
I2cstop
End Sub
Function Wegmessunglesen(byval Slaveid As Byte) As Integer
Local Lob As Byte
Local Hib As Byte
Local Slaveid_read As Byte
Slaveid_read = Slaveid + 1
I2cstart
I2cwbyte Slaveid
I2cwbyte 2 'Leseregister festlegen
I2cstop
I2cstart
I2cwbyte Slaveid_read
I2crbyte Hib , Ack
I2crbyte Lob , Nack
I2cstop
Wegmessunglesen = Makeint(lob , Hib)
End Function
Sub Batteriespannung()
Local W As Word
Local T As String * 10
Cls
Start Adc
W = Getadc(6)
Volt = W * Ref
Volt = Volt * 5.236
T = Fusing(volt , "0.00")
Locate 1 , 3
Lcd "Akku: " ; T ; " Volt"
End Sub
Lesezeichen