Digitální hodiny v Bascomu na ATTINY 2313
Moderátor: Moderátoři
Digitální hodiny v Bascomu na ATTINY 2313
potřeboval bych pomoc. Programuji hodiny v Bascomu a nejdemi to rozjet. Už nad tím sedím spoustu dní a pořád mi to nejdene. Nemněl by někdo funkční program nebo návod jak na ten program.
Díky Zatím
' Hodiny.bas
'
' Po zapnutí začne zobrazovat hodiny : minuty : vteřiny (od 0:00:00)
' K PD5 a PD6 připojte tlačítka pro nastavení
'--------------------------------------------------------------
'$sim
$regfile = "Attiny2313.DAT"
$crystal = 10000000
'Deska ZD1:
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
'Timer1 = časovač, bez předděliče, odpojený od pinu OC1A, při shodě vynuluj čítač
Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1
Compare1a = 50000 'porovnávací hodnota (5 ms)
Enable Interrupts 'povol přerušení
Enable Compare1a 'povol přerušení COMPARE1A
On Compare1a Tim 'při přerušení jdi na Tim
Declare Sub Zobraz 'deklarace procedury
Dim Pocet_preruseni As Word 'počet přerušení
Dim Vterin As Byte , Minut As Byte , Hodin As Byte
Tlac_hod Alias Pind.5 'tlačítko nastavení hodin
Tlac_min Alias Pind.6 'tlačítko nastavení minut
Config Portd = Input 'celý portD vstupní
Portd = 255 'pull-up
Cursor Off 'vypni kurzor
''''''''''''''''''''''''''' HLAVNI PROGRAM '''''''''''''''''''''''''''''''''''
Pocet_preruseni = 0 'vynuluj proměnné
Vterin = 0
Minut = 0
Hodin = 0
Do
'Test tlačítek:
If Tlac_hod = 0 Then
Cls
Incr Hodin 'přičti 1
Call Zobraz
Waitms 200 'rychlost přičítání
End If
If Tlac_min = 0 Then
Cls
Incr Minut
Call Zobraz
Waitms 200
End If
'Zobrazení na displeji:
Call Zobraz
Waitms 100
Loop
''''''''''''''''''''''''''' KONEC HLAVNIHO PROGRAMU ''''''''''''''''''''''''''
End
Sub Zobraz
Cls
Lcd Hodin ; ":"
If Minut < 10 Then 'pokud minut je 0 - 9
Lcd "0" ; Minut ; ":" 'přidáme úvodní nulu, aby výsledek byl vždy dvojmístný
Else
Lcd Minut ; ":"
End If
If Vterin < 10 Then
Lcd "0" ; Vterin
Else
Lcd Vterin
End If
End Sub
Tim: 'obsluha přerušení
Incr Pocet_preruseni 'každých 5 milisec vznikne přerušení (při 10 MHz)
If Pocet_preruseni > 199 Then '200 x 5 ms = 1 sec
Incr Vterin 'zvětši o 1
Pocet_preruseni = 0 'vynuluj počítadlo
End If
If Vterin > 59 Then
Vterin = 0
Incr Minut 'každou minutu
End If
If Minut > 59 Then
Minut = 0
Incr Hodin 'každou hodinu
End If
If Hodin > 23 Then 'každý den
Hodin = 0
End If
Return
----------------------------------
toto není moje tvorba, ale našel jsem to někde na netu, tak snad by to mohlo pomoci.
Při použití krystalu 12MHz změň $crystal = 12000000
a v obsluze přerušení musíš přepočítat počty přerušení
Tim: 'obsluha přerušení
Incr Pocet_preruseni 'každých 5 milisec vznikne přerušení (při 10 MHz)
If Pocet_preruseni > 199 Then '200 x 5 ms = 1 sec
Incr Vterin 'zvětši o 1
Pocet_preruseni = 0 'vynuluj počítadlo
End If
-
Návštěvník
-
Jakut