Iegultā C programmēšanas apmācība ar Keil valodu

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Iegultā C ir populārākā programmēšanas valoda programmatūras jomā elektronisko sīkrīku izstrādei. Katrs procesors ir saistīts ar iegulto programmatūru. Iegultā C programmēšana ir galvenā loma, veicot procesora īpašas funkcijas. Ikdienas dzīvē mēs bieži izmantojam daudzas elektroniskas ierīces, piemēram, veļas mazgājamās mašīnas, mobilos tālruņus, digitālās kameras un tā tālāk, pamatojoties uz mikrokontrolleriem, kurus ieprogrammē iegultais C.

Iegultās sistēmas programmēšana

Iegultās sistēmas programmēšana



Uzrakstītais C kods ir ticamāks, pārnēsājams un pielāgojams, un patiesībā to ir daudz vieglāk saprast. Pirmais un galvenais rīks ir iegultā programmatūra, kas izlemj par iegultās sistēmas darbību. Mikrokontrolleru programmēšanai visbiežāk izmanto iegulto C programmēšanas valodu.


Iegultās C programmēšanas apmācība (8051)

Rakstot programmu, iegultajiem dizaineriem jābūt pietiekamām zināšanām par konkrētu procesoru vai kontrolieru aparatūru, jo iegultā C programmēšana ir pilnīga ar aparatūru saistīta programmēšanas tehnika.



Programmēšanas apmācība

Programmēšanas apmācība

Iepriekš daudzas iegultās lietojumprogrammas tika izstrādātas, izmantojot montāžas līmeņa programmēšanu. Tomēr tie nenodrošināja pārnesamību, lai pārvarētu šo problēmu, parādoties dažādām augsta līmeņa valodām, piemēram, C, COBOL un Pascal. Tomēr plaši tika pieņemta C valoda iegulto sistēmu lietojumprogrammu izstrāde , un tas turpina to darīt.

Iegultā sistēma

Iegultā sistēma ir definēta kā iegultās C programmēšanas programmatūras un aparatūras kombinācija, kas galvenokārt sastāv no mikrokontrolleriem, un tā ir paredzēta konkrētā uzdevuma veikšanai. Šāda veida iegultās sistēmas tiek izmantotas mūsu ikdienas dzīvē, piemēram, veļas mazgājamās mašīnas un video ierakstītāji, ledusskapji un tā tālāk. Iegulto sistēmu pirmo reizi ieviesa 8051 mikrokontrolleri.

Iegultā sistēma

Iegultā sistēma

Ievads mikrokontrollerī 8051

8051 mikrokontrolleris ir pamata mikrokontrolleris, to pirmo reizi ieviesa ‘Intel Corporation’ kopš 1970. gada. To ir izstrādājusi 8086 procesora arhitektūra. 8051 ir mikrokontrolleru saime, kuru ir izstrādājuši dažādi ražotāji, piemēram, Philips, Atmel, dalls utt. 8051 mikrokontrolleri ir izmantots daudzos iegultos izstrādājumos, sākot no mazām bērnu rotaļlietām līdz lielām automobiļu sistēmām.


8051 mikrokontrolleris

8051 mikrokontrolleris

8051 mikrokontrolleris ir 8 bitu ‘CISC’ arhitektūra . Tas sastāv no atmiņām, sērijveida sakariem, pārtraukumiem, ieejas / izejas portiem un taimera / skaitītājiem, kas iebūvēti vienā integrētā mikroshēmā, kas ieprogrammēta, lai kontrolētu ar to saskarnes esošās perifērijas ierīces. Programma tiek glabāta mikrokontrollera RAM, taču pirms programmas rakstīšanas mums ir jāzina RAM organizācija mikrokontrollera.

Iegultās sistēmas programmēšana: deklarācija par pamatiem

Katra funkcija ir paziņojumu kolekcija, kas veic noteiktu uzdevumu, un vienas vai vairāku funkciju kolekciju sauc par programmēšanas valodu. Katra valoda sastāv no dažiem pamatelementiem un gramatikas likumiem. C valodas programmēšana ir paredzēta darbam ar rakstzīmju kopu, C programmas rakstīšanai tiek izmantoti mainīgie, datu tipi, konstantes, atslēgvārdi, izteicieni un tā tālāk. Visi šie tiek uzskatīti par galvenes failu vai bibliotēkas failu, un tas tiek attēlots kā

# iekļaut

Iegultās C programmēšanas izstrāde

Iegultās C programmēšanas izstrāde

C valodas paplašinājumu sauc par iegulto C programmēšanas valodu. Ievietotajai programmēšanai C valodā ir dažas papildu funkcijas, piemēram, datu veidi un atslēgvārdi, un galvenes fails vai bibliotēkas fails tiek attēlots kā

# iekļaut

Iegultie C papildu atslēgvārdi

  • sbit
  • mazliet
  • SFR
  • gaistošs
  • makro definē

“Sbit” tiek izmantots, lai deklarētu mikrokontrollera vienoto PIN. Piemēram, LED ir pievienots P0.1 tapai, nav ieteicams nosūtīt vērtību tieši porta tapai, pirmkārt, mums jāpaziņo tapa ar citu mainīgo, pēc tam pēc tam, kad mēs varēsim izmantot jebkuru vietu programmā.

Sintakse: sbit a = P0 ^ 1 // deklarē attiecīgo tapu ar mainīgo //
a = 0x01 // nosūta vērtību porta tapai //

“Bits” tiek izmantots mainīgā stāvokļa pārbaudei.

Sintakse: bits c // deklarē bitu mainīgo //
c = a // c mainīgajam // tiek piešķirta vērtība
ja (c == 1) // pārbauda nosacījumu true vai false //

{
… ..
……
}

Atslēgvārdu “SFR” izmanto, lai piekļūtu SFR reģistriem ar citu nosaukumu. SFR reģistrs ir definēts kā a īpašo funkciju reģistrs , tajā ir visi ar perifēriju saistītie reģistri, norādot adresi. SFR reģistrs tiek deklarēts ar SFR atslēgvārdu. SFR atslēgvārdam jābūt ar lielajiem burtiem.

Sintakse: SFR ports = 0x00 // 0x00 ir port0 adrese, kuru deklarē porta mainīgais //
Ports = 0x01 // pēc tam nosūtiet vērtību portam0 //
kavēšanās ()
ports = 0x00
kavēšanās ()

Iegultās sistēmas izstrādē vissvarīgākais ir “nepastāvīgais” atslēgvārds. Mainīgo, kas deklarē ar nepastāvīgo atslēgvārda vērtību, nevarēja negaidīti mainīt. To var izmantot atmiņā kartētos perifēros reģistros, ISR modificētos globālajos mainīgajos. Neizmantojot gaistošo atslēgvārdu datu pārsūtīšanai un saņemšanai, notiks koda kļūda vai optimizācijas kļūda.

Sintakse: gaistošā int k

Makro ir nosaukums, ar kura palīdzību paziņo paziņojumu bloku par priekšapstrādātāja direktīvu. Ikreiz, kad tiek izmantots nosaukums, tas tiek aizstāts ar makro saturu. Makro apzīmē #define. Makro nosaka visas ostas tapas.

Sintakse: #define dat Po // visu portu deklarē mainīgais //
dat = 0x01 // datu nosūtīšana uz portu0 //

Iegultās C pamata programmas

Mikrokontrolleru programmēšana katram būs atšķirīga operētājsistēmas tips . Pat ja pastāv daudzas operētājsistēmas, piemēram, Linux, Windows, RTOS un tā tālāk. Tomēr RTOS ir vairākas priekšrocības iegulto sistēmu izstrādē. Šajā rakstā ir apskatīta iegultās C pamata programmēšana, lai izstrādātu iegulto C programmēšanu, izmantojot 8051 mikrokontrolleru.

Iegultās C programmēšanas darbības

Iegultās C programmēšanas darbības

  • LED mirgo, izmantojot 8051 mikrokontrolleru
  • Skaits Parādīts 7 segmentu displejā, izmantojot 8051 mikrokontrolleru
  • Taimera / skaitītāja aprēķini un programma, izmantojot mikrokontrolleru 8051
  • Sērijas komunikācijas aprēķini un programma, izmantojot mikrokontrolleru 8051
  • Pārtrauciet programmas, izmantojot 8051 mikrokontrolleru
  • Tastatūras programmēšana, izmantojot mikrokontrolleru 8051
  • LCD programmēšana ar 8051 mikrokontrolleru

LED mirgo, izmantojot 8051 mikrokontrolleru

LED ir pusvadītāju ierīce, ko izmanto daudzās lietojumprogrammās, galvenokārt indikācijas vajadzībām. Pārbaudes laikā tiek atrasts milzīgs lietojumu klāsts kā rādītāji, lai pārbaudītu rezultātu derīgumu dažādos posmos. Tie ir ļoti lēti un viegli pieejami dažādās formās, krāsās un izmēros. Gaismas diodes tiek izmantotas projektēšanai ziņojumu displeju dēļi un satiksmes vadības signālugunis utt. Šeit gaismas diodes ir saskarnes ar 8051 mikrokontrolleru PORT0.

LED mirgo, izmantojot 8051 mikrokontrolleru

LED mirgo, izmantojot 8051 mikrokontrolleru

1. 01010101
10101010

#include // galvenes fails //
void main () // programmas izpildes stat punkts //
{
neparakstīts int i // datu tips //
while (1) // nepārtrauktai cilpai //
{
P0 = 0x55 // nosūta heksa vērtību portam0 //
par (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // nosūta heksa vērtību portam0 //
par (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10 000 000

# iekļaut

anulēt galveno ()

{

neparakstīts i

neparakstīta char j, b

kamēr (1)

{

P0 = 0x01

b = P0

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

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

{

b = b<<1

P0 = b

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

}

}

}

3. 00001111

11110000

# iekļaut

anulēt galveno ()

{

neparakstīts i

kamēr (1)

{

P0 = 0x0F

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

P0 = 0xF0

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

}

}

4. 00000001

00000011

00000111

.

.

11111111

# iekļaut

anulēt galveno ()

{

neparakstīts i

neparakstīta char j, b

kamēr (1)

{

P0 = 0x01

b = P0

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

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

0x01

P0 = b

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

}

}

Skaitļu parādīšana 7 segmentu displejā, izmantojot 8051 mikrokontrolleru

The 7 segmentu displeji ir pamata elektroniskie displeji, kurus daudzās sistēmās izmanto ciparu informācijas parādīšanai. Tas sastāv no astoņām gaismas diodēm, kas ir savienotas secīgi, lai parādītu ciparus no 0 līdz 9, kad ir ieslēgtas atbilstošas ​​LED kombinācijas. Viņi vienlaikus var parādīt tikai vienu ciparu.

Skaitļu parādīšana 7 segmentu displejā, izmantojot 8051 mikrokontrolleru

Skaitļu parādīšana 7 segmentu displejā, izmantojot 8051 mikrokontrolleru

1. WAP, lai četros 7 segmentu displejos parādītu ciparus no ‘0 līdz F’?

# iekļaut
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
anulēt galveno ()
{
neparakstītsharms n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
neparakstījies tu, j
a = b = c = d = 1
kamēr (1)
{
par (i = 0i<10i++)
{
P2 = n [i]
par (j = 0j<60000j++)
}
}
}

2. WAP, lai parādītu skaitļus no ’00 līdz 10 ’7 segmentu displejos?

# iekļaut
sbit a = P3 ^ 0
sbit b = P3 ^ 1
void display1 ()
void display2 ()
anulēt kavēšanos ()
anulēt galveno ()
{
neparakstītsharms n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
neparakstījies tu, j
ds1 = ds2 = 0
kamēr (1)
{
par (i = 0, i<20i++)
display1 ()
display2 ()
}
}
void display1 ()
{
a = 1
b = 0
P2 = s [ds1]
kavēšanās ()
a = 1
b = 0
P2 = s [ds1]
kavēšanās ()
}
void display2 ()
{
ds1 ++
ja (ds1> = 10)
{
ds1 = 0
ds2 ++
ja (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
anulēt kavēšanos ()
{
neparakstīts k
par (k = 0k<30000k++)
}

Taimera / skaitītāja aprēķini un programma, izmantojot mikrokontrolleru 8051

Kavēšanās ir viens no svarīgiem faktoriem lietojumprogrammu izstrādē. Tomēr parastā aizkave nedos vērtīgu rezultātu, lai pārvarētu šo problēmu, ieviešot taimera aizkavi. The taimeri un skaitītāji ir mikrokontrollera aparatūras sastāvdaļas, ko daudzās lietojumprogrammās izmanto, lai nodrošinātu dārgo laika aizturi ar skaitīšanas impulsiem. Abus uzdevumus īsteno programmatūras tehnika.

Taimera aizkave

WAP, lai ģenerētu 500us laika aizkavi, izmantojot T1M2 (taimeris1 un režīms2)?

# iekļaut

anulēt galveno ()
{
neparakstīta char i
TMOD = 0x20 // iestatīt taimera režīmu //
par (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // iestatiet laika aizkavi //
TH1 = 0x00
TR1 = 1 // taimeris oN //
Kamēr (TF1 == 0) // pārbaudiet karodziņa bitu //
TF1 = 0
}
TR1 = 0 // taimeris izslēgts //
}

Normāla cilpas aizkave

anulēt kavēšanos ()

{
neparakstīts k
par (k = 0k<30000k++)
}

Sērijas komunikācijas aprēķini un programma, izmantojot 8051 mikrokontrolleru

Signāla pārraidīšanai un saņemšanai parasti izmanto sērijveida sakarus. 8051 mikrokontrolleris sastāv UART sērijveida saziņa signālus, ko pārraida un saņem Rx un Tx tapas. UART ņem datu baitus un secīgi nosūta atsevišķus bitus. Reģistri ir veids, kā apkopot un saglabāt datus atmiņā. UART ir pusduplekss protokols. Puse dupleksā nozīmē datu pārsūtīšanu un saņemšanu, bet ne vienlaikus.

Sērijas komunikācijas aprēķini un programma, izmantojot 8051 mikrokontrolleru

Sērijas komunikācijas aprēķini un programma, izmantojot 8051 mikrokontrolleru

1. WAP, lai pārsūtītu rakstzīmi “S” uz sērijas logu, kā datu pārraides ātrumu izmanto 9600?

28800 ir 8051 mikrokontrollera maksimālais pārraides ātrums

28800/9600 = 3

Bodu ātrums ‘3’ tiek saglabāts taimeros

# iekļaut

anulēt galveno ()

{
SCON = 0x50 // sākt seriālo komunikāciju //
TNOD = 0x20 // izvēlēts taimera režīms //
TH1 = 3 // ielādē pārraides ātrumu //
TR1 = 1 // taimeris ieslēgts //
SBUF = ’S’ // saglabājiet rakstzīmi reģistrā //
kamēr (TI == 0) // pārbauda pārtraukumu reģistru //
TI = 0
TR1 = 0 // taimera izslēgšana //
while (1) // nepārtraukta cilpa //
}

2. WAP, lai saņemtu datus no hiperterminālā un nosūtītu tos uz mikrokontrollera PORT 0, izmantojot 9600 baudu?

28800 ir 8051 mikrokontrollera maksimālais pārraides ātrums

28800/9600 = 3

Bodu ātrums ‘3’ tiek saglabāts taimeros

# iekļaut

anulēt galveno ()
{
SCON = 0x50 // sākt seriālo komunikāciju //
TMOD = 0x20 // izvēlēts taimera režīms //
TH1 = 3 // ielādē pārraides ātrumu //
TR1 = 1 // taimeris ieslēgts //
PORT0 = SBUF // nosūtiet datus no SBUF uz portu0 //
kamēr (RI == 0) // pārbauda pārtraukumu reģistru //
RI = 0
TR1 = 0 // taimera izslēgšana //
while (1) // pārtrauc programmu, kad tiek saņemts raksturs //
}

Pārtrauciet programmas, izmantojot 8051 mikrokontrolleru

Pārtraukums ir signāls, kas liek pārtraukt pašreizējo programmu un nekavējoties izpildīt otru programmu. 8051 mikrokontrolleris nodrošina 6 pārtraukumus, kas ir iekšēji un ārēji pārtraukt avotus . Kad notiek pārtraukums, mikrokontrolleris pauzē pašreizējo uzdevumu un novēro pārtraukumu, izpildot ISR, tad mikrokontrolleris atgriežas pie pēdējā uzdevuma.

WAP, lai veiktu kreisās maiņas darbību, kad notiek taimera 0 pārtraukumi, tad veiciet P0 pārtraukšanas darbību galvenajā funkcijā?

# iekļaut

neparakstīta char

void timer0 () pārtraukums 2 // izvēlētais taimeris0 pārtraukums //
{
b = 0x10
P1 = b<<2
}
anulēt galveno ()
{
neparakstīta char a, t
IE = 0x82 // iespējot taimera0 pārtraukumu //
TMOD = 0x01
TLo = 0xFC // pārtraukuma taimeris //
TH1 = 0xFB
TR0 = 1
a = 0x00
kamēr (1)
{
par (i = 0i<255i++)
{
a ++
Po = a
}
}
}

Tastatūras programmēšana, izmantojot 8051 mikrokontrolleru

Matricas tastatūra ir analogā komutācijas ierīce, kuru izmanto daudzās iegultās lietojumprogrammās, lai lietotājs varētu veikt nepieciešamos uzdevumus. A matricas tastatūra sastāv no slēdžu izvietojuma matricas formātā rindās un kolonnās. Rindas un kolonnas ir savienotas ar mikrokontrolleru tā, ka slēdžu rinda ir savienota ar vienu tapu un katras kolonnas slēdži ir savienoti ar citu tapu, pēc tam veiciet darbības.

Tastatūras programmēšana, izmantojot 8051 mikrokontrolleru

Tastatūras programmēšana, izmantojot 8051 mikrokontrolleru

1. WAP, lai pārslēgtu gaismas diode, nospiežot slēdzi

# iekļaut
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
anulēt kavēšanos ()
anulēt galveno ()
{
kamēr (1)
{
a = 0
b = 1
c = 1
d = 1
kavēšanās ()
a = 1
b = 0
c = 1
d = 1
anulēt kavēšanos ()
{
neparakstīta char i
TMOD = 0x20 // iestatīt taimera režīmu //
par (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // iestatiet laika aizkavi //
TH1 = 0x00
TR1 = 1 // taimeris oN //
Kamēr (TF1 == 0) // pārbaudiet karodziņa bitu //
TF1 = 0
}
TR1 = 0 // taimeris izslēgts //
}

2. WAP, lai ieslēgtu LED, nospiežot taustiņu ‘1’ uz tastatūras?

# iekļaut

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

anulēt galveno ()
{

r1 = 0
ja (c1 == 0)
{

LED = 0xff
}
}

3. WAP, lai uz septiņiem segmentiem parādītu skaitli 0,1,2,3,4,5, nospiežot attiecīgo tastatūras taustiņu?

# iekļaut

sbit r1 = P2 ^ 0

sbit c1 = P3 ^ 0

sbit r2 = P2 ^ 0

sbit c2 = P3 ^ 0

sbit a = P0 ^ 1

anulēt galveno ()

{

r1 = 0 a = 1

ja (c1 == 0)

{

a = 0xFC

}

Ja (c2 == 0)

{

a = 0x60

}

ja (c3 == 0)

{

a = 0xDA

}

Ja (c4 == 0)

{

a = 0xF2

}

}

LCD programmēšana ar 8051 mikrokontrolleru

The LCD displejs ir elektroniska ierīce, kuru bieži izmanto daudzās lietojumprogrammās, lai parādītu informāciju teksta vai attēla formātā. LCD ir displejs, kas var viegli parādīt rakstzīmes tā ekrānā. LCD displejā ir 8 datu līnijas un 3 vadības līnijas, kuras izmanto saskarnei ar mikrokontrolleru.

LCD programmēšana ar 8051 mikrokontrolleru

LCD programmēšana ar 8051 mikrokontrolleru

WAP, lai LED displejā parādītu “EDGEFX KITS”?

# iekļaut
#define kam P0

voidlcd_initi ()
voidlcd_dat (neparakstīta rakstzīme)
voidlcd_cmd (neparakstīta rakstzīme)
anulēt kavēšanos ()
tukšs displejs (neparakstītas char * s, neparakstītas char r)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit pie = P2 ^ 2
anulēt galveno ()
{

lcd_initi ()
lcd_cmd (0x80)
kavēšanās (100)
lcd_cmd (0xc0)
displejs (“edgefx komplekti”, 11)
kamēr (1)
}

tukšs displejs (neparakstītas char * s, neparakstītas char r)
{
neparakstīts w
par (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
kavēšanās (100)
lcd_cmd (0 × 38)
kavēšanās (100)
lcd_cmd (0 × 06)
kavēšanās (100)
lcd_cmd (0x0c)
kavēšanās (100)
}
voidlcd_dat (neparakstīts char dat)
{
ķemme = tas
rs = 1
rw = 0
in = 1
kavēšanās (100)
in = 0
}
}
voidlcd_cmd (neparakstīts char cmd)
{
nāca = cmd
rs = 0
rw = 0

in = 1
kavēšanās (100)
in = 0
}
void delay (neparakstīts int n)
{

neparakstīts a
par (a = 0a}

Ceru, ka šajā rakstā sniegta pamatinformācija par iegulto sistēmu programmēšanu, izmantojot mikrokontrolleru 8051, ar dažiem programmu piemēriem. Lai iegūtu detalizētu iegulto C programmēšanas apmācību, lūdzu, ievietojiet komentārus un jautājumus zemāk esošajā komentāru sadaļā.