Beágyazott C programozási útmutató Keil nyelvvel

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





A beágyazott C a legnépszerűbb programozási nyelv a szoftverek területén az elektronikus modulok fejlesztésére. Minden processzor beágyazott szoftverhez van társítva. Beágyazott C programozás nagy szerepet játszik a processzor meghatározott funkcióinak végrehajtásában. A mindennapi életünk során gyakran használunk számos elektronikus eszközt, például mosógépet, mobiltelefont, digitális fényképezőgépet és így tovább, a beágyazott C által programozott mikrovezérlőkön alapulva.

Beágyazott rendszer programozása

Beágyazott rendszer programozása



Az írt C kód megbízhatóbb, hordozhatóbb és méretezhetőbb, sőt, sokkal könnyebben érthető. Az első és legfontosabb eszköz a beágyazott szoftver, amely dönt a beágyazott rendszer működéséről. A mikrovezérlők programozásához leggyakrabban a beágyazott C programozási nyelvet használják.


Beágyazott C programozási útmutató (8051)

A program megírásához a beágyazott tervezőknek elegendő ismerettel kell rendelkezniük bizonyos processzorok vagy vezérlők hardveréről, mivel a beágyazott C programozás teljes hardverrel kapcsolatos programozási technika.



Programozási bemutató

Programozási bemutató

Korábban sok beágyazott alkalmazást fejlesztettek összeállítási szintű programozással. Különböző magas szintű nyelvek, például a C, a COBOL és a Pascal megjelenésével azonban nem biztosítottak hordozhatóságot ennek a problémának a leküzdésére. Ugyanakkor a C nyelvet széles körben elfogadták beágyazott rendszerek alkalmazásának fejlesztése , és továbbra is így tesz.

Beágyazott rendszer

A beágyazott rendszert úgy definiálják, hogy a beágyazott C programozó szoftver és hardver kombinációja nagyrészt mikrovezérlőkből áll, és az adott feladat végrehajtására szolgál. Ezeket a beágyazott rendszereket használják mindennapi életünkben, például mosógépeket és videomagnókat, hűtőszekrényeket stb. A beágyazott rendszert először a 8051 mikrokontrollerek vezették be.

Beágyazott rendszer

Beágyazott rendszer

Bevezetés a 8051 mikrovezérlőbe

A 8051 mikrovezérlő alapvető mikrovezérlő, először az ’Intel Corporation’ vezette be 1970 óta. A 8086 processzor architektúra fejlesztette ki. A 8051 a mikrovezérlő családja, amelyet különböző gyártók fejlesztettek ki, mint például a Philips, az Atmel, a dallerek stb. A 8051 mikrovezérlők sok beágyazott termékben használták, a kis gyermekjátéktól a nagy autóipari rendszerekig.


8051 mikrokontroller

8051 mikrokontroller

A 8051 mikrovezérlő a 8 bites „CISC” architektúra . Memóriákból, soros kommunikációból, megszakításokból, bemeneti / kimeneti portokból és időzítőkből / számlálókból áll, egyetlen integrált chipbe építve, amely a vele összekötött perifériák vezérlésére van programozva. A program a mikrovezérlő RAM-ján van tárolva, de a program megírása előtt tisztában kell lennünk a RAM-mal szervezet a mikrovezérlő.

Beágyazott rendszer programozása: Alapok nyilatkozata

Minden függvény olyan utasítások gyűjteménye, amelyek egy adott feladatot hajtanak végre, és egy vagy több függvény gyűjteményét programozási nyelvnek nevezzük. Minden nyelv néhány alapelemből és nyelvtani szabályból áll. A C nyelv programozását úgy tervezték, hogy a karakterkészlettel működjön, a változók, az adattípusok, az állandók, a kulcsszavak, a kifejezések stb. Mindezeket a fejlécfájl vagy a könyvtárfájl alatt tekintjük, és a következőképpen jelenik meg:

#include

Beágyazott C programozás fejlesztése

Beágyazott C programozás fejlesztése

A C nyelv kiterjesztését Embedded C programozási nyelvnek nevezzük. A fentiekhez képest a beágyazott programozás C nyelven rendelkezik néhány további funkcióval, például adattípusokkal és kulcsszavakkal, a fejlécfájl vagy a könyvtárfájl pedig

#include

Beágyazott C további kulcsszavak

  • sbit
  • bit
  • SFR
  • illó
  • makrók definiálják

Az „sbit” a mikrovezérlő egyetlen PIN-kódjának deklarálására szolgál. Például a LED a P0.1 csaphoz van csatlakoztatva, nem ajánlott az értéket közvetlenül a port pinre küldeni, először is egy másik változóval kell deklarálnunk a csapot, majd miután bárhol felhasználhatjuk a programban.

Szintaxis: sbit a = P0 ^ 1 // a változót // változóval deklarálja
a = 0x01 // az érték elküldése a port pinhez //

A „bit” a változó állapotának ellenőrzésére szolgál.

Szintaxis: c bit // kijelenti a // változót //
c = a // értéket rendelünk a c változóhoz //
if (c == 1) // ellenőrizze az igaz vagy hamis feltételt //

{
… ..
……
}

Az „SFR” kulcsszóval más néven lehet hozzáférni az SFR regiszterekhez. Az SFR nyilvántartás a speciális funkció regiszter , az összes perifériával kapcsolatos regisztert tartalmazza a cím megjelölésével. Az SFR regisztert az SFR kulcsszó deklarálja. Az SFR kulcsszónak nagybetűvel kell lennie.

Szintaxis: SFR port = 0x00 // 0x00 egy port0 cím, amelyet a // port változó deklarál
Port = 0x01 //, majd küldje el az értéket a port0 // portra
késleltetés()
port = 0x00
késleltetés()

A „volatilis” kulcsszó a legfontosabb a beágyazott rendszerek fejlesztésében. A változó, amely az illékony kulcsszó értékével deklarál, nem változtatható meg váratlanul. Használható memória-leképezett perifériás regiszterekben, az ISR-ek által módosított globális változókban. A volatile kulcsszó használata nélkül az adatok továbbításához és fogadásához kódhiba vagy optimalizálási hiba történik.

Szintaxis: illékony int k

A makró egy név, amelyet arra használnak, hogy az utasítások blokkját egy processzor előtti irányelvként nyilvánítsa. Amikor a nevet használják, a makró tartalma helyettesíti. A makrók a #define-t képviselik. Az egész port csapokat a makrók határozzák meg.

Szintaxis: #define dat Po // az egész portot egy // változó deklarálja
dat = 0x01 // adatküldés a portra0 //

Beágyazott C alapprogramok

A mikrokontroller programozása mindegyiknél eltérő lesz az operációs rendszer típusa . Annak ellenére, hogy számos operációs rendszer létezik, például Linux, Windows, RTOS és így tovább. Az RTOS-nak azonban számos előnye van a beágyazott rendszerek fejlesztésében. Ez a cikk az alapvető beágyazott C programozást tárgyalja a beágyazott C programozás fejlesztésére egy 8051 mikrovezérlő segítségével.

Beágyazott C programozási lépések

Beágyazott C programozási lépések

  • A LED villog a 8051 mikrovezérlővel
  • Szám Megjelenítés 7 szegmenses kijelzőn a 8051 mikrokontroller használatával
  • Időzítő / számláló számítások és programozás a 8051 mikrokontrollerrel
  • Soros kommunikációs számítások és programozás a 8051 mikrokontroller használatával
  • A programok megszakítása a 8051 mikrovezérlő használatával
  • Kezelő programozás 8051 mikrovezérlővel
  • LCD programozás 8051 mikrovezérlővel

LED villog a 8051 mikrokontroller használatával

A LED egy félvezető eszköz, amelyet számos alkalmazásban használnak, főleg jelzés céljából. A teszt során indikátorok széles skáláját találja az eredmények érvényességének ellenőrzésére a különböző szakaszokban. Nagyon olcsók és könnyen elérhetőek különböző formákban, színekben és méretekben. A LED-eket a tervezéshez használják üzenettáblák és a forgalomirányító jelzőlámpák stb. Itt a LED-ek összekapcsolódnak a 8051 mikrokontrollerek PORT0-jával.

LED villog a 8051 mikrokontroller használatával

LED villog a 8051 mikrokontroller használatával

1. 01010101
10101010

#include // fejlécfájl //
void main () // a program végrehajtásának stat pontja //
{
aláíratlan int i // adattípus //
while (1) // folyamatos hurok esetén //
{
P0 = 0x55 // a hexa érték elküldése a port0 // portra
mert (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // a hexa érték elküldése a port0 //
mert (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10 000 000

#include

void main ()

{

aláíratlan i

aláíratlan char j, b

míg (1)

{

P0 = 0x01

b = P0

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

(j = 0j<8j++)

{

b = b<<1

P0 = b

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

}

}

}

3. 00001111

11110000

#include

void main ()

{

aláíratlan i

míg (1)

{

P0 = 0x0F

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

P0 = 0xF0

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

}

}

4. 00000001

00000011

00000111

.

.

11111111

#include

void main ()

{

aláíratlan i

aláíratlan char j, b

míg (1)

{

P0 = 0x01

b = P0

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

(j = 0j<8j++)

0x01

P0 = b

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

}

}

Számok megjelenítése 7 szegmenses kijelzőn a 8051 mikrokontroller használatával

A 7 szegmenses kijelzők az alapvető elektronikus kijelzők, amelyeket számos rendszerben használnak a numerikus információk megjelenítésére. Nyolc LED-ből áll, amelyek egymás után vannak összekötve úgy, hogy 0 és 9 közötti számjegyeket jelenítsenek meg, amikor a megfelelő LED kombinációk be vannak kapcsolva. Egyszerre csak egy számjegyet tudnak megjeleníteni.

Számok megjelenítése 7 szegmenses kijelzőn a 8051 mikrokontroller használatával

Számok megjelenítése 7 szegmenses kijelzőn a 8051 mikrokontroller használatával

1. WAP a „0-tól F” -ig terjedő számok megjelenítéséhez négy 7 szegmenses kijelzőn?

#include
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
void main ()
{
előjel nélküli n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
aláíratlanul, j
a = b = c = d = 1
míg (1)
{
mert (i = 0i<10i++)
{
P2 = n [i]
(j = 0j<60000j++)
}
}
}

2. WAP a ’00 és 10 közötti számok megjelenítéséhez 7 szegmenses kijelzőn?

#include
sbit a = P3 ^ 0
sbit b = P3 ^ 1
void display1 ()
void display2 ()
érvénytelen késés ()
void main ()
{
előjel nélküli n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
aláíratlanul, j
ds1 = ds2 = 0
míg (1)
{
mert (i = 0, i<20i++)
display1 ()
display2 ()
}
}
void display1 ()
{
a = 1
b = 0
P2 = s [ds1]
késleltetés()
a = 1
b = 0
P2 = s [ds1]
késleltetés()
}
void display2 ()
{
ds1 ++
ha (ds1> = 10)
{
ds1 = 0
ds2 ++
ha (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
érvénytelen késés ()
{
aláíratlan k
for (k = 0k<30000k++)
}

Időzítő / számláló számítások és programozás a 8051 mikrokontroller használatával

A késés az egyik fontos tényező az alkalmazásszoftver fejlesztésében. A normál késleltetés azonban nem adja meg az értékes eredményt ennek a problémának a kiküszöbölésére az időzítő késleltetés végrehajtásával. A időzítők és számlálók a mikrovezérlő hardverkomponensei, amelyet sok alkalmazásban használnak az értékes időhúzás biztosítására impulzusokkal. Mindkét feladatot a szoftveres technika hajtja végre.

Időzítő késleltetés

WAP az 500-as késleltetés előállításához a T1M2 (timer1 és mode2) használatával?

#include

void main ()
{
aláíratlan karakter i
TMOD = 0x20 // időzítő mód beállítása //
mert (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // késleltetési idő beállítása //
TH1 = 0x00
TR1 = 1 // időzítő o //
Míg (TF1 == 0) // ellenőrizze a jelző bitet //
TF1 = 0
}
TR1 = 0 // időzítő ki //
}

Normál hurok késleltetés

érvénytelen késés ()

{
aláíratlan k
for (k = 0k<30000k++)
}

Soros kommunikációs számítások és programozás a 8051 mikrokontroller használatával

A soros kommunikációt általában használják a jel továbbítására és fogadására. A 8051 mikrovezérlő áll UART soros kommunikáció az Rx és Tx csapok által továbbított és vett jelek. Az UART bájt adatokat vesz fel, és az egyes biteket egymás után küldi. A regiszterek lehetővé teszik az adatok gyűjtését és tárolását a memóriában. Az UART egy fél-duplex protokoll. A fél-duplex az adatok továbbítását és fogadását jelenti, de nem egyszerre.

Soros kommunikációs számítások és programozás a 8051 mikrokontroller használatával

Soros kommunikációs számítások és programozás a 8051 mikrokontroller használatával

1. WAP az „S” karakter továbbításához a soros ablakhoz használja a 9600-at az adatátviteli sebességként?

A 28800 a 8051 mikrokontroller maximális adatátviteli sebessége

28800/9600 = 3

Ezt a „3” sebességet az időzítők tárolják

#include

void main ()

{
SCON = 0x50 // soros kommunikáció indítása //
TNOD = 0x20 // az időzítő módot választotta //
TH1 = 3 // az adatátviteli sebesség betöltése //
TR1 = 1 // Időzítő BE //
SBUF = ’S’ // tárolja a karaktert a nyilvántartásban //
míg (TI == 0) // ellenőrizze a megszakítási regisztert //
TI = 0
TR1 = 0 // az időzítő kikapcsolása //
while (1) // folyamatos hurok //
}

2. WAP, hogy megkapja az adatokat a hiperterminálról, és 9600 baud használatával elküldi ezeket az adatokat a mikrovezérlő 0 portjába?

A 28800 a 8051 mikrokontroller maximális adatátviteli sebessége

28800/9600 = 3

Ezt a „3” sebességet az időzítők tárolják

#include

void main ()
{
SCON = 0x50 // soros kommunikáció indítása //
TMOD = 0x20 // az időzítő módot választotta //
TH1 = 3 // az adatátviteli sebesség betöltése //
TR1 = 1 // Időzítő BE //
PORT0 = SBUF // az adatok elküldése az SBUF-ről a port0 // portra
míg (RI == 0) // ellenőrizze a megszakítási regisztert //
RI = 0
TR1 = 0 // az időzítő kikapcsolása //
while (1) // leállítja a programot, amikor karakter érkezik //
}

A programok megszakítása a 8051 mikrokontroller használatával

A megszakítás olyan jel, amely arra kényszeríti az aktuális program leállítását és a másik program azonnali végrehajtását. A 8051 mikrovezérlő 6 megszakítást biztosít, amelyek belső és külső megszakítani a forrásokat . Amikor a megszakítás bekövetkezik, a mikrovezérlő szünetelteti az aktuális feladatot, és az ISR végrehajtásával foglalkozik a megszakítással, majd a mikrovezérlő visszatér a legutóbbi feladatra.

WAP a bal váltás művelet végrehajtásához, amikor a 0 időzítő megszakad, akkor hajtsa végre a P0 megszakítási műveletét a fő funkcióban?

#include

aláíratlan karakter b

void timer0 () 2. megszakítás // kiválasztott időzítő0 megszakítás //
{
b = 0x10
P1 = b<<2
}
void main ()
{
aláíratlan char a, i
IE = 0x82 // engedélyezi az időzítő0 megszakítását //
TMOD = 0x01
TLo = 0xFC // megszakítási időzítő //
TH1 = 0xFB
TR0 = 1
a = 0x00
míg (1)
{
mert (i = 0i<255i++)
{
a ++
Po = a
}
}
}

Kezelő programozás a 8051 mikrokontroller használatával

A mátrix kezelő egy analóg kapcsoló eszköz, amelyet sok beágyazott alkalmazásban használnak, hogy a felhasználó elvégezhesse a szükséges feladatokat. A mátrix billentyűzet kapcsolók elrendezéséből áll mátrix formátumban sorokban és oszlopokban. A sorok és oszlopok úgy kapcsolódnak a mikrovezérlőhöz, hogy a kapcsolók sora egy érintkezőhöz és az egyes oszlopok kapcsolói egy másik csaphoz vannak csatlakoztatva, majd hajtsák végre a műveleteket.

Kezelő programozás a 8051 mikrokontroller használatával

Kezelő programozás a 8051 mikrokontroller használatával

1. WAP kapcsolóval nyomja meg a LED-et

#include
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
érvénytelen késés ()
void main ()
{
míg (1)
{
a = 0
b = 1
c = 1
d = 1
késleltetés()
a = 1
b = 0
c = 1
d = 1
érvénytelen késés ()
{
aláíratlan karakter i
TMOD = 0x20 // időzítő mód beállítása //
mert (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // késleltetési idő beállítása //
TH1 = 0x00
TR1 = 1 // időzítő o //
Míg (TF1 == 0) // ellenőrizze a jelző bitet //
TF1 = 0
}
TR1 = 0 // időzítő ki //
}

2. WAP kapcsolja be a LED-et a billentyűzet ’1’ gombjának megnyomásával?

#include

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

void main ()
{

r1 = 0
ha (c1 == 0)
{

LED = 0xff
}
}

3. WAP a 0,1,2,3,4,5 szám megjelenítéséhez a hét szegmensben a billentyűzet megfelelő gombjának megnyomásával?

#include

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

ha (c1 == 0)

{

a = 0xFC

}

Ha (c2 == 0)

{

a = 0x60

}

ha (c3 == 0)

{

a = 0xDA

}

Ha (c4 == 0)

{

a = 0xF2

}

}

LCD programozás 8051 mikrovezérlővel

A LCD kijelzö egy elektronikus eszköz, amelyet sok alkalmazásban gyakran használnak az információk szöveges vagy kép formátumban történő megjelenítésére. Az LCD olyan kijelző, amely könnyen megjeleníti a karaktereket a képernyőn. Az LCD kijelző 8 adatsorból és 3 vezérlősorból áll, amelyeket a mikrovezérlőhöz való kapcsolódáshoz használnak.

LCD programozás 8051 mikrovezérlővel

LCD programozás 8051 mikrovezérlővel

WAP az „EDGEFX KITS” LED-kijelzőn történő megjelenítéséhez?

#include
#define kam P0

voidlcd_initi ()
voidlcd_dat (aláíratlan karakter)
voidlcd_cmd (aláíratlan karakter)
érvénytelen késés ()
érvénytelen kijelző (aláíratlan karakterek *, aláíratlan karakterek)

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

lcd_initi ()
lcd_cmd (0x80)
késés (100)
lcd_cmd (0xc0)
kijelző („edgefx készletek”, 11)
míg (1)
}

érvénytelen kijelző (aláíratlan karakterek *, aláíratlan karakterek)
{
aláíratlan w
(w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
késés (100)
lcd_cmd (0 × 38)
késés (100)
lcd_cmd (0 × 06)
késés (100)
lcd_cmd (0x0c)
késés (100)
}
voidlcd_dat (aláíratlan karakter)
{
fésű = az
rs = 1
rw = 0
= 1
késés (100)
= 0
}
}
voidlcd_cmd (aláíratlan karakter cmd)
{
jött = cmd
rs = 0
rw = 0

= 1
késés (100)
= 0
}
void delay (aláíratlan int n)
{

unsignedint a
mert (a = 0a}

Remélem, hogy ez a cikk alapvető információkat tartalmaz a beágyazott rendszerek programozásáról a 8051 mikrovezérlő használatával, néhány példaprogrammal. A részletes beágyazott C programozási bemutatóért tegye meg észrevételeit és kérdéseit az alábbi megjegyzés részben.