Upotettu C-ohjelmointiopastus Keil-kielellä

Kokeile Instrumenttia Ongelmien Poistamiseksi





Sulautettu C on suosituin ohjelmointikieli ohjelmistoalalla sähköisten laitteiden kehittämiseen. Jokainen prosessori liittyy sulautettuihin ohjelmistoihin. Sulautettu C-ohjelmointi on tärkeä rooli suorittimen tiettyjen toimintojen suorittamisessa. Jokapäiväisessä elämässämme käytämme usein monia elektronisia laitteita, kuten pesukoneita, matkapuhelimia, digitaalikameroita ja niin edelleen, jotka toimivat sulautetun C: n ohjelmoimien mikro-ohjainten perusteella.

Sulautetun järjestelmän ohjelmointi

Sulautetun järjestelmän ohjelmointi



Kirjoitettu C-koodi on luotettavampi, kannettava ja skaalautuva ja itse asiassa paljon helpompi ymmärtää. Ensimmäinen ja tärkein työkalu on upotettu ohjelmisto, joka päättää sulautetun järjestelmän toiminnasta. Sulautettua C-ohjelmointikieliä käytetään useimmiten mikro-ohjainten ohjelmointiin.


Sulautetun C-ohjelmoinnin opetusohjelma (8051)

Ohjelman kirjoittamista varten sulautetuilla suunnittelijoilla on oltava riittävät tiedot tiettyjen prosessorien tai ohjainten laitteistoista, koska upotettu C-ohjelmointi on täydellinen laitteistoon liittyvä ohjelmointitekniikka.



Ohjelmointiopetus

Ohjelmointiopetus

Aikaisemmin monia sulautettuja sovelluksia kehitettiin käyttämällä kokoonpanotason ohjelmointia. Ne eivät kuitenkaan tarjoaneet siirrettävyyttä tämän ongelman ratkaisemiseksi useiden korkean tason kielten, kuten C, COBOL ja Pascal, myötä. Kuitenkin C-kieli sai laajan hyväksynnän sulautettujen järjestelmien sovelluskehitys , ja se tekee niin edelleen.

Upotettu järjestelmä

Sulautettu järjestelmä määritellään sulautetun C-ohjelmointiohjelmiston ja laitteisto-osan yhdistelmänä, joka koostuu pääosin mikrokontrollereista, ja se on tarkoitettu tietyn tehtävän suorittamiseen. Tämän tyyppisiä sulautettuja järjestelmiä käytetään jokapäiväisessä elämässämme, kuten pesukoneet ja videonauhurit, jääkaapit ja niin edelleen. Sulautettu järjestelmä otettiin ensimmäisen kerran käyttöön 8051-mikrokontrollereilla.

Upotettu järjestelmä

Upotettu järjestelmä

Johdanto 8051-mikrokontrolleriin

8051-mikrokontrolleri on perusmikrokontrolleri, jonka Intel-yritys otti ensimmäisen kerran käyttöön vuodesta 1970 lähtien. Sen on kehittänyt 8086-prosessoriarkkitehtuuri. 8051 on mikrokontrollerien perhe, jonka ovat kehittäneet erilaiset valmistajat, kuten Philips, Atmel, dalls ja niin edelleen. 8051-mikrokontrollerit on käytetty monissa sulautetuissa tuotteissa pienistä lasten leluista suuriin autojärjestelmiin.


8051-mikrokontrolleri

8051-mikrokontrolleri

8051-mikrokontrolleri on 8-bittinen ”CISC” -arkkitehtuuri . Se koostuu muistista, sarjaliikenteestä, keskeytyksistä, tulo- / lähtöporteista ja ajastimista / laskureista, jotka on rakennettu yhdeksi integroiduksi siruksi, joka on ohjelmoitu ohjaamaan siihen liitettyjä oheislaitteita. Ohjelma on tallennettu mikro-ohjaimen RAM-muistiin, mutta ennen ohjelman kirjoittamista meidän on tiedettävä RAM-muisti organisaatio mikrokontrollerin.

Sulautettujen järjestelmien ohjelmointi: Perustiedot

Jokainen toiminto on joukko lauseita, jotka suorittavat tietyn tehtävän, ja yhden tai useamman toiminnon kokoelmaa kutsutaan ohjelmointikieleksi. Jokainen kieli koostuu joistakin peruselementeistä ja kieliopillisista säännöistä. C-kielen ohjelmointi on suunniteltu toimimaan merkistöjen kanssa, muuttujia, tietotyyppejä, vakioita, avainsanoja, lausekkeita ja niin edelleen käytetään C-ohjelman kirjoittamiseen. Kaikki nämä otetaan huomioon otsikkotiedostossa tai kirjastotiedostossa, ja se esitetään muodossa

#sisältää

Sulautetun C-ohjelmoinnin kehittäminen

Sulautetun C-ohjelmoinnin kehittäminen

C-kielen laajennusta kutsutaan sulautetuksi C-ohjelmointikieleksi. Yllä olevaan verrattuna C-kielellä sulautetulla ohjelmoinnilla on joitain lisäominaisuuksia, kuten tietotyypit ja avainsanat, ja otsikkotiedosto tai kirjastotiedosto on esitetty

#sisältää

Upotetut C-avainsanat

  • sbit
  • bitti
  • SFR
  • haihtuva
  • makrot määrittävät

”Sbit”: ää käytetään mikro-ohjaimen yhden PIN-koodin ilmoittamiseen. Esimerkiksi LED on kytketty P0.1-nastaan, ei ole suositeltavaa lähettää arvoa suoraan porttinastalle. Ensinnäkin, meidän on ilmoitettava tappi toisella muuttujalla ja sen jälkeen, kun voimme käyttää mitä tahansa ohjelmaa.

Syntaksi: sbit a = P0 ^ 1 // ilmoittaa vastaavan nastan muuttujalla //
a = 0x01 // lähetä arvo porttinastalle //

Bittiä käytetään muuttujan tilan tarkistamiseen.

Syntaksi: bitti c // ilmoittaa bittimuuttujan //
c = a // arvo määritetään c-muuttujalle //
jos (c == 1) // tarkista ehto tosi tai väärä //

{
… ..
……
}

SFR-avainsanaa käytetään pääsemään SFR-rekistereihin toisella nimellä. SFR-rekisteri määritellään a erikoistoimintorekisteri , se sisältää kaikki oheislaitteisiin liittyvät rekisterit ilmoittamalla osoitteen. SFR-rekisteri ilmoitetaan SFR-avainsanalla. SFR-avainsanan on oltava isoilla kirjaimilla.

Syntaksi: SFR-portti = 0x00 // 0x00 on port0-osoite, jonka porttimuuttuja ilmoittaa //
Port = 0x01 // lähetä sitten arvo porttiin0 //
viive()
portti = 0x00
viive()

Haihtuva avainsana on tärkein sulautettujen järjestelmien kehityksessä. Haihtuvan avainsanan arvon kanssa ilmoittavaa muuttujaa ei voitu muuttaa odottamatta. Sitä voidaan käyttää muistikartoitetuissa oheisrekistereissä, ISR: ien muokkaamissa globaaleissa muuttujissa. Ilman haihtuvaa avainsanaa tietojen lähettämiseen ja vastaanottamiseen tapahtuu koodivirhe tai optimointivirhe.

Syntaksi: haihtuva int k

Makro on nimi, jota käytetään lausekelohkon julistamiseen esikäsittelijän direktiiviksi. Aina kun nimeä käytetään, se korvataan makron sisällöllä. Makrot edustavat #define. Makrot määrittelevät koko portin nastat.

Syntaksi: #define dat Po // koko portti ilmoitetaan muuttujalla //
dat = 0x01 // data lähetetään porttiin0 //

Sulautettujen C-perusohjelmat

Mikrokontrollerin ohjelmointi vaihtelee kullekin käyttöjärjestelmän tyyppi . Vaikka olemassa on useita käyttöjärjestelmiä, kuten Linux, Windows, RTOS ja niin edelleen. RTOS: lla on kuitenkin useita etuja sulautettujen järjestelmien kehittämisessä. Tässä artikkelissa käsitellään sulautetun C: n perusohjelmointia sulautetun C-ohjelmoinnin kehittämiseksi 8051-mikrokontrolleria käyttäen.

Sulautetut C-ohjelmointivaiheet

Sulautetut C-ohjelmointivaiheet

  • LED vilkkuu 8051-mikrokontrollerin kanssa
  • Numero Näytetään 7-segmenttinäytöllä 8051-mikrokontrollerilla
  • Ajastin / laskuri-laskelmat ja ohjelmointi 8051-mikrokontrollerilla
  • Sarjaliikennelaskelmat ja -ohjelma 8051-mikrokontrollerilla
  • Keskeytä ohjelmat 8051-mikrokontrollerilla
  • Näppäimistö Ohjelmointi 8051-mikrokontrollerilla
  • LCD-ohjelmointi 8051-mikrokontrollerilla

LED vilkkuu 8051-mikrokontrollerilla

LED on puolijohdelaite, jota käytetään monissa sovelluksissa, lähinnä indikaatiotarkoituksiin. Se löytää valtavan määrän sovelluksia indikaattoreina testin aikana tulosten oikeellisuuden tarkistamiseksi eri vaiheissa. Ne ovat erittäin halpoja ja helposti saatavilla eri muodoissa, väreissä ja kooissa. LEDejä käytetään suunnittelussa viestinäyttötaulut ja liikennevalojen merkkivalot jne. Tässä LEDit ovat liitetty 8051-mikrokontrollerien PORT0: een.

LED vilkkuu 8051-mikrokontrollerilla

LED vilkkuu 8051-mikrokontrollerilla

1. 01010101
10101010

#include // otsikkotiedosto //
void main () // ohjelman suoritustilapiste //
{
allekirjoittamaton int i // tietotyyppi //
while (1) // jatkuvalle silmukalle //
{
P0 = 0x55 // lähetä heksa-arvo porttiin0 //
(i = 0i<30000i++) //normal delay//
P0 = 0x3AA // lähetä heksa-arvo porttiin0 //
(i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10000000

#sisältää

void main ()

{

allekirjoittamaton i

allekirjoittamaton merkki j, b

kun taas (1)

{

P0 = 0x01

b = P0

(j-0j<3000j++)

(j = 0j<8j++)

{

b = b<<1

P0 = b

(j-0j<3000j++)

}

}

}

3. 00001111

11110000

#sisältää

void main ()

{

allekirjoittamaton i

kun taas (1)

{

P0 = 0x0F

(j-0j<3000j++)

P0 = 0xF0

(j-0j<3000j++)

}

}

4. 00000001

00000011

00000111

.

.

11111111

#sisältää

void main ()

{

allekirjoittamaton i

allekirjoittamaton merkki j, b

kun taas (1)

{

P0 = 0x01

b = P0

(j-0j<3000j++)

(j = 0j<8j++)

0x01

P0 = b

(j-0j<3000j++)

}

}

Numeroiden näyttäminen 7-segmenttinäytössä 8051-mikrokontrollerilla

7-segmenttiset näytöt on elektroniset perusnäytöt, joita käytetään monissa järjestelmissä numeeristen tietojen näyttämiseen. Se koostuu kahdeksasta LEDistä, jotka on kytketty peräkkäin siten, että näytetään numerot 0-9, kun asianmukaiset LED-yhdistelmät kytketään päälle. He voivat näyttää vain yhden numeron kerrallaan.

Numeroiden näyttäminen 7-segmenttinäytössä 8051-mikrokontrollerilla

Numeroiden näyttäminen 7-segmenttinäytössä 8051-mikrokontrollerilla

1. WAP näyttääksesi numeromuodot ”0 - F” neljällä 7 segmentin näytöllä?

#sisältää
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
void main ()
{
allekirjoittamaton merkki n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
allekirjoittamatta sinua, j
a = b = c = d = 1
kun taas (1)
{
(i = 0i<10i++)
{
P2 = n [i]
(j = 0j<60000j++)
}
}
}

2. WAP näyttääksesi luvut '00 - 10 '7 segmentin näytöllä?

#sisältää
sbit a = P3 ^ 0
sbit b = P3 ^ 1
void display1 ()
void display2 ()
mitätön viive ()
void main ()
{
allekirjoittamaton merkki n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
allekirjoittamatta sinua, j
ds1 = ds2 = 0
kun taas (1)
{
(i = 0, i<20i++)
näyttö1 ()
näyttö2 ()
}
}
void display1 ()
{
a = 1
b = 0
P2 = s [ds1]
viive()
a = 1
b = 0
P2 = s [ds1]
viive()
}
void display2 ()
{
ds1 ++
jos (ds1> = 10)
{
ds1 = 0
ds2 ++
jos (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
mitätön viive ()
{
allekirjoittamaton k
(k = 0k<30000k++)
}

Ajastin- / laskurilaskelmat ja ohjelmointi 8051-mikrokontrollerilla

Viivästys on yksi tärkeistä tekijöistä sovellusohjelmistojen kehittämisessä. Normaali viive ei kuitenkaan anna arvokasta tulosta tämän ongelman voittamiseksi ajastimen viiveen toteuttamiseksi. ajastimet ja laskurit ovat mikrokontrollerin laitteistokomponentteja, jota käytetään monissa sovelluksissa tarjoamaan kallis aikaviive laskupulsseilla. Molemmat tehtävät toteutetaan ohjelmistotekniikalla.

Ajastimen viive

WAP tuottaa 500us-aikaviive T1M2: lla (ajastin1 ja tila2)?

#sisältää

void main ()
{
allekirjoittamaton merkki i
TMOD = 0x20 // ajastintilan asettaminen //
(i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // aseta aikaviive //
TH1 = 0x00
TR1 = 1 // ajastin oN //
Vaikka (TF1 == 0) // tarkista lippubitti //
TF1 = 0
}
TR1 = 0 // ajastin pois päältä //
}

Normaali silmukan viive

mitätön viive ()

{
allekirjoittamaton k
(k = 0k<30000k++)
}

Sarjaviestinnän laskelmat ja ohjelmointi 8051-mikrokontrollerilla

Sarjaliikennettä käytetään yleisesti signaalin lähettämiseen ja vastaanottamiseen. 8051-mikrokontrolleri on koostunut UART-sarjaliikenne Rx- ja Tx-nastojen lähettämät ja vastaanottamat signaalit. UART ottaa tavua tietoja ja lähettää yksittäiset bitit peräkkäin. Rekisterit ovat tapa kerätä ja tallentaa tietoja muistiin. UART on puoliduplex-protokolla. Puoliduplex tarkoittaa tietojen siirtämistä ja vastaanottamista, mutta ei samanaikaisesti.

Sarjaviestinnän laskelmat ja ohjelmointi 8051-mikrokontrollerilla

Sarjaviestinnän laskelmat ja ohjelmointi 8051-mikrokontrollerilla

1. WAP lähettääksesi merkin ”S” sarjaikkunaan, käyttääkö baudinopeus 9600?

28800 on 8051-mikrokontrollerin suurin siirtonopeus

28800/9600 = 3

Siirtonopeus ‘3’ on tallennettu ajastimiin

#sisältää

void main ()

{
SCON = 0x50 // aloita sarjaliikenne //
TNOD = 0x20 // valittu ajastintila //
TH1 = 3 // lataa siirtonopeus //
TR1 = 1 // Ajastin päällä //
SBUF = ’S’ // tallenna merkki rekisteriin //
while (TI == 0) // tarkista keskeytysrekisteri //
TI = 0
TR1 = 0 // Ajastin pois päältä //
while (1) // jatkuva silmukka //
}

2. WAP vastaanottaa tietoja hyperterminalilta ja lähettää nämä tiedot mikro-ohjaimen PORT 0: een käyttäen 9600 baudia?

28800 on 8051-mikrokontrollerin suurin siirtonopeus

28800/9600 = 3

Siirtonopeus ‘3’ on tallennettu ajastimiin

#sisältää

void main ()
{
SCON = 0x50 // aloita sarjaliikenne //
TMOD = 0x20 // valittu ajastintila //
TH1 = 3 // lataa siirtonopeus //
TR1 = 1 // Ajastin päällä //
PORT0 = SBUF // lähetä tiedot SBUF: stä porttiin0 //
while (RI == 0) // tarkista keskeytysrekisteri //
RI = 0
TR1 = 0 // Ajastin pois päältä //
while (1) // pysäytä ohjelma, kun merkki vastaanotetaan //
}

Keskeytä ohjelmat 8051-mikrokontrollerilla

Keskeytys on signaali, joka pakottaa lopettamaan nykyisen ohjelman ja suorittamaan toisen ohjelman välittömästi. 8051-mikrokontrolleri tarjoaa 6 keskeytystä, jotka ovat sisäisiä ja ulkoisia keskeytä lähteet . Kun keskeytys tapahtuu, mikrokontrolleri keskeyttää nykyisen tehtävän ja huolehtii keskeytyksestä suorittamalla ISR: n, sitten mikrokontrolleri palaa takaisin viimeisimpään tehtävään.

WAP suorittamaan vasemman siirtotoiminnon, kun ajastin 0 keskeytyy, suorita sitten keskeytysoperaatio P0: lle päätoiminnossa?

#sisältää

allekirjoittamaton merkki b

void timer0 () keskeytys 2 // valittu ajastin0 keskeytys //
{
b = 0x10
P1 = b<<2
}
void main ()
{
allekirjoittamaton merkki a, i
IE = 0x82 // ota käyttöön ajastimen0 keskeytys //
TMOD = 0x01
TLo = 0xFC // keskeytysajastin //
TH1 = 0xFB
TR0 = 1
a = 0x00
kun taas (1)
{
(i = 0i<255i++)
{
a ++
Po = a
}
}
}

Näppäimistön ohjelmointi 8051-mikrokontrollerilla

Matriisinäppäimistö on analoginen kytkinlaite, jota käytetään monissa sulautetuissa sovelluksissa, jotta käyttäjä voi suorittaa tarvittavat tehtävät. A matriisinäppäimistö koostuu kytkinten järjestelystä matriisimuodossa riveissä ja sarakkeissa. Rivit ja sarakkeet on kytketty mikrokontrolleriin siten, että kytkinten rivi on kytketty yhteen nastaan ​​ja kussakin sarakkeessa olevat kytkimet on kytketty toiseen nastaan, ja suorita sitten toiminnot.

Näppäimistön ohjelmointi 8051-mikrokontrollerilla

Näppäimistön ohjelmointi 8051-mikrokontrollerilla

1. WAP vaihtaa LED-valoa painamalla kytkintä

#sisältää
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
mitätön viive ()
void main ()
{
kun taas (1)
{
a = 0
b = 1
c = 1
d = 1
viive()
a = 1
b = 0
c = 1
d = 1
mitätön viive ()
{
allekirjoittamaton merkki i
TMOD = 0x20 // ajastintilan asettaminen //
(i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // aseta aikaviive //
TH1 = 0x00
TR1 = 1 // ajastin oN //
Vaikka (TF1 == 0) // tarkista lippubitti //
TF1 = 0
}
TR1 = 0 // ajastin pois päältä //
}

2. WAP kytkeäksesi LED-valon päälle painamalla näppäimistön näppäintä 1?

#sisältää

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

void main ()
{

r1 = 0
jos (c1 == 0)
{

LED = 0xff
}
}

3. WAP näyttääksesi luvun 0,1,2,3,4,5 seitsemällä segmentillä painamalla vastaavaa näppäimistön näppäintä?

#sisältää

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

jos (c1 == 0)

{

a = 0xFC

}

Jos (c2 == 0)

{

a = 0x60

}

jos (c3 == 0)

{

a = 0xDA

}

Jos (c4 == 0)

{

a = 0xF2

}

}

LCD-ohjelmointi 8051-mikrokontrollerilla

LCD-näyttö on elektroninen laite, jota käytetään usein monissa sovelluksissa tietojen näyttämiseksi teksti- tai kuvamuodossa. LCD-näyttö on näyttö, joka voi helposti näyttää merkkejä näytöllä. LCD-näytössä on 8 tietolinjaa ja 3 ohjauslinjaa, joita käytetään liitäntään mikro-ohjaimeen.

LCD-ohjelmointi 8051-mikrokontrollerilla

LCD-ohjelmointi 8051-mikrokontrollerilla

WAP näyttääksesi “EDGEFX KITS” LED-näytössä?

#sisältää
#define kam P0

voidlcd_initi ()
voidlcd_dat (allekirjoittamaton merkki)
voidlcd_cmd (allekirjoittamaton merkki)
mitätön viive ()
tyhjä näyttö (allekirjoittamattomat merkit * s, allekirjoittamattomat merkit)

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

lcd_initi ()
lcd_cmd (0x80)
viive (100)
lcd_cmd (0xc0)
näyttö (“edgefx-sarjat”, 11)
kun taas (1)
}

mitätön näyttö (allekirjoittamattomat merkit * s, allekirjoittamattomat merkit)
{
allekirjoittamaton w
(w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
viive (100)
lcd_cmd (0 × 38)
viive (100)
lcd_cmd (0 × 06)
viive (100)
lcd_cmd (0x0c)
viive (100)
}
voidlcd_dat (allekirjoittamaton char dat)
{
kampa = se
rs = 1
rw = 0
sisään = 1
viive (100)
sisään = 0
}
}
voidlcd_cmd (allekirjoittamaton char cmd)
{
tuli = cmd
rs = 0
rw = 0

sisään = 1
viive (100)
sisään = 0
}
void delay (allekirjoittamaton int n)
{

allekirjoittamaton a
(a = 0a}

Toivottavasti tämä artikkeli antaa perustiedot sulautettujen järjestelmien ohjelmoinnista 8051-mikrokontrolleria käyttäen muutamalla esimerkkiohjelmalla. Yksityiskohtainen upotettu C-ohjelmointiopetus lähetä kommenttisi ja kyselysi alla olevaan kommenttiosioon.