W kwestii układowej, brak kondensatorów dla rezonatora kwarcowego. A ponadto bez zmian w fuse-bitach mikrokontorler nie użyje tego kwarcu. Będzie pracował z częstotliwością domyślną 1MHz pobieraną z wewnętrznego generatora RC.
W kwestii programowej, pierwsze co rzuca się w oczy to błędnie wykonane instrukcje:
Kod: Zaznacz cały
Enable Interrupts
Enable Int0 , Low Level
Enable Int1 , Low Level
Enable Timer0
Config Debounce = 35
Config Timer0 = Timer , Prescale = 64
On Int0 Zwieksz
On Int1 Zmniejsz
On Timer0 Sprawdz
Najpierw konfiguruje się urządzenia przez CONFIG, później ustala procedury obsługi przerwań przez ON, później się je włącza przez ENABLE a na końcu włącza się globalny system przerwań przez ENABLE INTERRUPTS.
Ta instrukcja jest po prostu bez sensu!:
Pomyłka w literkach:
Kod: Zaznacz cały
Config Portd = &B1110000 : Portb = &B1110000
Skoro ten pin już wykorzystujesz jako przerwanie to użycie DEBOUNCE nie ma sensu.
Ponadto jak zastosujesz
Low Level a nie
Falling to przyciśnięcie i przytrzymanie przycisku dość szybko zwiększy ilość osób do kilku milionów. Oczywiście zmienna
Licznik tego nie zarejestruje w pełni.
Stosowanie takich czasochłonnych instrukcji w procedurach przerwań jest błędne:
----------
Moje poprawki nie zaburzające Twojego pomysłu:
Kod: Zaznacz cały
$regfile = "attiny2313.dat"
$crystal = 4000000 'jeśli nie zmieniłeś fuse-bitów wpisz 1000000 i zmień podział w Prescale na 8
'LICZNIK OSÓB
Dim Licznik As Byte
Dim Pokaz As Bit
Config Portd = &B1110000 : Portd = &B1110000
Config Debounce = 35
Config Timer0 = Timer , Prescale = 64
Config Int0 = Falling
Config Int1 = Falling
On Int0 Zwieksz
On Int1 Zmniejsz
On Timer0 Sprawdz
Enable Int0
Enable Int1
Enable Timer0
Enable Interrupts
'-------------------------------
Licznik = 0
Pokaz = 1
Do
If Pokaz = 1 Then
Cls
Lcd Licznik ; " " ; "Osób"
Pokaz = 0
End If
Loop
End
'-------------------------------
Sprawdz:
If Pind.0 = 0 Then Pokaz = 1
Return
Zwieksz:
If Pind.2 = 0 Then
Incr Licznik
If Licznik = 100 Then
Licznik = 0
End If
End If
Return
Zmniejsz:
If Pind.3 = 0 Then
Decr Licznik
If Licznik = 255 Then
Licznik = 0
End If
End If
Return

Przed zaprogramowaniem procesora polecam skorzystanie z Symulatora zawartego w pakiecie BASCOM.