Hallo zusammen,
spiele seit ein paar Tagen daran rum mein altes ME45 mit einem Atmega16 Testboard (KreativesChaosBoard) zur Kommunikation zu bewegen und habs jetzt endlich hinbekommen. Ziel war es bei einer bestimmten SMS am Controller was auszulösen (hier: LED blinken).
Da ich nix fertiges zu diesem Thema gefunden habe will ich es meinen Nachfolgern etwas leichter machen. Deshalb gibts hier den Code zum nachlesen. Ich hoffe irgendwer kann damit was anfangen und es ist einigermaßen verständlich. Verbesserungsvorschläge nehme ich natürlich gerne an.
Grüße
Gesamtplan
Code:
'SMSUNREAD6.BAS: PDU SMS auslesen
'Empfang von Siemens ME45
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 38400
'LCD Config
Config Lcd = 40 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1
Config Lcdbus = 4
Config Lcdmode = Port
Initlcd
Cls
Cursor Off
Dim Cmgl As String * 106 'cmgl String
Dim Sms As String * 58 'reiner SMS String
Dim Led As Bit
On Urxc Onrxd
Enable Urxc
Enable Interrupts
Config Pinb.3 = Output
Led Alias Portb.3
Smsreadroutine: 'Routine zum Einlesen des SMS strings
Print "at+cmgl=0" ; Chr(13) 'Neue SMS da?
Waitms 100
If Len(cmgl) > 105 Then 'Stringpolling
Sms = Mid(cmgl , 12 , 70) 'SMS auslesen
Cmgl = "" 'String cmgl leeren
End If
Locate 1 , 1
Lcd Sms 'Ausgabe String auf Display
If Sms = "Hier SMS Empfangsstring eintragen (PDU-Mode)"then
Led = 0
Else
Led = 1
End If
Locate 2 , 1 'Anzeige zum debuggen
Lcd "Laenge von Cmgl = " ; Len(cmgl) ; " Zeichen " ; Len(sms)
Goto Smsreadroutine
'UART Interrupt
Onrxd:
If Asc(udr) = 58 Then 'Doppelpunkt(58) abrufen wenn at+cmgl=0 neue Nachricht
Cmgl = "" 'Cmgl wieder leeren
Else
Cmgl = Cmgl + Chr(udr)
End If
Return
'Sms Aktion:
'Sms Loeschen:
Lesezeichen