A więc króciutki program testujący debounce. Działa ale dziwnie jakoś.
Na portach PD0 , PD1 są klawisze z aktywnym stanem 0
Na portach PA0 , PA1 mam podłączone ledy.
Założenie
Po nacisnięciu klawisza PD0 zapal diode na PA0
Po nacisnięciu klawisza PD1 zapal diode na PA1
program działa tak że
Po nacisnięciu klawisza PD0 zapal diode na PA0 oraz PA1
Po ponownym naciśnięciu PD0 zgaś led
Po nacisnięciu klawisza PD1 zapal diode na PA1 (tu jest ok)
Po ponownym naciśnięciu PD1 zgaś led
Kompletnie nie mogę załapać dlaczego po nacisnięciu PD0 ustawia mi obydwie końcówki PA0 (ok) ale dlaczego również PA1 skoro ustawianie flagi jest w zupełnie innej procedurze.
Doszłem że używając config debounce można to częściowo rozwiazać ale musimy się zmieścić w odpowiednim czasie wciśnięcia przycisku. Za długo wciśnięty to efekt ustawienia obydwu końcówek na portach.
Na portach PD0 , PD1 są klawisze z aktywnym stanem 0
Na portach PA0 , PA1 mam podłączone ledy.
Założenie
Po nacisnięciu klawisza PD0 zapal diode na PA0
Po nacisnięciu klawisza PD1 zapal diode na PA1
program działa tak że
Po nacisnięciu klawisza PD0 zapal diode na PA0 oraz PA1
Po ponownym naciśnięciu PD0 zgaś led
Po nacisnięciu klawisza PD1 zapal diode na PA1 (tu jest ok)
Po ponownym naciśnięciu PD1 zgaś led
Kompletnie nie mogę załapać dlaczego po nacisnięciu PD0 ustawia mi obydwie końcówki PA0 (ok) ale dlaczego również PA1 skoro ustawianie flagi jest w zupełnie innej procedurze.
Doszłem że używając config debounce można to częściowo rozwiazać ale musimy się zmieścić w odpowiednim czasie wciśnięcia przycisku. Za długo wciśnięty to efekt ustawienia obydwu końcówek na portach.
$regfile = "m128def.DAT"
$crystal = 8000000
'Config Debounce = 200
Config Porta = Output
Config Portd = Input
Set Portd 'podciagnij wejscia do VCC
Declare Sub Pd0_on 'Obsluga klawisza PD0
Declare Sub Pd1_on 'Obsluga klawisza PD1
Dim Klawisz0 As Bit 'flaga wcisnietego klawisza PD0
Dim Klawisz1 As Bit 'flaga wcisnietego klawisza PD1
'-----Program glowny-------------
Do
Debounce Pind.0 , 0 , Pd0_on , Sub 'Jezeli PD0 byl wcisniety ustaw flagie
Debounce Pind.1 , 0 , Pd1_on , Sub 'Jezeli PD1 byl wcisniety ustaw flagie
If Klawisz0 = 1 Then
Set Porta.0 'wcisnieto klawisz PD0
Else
Reset Porta.0
End If
If Klawisz1 = 1 Then
Set Porta.1 'wcisnieto klawisz PD1
Else
Reset Porta.1
End If
Loop
End 'end program
'-------End program--------------
Sub Pd0_on
Toggle Klawisz0 'ustaw flagie klawisz wcisniety dla PD0
End Sub
Sub Pd1_on
Toggle Klawisz1 'ustaw flage klawisz wcisniety dla PD1
End Sub