mikrokontrolery.net

 

   

Kurs programowania w języku C - część 1

Programy są pisane dla kompilatora Cosmic Software oraz płytki ewaluacyjnej EVBST7-01 firmy Propox. Programy są funkcjonalnie zgodne z programami z wersji asemblerowej kursu.

Program pierwszy :

Po stworzeniu nowego projektu zgodnie z instrukcjami zawartymi w dziale Narzędzia wpisujemy w edytorze następujący kod :

// Dolaczenie wymaganego pliku naglowkowego
#include <io7flit0.h>

// Poczatek programu glownego.
void main(void)
{
PADDR = 0xFF; // Ustawienie portu A jako wyjscie
PAOR = 0x0; // Ustawienie portu A jako "z otwartym drenem"
PADR = 0x55; // Wlaczenie odpowiedniej kombinacji diod LED
while(1); // petla nieskonczona
}

Program w języku C jest o wiele prostszy i czytelniejszy niż program napisany w asemblerze. Jest to oczywista zaleta języka C (i innych języków poziomu wyższego niż asembler). Podobnie jedan musimy dołączyć plik z definicjami rejestrów procesora. Dokonujemy tego za pomocą znajomej dyrektywy #include. Następnie musimy zdefiniować główną funkcję main(), ponieważ każdy program w języku C musi zawierać co najmniej jedną funkcję - właśnie funkcję main(). Ciało tej funkcji składa się zaledwie z czterech wierszy kodu. Dwie z nich służą do skonfigurowania portu A. Konfiguracja odbywa się na tej samej zasadzie jak w programie asemblerowym. Do rejestru wyboru kierunku PADDR wpisujemy same jedynki, czyli liczbę 255 dziesiętnie a FF szesnastkowo (w zapisie akceptowalnym przez kompilator - 0xFF). Następnie do rejetru PADR zapisujemy liczbę 0 (0x0) co ustawi port w tryb "open-drain". Po skonfigurowaniu portu przychodzi kolej na wystawienie odpowiedniej kombinacji zer i jedynek, co zaowocuje zaświeceniem odpowiedniej kombinacji diod LED. Na koniec nalezy program "zatrzymać w miejscu", czyli wprowadzić go w pustą pętlę nieskończoną. Najprościej tego dokonac za pomocą instrukcji while z warunkiem 1, czyli stałą wartością prawdy logicznej (instrukcja while jest wykonywana tak długo, dopóki warunek jest prawdziwy, czyli w naszym przypadku bez końca).

Program drugi :

// Dolaczenie wymaganego pliku naglowkowego
#include <io7flit0.h>

// Poczatek programu glownego.
void main(void)
{
PADDR = 0xFF; // skonfogurowanie portu A jako wyjscie
PAOR = 0x0; // skonfogurowanie portu A jako "z otwartym drenem"
PBDDR = 0x0; // skonfigurowanie portu B jako wejscie
PBOR = 0xFF;

while(1) // petla nieskonczona
PADR = PBDR; // przepisz stan linii portu B do portu A
}

Drugi program składa się już z sześciu wierszy kodu. Tym razem konfiguracja portów zajmuje już cztery wiersze, ponieważ pprócz portu A musumy skonfigurowac port B jako wejściowy. Dokonujemy tego przez wpisanie do rejestru PBDDR samych zer. Dodatkowo musimy włączyć wewnętrzen rezystory podciągające, aby mikrokontroler mógł odczytać stan przycisków. Aby włączyć te rezystory nalezy do rejestru PBOR wpisać jedynki. Następnie znpwu pojawiasięnieskończona pętla while, ale nie jest już ona pusta. Ponieważ chcemy, aby mikrokontroler nieustannie przepisywał stan linii portu B do portu A to w ciele tej pętli nalezy umieścić instrukcję przepisującą stan linii portu B do rejestru PADR. Decydującą sprawą jest brak średnika po instrukcji while. Oznacza to, że instrukcja następujące po instrukcji while ma być wykonywana tak długo, jak warunek pętli jest prawdziwy (znowu w naszym przypadku bez końca). Gdybyśmy chcieli w ramach pętli wykonać nie jedną, lecz kilka instrukcji, to należy blok tych instrukcji ująć w nawiasy klamrowe, jak pokazano poniżej :

while(warunek)
{
instrukcja;
instrukcja;
instrukcja;
}

Ostatnio na forum:

 

 

 

 

 
 
 
 
 

(c) 2004-2008 Radosław Kwiecień
Polityka prywatności