Įterptoji C programavimo pamoka su „Keil“ kalba

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Įterptoji C yra populiariausia programavimo kalba programinės įrangos srityje kuriant elektroninius dalykėlius. Kiekvienas procesorius yra susietas su įdėta programine įranga. Įterptasis C programavimas vaidina svarbų vaidmenį atliekant specifines procesoriaus funkcijas. Kasdienybėje dažnai naudojame daugybę elektroninių prietaisų, tokių kaip skalbimo mašinos, mobilieji telefonai, skaitmeniniai fotoaparatai ir pan., Kurie veiks pagal mikrovaldiklius, kuriuos užprogramuoja įterptoji C.

Įterptųjų sistemų programavimas

Įterptųjų sistemų programavimas



Parašytas C kodas yra patikimesnis, nešiojamas, keičiamo dydžio ir iš tikrųjų daug lengviau suprantamas. Pirmasis ir svarbiausias įrankis yra įterptoji programinė įranga, kuri sprendžia įterptosios sistemos veikimą. Mikrovaldikliams programuoti dažniausiai naudojama įterptoji C programavimo kalba.


Įterptojo C programavimo pamoka (8051)

Rašydami programą, įterptieji dizaineriai turi turėti pakankamai žinių apie tam tikrų procesorių ar valdiklių aparatinę įrangą, nes įterptasis C programavimas yra visa aparatine įranga susijusi programavimo technika.



Programavimo pamoka

Programavimo pamoka

Anksčiau daugelis įterptųjų programų buvo sukurtos naudojant surinkimo lygio programavimą. Tačiau jie nesuteikė galimybės perkelti šią problemą atsiradus įvairioms aukšto lygio kalboms, tokioms kaip C, COBOL ir Pascal. Tačiau būtent C kalba buvo plačiai pripažinta įterptųjų sistemų programų kūrimas ir tai daro toliau.

Integruota sistema

Įterptoji sistema apibrėžiama kaip įterptosios C programinės įrangos ir aparatinės įrangos derinys, kurį daugiausia sudaro mikrovaldikliai, ir ji skirta konkrečiai užduočiai atlikti. Tokio tipo įterptosios sistemos yra naudojamos mūsų kasdieniniame gyvenime, pavyzdžiui, skalbimo mašinos ir vaizdo registratoriai, šaldytuvai ir pan. Įterptąją sistemą pirmą kartą pristatė 8051 mikrovaldikliai.

Integruota sistema

Integruota sistema

8051 mikrovaldiklio įvadas

8051 mikrovaldiklis yra pagrindinis mikrovaldiklis, jį pirmą kartą pristatė „Intel Corporation“ nuo 1970 m. Jį sukūrė 8086 procesoriaus architektūra. 8051 yra mikrovaldiklio šeima, kurią sukūrė skirtingi gamintojai, tokie kaip „Philips“, „Atmel“, „dalls“ ir pan. 8051 mikrovaldikliai buvo naudojamas daugelyje įterptų gaminių - nuo mažų vaikiškų žaislų iki didelių automobilių sistemų.


8051 mikrovaldiklis

8051 mikrovaldiklis

8051 mikrovaldiklis yra 8 bitų „CISC“ architektūra . Jį sudaro atmintinės, nuoseklusis ryšys, pertraukimai, įvesties / išvesties prievadai ir laikmatis / skaitikliai, įmontuoti į vieną integruotą mikroschemą, kuri yra užprogramuota valdyti su ja susietus periferinius įrenginius. Programa yra saugoma mikrokontrolerio RAM, tačiau prieš rašydami programą, turime žinoti apie RAM organizacija mikrovaldiklio.

Įterptųjų sistemų programavimas: pagrindų deklaracija

Kiekviena funkcija yra teiginių, atliekančių konkrečią užduotį, rinkinys, o vienos ar kelių funkcijų rinkinys vadinamas programavimo kalba. Kiekviena kalba susideda iš kai kurių pagrindinių elementų ir gramatinių taisyklių. C kalbos programavimas yra sukurtas veikti kartu su simbolių rinkiniu, kintamieji, duomenų tipai, konstantos, raktiniai žodžiai, išraiškos ir pan. Naudojami C programai rašyti. Visa tai laikoma antraštės faile arba bibliotekos faile ir ji vaizduojama kaip

# įtraukti

Įterptojo C programavimo plėtra

Įterptojo C programavimo plėtra

C kalbos išplėtimas vadinamas įterptąja C programavimo kalba. Palyginti su aukščiau, įterptasis programavimas C kalba turi keletą papildomų funkcijų, tokių kaip duomenų tipai ir raktiniai žodžiai, o antraštės arba bibliotekos failas yra

# įtraukti

Įterpti C papildomi raktiniai žodžiai

  • sbit
  • šiek tiek
  • SFR
  • nepastovus
  • makrokomandos apibrėžia

„Sbit“ naudojamas deklaruoti vieną mikrovaldiklio PIN kodą. Pvz., LED yra prijungtas prie P0.1 kaiščio, nerekomenduojama tiesiogiai siųsti vertės į prievado kaištį. Pirmiausia mes turime deklaruoti kaištį su kitu kintamuoju, tada, kai galėsime naudoti bet kurioje programos vietoje.

Sintaksė: sbit a = P0 ^ 1 // deklaruoja atitinkamą kaištį kintamuoju //
a = 0x01 // nusiųskite vertę į prievado kaištį //

„Bit“ naudojamas kintamojo būsenai tikrinti.

Sintaksė: bitai c // deklaruoja bitų kintamąjį //
c = a // c kintamajam priskiriama reikšmė //
if (c == 1) // patikrinkite sąlygą true arba false //

{
… ..
……
}

Raktinis žodis „SFR“ naudojamas norint pasiekti SFR registrus kitu vardu. SFR registras apibrėžiamas kaip specialiųjų funkcijų registras , jame yra visi periferiškai susiję registrai, nurodant adresą. SFR registras deklaruojamas SFR raktiniu žodžiu. SFR raktinis žodis turi būti rašomas didžiosiomis raidėmis.

Sintaksė: SFR prievadas = 0x00 // 0x00 yra „port0“ adresas, kurį deklaruoja prievado kintamasis //
Port = 0x01 // tada nusiųskite vertę į port0 //
delsimas()
prievadas = 0x00
delsimas()

Kuriant įterptąją sistemą svarbiausias yra „nepastovus“ raktinis žodis. Kintamasis, kuris deklaruoja nepastovią raktinio žodžio vertę, negalėjo būti netikėtai pakeistas. Jis gali būti naudojamas atmintyje susietuose periferiniuose registruose, visuotiniuose kintamuosiuose, kuriuos modifikavo ISR. Nenaudojant nepastovaus raktinio žodžio duomenims perduoti ir priimti, įvyks kodo klaida arba optimizavimo klaida.

Sintaksė: nepastovi int k

Makrokomanda yra pavadinimas, naudojamas teiginių blokui paskelbti kaip išankstinio procesoriaus direktyvą. Kai tik naudojamas vardas, jis pakeičiamas makrokomandos turiniu. Makrokomandos reiškia #define. Makrokomandomis apibrėžiami visi prievado kaiščiai.

Sintaksė: #define dat Po // visą prievadą deklaruoja kintamasis //
dat = 0x01 // duomenys siunčiami į prievadą0 //

Pagrindinės įterptosios C programos

Mikrovaldiklio programavimas kiekvienam skirsis operacinės sistemos tipas . Nors egzistuoja daugybė operacinių sistemų, tokių kaip „Linux“, „Windows“, RTOS ir pan. Tačiau RTOS turi keletą įterptųjų sistemų kūrimo pranašumų. Šiame straipsnyje aptariamas pagrindinis įterptojo C programavimas, skirtas plėtoti įterptąjį C programavimą naudojant 8051 mikrovaldiklį.

Įterptųjų C programavimo žingsniai

Įterptųjų C programavimo žingsniai

  • Šviesos diodas mirksi naudodamas 8051 mikrovaldiklį
  • Skaičius rodomas 7 segmentų ekrane naudojant 8051 mikrovaldiklį
  • Laikmačio / skaitiklio skaičiavimai ir programa naudojant 8051 mikrovaldiklį
  • Serijinio ryšio skaičiavimai ir programa naudojant 8051 mikrovaldiklį
  • Pertraukite programas naudodami 8051 mikrovaldiklį
  • Klaviatūros programavimas naudojant 8051 mikrovaldiklį
  • LCD programavimas su 8051 mikrovaldikliu

Šviesos diodas mirksi naudodamas 8051 mikrovaldiklį

Šviesos diodas yra puslaidininkinis įtaisas, naudojamas daugelyje programų, daugiausia indikacijos tikslais. Testo metu ieškoma daugybės programų, kaip rodiklių, siekiant patikrinti rezultatų pagrįstumą įvairiais etapais. Jie yra labai pigūs ir lengvai prieinami įvairių formų, spalvų ir dydžių. Šviesos diodai naudojami projektuojant pranešimų lentos eismo valdymo signaliniai žibintai ir pan. Čia šviesos diodai yra susieti su 8051 mikrovaldiklių PORT0.

Šviesos diodas mirksi naudodamas 8051 mikrovaldiklį

Šviesos diodas mirksi naudodamas 8051 mikrovaldiklį

1. 01010101
10101010

#include // antraštės failas //
void main () // programos vykdymo statistinis taškas //
{
nepasirašytas int i // duomenų tipas //
while (1) // nepertraukiamai kilpai //
{
P0 = 0x55 // siųsti hexa reikšmę į prievadą0 //
už (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // nusiųskite hexa reikšmę į prievadą0 //
už (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10 000 000

# įtraukti

negaliojantis pagrindinis ()

{

nepasirašytas i

nepasirašyta char j, gim

o (1)

{

P0 = 0x01

b = P0

už (j-0j<3000j++)

už (j = 0j<8j++)

{

b = b<<1

P0 = b

už (j-0j<3000j++)

}

}

}

3. 00001111

11110000

# įtraukti

negaliojantis pagrindinis ()

{

nepasirašytas i

o (1)

{

P0 = 0x0F

už (j-0j<3000j++)

P0 = 0xF0

už (j-0j<3000j++)

}

}

4. 00000001

00000011

00000111

.

.

11111111

# įtraukti

negaliojantis pagrindinis ()

{

nepasirašytas i

nepasirašyta char j, gim

o (1)

{

P0 = 0x01

b = P0

už (j-0j<3000j++)

už (j = 0j<8j++)

0x01

P0 = b

už (j-0j<3000j++)

}

}

Skaičių rodymas 7 segmentų ekrane naudojant 8051 mikrovaldiklį

7 segmentų ekranai yra pagrindiniai elektroniniai ekranai, kurie daugelyje sistemų naudojami skaitmeninei informacijai rodyti. Jį sudaro aštuoni šviesos diodai, kurie yra sujungti nuosekliai, kad būtų rodomi skaitmenys nuo 0 iki 9, kai įjungiami tinkami šviesos diodų deriniai. Jie vienu metu gali rodyti tik vieną skaitmenį.

Skaičių rodymas 7 segmentų ekrane naudojant 8051 mikrovaldiklį

Skaičių rodymas 7 segmentų ekrane naudojant 8051 mikrovaldiklį

1. WAP rodyti skaičius nuo „0 iki F“ keturiuose 7 segmentų ekranuose?

# įtraukti
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
negaliojantis pagrindinis ()
{
nepasirašytas ženklas n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
nepasirašęs tavęs, j
a = b = c = d = 1
o (1)
{
už (i = 0i<10i++)
{
P2 = n [i]
už (j = 0j<60000j++)
}
}
}

2. WAP rodyti skaičius nuo ’00 iki 10 ’7 segmentų ekranuose?

# įtraukti
sbit a = P3 ^ 0
sbit b = P3 ^ 1
negaliojantis ekranas1 ()
negaliojantis ekranas2 ()
negaliojantis atidėjimas ()
negaliojantis pagrindinis ()
{
nepasirašytas ženklas n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
nepasirašęs tavęs, j
ds1 = ds2 = 0
o (1)
{
už (i = 0, t<20i++)
rodyti1 ()
display2 ()
}
}
negaliojantis ekranas1 ()
{
a = 1
b = 0
P2 = s [ds1]
delsimas()
a = 1
b = 0
P2 = s [ds1]
delsimas()
}
negaliojantis ekranas2 ()
{
ds1 ++
jei (ds1> = 10)
{
ds1 = 0
ds2 ++
jei (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
negaliojantis atidėjimas ()
{
nepasirašytas k
už (k = 0k<30000k++)
}

Laikmačio / skaitiklio skaičiavimai ir programavimas naudojant 8051 mikrovaldiklį

Delsimas yra vienas iš svarbiausių veiksnių kuriant programinę įrangą. Tačiau įprastas delsimas neduos brangaus rezultato įveikti šią problemą įgyvendinant laikmačio uždelsimą. laikmačiai ir skaitikliai yra mikrovaldiklio, kuris yra naudojamas daugelyje programų, siekiant užtikrinti brangų laiko atidėjimą skaičiuojant impulsus, aparatinės įrangos komponentai. Abi užduotys įgyvendinamos programinės įrangos technika.

Laikmačio atidėjimas

WAP sugeneruoti 500 kartų trukmės vėlavimą naudojant T1M2 (laikmatis1 ir režimas2)?

# įtraukti

negaliojantis pagrindinis ()
{
nepasirašyta char i
TMOD = 0x20 // nustatykite laikmačio režimą //
už (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // nustatykite laiko atidėjimą //
TH1 = 0x00
TR1 = 1 // laikmatis oN //
Nors (TF1 == 0) // patikrinkite žymos bitą //
TF1 = 0
}
TR1 = 0 // laikmatis išjungtas //
}

Įprastas kilpos vėlavimas

negaliojantis atidėjimas ()

{
nepasirašytas k
už (k = 0k<30000k++)
}

Eilinio ryšio skaičiavimai ir programavimas naudojant 8051 mikrovaldiklį

Signalui perduoti ir priimti dažniausiai naudojamas nuoseklusis ryšys. 8051 mikrovaldiklis susideda UART nuoseklusis ryšys Rx ir Tx kaiščių perduoti ir priimti signalai. UART ima duomenų baitus ir nuosekliai siunčia atskirus bitus. Registrai yra būdas rinkti ir saugoti duomenis atmintyje. UART yra pusiau dupleksinis protokolas. Pusiau dupleksas reiškia duomenų perdavimą ir gavimą, bet ne tuo pačiu metu.

Eilinio ryšio skaičiavimai ir programavimas naudojant 8051 mikrovaldiklį

Eilinio ryšio skaičiavimai ir programavimas naudojant 8051 mikrovaldiklį

1. WAP, norint perduoti simbolį „S“ į nuoseklų langą, naudoja 9600 kaip duomenų perdavimo greitį?

28800 yra maksimalus 8051 mikrovaldiklio perdavimo greitis

28800/9600 = 3

Ta duomenų perdavimo sparta „3“ laikoma laikmačiuose

# įtraukti

negaliojantis pagrindinis ()

{
SCON = 0x50 // pradėti nuoseklųjį ryšį //
TNOD = 0x20 // pasirinktas laikmačio režimas //
TH1 = 3 // įkelkite duomenų perdavimo spartą //
TR1 = 1 // Laikmatis ĮJUNGTAS //
SBUF = ’S’ // įrašykite simbolį registre //
o (TI == 0) // patikrinkite pertraukimų registrą //
TI = 0
TR1 = 0 // laikmatis išjungtas //
while (1) // nepertraukiama kilpa //
}

2. WAP gauti duomenis iš hiperterminalo ir siųsti tuos duomenis į mikrovaldiklio PORT 0 naudojant 9600 baudą?

28800 yra maksimalus 8051 mikrovaldiklio perdavimo greitis

28800/9600 = 3

Ta duomenų perdavimo sparta „3“ laikoma laikmačiuose

# įtraukti

negaliojantis pagrindinis ()
{
SCON = 0x50 // pradėti nuoseklųjį ryšį //
TMOD = 0x20 // pasirinktas laikmačio režimas //
TH1 = 3 // įkelkite duomenų perdavimo spartą //
TR1 = 1 // Laikmatis ĮJUNGTAS //
PORT0 = SBUF // siųsti duomenis iš SBUF į port0 //
o (RI == 0) // patikrinkite pertraukimų registrą //
RI = 0
TR1 = 0 // laikmatis išjungtas //
while (1) // sustabdyti programą, kai gaunamas simbolis //
}

Nutraukite programas naudodami 8051 mikrovaldiklį

Pertraukimas yra signalas, verčiantis sustabdyti dabartinę programą ir nedelsiant vykdyti kitą programą. 8051 mikrovaldiklis suteikia 6 pertraukimus, kurie yra vidiniai ir išoriniai nutraukti šaltinius . Įvykus pertraukai, mikrovaldiklis sustabdo dabartinę užduotį ir prižiūri pertraukimą vykdydamas ISR, tada mikrovaldiklis grįžta prie paskutinės užduoties.

WAP atlikti kairiojo poslinkio operaciją, kai įvyksta laikmatis 0, tada atlikti pagrindinės funkcijos P0 pertraukimo operaciją?

# įtraukti

nepasirašyta char b

void timer0 () nutraukti 2 // pasirinktas laikmatis0 nutraukti //
{
b = 0x10
P1 = b<<2
}
negaliojantis pagrindinis ()
{
nepasirašyta char a, t
IE = 0x82 // įjungti laikmatį0 pertraukti //
TMOD = 0x01
TLo = 0xFC // pertraukimo laikmatis //
TH1 = 0xFB
TR0 = 1
a = 0x00
o (1)
{
už (i = 0i<255i++)
{
a ++
Po = a
}
}
}

Klaviatūros programavimas naudojant 8051 mikrovaldiklį

Matricos klaviatūra yra analoginis perjungimo įtaisas, naudojamas daugelyje įterptųjų programų, kad vartotojas galėtų atlikti reikalingas užduotis. A matricos klaviatūra susideda iš jungiklių išdėstymo matricos formatu eilutėse ir stulpeliuose. Eilutės ir stulpeliai yra prijungti prie mikrovaldiklio taip, kad jungiklių eilė būtų sujungta su vienu kaiščiu, o kiekvienos kolonos jungikliai būtų prijungti prie kito kaiščio, tada atlikite operacijas.

Klaviatūros programavimas naudojant 8051 mikrovaldiklį

Klaviatūros programavimas naudojant 8051 mikrovaldiklį

1. WAP perjungia šviesos diodą paspausdami jungiklį

# įtraukti
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
negaliojantis atidėjimas ()
negaliojantis pagrindinis ()
{
o (1)
{
a = 0
b = 1
c = 1
d = 1
delsimas()
a = 1
b = 0
c = 1
d = 1
negaliojantis atidėjimas ()
{
nepasirašyta char i
TMOD = 0x20 // nustatykite laikmačio režimą //
už (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // nustatykite laiko atidėjimą //
TH1 = 0x00
TR1 = 1 // laikmatis oN //
Nors (TF1 == 0) // patikrinkite žymos bitą //
TF1 = 0
}
TR1 = 0 // laikmatis išjungtas //
}

2. WAP, norėdami įjungti šviesos diodą, paspausdami klaviatūros mygtuką „1“?

# įtraukti

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

negaliojantis pagrindinis ()
{

r1 = 0
jei (c1 == 0)
{

LED = 0xff
}
}

3. WAP rodyti skaičių 0,1,2,3,4,5 septyniuose segmentuose, paspausdami atitinkamą klaviatūros klavišą?

# įtraukti

sbit r1 = P2 ^ 0

sbit c1 = P3 ^ 0

sbit r2 = P2 ^ 0

sbit c2 = P3 ^ 0

sbit a = P0 ^ 1

negaliojantis pagrindinis ()

{

r1 = 0 a = 1

jei (c1 == 0)

{

a = 0xFC

}

Jei (c2 == 0)

{

a = 0x60

}

jei (c3 == 0)

{

a = 0xDA

}

Jei (c4 == 0)

{

a = 0xF2

}

}

Skystųjų kristalų ekranų programavimas su 8051 mikrovaldikliu

LCD ekranas yra elektroninis prietaisas, kuris dažnai naudojamas daugelyje programų informacijai rodyti teksto ar vaizdo formatu. Skystųjų kristalų ekranas yra ekranas, kuris gali lengvai rodyti simbolius savo ekrane. Skystųjų kristalų ekraną sudaro 8 duomenų linijos ir 3 valdymo linijos, kurios naudojamos sąsajai su mikrovaldikliu.

Skystųjų kristalų ekranų programavimas su 8051 mikrovaldikliu

Skystųjų kristalų ekranų programavimas su 8051 mikrovaldikliu

WAP rodyti „EDGEFX KITS“ LED ekrane?

# įtraukti
#define kam P0

voidlcd_initi ()
voidlcd_dat (nepasirašyta simbolis)
voidlcd_cmd (nepasirašyta simbolis)
negaliojantis atidėjimas ()
negaliojantis ekranas (nepasirašyti simboliai * s, nepasirašyti simboliai)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit = P2 ^ 2
negaliojantis pagrindinis ()
{

lcd_initi ()
lcd_cmd (0x80)
vėlavimas (100)
lcd_cmd (0xc0)
ekranas („edgefx rinkiniai“, 11)
o (1)
}

negaliojantis ekranas (nepasirašyti simboliai * s, nepasirašyti simboliai)
{
nepasirašytas w
už (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
vėlavimas (100)
lcd_cmd (0 × 38)
vėlavimas (100)
lcd_cmd (0 × 06)
vėlavimas (100)
lcd_cmd (0x0c)
vėlavimas (100)
}
voidlcd_dat (nepasirašytas char dat)
{
šukos = tai
rs = 1
rw = 0
= 1
vėlavimas (100)
= 0
}
}
voidlcd_cmd (nepasirašytas char cmd)
{
atėjo = cmd
rs = 0
rw = 0

= 1
vėlavimas (100)
= 0
}
negaliojantis atidėjimas (nepasirašytas int n)
{

nepasirašytas a
už (a = 0a}

Tikiuosi, kad šiame straipsnyje pateikiama pagrindinė informacija apie įdėtųjų sistemų programavimą naudojant 8051 mikrovaldiklį su keletu programų pavyzdžių. Norėdami gauti išsamią įterptąją C programavimo pamoką, parašykite savo komentarus ir klausimus žemiau esančiame komentarų skyriuje.