Code:
'-------------------------------------------------------------------------------
' Beispielprogramm für den Pollin-Electronic RFID-Bausatz, ArtNr:810059
' Es dient zum Auslesen einer HITAG RFID-Karte mittels eines Atmel U2270B.
' Âusschnitte des Codes wurden von der Beispielsoftware für den Em4095 von
' www.mcselec.de übernommen und für den U2270B abgeändert
' Als Controller wird ein AT-Tiny 2313 verwendet.
' Sie handeln auf eigene Gefahr!
' Bei diesen Daten handelt es sich um Beispielanwendungen die nicht für den produktiven
' Einsatz geacht sind.
' Pollin Electronic gibt keine Garantien irgendeiner Art , weder ausdrücklich
' noch implizit , einschließlich unbegrenzt aller Garantien der Verwendbarkeit
' dieser Daten für einen bezeichneten oder nicht bezeichneten Zweck.
' Pollin Electronic ist nicht haftbar für jedwede Folgeschäden die aufgrund
' der Benutzung dieser Daten entstehen. Dies gilt auch dann, wenn
' Pollin Electronic von der Möglichkeit eines solchen Schadens unterrichtet worden ist.
' Firma: Pollin-Electronic-GmbH
' Autor: Christian Schmailzl
'------------------------------------------------------------------------------------------------------------------
$regfile = "2313def.dat" ' Controller : Tiny 2313
$baud = 9600 ' Übertragungsrate der UART-Schnittstelle
$crystal = 8000000 ' Taktfrequenz des Controllers
Dim Tags(5) As Byte '"Tags" als Array mit 5 Bytes definieren bytes
Dim Zaehler As Byte '"Zähler" als Byte definieren
Dim Wert As String * 5 '"Wert" als String mit 5 Hexwerten definieren
Config Portb = Output 'Port B als Ausgang definieren
Config Hitag = 64 , Type = Em4095 , Demod = Pind.3 , Int = @int1 'konfiguriert den Timer und die Variablen für HITAG
Config Lcdpin = Pin , Rs = Portb.5 , E = Portb.4 , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 'konfiguriert die LCD-Belegung
Config Lcd = 16 * 2 'konfiguriert die Displaygröße
_cfe Alias Portd.2 '_cfe wird dem Portd.2 zugewiesen
Config _cfe = Output '_cfe wird als Ausgand definiert
_cfe = 1 '_cfe wird high
Config Debounce = 30 'Tastenentprellung = 30ms
On Int1 Checkints Nosave 'Int1 wird als Eingang für HITAG verwendet
Mcucr.isc10 = 1 ' entspricht: config INT1 = changing ( der Befehl wird vom MC unterstützt,
Mcucr.isc11 = 0 ' beim 2313 aber nicht von Bascom)
Enable Interrupts 'Enable all interrupts
Locate 1 , 1 'Cursor am Display in Zeile 1, ganz links
Lcd "RFID-Modul" ' Text schreiben
Locate 2 , 1 'Cursor am Display in Zeile 1, ganz links
Lcd "with U2270B" ' Text schreiben
Set Portb.6 ' Led 1 einschalten
Set Portb.7 ' Led 2 einschalten
Wait 2 ' Warte 2 Sekunden
Reset Portb.6 'Led 1 ausschalten
Reset Portb.7 ' Led 2 ausschalten
Main: ' ab hier beginnt das Hauptprogramm
Do ' Do-Schleife
Cls 'Display löschen
Lcd "Check..." ' Text schreiben
If Readhitag(tags(1)) = 1 Then ' INT1 wird enabled
For Zaehler = 5 To 1 Step -1 ' For-Schleife beginnend von 5 nach 1; rückwärts zählend
Wert = Wert + Hex(tags(zaehler)) ' "Wert" = bestehender inhalt in der Variable + gerade gelesenen
' Tag an Position vom Zähler
Next ' Ende For-Schleife
Toggle Portb.6 ' Led 1 Zustand wechseln
Gosub Senden ' gehe zu Unterroutine
Toggle Portb.6 ' Led 1 Zustand wechseln
End If ' Ende der If-Abfrage
Debounce Pind.4 , 1 , Taste1 , Sub ' Taste 1 entprellen; wenn gerdückt, zur Unterroutine "Taste1" springen
Debounce Pind.5 , 1 , Taste2 , Sub ' Taste 2 entprellen; wenn gerdückt, zur Unterroutine "Taste2" springen
Debounce Pind.6 , 1 , Taste3 , Sub ' Taste 3 entprellen; wenn gerdückt, zur Unterroutine "Taste3" springen
Waitms 100 ' Warte 500 ms
Loop ' Sprunganweisung zum Anfang Do-Schleife
Taste1: ' Unterroutine "Taste1"
Cls ' Lcd löschen
Locate 1 , 1 ' Cursor in Zeile 1, Position 1
Lcd " T1 " ' Text schreiben
Wait 1 ' warte 1s
Cls ' Lcd löschen
Locate 1 , 1 'Cursor in Zeile 1, Position 1
Lcd " RFID " ' Text schreiben
If _cfe = 1 Then ' If-Abfrage
Locate 2 , 1 ' Cursor in Zeile 2, Position 1
Lcd "ausgeschaltet" ' Text schreiben
Print "ausgeschaltet" ' Text über UART ausgeben
_cfe = 0 ' _cfe auf low setzen -> Treiberstufen des U2270b abschalten
Bitwait Pind.4 , Reset ' Warte bis Pind.4 = low
Waitms 30 ' Warte 30ms ( Entprellung)
Bitwait Pind.4 , Set 'Warte bis Pind.4 = high
Locate 2 , 1 ' Cursor in Zeile 2, Position 1
Lcd "eingeschaltet" ' Text schreiben
Print "eingeschaltet" ' Text über UART ausgeben
_cfe = 1 ' _cfe auf high setzen -> Treiberstufen des U2270b einschalten
Wait 1 ' Warte 1s
Gosub Main ' Sprunganweisung zum Anfang der Hauptschleife
End If ' Ende der If-Anweisung
Return ' Sprunganweisung in die Hauptschleife
Taste2: ' Unterroutine "Taste2"
Cls ' Display löschen
Locate 1 , 1 ' Cursor in Zeile 1, Position 1
Lcd " T2 " ' Text schreiben
Toggle Portb.6 ' Led 1 Zustand wechseln
Wert = "T2" ' Wert = "T2"
Gosub Senden ' Sprungbefehl zur Unterroutine "Senden"
Bitwait Pind.5 , Reset ' Warte bis Pind.5 = low
Return 'Sprunganweisung in die Hauptschleife
Taste3: ' Unterroutine "Taste3"
Cls 'Display löschen
Locate 1 , 1 ' Cursor in Zeile 1, Position 1
Lcd " T3 " ' Text schreiben
Toggle Portb.7 ' Led 2 Zustand wechseln
Wert = "T3" ' Wert = "T3"
Gosub Senden ' Sprungbefehl zur Unterroutine "Senden"
Bitwait Pind.6 , Reset ' Led 2 Zustand wechseln
Return ' Sprunganweisung in die Hauptschleife
Checkints: ' Unterroutine "Checkints:"
Call _checkhitag ' Eine ausgelagerte Unterroutine aufrufen
Return ' Sprunganweisung in die Hauptschleife
Senden: ' Unterroutine "Senden"
Cls ' Display löschen
Locate 1 , 1 ' Cursor in Zeile 1, Position 1
Lcd "send..." ' Text schreiben
Locate 2 , 1 ' Cursor in Zeile 2, Position1
Lcd Wert ' Variable "Wert" schreiben
Print Wert ' Variable "Wert" über UART ausgeben
Wert = "" ' Inhalt von Variable "Wert" = ""
'Waitms 500 ' warte 500ms
Return 'Sprunganweisung in die Hauptschleife
Ich bin für jede Hilfe Dankbar
Lesezeichen