Hi
also hier ist mein BASCOM Code.
Das Display sendet die Zeichenfolge 6 17 4 27 65 1 116 230 .
das sin dezimalwerte der 8 Bytes, die gesendet werden. wenn ich in der
isr 6 oder 17 in die if-Anweisung schreibe, dann toggelt die LED bei
jedem Tastendruck.
Code:
$crystal = 18432000
$regfile = "m128def.dat"
$baud = 9600
On Urxc Byteempfangen
On Int0 Daten_vom_display_anfordern
Config Porta.0 = Output 'testled1
Config Porta.1 = Output 'testled2
Config Portd.0 = Input 'interrupt
0
Config Porte.1 = Output
Config Portb.4 = Output 'lcdreset
Config Portb.5 = Output 'baud0
Config Portb.6 = Output 'baud1
Config Portb.7 = Output 'baud2
Dim Empfbuf As String * 20 At &H0100
Dim Inbytes(21) As Byte At &H0100 Overlay
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim N As Byte
Dim Bcc As Byte
Dim Bccs As String * 1
Dim Dc1 As String * 1
Dim Length As Byte
Dim Lengths As String * 1
Dim Befehle As String * 64
Dim Zeichenkette As String * 66
Dim Empfbyte As Byte
Dim Baudrate As Long
Dim Byte_gekommen As Bit
Dim Instring As String * 1
Dim Stringempfangen As Bit
Dim Bc As Byte
Dim Dc1_empf As Bit
Dim Dc2_empf As Bit
Dim Tastencode As Byte
Dim Inbytesumme As Integer
Lcdreset Alias Portb.4
Lcdbaud0 Alias Portb.5
Lcdbaud1 Alias Portb.6
Lcdbaud2 Alias Portb.7
Testled1 Alias Porta.0
Testled2 Alias Porta.1
An Alias 0
Aus Alias 1
Baudrate = 9600
Lcdreset = 1
Byte_gekommen = 0
Dc1_empf = 0
Dc2_empf = 0
N = 1
Inbytesumme = 0
Stringempfangen = 0
Dc1 = Chr(17)
Testled2 = Aus
Gosub Baudrate_einstellen
Wait 1
Lcdreset = 0
Waitms 100
Lcdreset = 1
Testled1 = An
Wait 1
Testled1 = Aus
Enable Interrupts
Enable Urxc
Enable Int0
Befehle = "#TA#DL"
'terminal aus und display löschen
Gosub Stringsenden
'Startbildschirm zeichnen
Befehle = "#AE17,#AF6,#AT0,90,70,127,83,115,CStart{013}" 'Start
taste
Gosub Stringsenden
Befehle = "#AF5,#AT169,90,239,127,82,114,CRecall{013}" 'recall
taste
Gosub Stringsenden
Befehle = "#AE0,#AF5,#AT0,0,50,20,0,116,LEZ:{013}" 'EZ
taste
Gosub Stringsenden
Befehle = "#ZV4,#ZF7,#ZC119,030,000.00{013}" '000.00
anzeigen
Gosub Stringsenden
'...bis hier
Do
Loop
End
Ezeinstellen:
Befehle = "#AL0,1,#DL" 'Touch
und Display löschen
Gosub Stringsenden
Befehle = "#ZF2,#ZC119,000,Erlaubte Zeit einstellen{013}"
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT000,010,035,040,0,11,C1{013}" 'Taste
1
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT040,010,075,040,0,12,C2{013}" 'Taste
2
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT080,010,115,040,0,13,C3{013}" 'Taste
3
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT120,010,155,040,0,14,C4{013}" 'Taste
4
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT160,010,195,040,0,15,C5{013}" 'Taste
5
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT000,043,035,073,0,16,C6{013}" 'Taste
6
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT040,043,075,073,0,17,C7{013}" 'Taste
7
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT080,043,115,073,0,18,C8{013}" 'Taste
8
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT120,043,155,073,0,19,C9{013}" 'Taste
9
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT160,043,195,073,0,10,C0{013}" 'Taste
0
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT114,90,169,174,117,0,C<-{013}" 'Taste
Korrektur
Gosub Stringsenden
Befehle = "#AE17,#AF6,#AT179,90,239,127,117,0,COK{013}" 'Taste
OK
Gosub Stringsenden
Return
Stringsenden:
Length = Len(befehle) 'länge der
befehlssequenz ermitteln
Lengths = Chr(length) 'und in
string wandeln
Mid(zeichenkette , 1 , 1) = Dc1 'DC1 an
den Anfang der zeichenkette setzen
Mid(zeichenkette , 2 , 1) = Lengths 'Länge der
befehlsequenz an 2. stelle einsetzen
Mid(zeichenkette , 3) = Befehle
'befehlsfolge einsetzen
Bcc = Checksum(zeichenkette)
'checksumme ermitteln
Bccs = Chr(bcc)
'checksumme in string wandeln
Length = Length + 3 'länge um
die hinzugefügten zeichen verlängern
Mid(zeichenkette , Length , 1) = Bccs
'Checksumme am ende der zeichenkette anhängen
Length = Length + 1
Mid(zeichenkette , Length , 1) = 0 'null
character anhängen
Print Zeichenkette;
'Zeichenkette ausgeben
Waitms 20
Zeichenkette = "" 'string
variablen leeren
Befehle = ""
Return
Baudrate_einstellen:
If Baudrate = 1200 Then
Lcdbaud0 = 0
Lcdbaud1 = 0
Lcdbaud2 = 0
Baud = 1200
End If
If Baudrate = 2400 Then
Lcdbaud0 = 1
Lcdbaud1 = 0
Lcdbaud2 = 0
Baud = 2400
End If
If Baudrate = 4800 Then
Lcdbaud0 = 0
Lcdbaud1 = 1
Lcdbaud2 = 0
Baud = 4800
End If
If Baudrate = 9600 Then
Lcdbaud0 = 1
Lcdbaud1 = 1
Lcdbaud2 = 0
Baud = 9600
End If
If Baudrate = 19200 Then
Lcdbaud0 = 0
Lcdbaud1 = 0
Lcdbaud2 = 1
Baud = 19200
End If
If Baudrate = 38400 Then
Lcdbaud0 = 1
Lcdbaud1 = 0
Lcdbaud2 = 1
Baud = 38400
End If
If Baudrate = 57600 Then
Lcdbaud0 = 0
Lcdbaud1 = 1
Lcdbaud2 = 1
Baud = 57600
End If
If Baudrate = 115200 Then
Lcdbaud0 = 1
Lcdbaud1 = 1
Lcdbaud2 = 1
Baud = 115200
End If
Return
Byteempfangen:
Empfbyte = Udr
If Empfbyte = 4 Then Toggle Testled1
' If Dc2_empf = 1 Then
' Bcc = Checksum(empfbuf)
' If Bcc = Udr Then Byte_gekommen = 1
' Empfbuf = Empfbuf + Chr(udr)
' End If
'
' If Udr = 17 And Dc2_empf = 0 Then
' Empfbuf = ""
' Dc2_empf = 1
' Empfbuf = Chr(udr)
' End If
Return
Daten_vom_display_anfordern:
Dc1 = Chr(18)
Befehle = "S"
Gosub Stringsenden
Dc1 = Chr(17)
Toggle Testled2
Return
Viele Grüße, Tenner