Wykrywanie zbocza ASM 8051
Wykrywanie zbocza ASM 8051
Witam. W jaki sposób mogę wykryć zbocze narastające na dowolnym pinie?Procesor to AT89S51.Chciałem wykorzystać przerwania zewnętrzne ale mam 8 przycisków.
Może coś takiego? Wykrywa zbocze narastające na pinie 1 portu 1.
Kod: Zaznacz cały
JNB P1.1, $
JB P1.1, ZBOCZE
...
...
...
ZBOCZE: ...
Zastanawiam się, czy nie zadziałałoby coś takiego (dawno się tymi prockami nie bawiłem):
Działanie jest następujące:
W bloku SPR jest sprawdzany w pętli stan linii 1 portu 1. Pętla trwa do momentu wykrycia stanu niskiego na linii. Jeśli następnie wykryty zostanie na linii stan wysoki (czyli mamy zbocze narastające), przerzuca nas do podprogramu PRCDR, który robi co tam sobie autor zażyczy. Jeśli stan wysoki nie zostanie wykryty, znowu wrzuca nas do pętli w pierwszej linijce. Wadą takiego rozwiązania jest to, że pętla pochłania całą moc obliczeniową.
Kod: Zaznacz cały
SPR:
JB P1.1, SPR
JB P1.1, ZBOCZE
LJMP SPR
ZBOCZE:
LCALL PRCDR
LJMP SPR
PRCDR:
...
...
...
RET
W bloku SPR jest sprawdzany w pętli stan linii 1 portu 1. Pętla trwa do momentu wykrycia stanu niskiego na linii. Jeśli następnie wykryty zostanie na linii stan wysoki (czyli mamy zbocze narastające), przerzuca nas do podprogramu PRCDR, który robi co tam sobie autor zażyczy. Jeśli stan wysoki nie zostanie wykryty, znowu wrzuca nas do pętli w pierwszej linijce. Wadą takiego rozwiązania jest to, że pętla pochłania całą moc obliczeniową.
Zrób to inaczej. Klawisze podepnij pod port, a drabinką diodową (diodowy OR) podepnij się pod INT. Cała klawiatura będzie wtedy działać na przerwaniach. Zgłosi się przerwanie - czytasz port i wiesz który klawisz został wciśnięty. Wada: nie da się wykryć następnego klawisza, do czasu zwolnienia poprzedniego. Coś za coś.kaliska5 pisze:Witam. W jaki sposób mogę wykryć zbocze narastające na dowolnym pinie?Procesor to AT89S51.Chciałem wykorzystać przerwania zewnętrzne ale mam 8 przycisków.
Witam!
Mam propozycję:
skoro masz wysterować klawiaturę na 8 przycisków to możesz pobierać ich stan i logicznie "skołowacić" z jakąś stałą. Przykład:
*wszystkie przyciski podpięte są do P1
*stan wciśnięcia to '0' a jego brak - '1'
wiedząc to dajesz:
itp.
Uwagi:
Jest to mnemonika rodziny '51 - wszelkie znaki preprocesora są tutaj zapożyczeniem (znaki komentarza), więc trzeba wziąć to pod uwagę przy pracy nad kodem.
Dlaczego dwa razy sprawdzam czy coś jest naciśnięte (+delay 10ms)?
- by wyeliminować tzw. drganie styków
Jeżeli jak napisałem, cała klawiatura jest podpięta do jednego portu (obojętnie czy port uC czy port w przestrzeni adresów zewnętrznych, grunt żeby był logiczny, ciągły jeden bajt)
to sprawdzasz instrukcją xor (daje wynik zero, jeżeli dwa argumenty mają jednakową wartość).
To nic, że 3 razy pobierasz stan klawiatury - człowiek nie ma reakcji w ms tylko w sek wiec wszystko ok.
A zbocze to tylko kwestia jakie sygnały były przed i po zdarzeniu, by dobrać odpowiednie warunki.
PZDR
GrzesiekG
Mam propozycję:
skoro masz wysterować klawiaturę na 8 przycisków to możesz pobierać ich stan i logicznie "skołowacić" z jakąś stałą. Przykład:
*wszystkie przyciski podpięte są do P1
*stan wciśnięcia to '0' a jego brak - '1'
wiedząc to dajesz:
Kod: Zaznacz cały
petla:
mov acc, p1
xrl acc, 255
jnz jest
sjmp petla
jest:
//delay ~10ms
mov acc, p1
xrl acc, 255
jnz jest2
sjmp petla
jest2:
mov acc, p1
jnb acc.0, p0_pres
jnb acc.1, p1_pres
...
p0_pres:
...
...
...
sjmp petla
p1_pres:
...
...
...
sjmp petla
Uwagi:
Jest to mnemonika rodziny '51 - wszelkie znaki preprocesora są tutaj zapożyczeniem (znaki komentarza), więc trzeba wziąć to pod uwagę przy pracy nad kodem.
Dlaczego dwa razy sprawdzam czy coś jest naciśnięte (+delay 10ms)?
- by wyeliminować tzw. drganie styków
Jeżeli jak napisałem, cała klawiatura jest podpięta do jednego portu (obojętnie czy port uC czy port w przestrzeni adresów zewnętrznych, grunt żeby był logiczny, ciągły jeden bajt)
to sprawdzasz instrukcją xor (daje wynik zero, jeżeli dwa argumenty mają jednakową wartość).
To nic, że 3 razy pobierasz stan klawiatury - człowiek nie ma reakcji w ms tylko w sek wiec wszystko ok.
A zbocze to tylko kwestia jakie sygnały były przed i po zdarzeniu, by dobrać odpowiednie warunki.
PZDR
GrzesiekG