Mundi - dobrze radzisz ale Antystatyk zrobił kompletny syf w przerwaniu i źle steruje wyświetlaczami. Twoja porada tu nie ma szans na prawidłowe zadziałanie.
Antystatyk - Jak już widzisz, napisałeś to źle. Zobacz że wcześniej wspominałem o efekcie rozmazania na wyświetlaczach i napisałem w jakiej kolejności je sterować (bo już wielu początkujących na tym wpadło). No ale:
1) Dałem ci wzór jak napisać przerwanie. Gdy zobaczyłem jak ty to napisałeś to aż mi się ulało

Można powiedzieć że na 99% jest dobrze i to by działało ale tak się nie pisze. Przerwanie masz co 8ms. Ponieważ bascom generuje dużo kodu to przerwanie musi być najkrótsze jak się da. Twoje nie jest.
2) Jakikolwiek wait w przerwaniu to porażka. Pamiętaj że wstrzymując 1 przerwanie, wstrzymujesz także inne. One oczywiście się wykonają ale później niż powinny. Może się okazać że dla programu głównego kompletnie zabraknie czasu.
3) A teraz opis co zepsułeś.
Miałeś zrobić tak:
- zgaś anodę starego wyświetlacza
- zrób case i wystaw nowa cyfrę na porta
- włącz anodę nowego wyświetlacza
Ty zrobiłeś tak (w swoim ostatnim programie):
- gasisz wszystkie anody. Dobrze
- robisz CASE. Dobrze.
I teraz syf:
- zapalasz nowa anodę podczas gdy na porta jest wystawiona jeszcze stara cyfra
- dopiero teraz wystawiasz nową cyfrę na porta
- między tymi punktami powyżej stara cyfra powodowała ci "duszek" na nowym wyświetlaczu, to tylko ułamek czasu ale to widać okiem
- świecisz nowa cyfra przez 200uS
- gasisz anodę nowego wyświetlacza. SYF!! Nie gaś go!
- wychodzisz z przerwania, przez prawie 8mS wyświetlacz jest zgaszony. Kompletna porażka, dlatego masz tak ciemno
Napisałeś to prawie dobrze. Weź swój stary program i dodaj prostą przeróbkę:
- RESET PORTC.x przenieś za LOOKUP
- wyrzuć WAITUS
- wyrzuć SET PORTC.x który jest zaraz za tym waitus
Popraw w ten sposób wszystkie 4 casy.
No i jak? Teraz jestem pewien że ładnie świeci i działa jak powinno.
Twój program powinien wyglądać tak. Zobacz że przerwanie jest teraz krótsze i prostsze. Zobacz też że zamiast wygaszać Anody, to wygaszam katody robiąc porta=255 bo tak tez można i łatwiej to napisać. Obliczenie czasu przeniosłem też do podprogramu żeby odśmiecić pętle główną.
Zaloguj się, aby zobaczyć kod