Witam. $crystal = 12000000 $regfile = "89C2051.DAT" Led1 Alias P1.1 Led2 Alias P1.2 Przycisk1 Alias P1.4 Przycisk2 Alias P1.5 Przycisk3 Alias P1.6 Reset Led1 Reset Led2 Reset Przycisk1 Reset Przycisk2 Reset Przycisk3 Petlaglowna: Do If Przycisk1 = 1 Then Gosub Tryb1 Set Led1 Set Led2 Wait 1 Reset Led1 Reset Led2 Wait 1 Loop Tryb1: Do If Przycisk1 = 0 Then Gosub Tryb2 Set Led1 Wait 1 Reset Led1 Wait 1 Set Led2 Wait 1 Reset Led2 Wait 1 Loop Tryb2: Do If Przycisk1 = 1 Then Gosub Petlaglowna Set Led1 Set Led2 Loop Jak widać jest to źle napisane. Nie znam w ogóle żadnego języka programowania. Mój program mógłby działać, ale nie tak jak powinien. Wiem, że muszę to zrobić wykorzystując timer układu AT89C2051 i przerwania. Nie wiem jednak jak to zrobić. Potrzebuję prostego przykładu migającej diody led. Gdyby była też możliwość to proszę o pokazanie w jaki sposób sterować szybkością migania diody. Dziękuję za pomoc i pozdrawiam.
|
|||
Re: Miganie
Ten program prawdopodobnie spowoduje zapchanie stosu i zwieszenie się mikrokontrolera, bo skaczesz do procedur a nigdy z nich nie wracach, przy kazdym skoku odkłądają się na stos rejestry ale się nie zdejmują bo nie ma return.
Na początku nie musisz używać timerów.... lepiej żebyś zrozumiał jak napiać program a potem sie timer dołoży.
Aha.... diody powinny być podłaczone do +5V na stałe a zwierane do masy przez procesor, przyciski mają być podłączone od procesora do masy, wykrywany jest stan 0
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Czy mógłbyś opisać działanie
Czy mógłbyś opisać działanie tego programu? Czytam polski help do Bascoma i nie mogę zrozumieć. Chciałem zrobić regulację szybkości migania diody, ale nie wychodzi mi to.
Re: Dioda
A sprawdzałeś czy regulacja działa za pomocą przycisku 1. Każde naciśnięcie powinno zmniejszać częstotliwość.
Program cały czas kręci się w Do loop i sprawdza przycisk czy jest zwarty do masy, jeśli jest to zwiększa stan zmiennej, tak w zasadzie to trzeba do tego jeszcze else dopisać:
wstaw to wyżej zamiast procedurki co masz w poprzednim poście. Jak pięc razy pętla przejdzie i dalej przycisk jest wciśnięty to nastąpi reakcja na klawisz. zostanie zwiększona zmienna czas.
Poza sprawdzaniem przycisku w tym samym do loop działa licznik, który jest zwiekszany przy każdym przejściu pętli. Jeśli jego wartość jest >= czas to następuje jego zerowanie i zmienianie stanu diody na przeciwny. Od zmiennje czas zalezy ile przejść pętli policzy licznik zanim zmieni stan diody czyli częstotliwość migania. na końcu pętli masz opóźnieni 10ms czyli w uproszczeniu każde przejścię pętli będzie trwało coś około 10ms.
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Dopisałem else i teraz po
Dopisałem else i teraz po naciśnięciu przycisku nie ma żadnej zmiany. Robię wszystko w symulatorze Bascoma 8051.
Na samym początku napisałeś "dim przycisk_licz as byte", a później używałeś "przycisk_licz1". Domyślam się, że to trzeba było zmienić (tak zrobiłem) i pierwszy kod, który podałeś działa. Po naciśnięciu przycisku dioda mruga wolniej, ale jak dołożyć do tego żeby dioda mrugała szybciej po naciśnięciu drugiego przycisku?
Re: Przycisk
Dodać trzeba fragment od drugiego przycisku:
Obsługa obu przycisków powinna wyglądać dokładnie tak. Z tym else musi działać.... symulatora nigdy nie używałem więc nie wiem jak do końca on działa
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.