Hi, ich wollte mal mein neues Projekt reinstellen und fragen was ihr davon haltet und was ich noch verbessern könnte.
Das ganze soll mal ein Rolloaktor für nen Hausbus werden.
Das Teil wird uber die RS232 oder 485 über einen Befehl zB ro0101 (Rollo 01 auf) von einem anderen Busteilnehmer angesprochen und dann dieentsprechende Aktion ausführen. Da ich im freien Erklären nich besonders gut bin fragt einfach nach

Code:
'Rolloaktor V1.0
'Max 8 Rollos
'Befehle über RS232 / RS485
'Erstellt 23.11.2007 By Kalle


$regfile = "m32def.dat"
$crystal = 4000000

Declare Sub Steuern(subrollonummer As Byte , Subaktionnummer As Byte)

'*** Konfig ***
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2

Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Pind.5 = Input

Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1

Pind.2 Alias Adr1
Pind.3 Alias Adr2
Pind.4 Alias Adr3
Pind.5 Alias Adr4


'*** Variablendeklaration ***
Dim Befehl As String * 6
Dim Befehllaenge As Byte
Dim Typ As String * 2
Dim Nummer As String * 2
Dim Aktion As String * 2
Dim Fehler As String * 10
Dim Myadress As String * 8
Dim Adress As String * 8

Dim Umrechnung As Byte
Dim Umrechnung2 As Byte
Dim Nummerbyte As Byte
Dim Rollo(8) As Byte
Dim Aktionbyte As Byte
Dim Portabyte As Byte
Dim Portcbyte As Byte
Dim I As Byte
Dim Fehlerlaenge As Byte
Dim Adrbyte As Byte

'Umrechnung2 = "0000000000000000"

'*** Hauptprogramm ***

Do
   Gosub Adresserkennung
   Input Befehl
   Befehllaenge = Len(befehl)
   If Befehllaenge > 0 Then
      Gosub Befehlserkennung
   End If
   Fehlerlaenge = Len(fehler)
   If Fehlerlaenge > 0 Then
      Print Fehler
   End If
Loop




'*** Unterprogramme ***


'*** Befehlserkennung ***

Befehlserkennung:

Cls
Locate 1 , 1
Lcd Befehl
Typ = Left(befehl , 2)
Nummer = Mid(befehl , 3 , 2)
Aktion = Right(befehl , 2)
If Typ = "ro" Then
   Gosub Ausfuehrung
Else
   Fehler = "ERRTYP0001"                                    'Fehler Falschr Typ
   Return
End If

Return


'*** Aktion Ausführen ***

Ausfuehrung:

Nummerbyte = Val(nummer)
Aktionbyte = Val(aktion)
Rollo(nummerbyte) = Aktionbyte
If Nummerbyte < 9 Then
   If Aktionbyte < 3 Then
      Goto Weiter
   Else
      Fehler = "ERRAKT0001"                                  'Fehler Falsche Aktion
      Return                                                'Hier fehlertelegramm senden
   End If
Else
   Fehler = "ERRADR0001"                                     'Fehler Falsche Adresse
   Return
End If

Weiter:
Locate 2 , 1
Lcd "Rollo"
Locate 2 , 7
Lcd Nummerbyte
Locate 2 , 9
Lcd Aktionbyte
Call Steuern(nummerbyte , Aktionbyte)

Return


'*** Adresserkennung ***

Adresserkennung:

Adrbyte = Portd
Rotate Adrbyte , Left , 2
Rotate Adrbyte , Right , 4
Adress = Str(adrbyte)
Myadress = "ROLL" + Adress
Print Myadress
Return


'*** Steuern subroutine *** noch fertigzustellen
'hier liegt auch das Problem von meinem letzten Beitrag

Sub Steuern(subrollonummer As Byte , Subaktionnummer As Byte)
Dim Merker As Byte
Select Case Subaktionnummer
   Case 0 : Umrechnung = &B00                               'Rollo stop
   Case 1 : Umrechnung = &B01                               'Rollo auf
   Case 2 : Umrechnung = &B10                               'Rollo zu
   Case Else : Fehler = "ERRAKT0001"                        'Fehler Falsche Aktion

End Select

Merker = Subrollonummer - 1                                 'Damit Bitfolge beim Bit0 beginnt
Merker = Merker * 2                                         'Bitfolge in jedes 2. Bit schreiben

Shift Umrechnung , Left , Merker
Portabyte = Portabyte Or Umrechnung
Porta = Portabyte

End Sub
p.s. Kritik erwünscht
mfg Kalle