Cześć
Po dwóch latach przerwy wracam do programowania (w zasadzie można powiedzieć, że zaczynam od nowa), a zmotywował mnie fakt, iż na uczelni miałem zajęcia z programowania mikroprocesorów (80515 w assemblerze).
Postanowiłem, że odtworzę program pisany na zajęciach. Jego założenia:
- po uruchomieniu, na wyświetlaczu LED ma się pokazać data urodzenia,
- po 3 sekundach na wyświetlaczu mają się pojawić zera i ma uruchomić się odliczanie czasu od 0 do 9:59:9.
Zrealizowałem to przy pomocy dwóch zmiennych pomocniczych (delay3s, counter) w roli liczników, które inkrementowane są w przerwaniu (zależnie od stanu flagi start_counting). W pętli głównej sprawdzam wartość licznika delay3s (który odlicza 3 sekundową przerwę), jeśli odliczy odpowiednią wartość, to na wyświetlaczu LED pojawiają się zera. Zmieniam również stan flagi start_counting, która powoduje zatrzymanie inkrementowania zmiennej delay3s, a uruchamia inkrementowanie zmiennej counter. Drugi if w pętli głównej sprawdza stan zmiennej counter. Jeśli if się wykona (tj. counter będzie miał pożądaną wartość), to zwiększam zmienną set i przekazuje ją do zmiennej cyf4, co ma spowodować wyświetlanie się odpowiadającej cyfry na wyświetlaczu LED.
I tutaj przechodzimy do sedna problemu. Testowo, spróbowałem wpisać w drugim ifie na sztywno do zmiennej cyf4, wartość liczby 6 i okazało się, że po trzech sekundach ta 6 nie pokazuje się na wyświetlaczu, ale nadal jest zero. Dodałem wtedy w drugim ifie sterowanie diodą led, aby zobaczyć czy zmienna counter prawidłowo się zlicza. Okazało się, że dioda LED miga co sekundę (dla testów 1 setna sekundy trwa sekundę), ale na wyświetlaczu nadal jest zero.
Nie mam pojęcia dlaczego sterowanie diodą działa, a ustawienie wartości na wyświetlaczu LED już nie.
Przerwanie wykonuje się co 5ms.
Poniżej program główny:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W procedurze obsługi przerwania dodałem warunki(plik d_led.c z multipleksowania LED z BB):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zmienne w d_led.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A w pliku d_led.h dodałem:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.