cz2

cz2



Programowanie

Programowanie

Tabela 1 Typy proste zmiennych dostępne w C

Narwa

Typ

Zakres

Rozmiar

(ba|>y>

-128.127

nmignalcłiar

U, ■

zzz

0.255.

strat lub luf bil'

2/ą*

całkowity

-32708. .32767

aiww

IIMMRU.il IlUie il»

ZZL

;

mir Iimij umtsiudlni

całkowity

0..2-64.I


Listing 9 Ulepszenie programu z listingu 8.

// Wygaszenie wyświetlaczy

COMPORT [[§ l«COMl | 1«C0M2 | 1«C0M3 | l«COM4; // Wystawienie odpowiedniej danej LEDPORT = g_DaneWyswietlacza[g_AktWyswietlacz];

// Włączenie odpowiedniego wyświetlacza COMPORT m g_DaneCom[g_AktWyswietlacz];


ustawienia. Jest to oczywiste marnotrawstwo. Powinna istnieć przecież możliwość odczytywania tego typu danych bezpośrednio z pamięci programu.

Oba zarzuty są jak najbardziej słuszne. Od umieszczenia odpowiedniej tablicy w pamięci danych oraz wykorzystania przerwań dzieli nas już tylko krok. Teraz jednak chcę zwrócić Twoją uwagę na inny drobiazg: Zastanówmy się, co się dzieje z portem, który wykorzystujemy do sterowania anodami wyświetlaczy. Zawsze zapisujemy tam na sztywno wybraną przez nas wartość. Chwilowo możemy nie zauważać problemu, jaki nam to sprawi, jednak gdy zechcemy wykorzystać do czegoś pozostałe wyprowadzenia tego portu, może okazać się to niemożliwe, a już na pewno niewygodne. Musimy więc poprawić kod tak, żeby zmieniane były tylko wybrane wyprowadzenia, resztę pozostawiając bez zmian.

Odpowiednią poprawkę pokazuje listing 9. W jego zrozumieniu może pomóc ramka „Co z bitami?”.

W tym przypadku jednak kompilator nie będzie generował instrukcji ustawiających poszczególne bity. Zwartość portu będzie wczytana do rejestru, wykonana zostanie odpowiednia funkcja logiczna, a następnie dana zostanie przesłana do rejestru wyjściowego. Daje to 3 instrukcje. Gdybyśmy chcieli zrobić to samo za pomocą ustawiania / zerowania poszczególnych bitów, konieczne byłoby zastosowanie 4 instrukcji. Dodatkowo pojawiałyby się niewielkie opóźnienia między przełączaniem poszczególnych bitów. Dla nas w tej chwili nie miałoby to znaczenia - ale kompilator o tym nie wie i musi założyć, że jeśli napisaliśmy funkcję tak jak na listingu 9, to chcemy, aby wszystkie wyprowadzenia zmieniły swój stan w tym samym momencie. Nieczęsto, ale czasami może okazać się to bardzo ważne.

Podsumowanie

Dziś udało nam się napisać kilka programów. Starałem się pokazać Ci, jak elegancko rozpocząć nowy plik /. kodem źródłowym. Zobaczyłeś, jak radzić sobie z przypisywaniem dogodnych nazw do wyprowadzeń. Poznałeś wstępnie ideę przeprowadzania obliczeń w C. Dowiedziałeś się, trochę o zmiennych, bez których nie obejdzie się rzeczywisty program. Dowiedziałeś się, jak zerować i ustawiać poszczególne bity. Przy okazji udało nam się stworzyć program, który' naprawdę obsługuje wyświetlacz multipleksowaiiy. Fakt, że ma on jeszcze kilka niedociągnięć i że brakuje mu kilku

ABC... C Co z bitami?

W C brak jest instrukcji Operujących bezpośrednio na bitach*. Jednak możemy operować na nich, stosując prostą sztuczkę. Była o tym mowa wcześniej. Załóżmy, że chcemy operować na 6 wyprowadzeniu portu D:

Aby je ustawić:

PORTD 1= 1«6;

Wyzerować:

PORTD &= ~(1«6);

Okazuje się, że GCC doskonałe wie o co chodzi. Mimo tego, że wydaje się, że na przykład przedstawione ustawienie wyprowadzenia portu wywoła cały ciąg operacji, w asemblerze jest generowany tylko następujący kod:

sbi PORTD, 6

Czyli najprościej, jak się dało!

’ Nie jest lo do koóca prawdą, istnieje specjalny typ zmiennej - lak zwane pole bitowe. Wiele prostych kompilatorów jednak nie obsługuje takiej opcji. Standard także niejasno tłumaczy ich działanie, co może powodować trudności z przenośnością kodu;


kroczków do praktyczności... postaramy się rozwiązać już za miesiąc.

Jeśli chcesz spróbować swoich aktualnych sil, zobacz, czy uda Ci się już dziś stworzyć tablicę zawierającą wszystkie znaki kodu szesnastkowego (0-F). Czy uda Ci się za jej pomocą wpisywać wartości do tablicy wyświetlacza?


Radosław Koppel


Zapraszamy do sklepów na Wolumenie!

01-912 Warszawa, ul. Wolumen 53

teł.: 835 55 22


tel.: 669 99 19


pawilon 44 RCS ELEKTRONIK rezystory, kondensatory, elementy SMD

pawilon 50 ZBYROMEX części RTV, głośniki, transformatory, akcesoria GSWI

pawilon

84 F.H.STEMPS


potencjometry, silniki, paski napędowe


teł.: 0501 206 801


Elektronika dla Wszystkich Czerwiec 2005 47


Wyszukiwarka

Podobne podstrony:
Tabela 2.2.1: Typy połączeń z bankami w programie Quicken firmy In
VBA str h Opcje parametru Przyciski funkcji MsgBox Rozdział 3 Zmienne programów Tabela 3.2.
Wykład XJęzyki programowania Object Pascal: Proste typy danych Podstawy informatyki Semestr I
PROGRAM CWICZEN PROJEKTOWYCH 1.    Proste przypadki układu sił zbieżnych (określanie
Podstawy programowania - JAVAĆwiczenie 2 1. Program rozwiązujący równanie kwadratowe (zmienne
Dane jest zadanie programowania liniowego przy nieujemnych zmiennych decyzyjnych: Xi - X2 -> max
Specyfikowanie programów imperatywnych S, S : Stan — wartościowanie zmiennych. II : program — relac
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 Listing 7 Poprawa programu (...) COMPORT = LEDPORT = (l«COMl) ; (1«LED_B
cz7 Programowanie Programowanie tiriśigned; jnt typ zmiennej wypisywana jest, dziesiętne, liczba że
1) Napis/, program uMiczujący współczynniki a i b proste! y=ax+H pr/euluKl/ącej przez dwa podanepunk
79181 Image95 (3) ■ Programowanie Tabela 11 Znaczenie sekcji .initO-9 Sekcja Znaczenia .initO Jeś

więcej podobnych podstron