'-------------------------------------------------------------------------------
' 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
' Anpassung: Fabian Kainka
'------------------------------------------------------------------------------------
$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
_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
' Set Portb.6 ' Led 1 einschalten
' Set Portb.7 ' Led 2 einschalten
Main:
' Portb.1 grüm
' Portb.3 blau
' Portb.4 rot
' ab hier beginnt das Hauptprogramm
Set Portb.0
Do
Set Portb.3 'rot ' Do-Schleife
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
If Wert = "F2010586D9" Then
Set Portb.6
Reset Portb.3
Set Portb.1 'grün ' Ende For-Schleife
Reset Portb.0
Wait 10
Reset Portb.1
Set Portb.3
Set Portb.0
Else
Reset Portb.6
Set Portb.0
End If
Gosub Senden ' gehe zu Unterroutine
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 500 ' Warte 500 ms
Loop ' Sprunganweisung zum Anfang Do-Schleife
Taste2:
Return
Taste1: ' Unterroutine "Taste1"
If _cfe = 1 Then ' If-Abfrage
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
Print "eingeschaltet" ' Text über UART ausgeben
_cfe = 1 ' _cfe auf high setzen -> Treiberstufen des U2270b einschalten
Gosub Main ' Sprunganweisung zum Anfang der Hauptschleife
End If ' Ende der If-Anweisung
Return ' Sprunganweisung in die Hauptschleife
Taste3: ' Unterroutine "Taste3"
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"
Print Wert ' Variable "Wert" über Uart ausgeben
Wert = "" ' Inhalt von Variable "Wert" = ""
Return 'Sprunganweisung in die Hauptschleife
End