Ich bin dabei einen 24 Stunden Timer zu realisieren mit einem Atmega16
wegen der Genauigkeit habe ich den Timer1 benutzt mit einem externen
Quarz.
Sobald ich die Timer Routine einfüge zeigen die Sekunden HEX Zeichen an,
00:12:E4 00:12:D9 usw. sobald ich den Timer1 entferne, oder ausklammere
Läuft sie normal 00:12:23 00:12:22 usw. Was geht da falsch?
$Regfile="m16def.dat"
$Crystal=8000000
$hwstack=80
$swstack=32
$framesize=64
config LCDPIN = pin, db4 = portd.0, db5 = portd.2, db6= portd.4, db7 =
portd.6, E=portd.1, rs=portd.3
config lcd = 16 * 2
config portd=output
Cursor Off
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Zeit 'verzweige bei Timer1 überlauf zu
Isr_von_Timer1
Enable Interrupts
Timer1 = 34285
cls
Config Portb.0 = Input
Config Portb.1 = Input
Config Portb.2 = Input
Config Portb.3 = Input
Config Portb.4 = Input
Config Portb.5 = Output
config Portb.6 = Output
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 0
Portb.5 = 0
Start_stop Alias Pinb.0 'Start Stopp taste
Setup Alias Pinb.1 'Setup Taste
Minute Alias Pinb.2 'Minuten Taste
Sekunde Alias Pinb.3 'Sekunden Taste
Stunde alias PINb.4 ' Stunden Taste
Relais Alias Portb.5 'Relais Ausgang
Speaker Alias Portb.6 'Buzzer Ausgang
Config Clock = Soft
Dim Sekunden As Byte 'sekunden variable
Dim Minuten As Byte 'minuten variable
Dim Stunden As Byte 'stunden variable
Dim Time_temp(3) As Byte At Sekunden Overlay
Dim Refresh_lcd As Bit
Dim Alarm As Bit
'____________________________________________
Main:
'--------------------------------------------
Do
Cls
Locate 1 , 1
Lcd "Universal Timer"
Locate 2 , 1
Lcd "Setup Dr";CHR(245);"cken"
Bitwait Setup , Reset
Gosub Einstellen
Bitwait Start_stop , Set
Gosub Run
Loop
'____________________________________________
Einstellen:
'--------------------------------------------
Cls
Locate 1 , 1
Lcd "Zeit einstellen"
Refresh_lcd = 1
Alarm = 0
Do
If Refresh_lcd = 1 Then
Locate 2 , 1
Lcd Time(time_temp(1))
Refresh_lcd = 0
End If
'Sekunden einstellen
If Sekunde = 0 Then
If Sekunden < 59 Then Incr Sekunden Else Sekunden = 00
Waitms 160
Refresh_lcd = 1
End If
'Minuten einstellen
If Minute = 0 Then
If Minuten < 59 Then Incr Minuten Else Minuten = 00
Waitms 160
Refresh_lcd = 1
End If
'Stunden einstellen
If stunde =0 Then
If Sekunden <23 Then Incr Stunden Else Stunden = 00
Waitms 160
Refresh_lcd = 1
end IF
Loop Until Start_stop = 0
Return
'____________________________________________
Run:
'--------------------------------------------
Cls
Locate 1 , 1
Lcd "Timer l";CHR(245);"uft"
Locate 2 , 1
Lcd Time(time_temp(1))
Do
Waitms 500
If Sekunden = 0 Then ' Sind die Sekunden auf Null?
If Minuten = 0 Then ' Sind die Minuten auf Null?
if Stunden = 0 then ' Sind auch die Stunden Null? Alarm!
Alarm = 1
Else ' Stunden waren nicht Null!
Decr Stunden ' Um eine Stunde verringern
Minuten = 59 ' Minuten wieder auf 59
Sekunden = 59 ' Sekunden wieder auf 59
End IF
Else ' Minuten waren nicht Null!
Decr Minuten
End If
Else ' Sekunden waren nicht Null!
Decr Sekunden
End If
Locate 2 , 1
Lcd Time(time_temp(1))
Loop Until Alarm = 1 Or Start_stop = 0
If Alarm = 1 Then
Cls
Lcd "Zeit Abgelaufen"
End If
Bitwait Start_stop , Reset
Return
Zeit: '1Hz Takt
Timer1 = 34285
Return