$regfile = "m32def.dat" $crystal = 3686400 $hwstack = 100 $swstack = 100 $framesize = 100 $baud = 9600 'Baudrate der UART: 9600 Baud 'Variable zum reseten Dim A As Byte ' Dim X As Byte A = 0 ' X = Inkey() Ddrd = &HFE Config Sda = Portc.1 '' I2C Bus konfigurieren Config Scl = Portc.0 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 Config Lcd = 16 * 2 Cursor Off Noblink Cls 'Lösche LCD Anzeige 'Diese Variable dient dazu !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Dim Zahl As Byte 'Diese Variable deint dazu sicher zu gehen,dass die Peron nur einmal begrüst 'wird und dass Fehlfunktionen aus kompensieret werden. Dim I As Byte 'In dieser Textreihe wird zu Begrüsende Person gespeichert.Sie darf wegen 'Platzmangel jedoch maximal nur 10 Zeichen beanspruchen. Dim Person As String * 10 'In dieser Textreihe wird die Anrede gespeichert, d.h. Herr oder Frau, sollte 'jedoch ein nicht identifizierbarer Transpondercode erfasst werden dient die 'Textreihe zum Anzeigen eines Fehlers in Form von "ERROR". Dim Anrede As String * 5 'In dieser Textreihe befindet sich nach einer Datenverpackung der Komplette 'gelesene Transpondercode. Dim S As String * 11 'In dieser Variablen wird ein Wert gespeichert der Angibt ob der gelesene 'Tranpondercode identifiziert wurde oder ob es sich um einen Unbekannten Code 'handelt. Dim Exist As Byte 'Interruptanzahl Dim Intanzahl As Byte 'Zu beginn wird der Inhalt der Textreihe gelöscht somit können keine 'Fehlfunktionen auftreten. S = "" 'Der USART,Rx complete Interrupt wird gesperrt Disable Interrupts If A = 0 Then Locate 1 , 1 : Lcd "INITIALISIEREN" A = 2 Wait 3 Ucsra.7 = 0 'Ucsrb.7 = 0 'interrupt Bit???werde nicht ganz schlau aus dem Datenblatt Locate 1 , 1 : Lcd "Herzlich " Locate 2 , 1 : Lcd "Willkommen " Wait 2 Cls End If A = 2 'Interrupts global einschalten. Enable Interrupts 'Hier wird die Subroutine angegeben die im Falle eines Urxc (Serial recive) 'Interrupts angesprungen wird. On Urxc On_urxc 'Der USART,Rx complete Interrupt wird Freigeschaltet Enable Urxc Do B: A = 2 I = 0 Locate 1 , 1 : Lcd "UHRZEIT " 'ist nur zum Testen... hier kommt später was anderes rein 'Locate 2 , 1 : Lcd Intanzahl Loop On_urxc: 'If Ucsra.7 = 1 Then Incr Int_anzahl 'wird der Interrupt gesetzt, erhöhe die Valiable Int_Anzahl um 1 'Int_anzahl = Int_anzahl + Ucsra.7 'Andere Methode 'Locate 2 , 1 : Lcd Int_anzahl ' Test anzeige um das programm nachzuvollziehen 'ASCII-Code einlesen Zahl = Inkey() If Zahl = 2 Then Else Return While Zahl <> 4 'While schleife so lange wie Zahl verschieden von 4 ist Zahl = Inkey() ' If Zahl <> 4 Then S = S + Chr(zahl) 'Nachkontrolle <> 4,wenn ja dann erhält S ein weiteres Zeichen Wend 'Ende der While schleife (endet wenn Zahl = 4) I = I + 1 Anzeige: 'If Intanzahl < 2 Then Return 'hier sollte das erste interrupt vermieden werden, geht jedoch nicht If I <> 1 Then Return Exist = 0 If S = "R029980AD46" Then 'Wenn die Zahlenreihe gleich "R029980AD46" ist, dann... Person = "Dupont " Anrede = "Herr " Exist = 1 End If If S = "R83D9A08DD5" Then 'Wenn die Zahlenreihe gleich "R83D9A08DD5" ist, dann... Person = "Willems " Anrede = "Frau " Exist = 1 End If If S = "R0A88A02DDB" Then 'Wenn Die Zahlenreihe gleich "R0A88A02DDB" ist, dann... Person = "Krause " Anrede = "Herr " Exist = 1 End If If Exist = 0 Then Person = " Unbekannt" Anrede = "ERROR" End If Cls 'Lösche LCD Anzeige Locate 1 , 1 'Setze LCD Cursor auf Position 1,1 Lcd "Willkommen" 'Schreibe "Willkommen" auf die LCD Anzeige Locate 2 , 1 'Setze LCD Cursor auf Position 2,1 Lcd Anrede ; Person 'Schreibe "Herr" Name auf die Lcd-Anzeige Wait 4 'Warte 4 Sekunden Cls S = "" 'Inhalt der Textreihe (S) ist leer Return