Diese Initialisierung erfolgt gleich nach dem Start und der Stackfestlegung. Danach wird die ISR jede ms aufgerufen.InitTimer1:
ldi Temp_Reg, high( 2000 - 1 ) ;
out OCR1AH, Temp_Reg
ldi Temp_Reg, low( 2000 - 1 )
out OCR1AL, Temp_Reg
; CTC Modus einschalten
; Vorteiler auf 8
ldi Temp_Reg, ( 1 << WGM12 ) | ( 1 << CS11 )
out TCCR1B, Temp_Reg
ldi Temp_Reg, 1 << OCIE1A ; OCIE1A: ISR Timer -Compare
out TIMSK, Temp_Reg
Ret
Timer1 = Timer , Prescale = [B]64[/B]
.
.
.
Timer1 = 250
'bzw.
'Load Timer1 = 65286
Config Timer1 = Timer , Prescale = 128 Enable Timer1
On Timer1 Test
Enable Interrupts
Timer1 = 65411
Enable Timer1
On Timer1 Test
Enable Interrupts
timer1 = 125
Config Timer1 = Timer , Prescale = 64
Enable Timer1
On Timer1 Test
Enable Interrupts
Timer1 = 64286
was ist jetzt kaputt ???
Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
Config Timer1 = Timer , Prescale = 64
Timer1 = 250
'------------ Uhr Voreinstellung ----------------------------------------------
Sekunde = 0
$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
$baud = 9600
$regfile "m8def.dat"
$crystal = 16000000
Config Lcd = 16 * 2
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word
Dim S1 As String * 2
Dim S2 As String * 2
Dim S3 As String * 2
'Minuten Einstellen
Config Pind.2 = Input
Portd.2 = 1
Taster0 Alias Pind.2
'Stunden Einstellen
Config Pind.3 = Input
Portd.3 = 1
Taster1 Alias Pind.3
Config Timer1 = Timer , Prescale = 64
Timer1 = 250
'------------ Uhr Voreinstellung ----------------------------------------------
Sekunde = 0
Minute = 0
Stunde = 0
Cls
Do
' Display löschen
'-------------------- Formatkonvertierung für Uhrzeit -------------------------
S1 = Str(stunde)
S1 = Format(s1 , "00")
'----------------------------------
S2 = Str(minute)
S2 = Format(s2 , "00")
'------------------------------------
S3 = Str(sekunde)
S3 = Format(s3 , "00")
'--------------------------------------
' S1 ist nun die Variable für Stunde
' S2 ist nun die Variable für Minuten
' S3 ist nun die Variable für Sekunden
'----------- Anzeige Stunden , Minuten, Sekunden auf Display ------------------
Locate 2 , 13
Lcd S3
Locate 2 , 11
Lcd ":"
Locate 2 , 8
Lcd S2
Locate 2 , 6
Lcd ":"
Locate 2 , 3
Lcd S1
Locate 1 , 1
Lcd "Aktuelle Uhrzeit"
Cursor Off Noblink
Waitms 50
If Sekunde > 59 Then Minute = Minute + 1
If Sekunde > 59 Then Sekunde = 0
If Minute > 59 Then Stunde = Stunde + 1
If Minute > 59 Then Minute = 0
If Stunde > 23 Then Stunde = 0
'--------------Uhr einstellen Minute ------------------------------------------
If Taster0 = 0 Then
Waitms 50
Incr Stunde
End If
'--------------Uhr einstellen Stunde -----------------------------------------
If Taster1 = 0 Then
Waitms 50
Incr Minute
End If
'--------Uhr komplett auf Null stellen ----------------------------------------
If Taster0 = 0 And Taster1 = 0 Then
Sekunde = 0
Minute = 0
Stunde = 0
Waitms 50
End If
'------------------------------------------------------------------------------
Loop
End
Test:
Timer1 = 3036
Incr Sekunde
Return
schau mal hier ...hmm..muss mal krusteln habe irgedwo was gelesen mit externen Oszillator, einige habe herumfahren, dann steckbrett..RS232 ISP kabel hätte ich, oder kann man schnell löten..wenn es hilft...aber mit welcher Software und wie, das ist das Problem..und wegen 2 € Atmega werde ich nicht so lange herum doktorn...
$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
$baud = 9600
$regfile "m8def.dat"
$crystal = 16000000
Config Lcd = 16 * 2
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word
Dim S1 As String * 2
Dim S2 As String * 2
Dim S3 As String * 2
'Minuten Einstellen
Config Pind.2 = Input
Portd.2 = 1
Taster0 Alias Pind.2
'Stunden Einstellen
Config Pind.3 = Input
Portd.3 = 1
Taster1 Alias Pind.3
Config Timer1 = Timer , Prescale = 64 'Timer1 Config mit Vorteiler
Enable Timer1 'Startet den Timer
On Timer1 Test 'Springe zu bei Überlauf
Enable Interrupts 'Interrupts ein
Timer1 = 250 'Voreinstellung
'------------ Uhr Voreinstellung ----------------------------------------------
Sekunde = 0
Minute = 0
Stunde = 0
Cls
Do
' Display löschen
'-------------------- Formatkonvertierung für Uhrzeit -------------------------
S1 = Str(stunde)
S1 = Format(s1 , "00")
'----------------------------------
S2 = Str(minute)
S2 = Format(s2 , "00")
'------------------------------------
S3 = Str(sekunde)
S3 = Format(s3 , "00")
'--------------------------------------
' S1 ist nun die Variable für Stunde
' S2 ist nun die Variable für Minuten
' S3 ist nun die Variable für Sekunden
'----------- Anzeige Stunden , Minuten, Sekunden auf Display ------------------
Locate 2 , 13
Lcd S3
Locate 2 , 11
Lcd ":"
Locate 2 , 8
Lcd S2
Locate 2 , 6
Lcd ":"
Locate 2 , 3
Lcd S1
Locate 1 , 1
Lcd "Aktuelle Uhrzeit"
Cursor Off Noblink
Waitms 50
If Sekunde > 59 Then Minute = Minute + 1
If Sekunde > 59 Then Sekunde = 0
If Minute > 59 Then Stunde = Stunde + 1
If Minute > 59 Then Minute = 0
If Stunde > 23 Then Stunde = 0
'--------------Uhr einstellen Minute ------------------------------------------
If Taster0 = 0 Then
Waitms 50
Incr Stunde
End If
'--------------Uhr einstellen Stunde -----------------------------------------
If Taster1 = 0 Then
Waitms 50
Incr Minute
End If
'--------Uhr komplett auf Null stellen ----------------------------------------
If Taster0 = 0 And Taster1 = 0 Then
Sekunde = 0
Minute = 0
Stunde = 0
Waitms 50
End If
'------------------------------------------------------------------------------
Loop
End
Test:
Incr Sekunde '1 Schritt vor
Timer1 = 3036 'Ab 3036 zählen
Return
Config Timer1 = Timer , Prescale = 256
Enable Timer1
On Timer1 Test
Enable Interrupts
Timer1 = 3036
'Am Ende :
Test:
Incr Sekunde
Timer1 = 3036
Return