Teres
Guest
Fri Apr 09, 2004 7:53 am
Witam
Wykonałem klawiaturkę matrycową do mikrokontrolera AT89s8252 będzie ona
podłączona do portu 2 z wewnetrznymi podciagnieciami do 5V. Zastanawiam się
jak należy oprogramować teraz uC. A konkretnie to o to , czy poszczególne
piny portu się ustawia jako wejścia wyjścia, a jeśli tak , to jak to zrobić
w asm. na P2.0-P2.2 są kolumny, na P2.3-P2.7 wiersze (klawiaturka
4x3).Zakładają taki fragment programu:
mov P2,00001111B
mov A,P2
oraz dodatkowo uziemiając wszystkie piny portu 2, co będzie w akumulatorze ?
Bo nie wiem czy stan portu , to to samo wysłaliśmy my na port, czy to co
przyszło.
Jeśli ktoś będzie w stanie pomóc, z góry dzięki.
Pozdrawiam,
Teres
Marek Dzwonnik
Guest
Fri Apr 09, 2004 9:51 am
Użytkownik "Teres" <teres@WyTniJ_to!!!@poczta.fm> napisał w wiadomości
news:c55o9c$2vi$1@news.onet.pl
Quote:
Wykonałem klawiaturkę matrycową do mikrokontrolera AT89s8252 będzie
ona podłączona do portu 2 z wewnetrznymi podciagnieciami do 5V.
P2.0-P2.2 są kolumny, na
P2.3-P2.7 wiersze (klawiaturka 4x3).
mov P2,00001111B
mov A,P2
oraz dodatkowo uziemiając wszystkie piny portu 2, co będzie w
akumulatorze ? Bo nie wiem czy stan portu , to to samo wysłaliśmy my
na port, czy to co przyszło.
1)
Spójrz jak wygląda budowa portów w 8051:
http://www.ampr.intertele.pl/sq8feu/8051/porty.htm
Zwróć uwagę na zasadniczą różnicę występującą pomiędzy zapisem a odczytem
portu.
Zapis portu ustawia/zeruje bity w odpowiednim _rejestrze_ SFR (P0, P1...),
natomiast odczyt zwraca stan _linii_ wyjściowych portu. Stan linii jest
wypadkową bitu wpisanego do rejestru i obciążenia podłączonego do danej
linii.
Jeżeli wystawisz do rejestru "0" to odczyt zawsze zwróci "0"
Jeżeli wystawisz do rejestru "1" to odczyt niepodłączonej linii zwróci "1"
Jeżeli wystawisz do rejestru "1" i obciążysz linię do masy to odczyt linii
zwróci "0"
Stąd wniosek, że jeżeli jakaś linia portu ma pracować jako _wejście_, to do
odpowiedniego bitu rejestru należy wcześniej wpisac "1".
Uwaga 1.
Niektóre rozkazy w 51-ce operują na wartości pobranej zwrotnie z _rejestru_
portu a nie na wartości odczytanej z linii portu.
http://www.ampr.intertele.pl/sq8feu/8051/rmw.htm
Uwaga 2.
Np. w AVR-ach wprowadzono rejestr wybierający kierunek transmisji (DIRx) i
jawnie rozdzielono zapis/odczyt rejestru (POTRx) od odczytu stanu linii uC
(PINx).
2)
Wszelkie styki (klawiatury, krańcówki.. itp.) są paskudne bo drgają przy
przełączaniu. Tzn. generują kilka zboczy podczas jednego wciśnięcia. Dlatego
istotną część obsługi klawiatury stanowi programowa eliminacja odbić
(debouncing). Zobacz np.:
http://www.google.pl/groups?selm=3cd83d32%40news.home.net.pl
--
Marek Dzwonnik, GG: #2061027 (zwykle jako 'niewidoczny')
Teres
Guest
Fri Apr 09, 2004 10:17 am
Użytkownik "Marek Dzwonnik" <mdz@WIADOMO_PO_CO_TO.message.pl> napisał w
wiadomości news:4076804e$1@news.home.net.pl...
Quote:
mov P2,00001111B
mov A,P2
oraz dodatkowo uziemiając wszystkie piny portu 2, co będzie w
akumulatorze ? Bo nie wiem czy stan portu , to to samo wysłaliśmy my
na port, czy to co przyszło.
Czyli w A będzie 00000000B, tak ??
Quote:
Quote:
Uwaga 2.
Np. w AVR-ach wprowadzono rejestr wybierający kierunek transmisji (DIRx)
i
jawnie rozdzielono zapis/odczyt rejestru (POTRx) od odczytu stanu linii
uC
(PINx).
Wiem
Quote:
2)
Wszelkie styki (klawiatury, krańcówki.. itp.) są paskudne bo drgają przy
przełączaniu. Tzn. generują kilka zboczy podczas jednego wciśnięcia.
Dlatego
istotną część obsługi klawiatury stanowi programowa eliminacja odbić
(debouncing). Zobacz np.:
http://www.google.pl/groups?selm=3cd83d32%40news.home.net.pl
Najprawdopodobniej zastosuje opóźnienia rzędu 30ms i dopiero wtedy
potwierdzenie odczytu.
Pozdrawiam,
Teres
Cymes
Guest
Sat Apr 10, 2004 5:03 pm
"Teres" <teres@WyTniJ_to!!!@poczta.fm> wrote in message
news:c560q0$t2a$1@news.onet.pl...
Quote:
Użytkownik "Marek Dzwonnik" <mdz@WIADOMO_PO_CO_TO.message.pl> napisał w
wiadomości news:4076804e$1@news.home.net.pl...
[ciach]
Quote:
Najprawdopodobniej zastosuje opóźnienia rzędu 30ms i dopiero wtedy
potwierdzenie odczytu.
Ja zmontowałem klawiaturkę 2x2 podłączaną do AVRa według tego schematu:
http://www.atmel.com/dyn/resources/prod_documents/doc1232.pdf
Działa bardzo dobrze, tylko pamiętaj o ustawieniu nieużywanych linii portów
jako wyjścia, bo w przeciwnym razie dzieją się dziwne rzeczy. W każdym bądź
razie odczyt stanu linii w procedurze obsługi przerwania eliminuje problem z
oprogramowaniem uwzględniającym drganie zestyków. A przynajmniej tak mi się
wydaje, nie jestem doświadczonym elektronikiem.
--
Pozdrawiam, Cymes
Teres
Guest
Sat Apr 10, 2004 8:49 pm
Użytkownik "Cymes" <semyc@op.NO.SPAM.pl> napisał w wiadomości
news:c59ctr$ij5$1@news.onet.pl...
Quote:
Ja zmontowałem klawiaturkę 2x2 podłączaną do AVRa według tego schematu:
http://www.atmel.com/dyn/resources/prod_documents/doc1232.pdf
Działa bardzo dobrze, tylko pamiętaj o ustawieniu nieużywanych linii
portów
jako wyjścia, bo w przeciwnym razie dzieją się dziwne rzeczy. W każdym
bądź
razie odczyt stanu linii w procedurze obsługi przerwania eliminuje problem
z
oprogramowaniem uwzględniającym drganie zestyków. A przynajmniej tak mi
się
wydaje, nie jestem doświadczonym elektronikiem.
Nie robie na AVR.
Pozdrawiam,
Teres