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
; /
; |