Habe nicht getestet. Wäre ein Versuch wert.
Code:
'Konfiguration µC:
$regfile = "m8def.dat" 'AT-Mega8
$crystal = 16000000 'Quarz: 16 MHz
$baud = 38400 'Baudrate definieren
$hwstack = 64 ' default use 32 for the hardware stack
$swstack = 64 ' default use 10 for the SW stack
$framesize = 64
'-------------------------------------------------------------------------------
'Ein- Ausgänge:
Ddrb = &B11111111 '1 Ausgang, 0 Eingang => Pin PB7-0 als Ausgang
Ddrc = &B11111111 '1 Ausgang, 0 Eingang => Pin PB7-0 als Ausgang
Portb = 0
Portc = 0
'-------------------------------------------------------------------------------
'Timer0 = 8 Bit
'wird für RC5 Auswertung benötigt!!!
Config Rc5 = Pind.3 'Timer0 in Benutzung!!!
Portd.3 = 1 'Pull Up für Empfänger
'16Bit Timer:
Config Timer1 = Timer , Prescale = 256
On Timer1 Timer1_irq
Const Timervorgabe = 64911 '100 mal pro Sekunde
Enable Timer1
Enable Interrupts
'-------------------------------------------------------------------------------
'Variablen:
'-------------------------------------------------------------------------------
Dim Address As Byte , Command As Byte , Command_old As Bit , Flag As Bit 'RC5
'Taste lange gedrückt
'Dim Taste_lang As Word
'Taste 1-6 auf der FB
Dim T1 As Byte , T2 As Byte , T3 As Byte ' , T4 As Byte , T5 As Byte , T6 As Byte
'Lampe 1-12
'Dim L1s As Bit , L2s As Bit , L3s As Bit , L4s As Bit , L5s As Bit , L6s As Bit , L7s As Bit , L8s As Bit , L9s As Bit , L10s As Bit , L11s As Bit , L12s As Bit ,
Dim Empfang As Bit 'ist 0 wenn kein empfang also 255 von address
Dim Sek As Byte 'wenn = 100 dann 1 sec um
Dim L As Integer
'Lampen festlegen
'-------------------------------------------------------------------------------
'Vor Programmstart:
'alle Lampen aus:
Const An = 1
Const Aus = 0
Const Nichts = 255
T3 = Nichts
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Print "Programm Start 38400 Baud..."
Do
'-------------------------------------------------------------------------------
'Rc5 Code einlesen:
Getrc5(address , Command)
'Print "Address: " ; Address
'Print "Command: " ; Command
'-------------------------------------------------------------------------------
'RC5 Code umsetzen:
If Address = 255 Then 'also kein Signal
Empfang = 0
Sek = 0
T3 = Nichts
End If
If Address = 0 Then 'Adresse 0=TV FB
If Empfang = 0 Then
Empfang = 1
' Timer1 = Timervorgabe 'Timer1 zurücksetzen, damit erst bei Tastendruck gezählt wird
'Print "timerzurück"
End If
' If Command.7 = Command_old Then
' Incr Taste_lang
' Else
' Taste_lang = 0 'Variable zurücksetzen
' Command_old = Command.7
' End If
'Print "Command.7: " ; Command.7
'Print "Taste_lang: " ; Taste_lang
'Command = Command And &B01111111 'reset toggle bit
' Reset Command.7 'reset toggle bit
Select Case Command
Case 0 : Print "CASE = 0"
Case 1 : T1 = 1
T2 = 2
Gosub Lampe1
Case 2 : T1 = 3
T2 = 4
Gosub Lampe1
Case 3 : T1 = 5
T2 = 6
Gosub Lampe1
Case 4 : T1 = 7
T2 = 8
Gosub Lampe1
Case 5 : T1 = 9
T2 = 10
Gosub Lampe1
Case 6 : T1 = 11
T2 = 12
Gosub Lampe1
Case Else : Print "Fehler: " ; Command
End Select
End If
'_______________________________________________________________________________
Loop
End
'-------------------------------------------------------------------------------
'Relais ansteuern
'-------------------------------------------------------------------------------
Lampe1:
'=============
If T3 = Nichts Then
If L.t1 = 0 Then
T3 = An
Else
T3 = Aus
End If
End If
If Sek < 200 Then
If T3 = An Then
Set L.t1
Print "L" ; T1 ; ":1"
Else
Reset L.t2
Print "L" ; T2 ; ":0"
End If
Else
If T3 = An Then
Set L.t2
Print "L" ; T2 ; ":1"
Else
Reset L.t1
Print "L" ; T1 ; ":0"
End If
End If
Gosub Setzen
Return
Timer1_irq:
Timer1 = Timervorgabe
If Empfang = 1 Then
If Sek < 255 Then
Incr Sek
End If
End If
Return
Setzen:
Portc.5 = L.1
Portc.4 = L.2
Portc.3 = L.3
Portc.2 = L.4
Portc.1 = L.5
Portc.0 = L.6
Portb.5 = L.7
Portb.4 = L.8
Portb.3 = L.9
Portb.2 = L.10
Portb.1 = L.11
Portb.0 = L.12
Return
Lesezeichen