1 | '----------------------------------------------------------------------------
|
2 | 'Name : LCD Bus-Wandler.bas
|
3 | 'Ersteller : Ekkehard Oetken
|
4 | 'Zweck : Displayinhalt auslesen
|
5 | 'PIC : Mega32
|
6 | '----------------------------------------------------------------------------
|
7 |
|
8 | 'PortC.0 = Systel-Display D4
|
9 | 'PortC.1 = Systel-Display D5
|
10 | 'PortC.2 = Systel-Display D6
|
11 | 'PortC.3 = Systel-Display D7
|
12 | 'PortC.5 = Systel-Display RS
|
13 | 'PortD.2 = Systel-Display E
|
14 |
|
15 | 'Die Ausgabe erfolgt im UTF-8-Format, VT100-Emulation
|
16 | 'Ablaufdauer der Interruptroutine: 2us
|
17 | 'Verzögerung zwischen Interrupt und Start der Routine: 4us
|
18 |
|
19 |
|
20 | $regfile = "m32def.dat"
|
21 | $crystal = 16000000
|
22 | $baud = 38400
|
23 |
|
24 | Ddrc = &B00000000 'Displayport als Eingang
|
25 | Ddrd = &B11111011 'Interrupt-Pin an Port D.2 als eingang konfigurieren
|
26 |
|
27 | Portc = &B00000000 'Pull-Up abschalten
|
28 | Portd = &B00000100 'Pull-Up an Port D.2 einschalten
|
29 |
|
30 | On Int0 Lesen 'Interrupt wird bei jedem Display-Enable ausgelöst
|
31 | Config Int0 = Rising 'Interrupt bei steigender Flanke
|
32 | Enable Int0 'Interrupt 0 einschalten
|
33 | Enable Interrupts 'Interrupts global einschalten
|
34 |
|
35 | Dim Disp As String * 16 'Gibt die Displayanzeige im UTF-8-Format aus
|
36 | Dim Dispp1 As String * 8 'Speichert die ersten 8 Stellen der Dsiplayanzeige
|
37 | Dim Dispp2 As String * 8 'Speichert die letzten 8 Stellen der Displayanzeige
|
38 |
|
39 | Dim Stelle(17)as Byte 'Array: Speichert Bytewerte der 16 Displaystellen
|
40 | Dim Systel As Byte 'Speichert die Bytewerte am Displayport
|
41 | Dim Timeout As Long 'Zur Erkennung des Ausbleibens der Daten am Displayport
|
42 | Dim Intcounter As Byte 'Zählt die Impulse am "Enable" PIN zum Überspringen
|
43 | 'des LN nach DDRAM Addresse 1000 0000
|
44 | Dim Bytecounter As Byte 'Speichert den Pointer vom Array "Stelle"
|
45 | Dim Nibble As Bit 'Umschaltung zwischen HN=1 und LN=0
|
46 | Dim N As Byte 'Schleifenzähler für die Stringbildung
|
47 |
|
48 | Systel = 0
|
49 | Timeout = 0
|
50 | Intcounter = 0
|
51 | Bytecounter = 1
|
52 | Nibble = 1
|
53 | N = 1
|
54 |
|
55 |
|
56 |
|
57 | Do
|
58 |
|
59 | If Timeout >= 50 Then 'Timeout nicht durch Interrupt zurückgesetzt
|
60 | Print Chr(27) ; "[1;0f" ; "Check Connection"
|
61 | Timeout = 50
|
62 | Else
|
63 | For N = 1 To 17 'Den String "Disp" für zusammenbauen
|
64 | Disp = Disp + Chr(stelle(n))
|
65 | Next N
|
66 |
|
67 | Dispp1 = Mid(disp , 1 , 8) 'Das neunte Zeichen entfernen
|
68 | Dispp2 = Mid(disp , 10 , 8)
|
69 | Disp = Dispp1 + Dispp2
|
70 |
|
71 | Print Chr(27) ; "[1;0f" ; Disp 'Ausgabe auf dem Bildschirm
|
72 | Disp = "" 'String zurücksetzen
|
73 | End If
|
74 |
|
75 | Incr Timeout
|
76 |
|
77 | Loop
|
78 |
|
79 |
|
80 |
|
81 |
|
82 | Lesen: 'Interrupt ausgelöst
|
83 | If Pinc = 24 Then 'Wenn das DDRAM auf Addresse 1000 0000 gesetzt wird
|
84 | Bytecounter = 1 'Setzte den Pointer von Array "Stelle" zurück
|
85 | Intcounter = 0 'Setzt den Zähler zum Überspringen des LN nach
|
86 | 'DDRAM-Addresse 1000 0000 zurück
|
87 | Nibble = 1 'Speichere im nächsten Durchgang das HN
|
88 | Else
|
89 | If Intcounter >= 2 Then 'überspringe das erste Nibble
|
90 | If Nibble = 1 Then 'Speichere das HN
|
91 | Systel.4 = Pinc.0 'Schreibe die oberen vier Bit von "Systel"
|
92 | Systel.5 = Pinc.1
|
93 | Systel.6 = Pinc.2
|
94 | Systel.7 = Pinc.3
|
95 | Nibble = 0 'Sperre das HN für den nächsten Durchgang
|
96 | Else 'Speichere das LN
|
97 | Systel.0 = Pinc.0 'Schreibe die unteren vier Bits von "Systel"
|
98 | Systel.1 = Pinc.1
|
99 | Systel.2 = Pinc.2
|
100 | Systel.3 = Pinc.3
|
101 | Stelle(bytecounter) = Systel 'Schreibe das komplette Byte in
|
102 | 'Position X von Bytearray "Stelle"
|
103 | Incr Bytecounter 'Erhöhe den Pointer von Array "Stelle"
|
104 | Nibble = 1 'Sperre das LN für den nächsten Durchgang
|
105 | End If
|
106 | End If
|
107 | End If
|
108 |
|
109 | Timeout = 0 'Reset Zähler für fehlende Displaydaten
|
110 | Incr Intcounter 'Erhöhe den Zähler "Intcounter" um 1
|
111 | Return
|
112 |
|
113 |
|
114 |
|
115 | End
|