Wbudowany samouczek programowania C z językiem Keil

Wypróbuj Nasz Instrument Do Eliminowania Problemów





Embedded C to najpopularniejszy język programowania w dziedzinie oprogramowania do tworzenia gadżetów elektronicznych. Każdy procesor jest powiązany z oprogramowaniem wbudowanym. Wbudowane programowanie w C. odgrywa główną rolę w wykonywaniu określonych funkcji przez procesor. W naszym codziennym życiu często korzystamy z wielu urządzeń elektronicznych, takich jak pralki, telefony komórkowe, aparaty cyfrowe itp. Będą działać w oparciu o mikrokontrolery programowane przez wbudowane C.

Programowanie systemów wbudowanych

Programowanie systemów wbudowanych



Napisany kod C jest bardziej niezawodny, przenośny i skalowalny, a w rzeczywistości znacznie łatwiejszy do zrozumienia. Pierwszym i najważniejszym narzędziem jest oprogramowanie wbudowane, które decyduje o działaniu systemu wbudowanego. Do programowania mikrokontrolerów najczęściej używany jest język programowania Embedded C.


Samouczek programowania wbudowanego C (8051)

Aby napisać program, projektanci oprogramowania wbudowanego muszą mieć wystarczającą wiedzę na temat sprzętu poszczególnych procesorów lub kontrolerów, ponieważ programowanie w języku embedded C jest techniką programowania w pełni powiązaną ze sprzętem.



Samouczek programowania

Samouczek programowania

Wcześniej wiele aplikacji wbudowanych zostało opracowanych przy użyciu programowania na poziomie zestawu. Jednak wraz z pojawieniem się różnych języków wysokiego poziomu, takich jak C, COBOL i Pascal, nie zapewniły przenośności, aby rozwiązać ten problem. Jednak to język C uzyskał szeroką akceptację tworzenie aplikacji dla systemów wbudowanych i nadal to robi.

Wbudowany system

System wbudowany definiuje się jako połączenie wbudowanego oprogramowania C i części sprzętowej, które składają się głównie z mikrokontrolerów i jest przeznaczony do wykonywania określonego zadania. Tego typu systemy wbudowane są używane w naszym codziennym życiu, takie jak pralki i magnetowidy, lodówki i tak dalej. System wbudowany został po raz pierwszy wprowadzony przez mikrokontrolery 8051.

Wbudowany system

Wbudowany system

Wprowadzenie do mikrokontrolera 8051

Mikrokontroler 8051 to podstawowy mikrokontroler, po raz pierwszy wprowadzony przez „Intel Corporation” od 1970 r. Jest rozwijany przez architekturę procesora 8086. 8051 to rodzina mikrokontrolerów, opracowanych przez różnych producentów, takich jak Philips, Atmel, dalls i tak dalej. Mikrokontrolery 8051 był używany w wielu produktach wbudowanych, od zabawek małych dzieci po duże systemy samochodowe.


8051 Mikrokontroler

8051 Mikrokontroler

Mikrokontroler 8051 jest 8-bitowy Architektura „CISC” . Składa się z pamięci, komunikacji szeregowej, przerwań, portów wejścia / wyjścia i timera / liczników, wbudowanych w jeden zintegrowany układ, który jest zaprogramowany do sterowania urządzeniami peryferyjnymi, z którymi jest połączony. Program jest przechowywany w pamięci RAM mikrokontrolera, ale przed napisaniem programu musimy wiedzieć o pamięci RAM organizacja mikrokontrolera.

Programowanie systemów wbudowanych: Deklaracja podstawowa

Każda funkcja to zbiór instrukcji, które wykonują określone zadanie, a zbiór jednej lub więcej funkcji nazywany jest językiem programowania. Każdy język składa się z kilku podstawowych elementów i reguł gramatycznych. Programowanie w języku C zostało zaprojektowane do pracy z zestawem znaków, zmiennymi, typami danych, stałymi, słowami kluczowymi, wyrażeniami i tak dalej, aby napisać program w C. Wszystko to rozważane jako plik nagłówkowy lub plik biblioteki i jest reprezentowane jako

#zawierać

Rozwój wbudowanego programowania C.

Rozwój wbudowanego programowania C.

Rozszerzenie języka C nazywane jest językiem programowania Embedded C. W porównaniu z powyższym, programowanie osadzone w języku C ma kilka dodatkowych funkcji, takich jak typy danych i słowa kluczowe, a plik nagłówkowy lub plik biblioteki jest reprezentowany jako

#zawierać

Dodatkowe słowa kluczowe osadzone C.

  • sbit
  • kawałek
  • SFR
  • lotny
  • makra definiują

„Sbit” służy do zadeklarowania pojedynczego PIN mikrokontrolera. Np. Dioda LED podłączona jest do pinu P0.1, nie zaleca się wysyłania wartości bezpośrednio na pin portu, najpierw musimy zadeklarować pin z inną zmienną, a potem możemy użyć w dowolnym miejscu programu.

Składnia: sbit a = P0 ^ 1 // deklaruje odpowiedni pin za pomocą zmiennej //
a = 0x01 // wyślij wartość na pin portu //

„Bit” służy do sprawdzania stanu zmiennej.

Składnia: bit c // deklaruje zmienną bitową //
c = a // wartość jest przypisana do zmiennej c //
if (c == 1) // sprawdź warunek prawda czy fałsz //

{

……
}

Słowo kluczowe „SFR” służy do uzyskiwania dostępu do rejestrów SFR pod inną nazwą. Rejestr SFR zdefiniowany jako rejestr funkcji specjalnych , zawiera wszystkie rejestry powiązane peryferyjnie przez wskazanie adresu. Rejestr SFR jest zadeklarowany przez słowo kluczowe SFR. Słowo kluczowe SFR musi być zapisane wielkimi literami.

Składnia: SFR port = 0x00 // 0x00 to adres portu0, który jest zadeklarowany przez zmienną portu //
Port = 0x01 // następnie wyślij wartość do portu0 //
opóźnienie()
port = 0x00
opóźnienie()

Słowo kluczowe „volatile” jest najważniejsze w rozwoju systemów wbudowanych. Zmienna, która deklaruje wartość volatile ze słowem kluczowym, nie może zostać nieoczekiwanie zmieniona. Może być używany w rejestrach peryferyjnych mapowanych w pamięci, zmiennych globalnych modyfikowanych przez ISR. Bez użycia słowa kluczowego volatile do przesyłania i odbierania danych wystąpi błąd kodu lub błąd optymalizacji.

Składnia: volatile int k

Makro to nazwa używana do deklarowania bloku instrukcji jako dyrektywy preprocesora. Za każdym razem, gdy używana jest nazwa, jest ona zastępowana zawartością makra. Makra reprezentują #define. Całe piny portu są zdefiniowane przez makra.

Składnia: #define dat Po // cały port jest zadeklarowany przez zmienną //
dat = 0x01 // przesyłanie danych do portu0 //

Podstawowe programy wbudowanego języka C.

Programowanie mikrokontrolera będzie się różnić dla każdego rodzaj systemu operacyjnego . Mimo że istnieje wiele systemów operacyjnych, takich jak Linux, Windows, RTOS i tak dalej. Jednak RTOS ma kilka zalet przy tworzeniu systemów wbudowanych. W tym artykule omówiono podstawowe programowanie w języku embedded C do rozwijania programowania w języku embedded C przy użyciu mikrokontrolera 8051.

Etapy programowania wbudowanego języka C.

Etapy programowania wbudowanego języka C.

  • Dioda miga przy użyciu mikrokontrolera 8051
  • Wyświetlanie liczby na 7-segmentowym wyświetlaczu za pomocą mikrokontrolera 8051
  • Obliczenia timera / licznika i program za pomocą mikrokontrolera 8051
  • Obliczenia i programowanie komunikacji szeregowej za pomocą mikrokontrolera 8051
  • Programy przerywające przy użyciu mikrokontrolera 8051
  • Programowanie z klawiatury przy użyciu mikrokontrolera 8051
  • Programowanie LCD z mikrokontrolerem 8051

Miga dioda LED za pomocą mikrokontrolera 8051

Dioda LED to element półprzewodnikowy, który jest używany w wielu zastosowaniach, głównie do celów wskazań. Znajduje szeroki wachlarz zastosowań jako wskaźników podczas testu do sprawdzania ważności wyników na różnych etapach. Są bardzo tanie i łatwo dostępne w różnych kształtach, kolorach i rozmiarach. Do projektowania wykorzystywane są diody LED tablice informacyjne i sygnalizacji świetlnej ruchu itp. Tutaj diody LED są połączone z portem PORT0 mikrokontrolerów 8051.

Miga dioda LED za pomocą mikrokontrolera 8051

Miga dioda LED za pomocą mikrokontrolera 8051

1. 01010101
10101010

#include // plik nagłówkowy //
void main () // punkt statystyki wykonania programu //
{
unsigned int i // typ danych //
while (1) // dla ciągłej pętli //
{
P0 = 0x55 // wyślij wartość szesnastkową do portu0 //
dla (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // wyślij wartość szesnastkową do portu0 //
dla (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10 000 000

#zawierać

void main ()

{

unsignedint i

unsigned char j, b

podczas gdy (1)

{

P0 = 0x01

b = P0

dla (j-0j<3000j++)

dla (j = 0j<8j++)

{

b = b<<1

P0 = b

dla (j-0j<3000j++)

}

}

}

3. 00001111

11110000

#zawierać

void main ()

{

unsignedint i

podczas gdy (1)

{

P0 = 0x0F

dla (j-0j<3000j++)

P0 = 0xF0

dla (j-0j<3000j++)

}

}

4. 00000001

00000011

00000111

.

.

11111111

#zawierać

void main ()

{

unsignedint i

unsigned char j, b

podczas gdy (1)

{

P0 = 0x01

b = P0

dla (j-0j<3000j++)

dla (j = 0j<8j++)

0x01

P0 = b

dla (j-0j<3000j++)

}

}

Wyświetlanie liczb na 7-segmentowym wyświetlaczu przy użyciu mikrokontrolera 8051

Plik Wyświetlacze 7-segmentowe to podstawowe wyświetlacze elektroniczne, które są używane w wielu systemach do wyświetlania informacji numerycznych. Składa się z ośmiu diod LED, które są połączone sekwencyjnie tak, aby wyświetlały cyfry od 0 do 9, gdy włączone są odpowiednie kombinacje diod. Mogą wyświetlać tylko jedną cyfrę naraz.

Wyświetlanie liczb na 7-segmentowym wyświetlaczu przy użyciu mikrokontrolera 8051

Wyświetlanie liczb na 7-segmentowym wyświetlaczu przy użyciu mikrokontrolera 8051

1. WAP, aby wyświetlić liczby od „0 do F” na czterech 7-segmentowych wyświetlaczach?

#zawierać
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
void main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
niepodpisany, j
a = b = c = d = 1
podczas gdy (1)
{
dla (i = 0i<10i++)
{
P2 = n [i]
dla (j = 0j<60000j++)
}
}
}

2. WAP do wyświetlania liczb od „00 do 10” na 7-segmentowych wyświetlaczach?

#zawierać
sbit a = P3 ^ 0
sbit b = P3 ^ 1
void display1 ()
void display2 ()
void delay ()
void main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
niepodpisany, j
ds1 = ds2 = 0
podczas gdy (1)
{
dla (i = 0, i<20i++)
display1 ()
display2 ()
}
}
void display1 ()
{
a = 1
b = 0
P2 = s [ds1]
opóźnienie()
a = 1
b = 0
P2 = s [ds1]
opóźnienie()
}
void display2 ()
{
ds1 ++
if (ds1> = 10)
{
ds1 = 0
ds2 ++
if (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
void delay ()
{
unsignedint k
dla (k = 0k<30000k++)
}

Obliczenia i programowanie timera / licznika przy użyciu mikrokontrolera 8051

Opóźnienie jest jednym z ważnych czynników w tworzeniu oprogramowania użytkowego. Jednak normalne opóźnienie nie da cennego rezultatu do przezwyciężenia tego problemu przy wdrażaniu opóźnienia timera. Plik timery i liczniki to sprzętowe elementy mikrokontrolera, które w wielu aplikacjach są wykorzystywane do dostarczania cennego opóźnienia czasowego z zliczaniem impulsów. Oba zadania realizowane są techniką programową.

Opóźnienie timera

WAP do wygenerowania opóźnienia czasowego 500us przy użyciu T1M2 (timer1 i mode2)?

#zawierać

void main ()
{
unsigned char i
TMOD = 0x20 // ustaw tryb timera //
dla (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // ustaw opóźnienie czasowe //
TH1 = 0x00
TR1 = 1 // wyłącznik czasowy //
While (TF1 == 0) // sprawdź bit flagi //
TF1 = 0
}
TR1 = 0 // wyłącznik czasowy //
}

Normalne opóźnienie pętli

void delay ()

{
unsignedint k
dla (k = 0k<30000k++)
}

Obliczenia i programowanie komunikacji szeregowej przy użyciu mikrokontrolera 8051

Komunikacja szeregowa jest powszechnie używana do przesyłania i odbierania sygnału. Mikrokontroler 8051 ma skład Komunikacja szeregowa UART sygnały przesyłane i odbierane przez piny Rx i Tx. UART pobiera bajty danych i wysyła poszczególne bity w sposób sekwencyjny. Rejestry są sposobem na gromadzenie i przechowywanie danych w pamięci. UART jest protokołem półdupleksowym. Half-duplex oznacza przesyłanie i odbieranie danych, ale nie w tym samym czasie.

Obliczenia i programowanie komunikacji szeregowej przy użyciu mikrokontrolera 8051

Obliczenia i programowanie komunikacji szeregowej przy użyciu mikrokontrolera 8051

1. WAP do transmisji znaku „S” do okna szeregowego użyć 9600 jako szybkości transmisji?

28800 to maksymalna szybkość transmisji mikrokontrolera 8051

28800/9600 = 3

Ta prędkość transmisji „3” jest zapisana w licznikach czasu

#zawierać

void main ()

{
SCON = 0x50 // uruchom komunikację szeregową //
TNOD = 0x20 // wybrano tryb timera //
TH1 = 3 // załaduj prędkość transmisji //
TR1 = 1 // Timer ON //
SBUF = „S” // przechowuje znak w rejestrze //
while (TI == 0) // sprawdź rejestr przerwań //
TI = 0
TR1 = 0 // WYŁĄCZ timer //
while (1) // ciągła pętla //
}

2. WAP do odbioru danych z hiperterminala i wysyłania tych danych do PORT 0 mikrokontrolera z prędkością 9600 bodów?

28800 to maksymalna szybkość transmisji mikrokontrolera 8051

28800/9600 = 3

Ta prędkość transmisji „3” jest zapisana w licznikach czasu

#zawierać

void main ()
{
SCON = 0x50 // uruchom komunikację szeregową //
TMOD = 0x20 // wybrano tryb timera //
TH1 = 3 // załaduj prędkość transmisji //
TR1 = 1 // Timer ON //
PORT0 = SBUF // wyślij dane z SBUF do portu0 //
while (RI == 0) // sprawdź rejestr przerwań //
RI = 0
TR1 = 0 // WYŁĄCZ timer //
while (1) // zatrzymaj program po odebraniu znaku //
}

Przerwanie programów przy użyciu mikrokontrolera 8051

Przerwanie jest sygnałem wymuszającym zatrzymanie bieżącego programu i natychmiastowe wykonanie innego programu. Mikrokontroler 8051 zapewnia 6 przerwań, które są wewnętrzne i zewnętrzne źródła przerwań . Gdy wystąpi przerwanie, mikrokontroler wstrzymuje bieżące zadanie i zajmie się przerwaniem wykonując ISR, a następnie mikrokontroler wróci do ostatniego zadania.

WAP, aby wykonać operację przesunięcia w lewo, gdy wystąpią przerwania timera 0, a następnie wykonać operację przerwania dla P0 w funkcji głównej?

#zawierać

bez znaku b

void timer0 () przerwanie 2 // wybrany timer0 przerwanie //
{
b = 0x10
P1 = b<<2
}
void main ()
{
unsigned char a, i
IE = 0x82 // włącz przerwanie timer0 //
TMOD = 0x01
TLo = 0xFC // licznik przerwania //
TH1 = 0xFB
TR0 = 1
a = 0x00
podczas gdy (1)
{
dla (i = 0i<255i++)
{
a ++
Po = a
}
}
}

Programowanie z klawiatury przy użyciu mikrokontrolera 8051

Klawiatura matrycowa to analogowe urządzenie przełączające, które jest używane w wielu wbudowanych aplikacjach, aby umożliwić użytkownikowi wykonywanie niezbędnych zadań. ZA klawiatura matrycowa składa się z rozmieszczenia przełączników w formacie macierzowym w wierszach i kolumnach. Rzędy i kolumny są połączone z mikrokontrolerem w taki sposób, że rząd przełączników jest podłączony do jednego pinu, a przełączniki w każdej kolumnie są połączone z innym pinem, a następnie wykonują operacje.

Programowanie z klawiatury przy użyciu mikrokontrolera 8051

Programowanie z klawiatury przy użyciu mikrokontrolera 8051

1. WAP, aby przełączyć diodę LED, naciskając przełącznik

#zawierać
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
void delay ()
void main ()
{
podczas gdy (1)
{
a = 0
b = 1
c = 1
d = 1
opóźnienie()
a = 1
b = 0
c = 1
d = 1
void delay ()
{
unsigned char i
TMOD = 0x20 // ustaw tryb timera //
dla (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // ustaw opóźnienie czasowe //
TH1 = 0x00
TR1 = 1 // wyłącznik czasowy //
While (TF1 == 0) // sprawdź bit flagi //
TF1 = 0
}
TR1 = 0 // wyłącznik czasowy //
}

2. WAP włączyć diodę LED naciskając klawisz „1” na klawiaturze?

#zawierać

sbit r1 = P2 ^ 0
sbit c1 = P3 ^ 0
sbit LED = P0 ^ 1

void main ()
{

r1 = 0
jeśli (c1 == 0)
{

LED = 0xff
}
}

3. WAP, aby wyświetlić liczbę 0, 1, 2, 3, 4, 5 na siedmiu segmentach, naciskając odpowiedni klawisz na klawiaturze?

#zawierać

sbit r1 = P2 ^ 0

sbit c1 = P3 ^ 0

sbit r2 = P2 ^ 0

sbit c2 = P3 ^ 0

sbit a = P0 ^ 1

void main ()

{

r1 = 0 a = 1

jeśli (c1 == 0)

{

a = 0xFC

}

Jeśli (c2 == 0)

{

a = 0x60

}

jeśli (c3 == 0)

{

a = 0xDA

}

Jeśli (c4 == 0)

{

a = 0xF2

}

}

Programowanie LCD z mikrokontrolerem 8051

Plik wyświetlacz LCD to urządzenie elektroniczne, które jest często używane w wielu aplikacjach do wyświetlania informacji w formacie tekstowym lub graficznym. Wyświetlacz LCD to wyświetlacz, który z łatwością może wyświetlać znaki na ekranie. Wyświetlacz LCD składa się z 8 linii danych i 3 linii kontrolnych, które służą do połączenia z mikrokontrolerem.

Programowanie LCD z mikrokontrolerem 8051

Programowanie LCD z mikrokontrolerem 8051

WAP, aby wyświetlić „ZESTAWY EDGEFX” na wyświetlaczu LED?

#zawierać
#define kam P0

voidlcd_initi ()
voidlcd_dat (znak bez znaku)
voidlcd_cmd (znak bez znaku)
void delay ()
void display (unsigned char * s, unsigned char r)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit at = P2 ^ 2
void main ()
{

lcd_initi ()
lcd_cmd (0x80)
opóźnienie (100)
lcd_cmd (0xc0)
wyświetlacz („zestawy edgefx”, 11)
podczas gdy (1)
}

void display (unsigned char * s, unsigned char r)
{
unsignedint w
dla (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
opóźnienie (100)
lcd_cmd (0 × 38)
opóźnienie (100)
lcd_cmd (0 × 06)
opóźnienie (100)
lcd_cmd (0x0c)
opóźnienie (100)
}
voidlcd_dat (data bez znaku)
{
grzebień = to
rs = 1
rw = 0
in = 1
opóźnienie (100)
in = 0
}
}
voidlcd_cmd (unsigned char cmd)
{
came = cmd
rs = 0
rw = 0

in = 1
opóźnienie (100)
in = 0
}
void delay (unsigned int n)
{

unsignedint a
for (a = 0a}

Mam nadzieję, że ten artykuł zawiera podstawowe informacje na temat programowania systemów wbudowanych przy użyciu mikrokontrolera 8051 z kilkoma przykładowymi programami. Aby uzyskać szczegółowy samouczek programowania w języku embedded, opublikuj swoje komentarze i zapytania w sekcji komentarzy poniżej.