Versuch mal, Irrtum vorbehalten.
Ein paar Sachen würde ich anders machen, aber eigentlich könnte das gehen. Ist der Code von dir oder wo hast du ihn her ?
Code:
$regfile = "m48def.dat"
$crystal = 4000000
Config Timer1 = Timer , Prescale = 64 ' 1 sec
Const Timerpreset = 3036 ' 1 sec
On Timer1 Ontimer1
Config Portd.0 = Output 'A
Config Portd.1 = Output 'B
Config Portd.2 = Output 'C
Config Portd.3 = Output 'D
Config Portd.4 = Output 'E
Config Portd.5 = Output 'F
Config Portd.6 = Output 'G
Config Portb.1 = Output 'Digi 1
Config Portb.2 = Output 'Digi 2
Config Portb.3 = Output 'Digi 3
Config Portb.4 = Output 'Digi 4
Config Portc.2 = Output 'Dezimalpunkt = Sek_blink Gegen +
Config Portc.1 = Output 'Relais
Config Portc.0 = Output 'Peeper Gegen -
Config Portc.3 = Input ' Start/ Stop Taster
Config Portc.4 = Input 'Minuten Taster
Config Portc.5 = Input 'Sekunden Taster
Declare Sub Zeiteinstellung
Declare Sub Soundout
Dim Zeit(4) As Byte
Dim Kontrolle As Eram Byte ' kontrollbyte
Dim Eezeit(4) As Eram Byte
Dim Z As Byte
Dim I As Word
Dim Tmp As Byte
Dim Taste1 As Bit
Dim Taste2 As Bit
Dim Taste3 As Bit
Dim Taste4 As Bit
Portd = &H7F
Portb = &H1E
Portc = &H3C
Taste4 = 1
'--- Sekunden-Punkt darf in diesem Fall nicht in der Multiplexroutine stehen ---
Dezimalpunkt Alias Portc.2 'dezimalpunkt blinkt im halbsekunden takt
Dim Sek_blink As Bit
'Zeit Voreinstellung laden aus EEProm
Call Zeiteinstellung
Enable Timer1
Stop Timer1
Timer1 = Timerpreset
Enable Interrupts
'*******************************************************************************
Main:
Tmp = 1
For Z = 1 To 4
Dezimalpunkt = Sek_blink
I = I + 1
If I = 600 Then
Sek_blink = 0
I = 0
End If
Portd = Lookup(zeit(z) , Led_table) 'zahl aus Variable in 7segment anzeigen
Portb = Tmp
If Tccr1b = 0 Then 'wenn timer gestoppt, ist Relais aus
Portb.5 = 1 'einzelnen segmente ansteuern
End If
Shift Tmp , Left , 1
Waitms 1
'----------------- Start/Stop und wenn geändert EEPROM-werte Schreiben ---------
If Pinc.3 = 0 And Taste4 = 0 Then
Eezeit(1) = Zeit(1)
Eezeit(2) = Zeit(2)
Eezeit(3) = Zeit(3)
Eezeit(4) = Zeit(4)
Kontrolle = 0 ' ERAM Kontrolle
Taste4 = 1 ' reset changed
End If
'----------------- Reine Start/Stop Routien ------------------------------------
If Pinc.3 = 0 And Taste3 = 0 Then
Taste3 = 1 ' disable start/stop
If Tccr1b = 0 Then
Start Timer1
Call Zeiteinstellung
I = 0 ' reset blink-count
Portc.1 = 1 'Relais ON
Else
Stop Timer1
Call Zeiteinstellung
I = 0 ' reset blink-count
Portc.1 = 0 'Relais OFF
End If
End If
If Pinc.3 = 1 Then
Taste3 = 0 ' enable start/stop
End If
'----------------- Minuten um 1 erhöhen Taster ---------------------------------
If Pinc.4 = 0 And Taste2 = 0 And Tccr1b = 0 Then
Taste2 = 1 ' disable up/down MIN
Taste4 = 0 ' set changed
Incr Zeit(2)
If Zeit(2) = 10 Then
Zeit(2) = 0
Incr Zeit(1)
If Zeit(1) = 10 Then Zeit(1) = 0
End If
End If
If Pinc.4 = 1 Then
Taste2 = 0 ' enable up/down MIN
End If
'------------Sekunde und Minuten = Null setzen ---------------------------------
If Pinc.4 = 0 And Tccr1b = 0 And Pinc.5 = 0 Then
Taste4 = 0 ' set changed
Zeit(1) = 0
Zeit(2) = 0
Zeit(3) = 0
Zeit(4) = 0
End If
If Pinc.4 = 1 And Pinc.5 = 1 Then
End If
Next Z
'******************************************************************************
'----------------- Sekunden um 1 erhöhen Taster --------------------------------
If Pinc.5 = 0 And Taste1 = 0 And Tccr1b = 0 Then
Taste1 = 1 ' disable up/down SEC
Taste4 = 0 ' set changed
Incr Zeit(4)
If Zeit(4) = 10 Then
Zeit(4) = 0
Incr Zeit(3)
If Zeit(3) = 6 Then Zeit(3) = 0
End If
End If
If Pinc.5 = 1 Then
Taste1 = 0 ' enable up/down SEC
End If
Goto Main
'******************************************************************************
Ontimer1:
Timer1 = Timerpreset
Decr Zeit(4)
Sek_blink = 1
I = 0 'blink counter
If Zeit(1) = 0 And Zeit(2) = 0 And Zeit(3) = 0 And Zeit(4) = 0 Then
Stop Timer1
Call Zeiteinstellung
I = 0
Portc.1 = 0 'relais OFF
Call Soundout 'Peep-peep
End If
If Zeit(4) = 255 Then
Zeit(4) = 9
Decr Zeit(3)
If Zeit(3) = 255 Then
Zeit(3) = 5
Decr Zeit(2)
If Zeit(2) = 255 Then
Zeit(2) = 9
Decr Zeit(1)
End If
End If
End If
Return
'----------- gespeicherte Timerwerte aus EEPROM laden --------------------------
Sub Zeiteinstellung
If Kontrolle = &HFF Then ' neu oder gelöschter ERAM
Zeit(1) = 0
Zeit(2) = 0
Zeit(3) = 0
Zeit(4) = 0
Else
Zeit(1) = Eezeit(1) 'Minuten Zehner
Zeit(2) = Eezeit(2) 'Minuten Einer
Zeit(3) = Eezeit(3) 'Sekunden zehner
Zeit(4) = Eezeit(4) 'Sekunden Einer
End If
End Sub
Sub Soundout
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Sound Portc.0 , 400 , 100
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0
Waitms 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Sound Portc.0 , 400 , 100
Waitms 100
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0
Sound Portc.0 , 400 , 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
End Sub
End
'Parameter für 7Segment um diese Zahl Anzuzeigen über die Ausgänge
Led_table:
' 0 1 2 3 4 5 6 7 8 9
Data &H40 , &H79 , &H24 , &H30 , &H19 , &H12 , &H02 , &H78 , &H0 , &H10
Lesezeichen