cz2

cz2



Programowanie

Listing 7 Poprawa programu (...)

COMPORT = LEDPORT =


(l«COMl) ;

(1«LED_B | 1«ŁED_C) ;


raz na listing 6. Jest w nim ewidentny błąd. Spróbuj zauważyć go sam. Porównaj wykonywane działania z tabelką we wkładce, prezentującą kolejność obliczeń.

Pozornie prosty zapis:

COMPORT = ~l«COMl; jest w rzeczy samej wyrażeniem składającym się z dwóch działań, przesunięcia oraz negacji. Chcemy przesunąć jedynkę na pozycję odpowiadającą tranzystorowi pierwszego wyświetlacza, a następnie wynik zanegować. Jednak operator negacji ma przecież wyższy priorytet niż operator przesunięcia! Efekt ilustruje rysunek 21. Nie wdając się w dalsze szczegóły, na listingu 7 prezentuję sposób poradzenia sobie z problemem.

Przykład ten ilustruje, jak ważna jest różna kolejność wykonywania działań przez kompilator. Gdy teraz skompilujesz poprawiony program - wszystko będzie tak jak planowaliśmy.

Dobrym zwyczajem jest stosowanie się do reguły, która mówi, że jeżeli nie jesteś pewien, w jakiej kolejności wykonywane są dane operacje - stosuj w takich miejscach nawiasy. Umieszczenie dwóch nawiasów więcej nie zaszkodzi, a czasami przyczynia się nawet do wzrostu czytelności kodu -optycznie wydziela pewne logiczne fragmenty obliczeń.

Wyświetlanie - wyższy stopień

Podsumujmy to, co już mamy. Umiemy wywołać aktywację wybranego wyświetlacza. Gdy spojrzysz na utworzony program -myślę, że nie będziesz miał wątpliwości, jak wybrać inny wyświetlacz lub też w jaki sposób wyświetlić inny znak. Teraz chcielibyśmy mieć możliwość sterowania wszystkimi czterema wyświetlaczami jednocześnie. Oczywiście odbędzie się to na zasadzie ich szybkiego przełączania. Myślę, że na podstawie kursu BASCOM-a wiesz już, że tym razem najwygodniejsze będzie zastosowanie kilku zmiennych. Będziemy potrzebowali zmiennej, w której przechowamy informację na temat tego. który z wyświetlaczy jest aktualnie obsługiwany. Dodatkowo wykorzystamy tablicę, składającą się z czterech elementów, każdy zawierający obraz tego, co chcemy wyświetlić na odpowiednim wyświetlaczu. Jeśli zaprzyjaźniamy się już z tablicami - od razu wykorzystamy jeszcze jeden element tego typu w celu zapisania informacji, w jaki

sposób aktywować wybrany wyświetlacz.

Spróbujmy napisać wciąż, jeszcze prosty kod, który jednak umożliwi wyświetlenie na kolejnych wyświetlaczach różnych znaków.

W odpowiedniej ramce znajdziesz podstawowe informacje, jak najprościej poradzić sobie z aktualnie potrzebnymi nam zmiennymi. Listing 8 z kolei pokazuje proponowany kod. Wykropkowalem tylko definicje wyprowadzeń. które cały czas pozostają bez zmian.

Zauważ, że przed nazwami zmiennych dodałem oznaczenie g_. W ten sposób zaznaczam, że jest to zmienna globalna. Jest to dobry zwyczaj, który w przyszłości ułatwi Ci orientowanie się w kodzie.

Skompiluj program i wyślij go do procesora. Jeśli wszystko poszło dobrze, powinieneś zobaczyć na wyświetlaczu kolejne cyfry.

W kodzie inicjacja portów nie uległa zmianie. Teraz jednak zamiast wpisywać wygląd cyfry bezpośrednio do portu, wpisujemy go w przeznaczoną do

tego celu tablicę. Pamiętaj, że chociaż to wpisywanie wygląda na rozbudowane działanie, zostanie zamienione tylko na przesianie stałej wartości do odpowiedniej komórki RAM procesora. Tak więc jeszcze raz to powtórzę, nie ma sensu dokonywać ręcznych przeliczeń wyglądu znaków na odpowiednie liczby.

Następnie rozpoczyna się pętla nieskończona, gdzie włączane są kolejno odpowiednie wyświetlacze. Zauważ, że wybrany wyświetlacz jest aktywowany za pomocą danej zawartej w tabeli g_DaneCom. Na koniec zmienna g_AktWyswietlacz jest zwiększana, przy czym jeśli przekroczy wartość 3 - cykl rozpoczyna się od początku.

Oczywiście - wypracowane rozwiązanie nie jest jeszcze optymalne. Jeśli pisałeś już analogiczny program w BASCOM-ie lub orientujesz się w temacie, możesz, z miejsca wskazać dwie sprawy, które można poprawić:

1.    Obsługa wyświetlacza powinna odbywać się w przerwaniach!, tak aby nie angażować do tego celu całej dostępnej mocy procesora.

2.    Tablica g_DaneCom zajmuje miejsce w cennej pamięci RAM, jednocześnie w pamięci programu przechowywana jest kopia jej zawartości w celu wstępnego

Listing U Pierwsze starowanie wyświetlaczem z wykorzystaniem zmiennych


•jintS_t g_A.kLWyswietlacz =    ;

uint8_t g_DaneWyswiet.lacza[ l] ; uint8_t g_OaneCom(!] =

{~ ( 1 «CO.M 1 ) , - < «COM2) , ~ ( . «CGM3) , - (l«COM4) } ;

int ma1n(void)

{

ijiimiiiiinmijiiiiiiiiii U inicjacja LEDDDR =

COMDDR = l«COKl | ;«COM2 | l«COM3 | l«COM4;

/1 iTuTn rui)uTn mitn/ii


g DaneWyswietlacza[0] g DaneWyswietlacza[1]

:y próbnych wari = *■ (i «LED_B | = -( «LED_A |

I«LED C) ; «LED_B |

1«LED_D

* «LED_E | i «LED_G) ;

g_DaneWyswietlacza[1]

= ~(1«LED_A |

1«LED_3 |

i«LED_C

«LED_D | :«LED_G) ;

g CaneWyswietlacza [

= -( «ŁED_B |

" «LED_C |

!«LED_F

L«LED_G) ;


// Wygaszenie wyświetlaćzy

COMPORT = «COMl |    !«C0M2 | l«COM3 | i«C0M4 ;

// Wysłar.ie odpowiedniej danej

LEDPORT = g_DaneWyswietlacza[g_AktWyswietlacz];

/Z Włączeń-.® odpowiedniego wyświetlacza COMPORT = g_Dar.eCom[g_AktWyswietlacz];

/Z Zwiększenie stanu zmiennej wskazującej na obsługi-

+-t-g_AżtWyswietIacz; i£(g_AktWyswietlacz >

g AktWyswietlacz =    ;


return 0;

)


Czerwiec 2005 Elektronika dla Wszystkich


Wyszukiwarka

Podobne podstrony:
cz2 Programowanie p/uimjjjjywyjjiy pusomM®w yj-zfAu © Co uważniejsi Czytelnicy zauważyli zapewne, ż
cz2 Programowanie pewien dobry zwyczaj. Zanim jeszcze zaczniemy zastanawiać się nad tym, jak w ogól
cz2 Programowanie Przystąpmy teraz do przypisania własnych oznaczeń dla wyprowadzeń naszego
cz2 Programowanie jakichkolwiek powodów okazuje się Powinien wyjaśnić znacznie lepiej, co się
cz2 Programowanie Programowanie Tabela 1 Typy proste zmiennych dostępne w
cz3 Programowanie Programowanie COMPORT &= g_DaneCom[g_AktWysvrietlacz] ; COMPORT
15088 Image157 (2) ■ Programowanie Listing 167 Wczy tywanie obrazka z pamięci FLASH vo1d led Loari(p
(p Programy Miejsca System {£) q śro 6 lis, 10:09Kolokwium Plik Edycja Widok Historia Zakładki Narzę
(p Programy Miejsca System {£) q śro 6 lis, 10:10Kolokwium Plik Edycja Widok Historia Zakładki Narzę
(O Programy Miejsca System ■£> śro 27 lis, 10:20 Plik Edycja Widok Historia Zakładki Narzędzia

więcej podobnych podstron