Wg. mnie C można jeszcze się uczyć, ale ASM odpada kompletnie...
Jest dla masochistów ,oraz którzy kochają marnować czas na coś , co w Bascom
lub w Basic ,ew. w C jest do napisania w 100 razy krótszym czasie.
Takie są fakty.
Nie potępiam asemblerowców ,jak go umieją to gratuluje.
Trochę pisze w Bascom ,jego zaleta to wg Mnie oszczędność Czasu.
a że kot duży, można używać ATmegi dużej np. 32 ,128. kosztują tyle co inne 2kbajtowe
kostki,więc nie wiem o co chodzi z tym że za duży kod wam wychodzi, a przecierz w Bascom chyba raczej nie pisze sie do urządzeń
przemysłowych aby to było ważne!
Po co wydawać na kostke 6-7zł na 2kb i płakać że kod za duży, wydać 14zł i mamy 32kb!
Miejscami wnoszenie że kot za duży jest niedorzeczne. Ile wam zajmuje
zapisanie 32kb?
Kod: Zaznacz cały
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2
Dim Godzina As Byte
Dim Minuta As Byte
Dim Sekunda As Byte
Do
Waitms 1000
Incr Sekunda
Lcd "" ; Sekunda ; "" ; Minuta ; "" ; Godzina
Loop Until Sekunda > 59
Do
Waitms 1000
Incr Minuta
Lcd "" ; Sekunda ; "" ; Minuta ; "" ; Godzina
Loop Until Minuta > 59
Do
Waitms 1000
Incr Godzina
Lcd "" ; Sekunda ; "" ; Minuta ; "" ; Godzina
Loop Until Godzina > 12
Do
Loop
Taki kod to mój zegar ,bez zewn. kwarcu sie spóźnia .
Generuje 2.72kb (Bascom 1.11.7.7)
z kolei ten kod generuje 3.32kb
Kod: Zaznacz cały
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2 ' LCD 16*2
Cursor Off ' Kursor
Cls
Dim Hours As Byte , Minutes As Byte , Seconds As Byte
Dim Temp As Integer , Flag As Bit , Key As Byte
Config Timer0 = Timer , Prescale = 1
Load Timer0 , 250
Enable Timer0
Enable Interrupts
On Timer0 Timer0_int
Start Timer0
'-------- initial time is 12:00 ---------
Hours = 12
Minutes = 0
Seconds = 0
Do
If Flag = 1 Then
Flag = 0
Locate 1 , 1
If Hours < 10 Then Lcd "0";
Lcd Hours ; ":" ;
If Minutes < 10 Then Lcd "0";
Lcd Minutes ; ":" ;
If Seconds < 10 Then Lcd "0";
Lcd Seconds
End If
Loop
Timer0_int:
Incr Key '50 x 70 =3500
If Key = 50 Then
Key = 0
'Call Klawisze
Incr Temp
If Temp = 70 Then
Flag = 1
Incr Seconds
Temp = 0
If Seconds = 60 Then
Seconds = 0
Incr Minutes
If Minutes = 60 Then
Minutes = 0
Incr Hours
If Hours = 24 Then
Hours = 0
End If
End If
End If
End If
End If
Return
Niby niewiele, ale trzeba też czasem umieć napisać troche prostrzą metodą coś.
wiem że mój kod jest "dziwny" ,ale myślę że po dodaniu zewn. kwarcu będzie
dobrze chodził.