MelMan
12.01.2009, 08:39
Nabend zusammen,
folgendes Programm:
$regfile = "m8def.dat"
$framesize = 48
$swstack = 64
$hwstack = 64
$crystal = 8000000
$baud = 9600
Dim Empfangen As String * 3
Dim X As Bit , Y As Bit , Z As Bit
Dim Ansteuerung As Byte , Wecksound As Byte
Dim Ansteuerung2 As Integer
X = 0
Y = 0
Z = 0
Wecker = 0
Config Portb = Output
Config Portc = Output
Config Portd.4 = Output
Config Portd.3 = Output
Summer Alias Portd.4
Pc Alias Portd.3
On Urxc Onrxd
Enable Urxc
Enable Interrupts
Do
If Len(empfangen) > 2 Then
Ansteuerung2 = Val(empfangen)
Select Case Ansteuerung2
Case 400
Pc = 1
Empfangen = ""
Case 401
Pc = 0
Empfangen = ""
Case Is < 256
Gosub Ansteuern
End Select
End If
Loop
End
Ansteuern:
Ansteuerung = Ansteuerung2
Portb = Ansteuerung
Gosub Stehlampe
Gosub Leuchtkugel
Gosub Lichterkette
Empfangen = ""
Return
Lichterkette:
If Portb.4 = 1 Then : If X = 0 Then : Portc = &B00000000 : Portc.1 = 1 : X = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
If Portb.4 = 0 Then : If X = 1 Then : Portc = &B00000000 : Portc.0 = 1 : X = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
Return
Stehlampe:
If Portb.6 = 1 Then : If Y = 0 Then : Portc = &B00000000 : Portc.3 = 1 : Y = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
If Portb.6 = 0 Then : If Y = 1 Then : Portc = &B00000000 : Portc.2 = 1 : Y = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
Return
Leuchtkugel:
If Portb.7 = 1 Then : If Z = 0 Then : Portc = &B00000000 : Portc.5 = 1 : Z = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
If Portb.7 = 0 Then : If Z = 1 Then : Portc = &B00000000 : Portc.4 = 1 : Z = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
Return
Onrxd:
Empfangen = Empfangen + Chr(udr)
Return
Problem ist: Der Portb wird nicht richtig gesetzt. Nachdem die
"Ansteuern" Schleife ausgeführt wurde, messe ich jeden Port von b durch
aber keiner ist "1". Deshalb funktionieren auch die Schleifen
Lichterkette, Leuchtkugel und Stehlampe nicht. Ist da irgendwas falsch?
(Der µC läuft über (Mhz Interner Takt)
folgendes Programm:
$regfile = "m8def.dat"
$framesize = 48
$swstack = 64
$hwstack = 64
$crystal = 8000000
$baud = 9600
Dim Empfangen As String * 3
Dim X As Bit , Y As Bit , Z As Bit
Dim Ansteuerung As Byte , Wecksound As Byte
Dim Ansteuerung2 As Integer
X = 0
Y = 0
Z = 0
Wecker = 0
Config Portb = Output
Config Portc = Output
Config Portd.4 = Output
Config Portd.3 = Output
Summer Alias Portd.4
Pc Alias Portd.3
On Urxc Onrxd
Enable Urxc
Enable Interrupts
Do
If Len(empfangen) > 2 Then
Ansteuerung2 = Val(empfangen)
Select Case Ansteuerung2
Case 400
Pc = 1
Empfangen = ""
Case 401
Pc = 0
Empfangen = ""
Case Is < 256
Gosub Ansteuern
End Select
End If
Loop
End
Ansteuern:
Ansteuerung = Ansteuerung2
Portb = Ansteuerung
Gosub Stehlampe
Gosub Leuchtkugel
Gosub Lichterkette
Empfangen = ""
Return
Lichterkette:
If Portb.4 = 1 Then : If X = 0 Then : Portc = &B00000000 : Portc.1 = 1 : X = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
If Portb.4 = 0 Then : If X = 1 Then : Portc = &B00000000 : Portc.0 = 1 : X = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
Return
Stehlampe:
If Portb.6 = 1 Then : If Y = 0 Then : Portc = &B00000000 : Portc.3 = 1 : Y = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
If Portb.6 = 0 Then : If Y = 1 Then : Portc = &B00000000 : Portc.2 = 1 : Y = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
Return
Leuchtkugel:
If Portb.7 = 1 Then : If Z = 0 Then : Portc = &B00000000 : Portc.5 = 1 : Z = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
If Portb.7 = 0 Then : If Z = 1 Then : Portc = &B00000000 : Portc.4 = 1 : Z = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
Return
Onrxd:
Empfangen = Empfangen + Chr(udr)
Return
Problem ist: Der Portb wird nicht richtig gesetzt. Nachdem die
"Ansteuern" Schleife ausgeführt wurde, messe ich jeden Port von b durch
aber keiner ist "1". Deshalb funktionieren auch die Schleifen
Lichterkette, Leuchtkugel und Stehlampe nicht. Ist da irgendwas falsch?
(Der µC läuft über (Mhz Interner Takt)