Problem z AT89C51 - nie pracuje P0.

Jeśli informacja nie pasuje do żadnego działu, a musisz się nią podzielić - zrób to tutaj.

Moderatorzy: gsmok, tszczesn, Romekd

Awatar użytkownika
Tomasz Gumny
1875...2499 postów
1875...2499 postów
Posty: 2301
Rejestracja: pn, 1 stycznia 2007, 23:18
Lokalizacja: Trzcianka/Poznań
Kontakt:

Re: Problem z AT89C51 - nie pracuje P0.

Post autor: Tomasz Gumny »

maciej_333 pisze:[...] nie chce to chodzić, a teoretycznie powinno.
To teraz działa czy nie? Dałeś rezystory zatykające tranzystory wykonawcze?
Jeśli nie, to zwiększ radykalnie opóźnienie np zakładając nową pętlę i obejrzyj co się dzieje:

Kod: Zaznacz cały

SETB P2.0
MOV P1,#0d

MOV R1,#255d
del1: 
MOV R0,#255d
delay:
NOP
DJNZ R0,delay
DJNZ R1,del1

MOV P2,#0d
Tomek
maciej_333
625...1249 postów
625...1249 postów
Posty: 952
Rejestracja: śr, 19 listopada 2003, 14:33
Lokalizacja: Grudziądz

Re: Problem z AT89C51 - nie pracuje P0.

Post autor: maciej_333 »

Tak, teraz działa. Między B, a E tranzystorów końcowych nie dodałem rezystorów. Winę ponosiła instrukcja CLR. Nie mam pojęcia czemu tak działała. Nawet jak wpisałem do procka takie coś:

Kod: Zaznacz cały

ORG 0h
CLR P2
CLR P0
JMP $
END
to tylko na liniach P2.0 i P0.0 była zera logiczne. Na reszcie linii były jedynki !!! Skoro układ pracuje mogę uznać, że pewien etap prac mam za sobą. Mój zegar aktualnie dwa razy na dobę ma rację. Bardzo dziękuję za zaangażowanie. Pomierzyłem prądy kolektorów tranzystorów końcowych są na poziomie poniżej uA. Z drugiej zaś strony nawet podłączenie woltomierza cyfrowego między bazę a masę tranzystora końcowego powoduje jego nasycenie.

Mam jednak pytanie. Jak wykorzystać port P2 jako wejście ? Muszę dodać przyciski do ustawiania godziny. Drgania styków usunę programowo, albo sprzętowo. Sprzętowo to na bramkach Schmitt'a. Raczej sprzętowo.
Awatar użytkownika
Tomasz Gumny
1875...2499 postów
1875...2499 postów
Posty: 2301
Rejestracja: pn, 1 stycznia 2007, 23:18
Lokalizacja: Trzcianka/Poznań
Kontakt:

Re: Problem z AT89C51 - nie pracuje P0.

Post autor: Tomasz Gumny »

maciej_333 pisze:Winę ponosiła instrukcja CLR. Nie mam pojęcia czemu tak działała. [...] tylko na liniach P2.0 i P0.0 była zera logiczne. Na reszcie linii były jedynki !!!
Zerknąłem do listy instrukcji, jest tylko CLR A i CLR bit. Rejestr P0 ma adres 80h, zatem instrukcję CLR P0 asembler przełożył na CLR 80h. Z kolei 80h to w obszarze adresowanym bitowo P0.0.
maciej_333 pisze:Jak wykorzystać port P2 jako wejście?
W zegarze raczej nie unikniesz uruchomienia przerwanie od timera działającego co np. 1ms. To pozwoli dokładnie odliczać czas, zapalać kolejne cyfry i ładnie odfiltrować drgania zestyków. :)
Tomek
ODPOWIEDZ