Wybaczcie początkującemu, bo pytam zapewne o jakąś strasznie trywialną sprawę, ale póki co nie mogę sobie z nią poradzić, więc szukam pomocy.
Piszę sobie cośtam. Cośtam ma multipleksowo obsługiwany wyświetlacz LED, multipleksowanie jest załatwiane podprogramem uruchamianym z przerwania od T0. Tyle napisałem i tu wszystko działa pięknie.
Dalej, przed pisaniem reszty właściwego programu były zabawy samym wyświetlaniem i najprostszy pomysł: pętla odliczająca kolejne liczby i ich wyświetlanie. Popełniłem pętlę for-next, wewnątrz niej komenda wait 1 i było świetnie, tylko wolno. Zamieniłem więc oczywiście wait 1 na waitms 250. I dupa.
Żeby nie przedłużać, wyszło mi, że o ile wait z działającym timerem wywołującym przerwanie działa dobrze, tak waitms całkowicie rozkłada działanie programu i to w dodatku w sposób dla mnie niezrozumiały. Z helpa wyczytałem, że przerwania "mogą znacznie wydłużyć czas odmierzany przez instrukcję waitms", ale to nie byłby problem, tak dobralbym po prostu wartość, żeby było dobrze. Tymczasem o ile przy wait miałem wyświetlacz pokazujący w kółko kolejne liczby od 000 do 255, tak przy użyciu waitms, w zasadzie niezależnie od wartości dalej wstawionej (próbowałem i z 50ms i z 1000) mam na wyświetlaczu z lekka migające same zera.
Dodatkowo dopisałem tam uruchamianie na moment podpiętego do któregoś z portów piszczka w momencie przepełniania wartości zliczanej. Czas działania piszczka równiez jest ograniczony przez waitms 250. I owszem, piszczek odzywa się w miarę miarowo, raz na kilka sekund, co wskazywałoby, że wartość wyświetlana jest odliczana prawidłowo, dlaczego jednak nie jest już prawidłowo wyświetlana, skoro jedyne, co zmieniłem, to podmiana wait na waitms? Dodatkowy efekt: ten czas włączenia piszczka jest zmienny i wynosi od na oko poprawnych 1/4 sekundy do nawet kilku sekund. A tam jest po prostu:
set porta.2
waitms 250
reset porta.2
Taki opis problemu wystarczy? Czy wrzucić listing?
J.
Piszę sobie cośtam. Cośtam ma multipleksowo obsługiwany wyświetlacz LED, multipleksowanie jest załatwiane podprogramem uruchamianym z przerwania od T0. Tyle napisałem i tu wszystko działa pięknie.
Dalej, przed pisaniem reszty właściwego programu były zabawy samym wyświetlaniem i najprostszy pomysł: pętla odliczająca kolejne liczby i ich wyświetlanie. Popełniłem pętlę for-next, wewnątrz niej komenda wait 1 i było świetnie, tylko wolno. Zamieniłem więc oczywiście wait 1 na waitms 250. I dupa.
Żeby nie przedłużać, wyszło mi, że o ile wait z działającym timerem wywołującym przerwanie działa dobrze, tak waitms całkowicie rozkłada działanie programu i to w dodatku w sposób dla mnie niezrozumiały. Z helpa wyczytałem, że przerwania "mogą znacznie wydłużyć czas odmierzany przez instrukcję waitms", ale to nie byłby problem, tak dobralbym po prostu wartość, żeby było dobrze. Tymczasem o ile przy wait miałem wyświetlacz pokazujący w kółko kolejne liczby od 000 do 255, tak przy użyciu waitms, w zasadzie niezależnie od wartości dalej wstawionej (próbowałem i z 50ms i z 1000) mam na wyświetlaczu z lekka migające same zera.
Dodatkowo dopisałem tam uruchamianie na moment podpiętego do któregoś z portów piszczka w momencie przepełniania wartości zliczanej. Czas działania piszczka równiez jest ograniczony przez waitms 250. I owszem, piszczek odzywa się w miarę miarowo, raz na kilka sekund, co wskazywałoby, że wartość wyświetlana jest odliczana prawidłowo, dlaczego jednak nie jest już prawidłowo wyświetlana, skoro jedyne, co zmieniłem, to podmiana wait na waitms? Dodatkowy efekt: ten czas włączenia piszczka jest zmienny i wynosi od na oko poprawnych 1/4 sekundy do nawet kilku sekund. A tam jest po prostu:
set porta.2
waitms 250
reset porta.2
Taki opis problemu wystarczy? Czy wrzucić listing?
J.