Startseite   |  Site map   |  A-Z artikel   |  Artikel einreichen   |   Kontakt   |  
  


informatik artikel (Interpretation und charakterisierung)

Mail

Speicher

Programmversion mit bedienoberfläche


1. Java
2. Viren

Das in Kapitel 3 beschriebene Assembler-Programm wurde um zur Kommunikation mit dem PC nötigen Zeilen ergänzt und wird nun über die serielle Schnittstelle mit einem PC-Programm angesprochen. Erstellt wurde dieses mit der Entwicklungsumgebung Microsoft Visual Basic 5.0 Enterprise Edition.


1.1. Grundlegende Funktion von C- und PC-Programm
Um den C mit dem PC-Programm ansprechen zu können, muß sich der C im I²C-Bus-Status F8h befinden. Nun kann vom PC-Programm die Verbindung zum C erstellt werden. Dabei beginnt das Programm die serielle Schnittstelle des PCs zu beanspruchen. Dann sendet es den Befehl 80h an den C, worauf dieser seinen Status F8h zu melden hat. Geschieht dies korrekt, so schickt der PC nun die Adresse, die das Terminal laut den Einstellungen anzunehmen hat, an den C, wo sie im entsprechende Register S1ADR gelegt wird. Weiters aktiviert der C nun den I²C-Bus und den zugehörigen Interrupt.

Zu Beginn jeder Interrupt Service Routine des I²C-Busses sendet der Microcontroller seinen aktuellen Status an den PC. Der PC hat ebenfalls seinen eigenen Status, der in der Variablen "Status" gespeichert ist. Erhält nun der PC das OnComm-Ereignis, welches durch den Eingang von Daten über die serielle Schnittstelle ausgelöst wird, so wählt er in einer auf den aktuellen PC-Status bezogenen Case-Anweisung den auszuführenden Programmcode. Hier wird die vom Microcontroller kommende Nachricht, die nun den aktuellen Status des Microcontrollers enthält, eingelesen. Somit kann der PC seinen Status aktualisieren. Gleichzeitig wird ermittelt, ob der neue Status eine korrekte Fortsetzung des alten Status darstellt oder ob eine Fehler aufgetreten ist. Entsprechend verlaufen die weiteren Vorgänge im PC.
Bestimmte Statuszustände im PC erwarten sofort einen weiteren Eingang an Daten vom C. Dazu wird im PC die Eigenschaft "Enabled" des Hauptfenster "FormMain" auf false gesetzt und der Timer aktiviert. Können nun wie erwartet Daten empfangen werden, so wird der Timer deaktiviert und das eingegangene Byte wird verarbeitet. Tritt jedoch das OnComm-Ereignis nicht auf, so schließt der PC nach Ablauf des Timers auf ein Fehlverhalten des C und gibt eine Fehlermeldung am Bildschirm aus.


1.2. Inbetriebnahme mit dem Microcontroller-Board
Um das Programm testweise mit einem Entwicklungs-Board in Betrieb nehmen zu können, muß vorerst mittels eines Terminalprogramms das Assembler-Programm über die serielle Schnittstelle in den C geladen werden. Dabei darf das PC-Programm noch keinen Anspruch auf die Schnittstelle erheben. Dann ist das C-Programm an der Adresse 8000h zu starten und die Verbindung mit dem Terminalprogramm zu trennen.
Nun wird mit dem PC-Programm über die Schnittstelle die Verbindung zum C hergestellt, anschließend kann auch die Busverbindung erfolgen. Entnehmen Sie nähere Beschreibungen zu diesen Schritten dem zugehörigen Hilfesystem.



1.3. Hilfesystem
Das zum Programm gehörende Hilfesystem wurde mit Microsoft Help Workshop 4.02 erstellt.
Es beschreibt die Bedienung des Programms, so daß nähere Erläuterungen in dieser Dokumentation nicht erforderlich sind.


1.4. Anhang

1.4.1. Initialisierung
Sofort nach dem die Verbindung zum Microcontroller hergestellt wurde sendet der PC entsprechend den in der Record-Variablen "Einstellungen" gespeicherten Einstellungen die folgenden Werte an den Microcontroller.

PC-Variable C-Variable Beschreibung
Einstellungen.OwnAddress S1ADR.0 bis S1ADR.6 Terminal-Adresse
Einstellungen.GetGC S1ADR.7 General Call annehmen

1.4.2. Kommunikationszeichen
Mit den folgenden festgelegten Werten fordert der PC den C zu bestimmten Aktionen auf. Der C empfängt diese Aufforderungen im Hauptprogramm und führt die entsprechende Aktion auch dort aus.


Code von PC Beschreibung
80h Verbindung zu C herstellen; C-Status an PC; I²C-Bus aktivieren
81h Verbindung zu C trennen; I²C-Bus deaktivieren
82h Startaufforderung an Bus; CALL START

83h Stoppaufforderung an Bus; SETB STO
84h AA rücksetzen; CLR AA

85h AA setzen; SETB AA


1.4.3. Gespeicherte Einstellungen
In der Record-Variablen "Einstellungen" befinden sich die folgenden Einstellungen. Diese Variable wird bei jedem Programmstart aus der Datei "I2C.ini", die sich im aktuellen Verzeichnis befinden soll, geladen. Existiert die Datei nicht, so werden die Standardeinstellungen verwendet. Bei Programmbeendigung wird die aktuelle Variable "Einstellungen" in dieser Datei gespeichert.

Beschreibung

Auf General Call reagieren
Eigene Adresse

An Speichern der Daten erinnern
Wartezeit nach Aufforderung

Serielle Schnittstelle
Ausgewählter Slave oder General Call

Slavetyp
Slaveadresse


1.4.4. Statuszustände in C und PC
Kennung Modus Beschreibung

XX - PC ohne Verbindung
LC - Link Controller; Verbindungsversuch zu C

00 Alle Bus-Fehler
F8 - PC mit C verbunden, kein Bus-Betrieb
LB MT, MR Link Bus; Verbindungsversuch mit Bus
08 MT, MR Start gesendet

10 MT, MR Repeated-Start gesendet
18 MT Adresse+W gesendet, ACK empfangen
20 MT Adresse+W gesendet, NACK empfangen
28 MT Daten gesendet, ACK empfangen; STANDARD
MT MT Master transmitting; Master sendet derzeit
30 MT Daten gesendet, NACK empfangen

38 MT, MR Arbitration verloren
beim Senden von Adresse oder Daten (Transmitter), beim NACK (Receiver)

40 MR Adresse+R gesendet, ACK empfangen
48 MR Adresse+R gesendet, NACK empfangen
50 MR Daten empfangen, ACK gesendet; STANDARD
MR MR Master empfängt derzeit

RS MR Receiver stopped
58 MR Daten empfangen, NACK gesendet

60 SR Adresse+W empfangen, ACK gesendet
68 SR Arbitration verloren als adressierter Master

Adresse+W empfangen, ACK gesendet
70 SR General-Call empfangen, ACK gesendet
78 SR Arbitration verloren als adressierter Master
General-Call empfangen, ACK gesendet
80 SR Daten empfangen, ACK gesendet (adressiert); STANDARD
SR SR Slave empfängt derzeit (adressiert)
88 SR Daten empfangen, NACK gesendet (adressiert)
90 SR Daten empfangen, ACK gesendet (General Call)
GR SR Slave empfängt derzeit (General Call)
98 SR Daten empfangen, NACK gesendet (General Call)
A0 SR Stop oder Repeated-Start empfangen
A8 ST Adresse+R empfangen, ACK gesendet
B0 ST Arbitration verloren als adressierter Master
Adresse+R empfangen, ACK gesendet
B8 ST Daten gesendet, ACK empfangen; STANDARD
ST ST Slave transmitting; Slave sendet derzeit

C0 ST Daten gesendet, NACK empfangen
C8 ST AA=0, letzte Daten gesendet, ACK empfangen

Die schattierten Zeilen enthalten Zustände, die nur im PC auftreten. Alle anderen Zustände treten im PC und im C auf.



1.4.5. Die Formulare und Module des PC-Programms
Beschreibungen zu einzelnen Einstellungsdetails der Fenster sind dem Hilfesystem zu entnehmen.


1.4.5.1. FormMain



Option Explicit

Private Sub Form_Load()

IniPfadInit \'Pfad zur Datei I2C.ini festlegen

EinstellungenInit True \'Einstellungen laden



TextPfad = \"\"

Status = \"XX\"

MenuDateiSpeichern.Enabled = False

SetAnzeigen



On Error Resume Next

MSCommI2C.CommPort = Einstellungen.SerialPort

On Error GoTo 0

TimerI2C.Interval = Einstellungen.StartWarten

CommonDialogHelp.HelpFile = App.HelpFile
End Sub

Private Sub Form_Unload(Cancel As Integer)

Dim Antwort As Variant

Dim Gespeichert As Boolean



Antwort = -1

If Einstellungen.SaveMsg And (RichTextBoxDaten.Tag = 1) Then

Antwort = MsgBox(\"Möchten Sie die Änderungen des Textfeldes speichern?\", vbQuestion + vbYesNoCancel + vbDefaultButton1)

Select Case Antwort

Case vbYes

If (TextPfad = \"\") Then

On Error GoTo Abbrechen

CommonDialogSave.ShowSave

On Error GoTo Fehler1

RichTextBoxDaten.SaveFile CommonDialogSave.filename, rtfText

On Error GoTo 0

GoTo Ende1

Fehler1:

MsgBox \"Die Datei konnte nicht gespeichert werden.\", vbCritical

Abbrechen:

Resume Fehler1Weiter

Fehler1Weiter:

CommonDialogSave.filename = \"\"

Cancel = -1
Ende1:

Else

On Error GoTo Fehler2

RichTextBoxDaten.SaveFile TextPfad, rtfText

GoTo Ende2

Fehler2:

MsgBox \"Die Datei konnte nicht gespeichert werden.\", vbCritical

Cancel = -1
Ende2:

End If

Case vbNo

Case vbCancel

Cancel = -1

End Select
End If

If (Cancel = 0) Then EinstellungenInit False
End Sub

Private Sub MenuDateiSenden_Click()

Dim AltStatus As String * 2

If (Status = \"18\") Or (Status = \"28\") Or (Status = \"A8\") Or (Status = \"B8\") Then

FormMain.Enabled = False

AltStatus = Status

Select Case Status

Case \"18\", \"28\": Status = \"MT\"

Case \"A8\", \"B8\": Status = \"ST\"

End Select

SetAnzeigen

If (RichTextBoxDaten.SelText \"\") Then

SendePuffer = RichTextBoxDaten.SelText

Else

SendePuffer = RichTextBoxDaten.Text

End If

If Len(SendePuffer) > 0 Then

PufferPos = 1

On Error GoTo PortFehler

MSCommI2C.Output = Mid(SendePuffer, PufferPos, 1)

On Error GoTo 0

TimerI2C.Enabled = True

Else

Status = AltStatus

SetAnzeigen

FormMain.Enabled = True

End If
End If

Exit Sub



PortFehler:

Resume FehlerWeiter

FehlerWeiter:

MsgBox \"Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten.\"

On Error Resume Next

MSCommI2C.PortOpen = False

On Error GoTo 0

Status = \"XX\"

SetAnzeigen

FormMain.Enabled = True
End Sub


Private Sub MenuDateiNeu_Click()

Dim Antwort As Variant

Dim Gespeichert As Boolean



Antwort = -1

If Einstellungen.SaveMsg And (RichTextBoxDaten.Tag = 1) Then

Antwort = MsgBox(\"Möchten Sie die Änderungen des Textfeldes speichern?\", vbQuestion + vbYesNoCancel + vbDefaultButton1)

Select Case Antwort

Case vbYes

If (TextPfad = \"\") Then

On Error GoTo Abbrechen

CommonDialogSave.ShowSave

On Error GoTo Fehler1

RichTextBoxDaten.SaveFile CommonDialogSave.filename, rtfText

On Error GoTo 0

NeuEinrichten

GoTo Ende1

Fehler1:

MsgBox \"Die Datei konnte nicht gespeichert werden.\", vbCritical

Abbrechen:

Resume Fehler1Weiter

Fehler1Weiter:

CommonDialogSave.filename = \"\"
Ende1:

Else

On Error GoTo Fehler2

RichTextBoxDaten.SaveFile TextPfad, rtfText

NeuEinrichten

GoTo Ende2

Fehler2:

MsgBox \"Die Datei konnte nicht gespeichert werden.\", vbCritical
Ende2:

End If

Case vbNo

NeuEinrichten

Case vbCancel

End Select

Else

NeuEinrichten
End If
End Sub


Private Sub NeuEinrichten()

RichTextBoxDaten.TextRTF = \"\"

MenuDateiSpeichern.Enabled = False

TextPfad = \"\"

RichTextBoxDaten.Tag = 0
End Sub

Private Sub MenuDateiOffnen_Click()

On Error GoTo Abbrechen

CommonDialogOpen.ShowOpen

On Error GoTo Fehler

RichTextBoxDaten.LoadFile CommonDialogOpen.filename, rtfText

On Error GoTo 0

TextPfad = CommonDialogOpen.filename

MenuDateiSpeichern.Enabled = True

RichTextBoxDaten.Tag = 0

Exit Sub



Fehler:

MsgBox \"Die Datei konnte nicht geöffnet werden.\", vbCritical

Abbrechen:

CommonDialogOpen.filename = \"\"
End Sub


Private Sub MenuDateiSpeichern_Click()

On Error GoTo Fehler

RichTextBoxDaten.SaveFile TextPfad, rtfText

On Error GoTo 0

RichTextBoxDaten.Tag = 0

GoTo Ende

Fehler:

MsgBox \"Die Datei konnte nicht geöffnet werden.\", vbCritical

CommonDialogOpen.filename = \"\"

Ende:
End Sub

Private Sub MenuDateiSpeichernunter_Click()

On Error GoTo Abbrechen

CommonDialogSave.ShowSave

On Error GoTo Fehler

RichTextBoxDaten.SaveFile CommonDialogSave.filename, rtfText

On Error GoTo 0

TextPfad = CommonDialogSave.filename

MenuDateiSpeichern.Enabled = True

RichTextBoxDaten.Tag = 0

GoTo Ende

Fehler:

MsgBox \"Die Datei konnte nicht gespeichert werden.\", vbCritical

Abbrechen:

CommonDialogSave.filename = \"\"

Ende:
End Sub

Private Sub MenuDateiBeenden_Click()

Unload FormMain
End Sub

Private Sub MenuVerbindungUperstellen_Click()

On Error GoTo NoPort

MSCommI2C.PortOpen = True

On Error GoTo 0



FormMain.Enabled = False

Status = \"LC\"

SetAnzeigen

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(Anmelden) \'Status anfordern

On Error GoTo 0

TimerI2C.Enabled = True



Exit Sub



NoPort:

MsgBox \"Die gewählte serielle Schnittstelle ist nicht ansprechbar.\", vbCritical

Exit Sub



PortFehler:

Resume FehlerWeiter

FehlerWeiter:

MsgBox \"Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten.\"

On Error Resume Next

MSCommI2C.PortOpen = False

On Error GoTo 0

Status = \"XX\"

SetAnzeigen

FormMain.Enabled = True
End Sub

Private Sub MenuVerbindungUptrennen_Click()

Dim Trenne As Variant



Trenne = vbNo

If (Status \"F8\") Then

Trenne = MsgBox(\"Es besteht noch eine Busverbindung. Wird nun die Verbindung zum Microcontroller getrennt, kann der Microcontroller nicht vom Bus getrennt werden. Möchten Sie nun dennoch die Verbindung zum Microcontroller trennen?\", (vbYesNo + vbExclamation + vbDefaultButton2))

Else

Trenne = vbYes
End If

If (Trenne = vbYes) Then

On Error Resume Next

If (Status \"F8\") Then MSCommI2C.Output = Chr$(Abmelden)

MSCommI2C.PortOpen = False

On Error GoTo 0

Status = \"XX\"

SetAnzeigen
End If
End Sub

Private Sub MenuVerbindungi2cErstellen_Click()

FormMain.Enabled = False

Status = \"LB\"

SetAnzeigen

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(SendSTA)

On Error GoTo 0

TimerI2C.Enabled = True

Exit Sub



PortFehler:

Resume FehlerWeiter

FehlerWeiter:

MsgBox \"Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten.\"

On Error Resume Next

MSCommI2C.PortOpen = False

On Error GoTo 0

Status = \"XX\"

SetAnzeigen

FormMain.Enabled = True
End Sub

Private Sub MenuVerbindungi2cErstellenxxx_Click()

Dim Verbinde As Boolean



FormVerbinden.Show 1

Verbinde = (Einstellungen.SofortConnect) And (FormVerbinden.Tag = 1)

Unload FormVerbinden

If Verbinde Then MenuVerbindungi2cErstellen_Click
End Sub

Private Sub MenuVerbindungI2ctrennen_Click()

If (Status = \"18\") Or (Status = \"28\") Or (Status = \"40\") Or (Status = \"50\") Then

Select Case Status

Case \"18\", \"28\"

Status = \"F8\"

SetAnzeigen

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(SendSTO)

On Error GoTo 0

Case \"40\", \"50\"

Status = \"RS\"

SetAnzeigen

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(ClrAA)

On Error GoTo 0

End Select
End If

Exit Sub



PortFehler:

Resume FehlerWeiter

FehlerWeiter:

MsgBox \"Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten.\"

On Error Resume Next

MSCommI2C.PortOpen = False

On Error GoTo 0

Status = \"XX\"

SetAnzeigen

FormMain.Enabled = True
End Sub

Private Sub MenuEinstellungenKonfig_Click()

FormKonfig.Show 1

If FormKonfig.Tag = 1 Then

On Error GoTo PortFehler

If (Status = \"XX\") Then MSCommI2C.CommPort = Einstellungen.SerialPort

On Error GoTo 0

TimerI2C.Interval = Einstellungen.StartWarten
End If

Unload FormKonfig

Exit Sub



PortFehler:

Resume FehlerWeiter

FehlerWeiter:

MsgBox \"Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten.\"

On Error Resume Next

MSCommI2C.PortOpen = False

On Error GoTo 0

Status = \"XX\"

SetAnzeigen

FormMain.Enabled = True
End Sub

Private Sub MenuHilfeHilfethemen_Click()

\'WinHelp Me.hwnd, App.HelpFile, &HB, 0

CommonDialogHelp.ShowHelp
End Sub

Private Sub MenuHilfeInfo_Click()

FormInfo.Show 1
End Sub

Private Sub MSCommI2C_OnComm()

Dim PortInput As String

TimerI2C.Enabled = False

Select Case MSCommI2C.CommEvent

Case comEvReceive

On Error GoTo PortFehler

PortInput = AscB(MSCommI2C.Input)

On Error GoTo 0

Select Case Status

Case \"XX\"

Case \"LC\"

If (PortInput = 248) Then \'F8

Status = \"F8\"

SetAnzeigen

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(AdresseToZahl(Einstellungen.OwnAddress, Einstellungen.GetGC))

On Error GoTo 0

FormMain.Enabled = True

Else

On Error Resume Next

MSCommI2C.PortOpen = False

On Error GoTo 0

MsgBox \"Der Microcontroller steht in einem vom Anfangsstatus \"\"F8\"\" abweichenden Status. Er muß auf diesen Anfangsstatus gestellt werden, bevor er angesprochen werden kann.\", vbExclamation

Status = \"XX\"

SetAnzeigen

FormMain.Enabled = True

End If

Case \"00\" \'Bus-Fehler

Case \"F8\"

Select Case PortInput

Case 96 \'60h SR

Status = \"60\"

SetAnzeigen

Case 168 \'A8h ST

Status = \"A8\"

SetAnzeigen

End Select

Case \"LB\"

On Error GoTo PortFehler

If (PortInput = 8) Or (PortInput = 10) Then \'8h

Select Case Einstellungen.SelectSlave

Case True

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(AdresseToZahl(Einstellungen.SlaveAddress, Einstellungen.SlaveTyp))

On Error GoTo 0

Case False

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(AdresseToZahl(GCAddress, False))

On Error GoTo 0

End Select

Select Case PortInput

Case 8: Status = \"08\"

Case 10: Status = \"10\"

End Select

SetAnzeigen

TimerI2C.Enabled = True

Else

MsgBox \"Die Startaufforderung an den Bus ist fehlgeschlagen. Es wurde eine ungültige Antwort vom Microcontroller empfangen.\", vbCritical

Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

End If

Case \"08\" \'MT, MR Start gesendet

Select Case PortInput

Case 24 \'18h MT ACK

Status = \"18\"

SetAnzeigen

FormMain.Enabled = True

Case 32 \'20h MT NACK

Status = \"20\"

SetAnzeigen

MsgBox \"Der adressierte Slave antwortet nicht.\", vbExclamation
Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case 64 \'40h MR ACK

Status = \"40\"

SetAnzeigen

FormMain.Enabled = True

Case 72 \'48h MR NACK

Status = \"48\"

SetAnzeigen

MsgBox \"Der adressierte Slave antwortet nicht.\", vbExclamation
Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case Else

MsgBox \"Der adressierte Slave antwortet nicht. Es wurde ein ungültiger Wert empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

End Select

Case \"10\" \'MT, MR Repeated-Start gesendet

Select Case PortInput

Case 24 \'18h ACK

Status = \"18\"

SetAnzeigen

FormMain.Enabled = True

Case 32 \'20h NACK

Status = \"20\"

SetAnzeigen

MsgBox \"Der adressierte Slave antwortet nicht.\", vbExclamation
Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case 64 \'40h MR ACK

Status = \"40\"

SetAnzeigen

FormMain.Enabled = True

Case 72 \'48h MR NACK

Status = \"48\"

SetAnzeigen

MsgBox \"Der adressierte Slave antwortet nicht.\", vbExclamation
Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case Else

MsgBox \"Der adressierte Slave antwortet nicht. Es wurde ein ungültiger Wert empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

End Select

Case \"18\" \'no \'MT Adresse+W gesendet, ACK empfangen

Case \"20\" \'MT Adresse+W gesendet, NACK empfangen

Case \"28\" \'no \'MT Daten gesendet, ACK empfangen STANDARD

Case \"MT\"

Select Case PortInput

Case 40 \'28 ACK

If Len(SendePuffer) > PufferPos Then

PufferPos = PufferPos + 1

On Error GoTo PortFehler

MSCommI2C.Output = Mid(SendePuffer, PufferPos, 1)

On Error GoTo 0

TimerI2C.Enabled = True

Else

Status = \"28\"

SetAnzeigen

FormMain.Enabled = True

End If

Case 48 \'30 NACK

Status = \"30\"

SetAnzeigen

MsgBox \"Der Slave antwortet nicht. Es wurde NACK empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case Else

MsgBox \"Es wurde eine ungültige Antwort empfangen.\", vbExclamation

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(SendSTO)

On Error GoTo 0
Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

End Select

Case \"30\" \'MT Daten gesendet, NACK empfangen

Case \"38\" \'MT, MR Arbitration verloren beim Senden von Adresse oder Daten (Transmitter)

Case \"40\" \'MR Adresse+R gesendet, ACK empfangen\"

Select Case PortInput

Case 80 \'50h

FormMain.Enabled = False

Status = \"MR\"

SetAnzeigen

TimerI2C.Enabled = True

Case Else

MsgBox \"Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

End Select

Case \"48\" \'MR Adresse+R gesendet, NACK empfangen

Case \"50\" \'MR Daten empfangen, ACK gesendet STANDARD

Select Case PortInput

Case 80 \'50h

FormMain.Enabled = False

Status = \"MR\"

SetAnzeigen

TimerI2C.Enabled = True

Case Else

MsgBox \"Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

End Select

Case \"MR\" \'MR

RichTextBoxDaten.Text = RichTextBoxDaten.Text + Chr$(PortInput)

Status = \"50\"
SetAnzeigen

FormMain.Enabled = True

Case \"RS\"

Select Case PortInput

Case 88 \'58h
Status = \"F8\"

SetAnzeigen

Case Else

MsgBox \"Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

End Select

Case \"58\" \'MR Daten empfangen, NACK gesendet

Case \"60\" \'SR Adresse+W empfangen, ACK gesendet

Select Case PortInput

Case 128 \'80h

FormMain.Enabled = False

Status = \"SR\"

SetAnzeigen

TimerI2C.Enabled = True
Case 160 \'A0

Status = \"A0\"

SetAnzeigen

MsgBox \"Die Bus-Verbindung wurde vom Master beendet.\", vbInformation
Status = \"F8\"

SetAnzeigen

Case Else

MsgBox \"Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

End Select

Case \"68\" \'SR Arbitration verloren als adressierter Master,\"

Case \"70\" \'SR General-Call empfangen, ACK gesendet\"

Select Case PortInput

Case 144 \'90h

FormMain.Enabled = False

Status = \"GR\"

SetAnzeigen

TimerI2C.Enabled = True
Case 160 \'A0

Status = \"A0\"

SetAnzeigen

MsgBox \"Die Bus-Verbindung wurde vom Master beendet.\", vbInformation
Status = \"F8\"

SetAnzeigen

Case Else

MsgBox \"Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

End Select

Case \"78\" \'SR Arbitration verloren als adressierter Master,\"

Case \"80\" \'SR Daten empfangen, ACK gesendet (adressiert) STANDARD\"

Select Case PortInput

Case 128 \'80h

FormMain.Enabled = False

Status = \"SR\"

SetAnzeigen

TimerI2C.Enabled = True
Case 160 \'A0

Status = \"A0\"

SetAnzeigen

MsgBox \"Die Bus-Verbindung wurde vom Master beendet.\", vbInformation
Status = \"F8\"

SetAnzeigen

Case Else

MsgBox \"Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

End Select

Case \"SR\":

RichTextBoxDaten.Text = RichTextBoxDaten.Text + Chr$(PortInput)

Status = \"80\"
SetAnzeigen

FormMain.Enabled = True

Case \"88\" \'SR Daten empfangen, NACK gesendet (adressiert)\"

Case \"90\" \'SR Daten empfangen, ACK gesendet (General Call)\"

Select Case PortInput

Case 144 \'90h

FormMain.Enabled = False

Status = \"GR\"

SetAnzeigen

TimerI2C.Enabled = True
Case 160 \'A0

Status = \"A0\"

SetAnzeigen

MsgBox \"Die Bus-Verbindung wurde vom Master beendet.\", vbInformation
Status = \"F8\"

SetAnzeigen

Case Else

MsgBox \"Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

End Select

Case \"GR\"

RichTextBoxDaten.Text = RichTextBoxDaten.Text + Chr$(PortInput)

Status = \"90\"
SetAnzeigen

FormMain.Enabled = True

Case \"98\" \'SR Daten empfangen, NACK gesendet (General Call)\"

Case \"A0\" \'no SR Stop oder Repeated-Start empfangen\"

Case \"A8\" \'ST Adresse+R empfangen, ACK gesendet\"

Case \"B0\" \'ST Arbitration verloren als adressierter Master,\"

Case \"B8\" \'ST Daten gesendet, ACK empfangen STANDARD\"

Case \"ST\"

Select Case PortInput

Case 184 \'B8 ACK

If Len(SendePuffer) > PufferPos Then

PufferPos = PufferPos + 1

On Error GoTo PortFehler

MSCommI2C.Output = Mid(SendePuffer, PufferPos, 1)

On Error GoTo 0

TimerI2C.Enabled = True

Else

Status = \"B8\"

SetAnzeigen

FormMain.Enabled = True

End If

Case 192 \'C0 NACK

Status = \"C0\"

SetAnzeigen

MsgBox \"Es wurde NACK empfangen. Die Verbindung ist beendet.\", vbExclamation
Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case Else

MsgBox \"Es wurde eine ungültige Antwort empfangen.\", vbExclamation
Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

End Select

Case \"C0\" \'ST Daten gesendet, NACK empfangen\"

Case \"C8\" \'ST AA=0, letzte Daten gesendet, ACK empfangen\"

End Select

End Select

Exit Sub



PortFehler:

Resume FehlerWeiter

FehlerWeiter:

MsgBox \"Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten.\"

On Error Resume Next

MSCommI2C.PortOpen = False

On Error GoTo 0

Status = \"XX\"

SetAnzeigen

FormMain.Enabled = True
End Sub


Private Sub TimerI2C_Timer()

TimerI2C.Enabled = False

Select Case Status

Case \"XX\" \'no

Case \"LC\"

On Error Resume Next

MSCommI2C.PortOpen = False

On Error GoTo 0

MsgBox \"Der Microcontroller antwortet nicht.\", vbCritical

Status = \"XX\"

SetAnzeigen

FormMain.Enabled = True

Case \"00\" \'Bus-Fehler

Case \"F8\"

Case \"LB\"

MsgBox \"Die Startaufforderung an den Bus ist fehlgeschlagen. Es konnte keine Antwort empfangen werden.\", vbExclamation

Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case \"08\" \'MT, MR Start gesendet

MsgBox \"Der adressierte Slave antwortet nicht.\", vbExclamation

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(SendSTO)

On Error GoTo 0

Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case \"10\" \'MT, MR Repeated-Start gesendet

MsgBox \"Der adressierte Slave antwortet nicht.\", vbExclamation

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(SendSTO)

On Error GoTo 0

Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case \"18\" \'MT Adresse+W gesendet, ACK empfangen

Case \"20\" \'MT Adresse+W gesendet, NACK empfangen

Case \"28\" \'MT Daten gesendet, ACK empfangen STANDARD

Case \"MT\"

MsgBox \"Der Slave antwortet nicht. Es konnte keine Antwort empfangen werden.\", vbExclamation

On Error GoTo PortFehler

MSCommI2C.Output = Chr$(SendSTO)

On Error GoTo 0

Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case \"30\" \'MT Daten gesendet, NACK empfangen

Case \"38\" \'MT, MR Arbitration verloren beim Senden von Adresse oder Daten (Transmitter)

Case \"40\" \'MR Adresse+R gesendet, ACK empfangen\"

Case \"48\" \'MR Adresse+R gesendet, NACK empfangen

Case \"50\" \'MR Daten empfangen, ACK gesendet STANDARD

Case \"MR\" \'MR

MsgBox \"Die Verbindung wurde aufgrund eines Fehlers beendet. Es konnten keine Daten empfangen werden.\", vbExclamation

Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case \"RS\"

Case \"58\" \'MR Daten empfangen, NACK gesendet

Case \"60\" \'no SR Adresse+W empfangen, ACK gesendet

Case \"68\" \'SR Arbitration verloren als adressierter Master,\"

Case \"70\" \'no SR General-Call empfangen, ACK gesendet\"

Case \"78\" \'SR Arbitration verloren als adressierter Master,\"

Case \"80\" \'no SR Daten empfangen, ACK gesendet (adressiert) STANDARD\"

Case \"SR\":

MsgBox \"Die Verbindung wurde aufgrund eines Fehlers beendet. Es konnten keine Daten empfangen werden.\", vbExclamation

Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case \"88\" \'SR Daten empfangen, NACK gesendet (adressiert)\"

Case \"90\" \'no SR Daten empfangen, ACK gesendet (General Call)\"

Case \"GR\"

MsgBox \"Die Verbindung wurde aufgrund eines Fehlers beendet. Es konnten keine Daten empfangen werden.\", vbExclamation

Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case \"98\" \'SR Daten empfangen, NACK gesendet (General Call)\"

Case \"A0\" \'no SR Stop oder Repeated-Start empfangen\"

Case \"A8\" \'ST Adresse+R empfangen, ACK gesendet\"

Case \"B0\" \'ST Arbitration verloren als adressierter Master,\"

Case \"B8\" \'ST Daten gesendet, ACK empfangen STANDARD\"

Case \"ST\"

MsgBox \"Der Master antwortet nicht. Es konnte keine Antwort empfangen werden.\", vbExclamation

Status = \"F8\"

SetAnzeigen

FormMain.Enabled = True

Case \"C0\" \'ST Daten gesendet, NACK empfangen\"

Case \"C8\" \'ST AA=0, letzte Daten gesendet, ACK empfangen\"

End Select

Exit Sub



PortFehler:

Resume FehlerWeiter

FehlerWeiter:

MsgBox \"Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten.\"

On Error Resume Next

MSCommI2C.PortOpen = False

On Error GoTo 0

Status = \"XX\"

SetAnzeigen

FormMain.Enabled = True
End Sub

Public Sub SetAnzeigen() \'Menueleiste und Statusleiste aktualisieren

SetMenu

SetStatusBar
End Sub

Public Sub SetMenu() \'Menueleiste aktualisieren

Select Case Status

Case \"XX\": SetMenuEinrichten False, False, False, False, True, False

Case \"LC\": SetMenuEinrichten False, False, False, False, False, False

Case \"00\" \'Bus-Fehler

Case \"F8\": SetMenuEinrichten False, True, True, False, False, True

Case \"LB\": SetMenuEinrichten False, False, False, False, False, False

Case \"08\": SetMenuEinrichten False, False, False, False, False, False \'MT, MR Start gesendet

Case \"10\": SetMenuEinrichten False, False, False, False, False, False \'MT, MR Repeated-Start gesendet

Case \"18\": SetMenuEinrichten True, True, True, True, False, True \'MT Adresse+W gesendet, ACK empfangen

Case \"20\": SetMenuEinrichten False, False, False, False, False, False \'MT Adresse+W gesendet, NACK empfangen

Case \"28\": SetMenuEinrichten True, True, True, True, False, True \'MT Daten gesendet, ACK empfangen STANDARD

Case \"MT\": SetMenuEinrichten False, False, False, False, False, False

Case \"30\": SetMenuEinrichten False, False, False, False, False, False \'MT Daten gesendet, NACK empfangen

Case \"38\" \'MT, MR Arbitration verloren beim Senden von Adresse oder Daten (Transmitter)

Case \"40\": SetMenuEinrichten False, False, False, True, False, True \'MR Adresse+R gesendet, ACK empfangen\"

Case \"48\": SetMenuEinrichten False, False, False, False, False, False \'MR Adresse+R gesendet, NACK empfangen

Case \"50\": SetMenuEinrichten False, False, False, True, False, True \'MR Daten empfangen, ACK gesendet STANDARD

Case \"MR\": SetMenuEinrichten False, False, False, False, False, True \'MR

Case \"RS\": SetMenuEinrichten False, False, False, False, False, False

Case \"58\": SetMenuEinrichten False, False, False, False, False, False \'MR Daten empfangen, NACK gesendet

Case \"60\": SetMenuEinrichten False, False, False, False, False, True \'SR Adresse+W empfangen, ACK gesendet

Case \"68\" \'SR Arbitration verloren als adressierter Master,\"

Case \"70\": SetMenuEinrichten False, False, False, False, False, True \'SR General-Call empfangen, ACK gesendet\"

Case \"78\" \'SR Arbitration verloren als adressierter Master,\"

Case \"80\": SetMenuEinrichten False, False, False, False, False, True \'SR Daten empfangen, ACK gesendet (adressiert) STANDARD\"

Case \"SR\": SetMenuEinrichten False, False, False, False, False, True

Case \"88\": SetMenuEinrichten False, False, False, False, False, False \'SR Daten empfangen, NACK gesendet (adressiert)\"

Case \"90\": SetMenuEinrichten False, False, False, False, False, True \'SR Daten empfangen, ACK gesendet (General Call)\"

Case \"GR\": SetMenuEinrichten False, False, False, False, False, True

Case \"98\": SetMenuEinrichten False, False, False, False, False, False \'SR Daten empfangen, NACK gesendet (General Call)\"

Case \"A0\": SetMenuEinrichten False, False, False, False, False, False \'SR Stop oder Repeated-Start empfangen\"

Case \"A8\": SetMenuEinrichten True, False, False, False, False, True \'ST Adresse+R empfangen, ACK gesendet\"

Case \"B0\" \'ST Arbitration verloren als adressierter Master,\"

Case \"B8\": SetMenuEinrichten True, False, False, False, False, True \'ST Daten gesendet, ACK empfangen STANDARD\"

Case \"ST\": SetMenuEinrichten False, False, False, False, False, False

Case \"C0\": SetMenuEinrichten False, False, False, False, False, False \'ST Daten gesendet, NACK empfangen\"

Case \"C8\": SetMenuEinrichten False, False, False, False, False, False \'ST AA=0, letzte Daten gesendet, ACK empfangen\"

End Select
End Sub

Public Sub SetMenuEinrichten(Senden, I2cerstellen, I2cerstellenxxx, I2ctrennen, Uperstellen, Uptrennen As Boolean)

MenuDateiSenden.Enabled = Senden

MenuVerbindungI2cerstellen.Enabled = I2cerstellen

MenuVerbindungI2cerstellenxxx.Enabled = I2cerstellenxxx

MenuVerbindungI2ctrennen.Enabled = I2ctrennen

MenuVerbindungUperstellen.Enabled = Uperstellen

MenuVerbindungUptrennen.Enabled = Uptrennen
End Sub

Public Sub SetStatusBar() \'Statusleiste aktualisieren

Select Case Status

Case \"XX\"

StatusBarMain.Panels(1).Text = \"XX\"

StatusBarMain.Panels(2).Text = \"Keine Verbindung\"

StatusBarMain.Panels(3).Text = \"\"

Case \"LC\"

StatusBarMain.Panels(1).Text = \"LC\"

StatusBarMain.Panels(2).Text = \"Microcontroller wird gesucht...\"

StatusBarMain.Panels(3).Text = \"\"

Case \"00\" \'Bus-Fehler

Case \"F8\"

StatusBarMain.Panels(1).Text = \"F8\"

StatusBarMain.Panels(2).Text = \"Microcontroller verbunden\"

StatusBarMain.Panels(3).Text = \"\"

Case \"LB\"

StatusBarMain.Panels(1).Text = \"LB\"

StatusBarMain.Panels(2).Text = \"Startaufforderung wird gesendet...\"

Select Case Einstellungen.SlaveTyp

Case True: StatusBarMain.Panels(3).Text = \"Master Receiver\"

Case False: StatusBarMain.Panels(3).Text = \"Master Transmitter\"

End Select

Case \"08\" \'MT, MR Start gesendet

StatusBarMain.Panels(1).Text = \"08\"

StatusBarMain.Panels(2).Text = \"Addresse wird gesendet...\"

Select Case Einstellungen.SlaveTyp

Case True: StatusBarMain.Panels(3).Text = \"Master Receiver\"

Case False: StatusBarMain.Panels(3).Text = \"Master Transmitter\"

End Select

Case \"10\" \'MT, MR Repeated-Start gesendet

StatusBarMain.Panels(1).Text = \"10\"

StatusBarMain.Panels(2).Text = \"Addresse wird gesendet...\"

Select Case Einstellungen.SlaveTyp

Case True: StatusBarMain.Panels(3).Text = \"Master Receiver\"

Case False: StatusBarMain.Panels(3).Text = \"Master Transmitter\"

End Select

Case \"18\" \'MT Adresse+W gesendet, ACK empfangen

StatusBarMain.Panels(1).Text = \"18\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Master Transmitter\"

Case \"20\" \'MT Adresse+W gesendet, NACK empfangen

StatusBarMain.Panels(1).Text = \"20\"

StatusBarMain.Panels(2).Text = \"Verbindung fehlgeschlagen\"

StatusBarMain.Panels(3).Text = \"Master Transmitter\"

Case \"28\" \'MT Daten gesendet, ACK empfangen STANDARD

StatusBarMain.Panels(1).Text = \"28\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Master Transmitter\"

Case \"MT\"

StatusBarMain.Panels(1).Text = \"MT\"

StatusBarMain.Panels(2).Text = \"Daten werden gesendet...\"

StatusBarMain.Panels(3).Text = \"Master Transmitter\"

Case \"30\" \'MT Daten gesendet, NACK empfangen

StatusBarMain.Panels(1).Text = \"30\"

StatusBarMain.Panels(2).Text = \"Busverbindung beendet\"

StatusBarMain.Panels(3).Text = \"Master Transmitter\"

Case \"38\" \'MT, MR Arbitration verloren beim Senden von Adresse oder Daten (Transmitter)

Case \"40\" \'MR Adresse+R gesendet, ACK empfangen\"

StatusBarMain.Panels(1).Text = \"40\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Master Receiver\"

Case \"48\" \'MR Adresse+R gesendet, NACK empfangen

StatusBarMain.Panels(1).Text = \"48\"

StatusBarMain.Panels(2).Text = \"Verbindung fehlgeschlagen\"

StatusBarMain.Panels(3).Text = \"Master Receiver\"

Case \"50\" \'MR Daten empfangen, ACK gesendet STANDARD

StatusBarMain.Panels(1).Text = \"50\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Master Receiver\"

Case \"MR\" \'MR

StatusBarMain.Panels(1).Text = \"MR\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Master Receiver\"

Case \"RS\"

StatusBarMain.Panels(1).Text = \"RS\"

StatusBarMain.Panels(2).Text = \"Busverbindung wird beendet...\"

StatusBarMain.Panels(3).Text = \"Master Receiver\"

Case \"58\" \'MR Daten empfangen, NACK gesendet

StatusBarMain.Panels(1).Text = \"58\"

StatusBarMain.Panels(2).Text = \"Busverbindung wird beendet...\"

StatusBarMain.Panels(3).Text = \"Master Receiver\"

Case \"60\" \'SR Adresse+W empfangen, ACK gesendet

StatusBarMain.Panels(1).Text = \"60\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Slave Receiver\"

Case \"68\" \'SR Arbitration verloren als adressierter Master,\"

Case \"70\" \'SR General-Call empfangen, ACK gesendet\"

StatusBarMain.Panels(1).Text = \"70\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Slave Receiver\"

Case \"78\" \'SR Arbitration verloren als adressierter Master,\"

Case \"80\" \'SR Daten empfangen, ACK gesendet (adressiert) STANDARD\"

StatusBarMain.Panels(1).Text = \"80\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Slave Receiver\"

Case \"SR\"

StatusBarMain.Panels(1).Text = \"SR\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Slave Receiver\"

Case \"88\" \'SR Daten empfangen, NACK gesendet (adressiert)\"

StatusBarMain.Panels(1).Text = \"88\"

StatusBarMain.Panels(2).Text = \"Busverbindung wird beendet...\"

StatusBarMain.Panels(3).Text = \"Slave Receiver\"

Case \"90\" \'SR Daten empfangen, ACK gesendet (General Call)\"

StatusBarMain.Panels(1).Text = \"90\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Slave Receiver\"

Case \"GR\"

StatusBarMain.Panels(1).Text = \"GR\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Slave Receiver\"

Case \"98\" \'SR Daten empfangen, NACK gesendet (General Call)\"

StatusBarMain.Panels(1).Text = \"98\"

StatusBarMain.Panels(2).Text = \"Busverbindung wird beendet...\"

StatusBarMain.Panels(3).Text = \"Slave Receiver\"

Case \"A0\" \'SR Stop oder Repeated-Start empfangen\"

StatusBarMain.Panels(1).Text = \"A0\"

StatusBarMain.Panels(2).Text = \"Busverbindung beendet\"

StatusBarMain.Panels(3).Text = \"Slave Receiver\"

Case \"A8\" \'ST Adresse+R empfangen, ACK gesendet\"

StatusBarMain.Panels(1).Text = \"A8\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Slave Transmitter\"

Case \"B0\" \'ST Arbitration verloren als adressierter Master,\"

Case \"B8\" \'ST Daten gesendet, ACK empfangen STANDARD\"

StatusBarMain.Panels(1).Text = \"B8\"

StatusBarMain.Panels(2).Text = \"Busverbindung besteht\"

StatusBarMain.Panels(3).Text = \"Slave Transmitter\"

Case \"ST\"

StatusBarMain.Panels(1).Text = \"ST\"

StatusBarMain.Panels(2).Text = \"Daten werden gesendet...\"

StatusBarMain.Panels(3).Text = \"Slave Transmitter\"

Case \"C0\" \'ST Daten gesendet, NACK empfangen\"

StatusBarMain.Panels(1).Text = \"C0\"

StatusBarMain.Panels(2).Text = \"Busverbindung beendet\"

StatusBarMain.Panels(3).Text = \"Slave Transmitter\"

Case \"C8\" \'ST AA=0, letzte Daten gesendet, ACK empfangen\"

End Select
End Sub

Private Sub Melde(StatusText As String, MessageText As String, MsgSymbol As Variant)

MsgBox MessageText & Chr(13) & Chr(10) & \"Status: \" & StatusText, MsgSymbol
End Sub

Private Sub RichTextBoxDaten_Change() \'Aenderung der Textfeldes fuer Erinnerung an Speichern feststellen

RichTextBoxDaten.Tag = 1
End Sub

Private Sub Form_Resize() \'Anpassen des Textfeldes auf die Fenstergroesse

RichTextBoxDaten.Width = Abs(FormMain.ScaleWidth + 2)

RichTextBoxDaten.Height = Abs(FormMain.ScaleHeight - 20)
End Sub




1.4.5.2. FormKonfig



Option Explicit

Private Sub Form_Load()

Select Case Status

Case \"XX\": Anzeigen True, True, True, True, True

Case Else: Anzeigen False, False, True, False, True

End Select



FormKonfig.Tag = 0



CheckGeneralCall.Value = BooleanToCheckbox(Einstellungen.GetGC)

TextAddress.Text = Einstellungen.OwnAddress

CheckSaveDaten.Value = BooleanToCheckbox(Einstellungen.SaveMsg)

ComboPort.ListIndex = Einstellungen.SerialPort - 1

TextStaWarte.Text = Einstellungen.StartWarten
End Sub


Private Sub CommandOK_Click()

Einstellungen.GetGC = CheckboxToBoolean(CheckGeneralCall.Value)

Einstellungen.OwnAddress = TextAddress.Text

Einstellungen.SaveMsg = CheckboxToBoolean(CheckSaveDaten.Value)

Einstellungen.SerialPort = ComboPort.ListIndex + 1

Einstellungen.StartWarten = TextStaWarte.Text



FormKonfig.Tag = 1

FormKonfig.Hide
End Sub

Private Sub CommandCancel_Click()

Unload FormKonfig
End Sub

Private Sub Anzeigen(ShGetGC, ShOwnAddress, ShSaveMsg, ShSerialPort, ShStartWarten As Boolean)

CheckGeneralCall.Enabled = ShGetGC

TextAddress.Enabled = ShOwnAddress

CheckSaveDaten.Enabled = ShSaveMsg

ComboPort.Enabled = ShSerialPort

TextStaWarte.Enabled = ShStartWarten

UpDownStaWarte.Enabled = ShStartWarten
End Sub

Private Sub TextAddress_LostFocus()

If Not CheckTextAddress(TextAddress.Text) Then TextAddress.SetFocus
End Sub



1.4.5.3. FormVerbinden



Option Explicit

Private Sub Form_Load()

FormVerbinden.Tag = 0



OptionEiner.Value = Einstellungen.SelectSlave

OptionGeneral.Value = Not Einstellungen.SelectSlave

OptionReceiver.Value = Not Einstellungen.SlaveTyp

OptionTransmitter.Value = Einstellungen.SlaveTyp

TextSlaveAddress.Text = Einstellungen.SlaveAddress

CheckVerbinden.Value = BooleanToCheckbox(Einstellungen.SofortConnect)
End Sub


Private Sub CommandOK_Click()

Einstellungen.SelectSlave = OptionEiner.Value

Einstellungen.SlaveTyp = OptionTransmitter.Value

Einstellungen.SlaveAddress = TextSlaveAddress.Text

Einstellungen.SofortConnect = CheckboxToBoolean(CheckVerbinden.Value)



FormVerbinden.Tag = 1

FormVerbinden.Hide
End Sub

Private Sub CommandCancel_Click()

Unload FormVerbinden
End Sub


Private Sub OptionEiner_Click()

Frame1.Enabled = OptionEiner.Value

OptionReceiver.Enabled = OptionEiner.Value

OptionTransmitter.Enabled = OptionEiner.Value

Label1.Enabled = OptionEiner.Value

TextSlaveAddress.Enabled = OptionEiner.Value
End Sub


Private Sub OptionGeneral_Click()

Frame1.Enabled = OptionEiner.Value

OptionReceiver.Enabled = OptionEiner.Value

OptionTransmitter.Enabled = OptionEiner.Value

Label1.Enabled = OptionEiner.Value

TextSlaveAddress.Enabled = OptionEiner.Value
End Sub

Private Sub TextSlaveAddress_LostFocus()

If Not CheckTextAddress(TextSlaveAddress.Text) Then TextSlaveAddress.SetFocus
End Sub


1.4.5.4. FormInfo



Option Explicit

Private Sub Command1_Click()

Unload FormInfo
End Sub





1.4.6. Das C-Programm

;************************************************************
; I2C-Bus

; Entwickelt für µC-Kit von Kern
; Anzusteuern mit PC

; Michael Popp; April 1998
;************************************************************


;************************************************************
; Vereinbarungen

;charin code 2730h ;Unterprogramm Zeicheneingabe
;charout code 273Ch ;Unterprogramm Zeichenausgabe
byteout code 2745h ;Byteausgabe

anfang code 8000h ;Start-Adresse
inter code 802Bh ;Adresse für I2C-Interrupt
haupt code 8200h ;Adresse Hauptprogramm

s1adr data 0dbh ;Eigene Bus-Adresse

s1dat data 0dah ;Bus-Daten
s1con data 0d8h ;Bus-Kontrollen

s1sta data 0d9h ;Bus-Status


s0buf data 99h


P1_6 bit 96h ;SCL-Pin
P1_7 bit 97h ;SDA-Pin

P_4 data 0c0h


aa bit 0dah ;Ackknowledge Flag
si bit 0dbh ;Interrupt Flag

sto bit 0dch ;Stoppbit
sta bit 0ddh ;Startbit

ens1 bit 0deh ;I2C-Bus aktivieren

es1 bit 0adh ;I2C-Bus-Interrupt aktivieren


;R0 Hauptprogramm empfangenes Zeichen
;************************************************************


;************************************************************
; Hauptprogramm

org anfang

mov dptr,#haupt ;
clr a ;

jmp @a+dptr ;
org haupt

call init ;Bus initialisieren


loop: call bytein
mov r0,a

mov a,r0 ;80h Anmelden

subb a,#80h
jz loop80

mov a,r0 ;81h Abmelden

subb a,#81h
jz loop81

mov a,r0 ;82h Startaufforderung

subb a,#82h
jz loop82

mov a,r0 ;83h Stoppaufforderung

subb a,#83h
jz loop83

mov a,r0 ;84h Clr AA

subb a,#84h
jz loop84

mov a,r0 ;85h Set AA

subb a,#85h
jz loop85


jmp loop



loop80: mov a,s1sta
mov r0,a

call byteout
mov a,r0

subb a,#0F8h
jnz loop
;Status=F8, Empfangen der Einstellungen
call bytein ;Eigene Adresse + General Call

mov s1adr,a
setb es1

setb ens1

jmp loop



loop81: clr ens1
clr es1

jmp loop


loop82: call start

jmp loop

loop83: setb sto

jmp loop


loop84: clr AA

jmp loop

loop85: setb AA

jmp loop
;************************************************************


;************************************************************
; Initialisierung

; -> /
; / ; s0buf ; / ;

 
 

Datenschutz
Top Themen / Analyse
indicator Ausgabegeräte
indicator Nameserver und Root-Nameserver
indicator Flachbandplotter
indicator TCP / IP -
indicator Nachteile
indicator Das selbstregulierende Netz
indicator Woher stammt es und welche Entwicklungen folgten?
indicator ARP - Adress Resolution Protocol
indicator How to identify a hoax
indicator Zukunft der Viren


Datenschutz
Zum selben thema
icon Netzwerk
icon Software
icon Entwicklung
icon Windows
icon Programm
icon Unix
icon Games
icon Sicherheit
icon Disk
icon Technologie
icon Bildung
icon Mp3
icon Cd
icon Suche
icon Grafik
icon Zahlung
icon Html
icon Internet
icon Hardware
icon Cpu
icon Firewall
icon Speicher
icon Mail
icon Banking
icon Video
icon Hacker
icon Design
icon Sprache
icon Dvd
icon Drucker
icon Elektronisches
icon Geschichte
icon Fehler
icon Website
icon Linux
icon Computer
A-Z informatik artikel:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #

Copyright © 2008 - : ARTIKEL32 | Alle rechte vorbehalten.
Vervielfältigung im Ganzen oder teilweise das Material auf dieser Website gegen das Urheberrecht und wird bestraft, nach dem Gesetz.
dsolution