Embedded C Programming Tutorial with Keil Language

Prøv Instrumentet Vårt For Å Eliminere Problemer





Embedded C er det mest populære programmeringsspråket i programvarefeltet for utvikling av elektroniske dingser. Hver prosessor er tilknyttet innebygd programvare. Innebygd C-programmering spiller en viktig rolle i å utføre spesifikke funksjoner av prosessoren. I vårt daglige liv bruker vi ofte mange elektroniske enheter som vaskemaskiner, mobiltelefoner, digitalkamera og så videre, vil fungere basert på mikrokontrollere som er programmert av innebygd C.

Innebygd systemprogrammering

Innebygd systemprogrammering



C-koden som er skrevet er mer pålitelig, bærbar og skalerbar og faktisk mye lettere å forstå. Det første og viktigste verktøyet er den innebygde programvaren som bestemmer driften av et innebygd system. Embedded C programmeringsspråk brukes hyppigst til programmering av mikrokontrollere.


Embedded C Programming Tutorial (8051)

For å skrive programmet må de innebygde designerne ha tilstrekkelig kunnskap om maskinvaren til bestemte prosessorer eller kontrollere, da den innebygde C-programmeringen er en fullstendig maskinvarerelatert programmeringsteknikk.



Programmeringsveiledning

Programmeringsveiledning

Tidligere ble mange innebygde applikasjoner utviklet ved hjelp av monteringsnivåprogrammering. Imidlertid ga de ikke bærbarhet for å overvinne dette problemet med fremveksten av forskjellige språk på høyt nivå som C, COBOL og Pascal. Imidlertid var det C-språket som fikk omfattende aksept for innebygde systemer applikasjonsutvikling , og det fortsetter å gjøre det.

Integrert system

Det innebygde systemet er definert som kombinasjonen av innebygd C-programmeringsprogramvare og maskinvaredelen som hovedsakelig består av mikrokontrollere, og det er ment å utføre den spesifikke oppgaven. Disse typene innebygde systemer brukes i vårt daglige liv som vaskemaskiner og videoopptakere, kjøleskap og så videre. Det innebygde systemet ble først introdusert av 8051 mikrokontrollere.

Integrert system

Integrert system

Introduksjon til 8051 Microcontroller

8051 mikrokontrolleren er en grunnleggende mikrokontroller, den ble først introdusert av ‘Intel Corporation’ siden 1970. Den er utviklet av 8086-prosessorarkitekturen. 8051 er en familie av mikrokontrolleren, som er utviklet av forskjellige produsenter som Philips, Atmel, dalls og så videre. 8051 mikrokontrollere har blitt brukt i mange innebygde produkter fra små barneleker til store bilsystemer.


8051 Mikrokontroller

8051 Mikrokontroller

8051-mikrokontrolleren er 8-bit ‘CISC’ arkitektur . Den består av minner, seriell kommunikasjon, avbrudd, inngang / utgang og tid / teller, innebygd i en enkelt integrert brikke, som er programmert til å kontrollere perifere enheter som er grensesnittet med den. Programmet er lagret i RAM-en til mikrokontrolleren, men før du skriver programmet, må vi være klar over RAM-en organisasjon av mikrokontrolleren.

Innebygd systemprogrammering: Grunnleggende erklæring

Hver funksjon er en samling utsagn som utfører en bestemt oppgave, og samlingen av en eller flere funksjoner kalles et programmeringsspråk. Hvert språk består av noen grunnleggende elementer og grammatiske regler. C-språkprogrammeringen er designet for å fungere med tegnsettet, variabler, datatyper, konstanter, nøkkelord, uttrykk og så videre brukes til å skrive et C-program. Alle disse vurderes under overskriftsfil eller bibliotekfil, og den er representert som

#inkludere

Embedded C Programming Development

Embedded C Programming Development

Utvidelsen av C-språket kalles et innebygd C-programmeringsspråk. Sammenlignet med ovenfor har den innebygde programmeringen i C-språket noen ekstra funksjoner som datatyper og nøkkelord, og overskriftsfilen eller biblioteksfilen er representert som

#inkludere

Embedded C Ekstra nøkkelord

  • sbit
  • bit
  • SFR
  • flyktige
  • makroer definerer

“Sbit” brukes til å erklære den eneste PIN-koden til mikrokontrolleren. For eksempel er LED koblet til P0.1-pinnen, det anbefales ikke å sende verdien til portpinnen direkte, først må vi erklære pinnen med en annen variabel, så etter at vi kan bruke hvor som helst i programmet.

Syntaks: sbit a = P0 ^ 1 // erklærer den respektive pin med en variabel //
a = 0x01 // send verdien til portnålen //

'Bit' brukes til å kontrollere statusen til variabelen.

Syntaks: bit c // erklærer bitvariabelen //
c = a // en verdi er tilordnet c-variabelen //
hvis (c == 1) // sjekk tilstanden sant eller usant //

{
… ..
……
}

Søkeordet “SFR” brukes til å få tilgang til SFR-registerene med et annet navn. SFR-registeret definert som en spesialfunksjonsregister , den inneholder alle perifere relaterte registre ved å angi adressen. SFR-registeret er erklært av SFR-nøkkelordet. SFR-nøkkelordet må være med store bokstaver.

Syntaks: SFR-port = 0x00 // 0x00 er en port0-adresse den blir deklarert av portvariabel //
Port = 0x01 // send deretter verdien til port0 //
forsinkelse()
port = 0x00
forsinkelse()

Søkeordet 'flyktige' er det viktigste i innebygd systemutvikling. Variabelen som erklærer med den flyktige søkeordverdien, kunne ikke endres uventet. Den kan brukes i minnekartede perifere registre, globale variabler modifisert av ISR-ene. Uten å bruke det flyktige nøkkelordet for overføring og mottak av data, vil kodefeil eller en optimaliseringsfeil finne sted.

Syntaks: flyktig int k

Makroen er et navn den brukes til å erklære utsagnssperren som et pre-prosessordirektiv. Hver gang navnet brukes, erstattes det av innholdet i makroen. Makroene representerer #definer. Hele portpinnene er definert av makroene.

Syntaks: #define dat Po // hele porten blir deklarert av en variabel //
dat = 0x01 // data sendes til port0 //

Grunnleggende Embedded C-programmer

Programmeringen av mikrokontrolleren vil variere for hver type operativsystem . Selv om det er mange operativsystemer som Linux, Windows, RTOS og så videre. RTOS har imidlertid flere fordeler for innebygd systemutvikling. Denne artikkelen diskuterer grunnleggende innebygd C-programmering for å utvikle innebygd C-programmering ved hjelp av en 8051 mikrokontroller.

Innebygde C programmeringstrinn

Innebygde C programmeringstrinn

  • LED blinker med 8051 mikrokontroller
  • Nummer vises på 7-segment skjerm med 8051 mikrokontroller
  • Timer / Counter beregninger og program ved hjelp av 8051 mikrokontroller
  • Seriekommunikasjonsberegninger og program ved bruk av 8051 mikrokontroller
  • Avbryt programmer ved hjelp av 8051 mikrokontroller
  • Programmering av tastatur ved bruk av 8051 mikrokontroller
  • LCD-programmering med 8051 mikrokontroller

LED blinker ved hjelp av 8051 mikrokontroller

LED-en er en halvlederenhet som brukes i mange applikasjoner, hovedsakelig for indikasjonsformål. Det er å finne et stort utvalg av applikasjoner som indikatorer under testen for å kontrollere gyldigheten av resultatene på forskjellige stadier. De er veldig billige og lett tilgjengelige i en rekke former, farger og størrelser. LED-lampene brukes til å designe meldingsvisningstavler og trafikkontrolllys osv. Her er lysdiodene grensesnittet med PORT0 på 8051 mikrokontrollere.

LED blinker ved hjelp av 8051 mikrokontroller

LED blinker ved hjelp av 8051 mikrokontroller

1. 01010101
10101010

#include // header file //
ugyldig hoved () // statens utførelse av program //
{
usignert int i // datatype //
mens (1) // for kontinuerlig sløyfe //
{
P0 = 0x55 // send heksaverdien til porten 0 //
for (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // send heksaverdien til porten0 //
for (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10.000.000

#inkludere

ugyldig hoved ()

{

usignertint i

usignert røye j, b

mens (1)

{

P0 = 0x01

b = P0

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

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

{

b = b<<1

P0 = b

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

}

}

}

3. 00001111

11110000

#inkludere

ugyldig hoved ()

{

usignertint i

mens (1)

{

P0 = 0x0F

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

P0 = 0xF0

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

}

}

4. 00000001

00000011

00000111

.

.

11111111

#inkludere

ugyldig hoved ()

{

usignertint i

usignert røye j, b

mens (1)

{

P0 = 0x01

b = P0

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

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

0x01

P0 = b

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

}

}

Viser tall på 7-segment skjerm med 8051 mikrokontroller

De 7-segment skjermer er de grunnleggende elektroniske skjermene, som brukes i mange systemer for å vise den numeriske informasjonen. Den består av åtte lysdioder som er koblet på rekkefølge for å vise sifre fra 0 til 9 når riktig kombinasjon av lysdioder er slått på. De kan bare vise ett siffer om gangen.

Viser tall på 7-segment skjerm med 8051 mikrokontroller

Viser tall på 7-segment skjerm med 8051 mikrokontroller

1. WAP for å vise tallene fra 0 til F på fire 7-segmentskjermbilder?

#inkludere
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
ugyldig hoved ()
{
usignert lading n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
usignert deg, j
a = b = c = d = 1
mens (1)
{
for (i = 0i<10i++)
{
P2 = n [i]
for (j = 0j<60000j++)
}
}
}

2. WAP for å vise tallene fra '00 til 10 'på 7-segmentskjermbilder?

#inkludere
sbit a = P3 ^ 0
sbit b = P3 ^ 1
ugyldig display1 ()
ugyldig display2 ()
ugyldig forsinkelse ()
ugyldig hoved ()
{
usignert lading n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
usignert deg, j
ds1 = ds2 = 0
mens (1)
{
for (i = 0, i<20i++)
display1 ()
display2 ()
}
}
ugyldig display1 ()
{
a = 1
b = 0
P2 = s [ds1]
forsinkelse()
a = 1
b = 0
P2 = s [ds1]
forsinkelse()
}
ugyldig display2 ()
{
ds1 ++
hvis (ds1> = 10)
{
ds1 = 0
ds2 ++
hvis (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
ugyldig forsinkelse ()
{
usignertint k
for (k = 0k<30000k++)
}

Timer / Counter Beregninger og program ved bruk av 8051 Microcontroller

Forsinkelsen er en av de viktigste faktorene i programvareutviklingen. Den normale forsinkelsen vil imidlertid ikke gi det dyrebare resultatet å løse dette problemet for implementering av tidsforsinkelsen. De tidtakere og tellere er maskinvarekomponenter i mikrokontrolleren, som brukes i mange applikasjoner for å gi den dyrebare tidsforsinkelsen med telleimpulser. Begge oppgavene er implementert av programvareteknikken.

Timer Delay

WAP for å generere 500us tidsforsinkelse ved hjelp av T1M2 (timer1 og mode2)?

#inkludere

ugyldig hoved ()
{
usignert røye i
TMOD = 0x20 // still timermodus //
for (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // still tidsforsinkelsen //
TH1 = 0x00
TR1 = 1 // timer på //
Mens (TF1 == 0) // sjekker flaggbiten //
TF1=0
}
TR1 = 0 // timer av //
}

Normal sløyfeforsinkelse

ugyldig forsinkelse ()

{
usignertint k
for (k = 0k<30000k++)
}

Seriekommunikasjonsberegninger og program ved bruk av 8051 mikrokontroller

Seriell kommunikasjon brukes ofte for å overføre og motta signalet. 8051-mikrokontrolleren har bestå UART seriell kommunikasjon signalene som overføres og mottas av Rx- og Tx-pinnene. UART tar databytes og sender de enkelte bitene på en sekvensiell måte. Registerene er en måte å samle og lagre dataene i minnet. UART er en halv dupleksprotokoll. Half-duplex betyr overføring og mottak av dataene, men ikke samtidig.

Seriekommunikasjonsberegninger og program ved bruk av 8051 mikrokontroller

Seriekommunikasjonsberegninger og program ved bruk av 8051 mikrokontroller

1. WAP for å overføre tegnet ‘S’ til det serielle vinduet, bruk 9600 som overføringshastighet?

28800 er den maksimale overføringshastigheten til 8051 mikrokontroller

28800/9600 = 3

Den overføringshastigheten ‘3’ er lagret i tidtakerne

#inkludere

ugyldig hoved ()

{
SCON = 0x50 // start seriell kommunikasjon //
TNOD = 0x20 // valgt tidsmodus //
TH1 = 3 // last overføringshastigheten //
TR1 = 1 // Timer PÅ //
SBUF = ’S’ // lagre tegnet i registeret //
mens (TI == 0) // sjekk avbruddsregisteret //
TI = 0
TR1 = 0 // AV tidtakeren //
mens (1) // kontinuerlig sløyfe //
}

2. WAP for å motta dataene fra hyperterminalen og sende dataene til PORT 0 på Microcontroller ved hjelp av 9600 baud?

28800 er den maksimale overføringshastigheten til 8051 mikrokontroller

28800/9600 = 3

Den overføringshastigheten ‘3’ er lagret i tidtakerne

#inkludere

ugyldig hoved ()
{
SCON = 0x50 // start seriell kommunikasjon //
TMOD = 0x20 // valgt timermodus //
TH1 = 3 // last overføringshastigheten //
TR1 = 1 // Timer PÅ //
PORT0 = SBUF // send dataene fra SBUF til port0 //
mens (RI == 0) // sjekk avbruddsregisteret //
RI = 0
TR1 = 0 // AV tidtakeren //
mens (1) // stopper programmet når tegnet mottas //
}

Avbryt programmer ved hjelp av 8051 Microcontroller

Avbruddet er et signal som tvinger til å stoppe det gjeldende programmet og utføre det andre programmet umiddelbart. 8051-mikrokontrolleren gir 6 avbrudd, som er interne og eksterne avbryt kilder . Når avbruddet skjer, stopper mikrokontrolleren den gjeldende oppgaven og ivaretar avbruddet ved å utføre ISR, og deretter returnerer mikrokontrolleren tilbake til den siste oppgaven.

WAP for å utføre venstre skiftoperasjon når timer 0 avbryter, og deretter utføre avbrytelsesoperasjonen for P0 i hovedfunksjonen?

#inkludere

usignert røye b

ugyldig timer0 () avbrudd 2 // valgt timer0 avbrudd //
{
b = 0x10
P1 = b<<2
}
ugyldig hoved ()
{
usignert røye a, jeg
IE = 0x82 // aktiver timeren 0 avbrudd //
TMOD = 0x01
TLo = 0xFC // avbruddstidsur //
TH1 = 0xFB
TR0 = 1
a = 0x00
mens (1)
{
for (i = 0i<255i++)
{
a ++
Po = a
}
}
}

Programmering av tastatur ved bruk av 8051 mikrokontroller

Matrisetastaturet er en analog bryteranordning, som brukes i mange innebygde applikasjoner for å tillate brukeren å utføre de nødvendige oppgavene. EN matrisetastatur består av et arrangement av brytere i matriseformat i rader og kolonner. Radene og kolonnene er koblet til mikrokontrolleren slik at raden med brytere er koblet til en pin og brytere i hver kolonne er koblet til en annen pin, og utfør deretter operasjonene.

Programmering av tastatur ved bruk av 8051 mikrokontroller

Programmering av tastatur ved bruk av 8051 mikrokontroller

1. WAP for å bytte LED ved å trykke på bryteren

#inkludere
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
ugyldig forsinkelse ()
ugyldig hoved ()
{
mens (1)
{
a = 0
b = 1
c = 1
d = 1
forsinkelse()
a = 1
b = 0
c = 1
d = 1
ugyldig forsinkelse ()
{
usignert røye i
TMOD = 0x20 // still timermodus //
for (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // still tidsforsinkelsen //
TH1 = 0x00
TR1 = 1 // timer på //
Mens (TF1 == 0) // sjekker flaggbiten //
TF1=0
}
TR1 = 0 // timer av //
}

2. WAP for å slå på LED-lampen ved å trykke på tasten ‘1’ på tastaturet?

#inkludere

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

ugyldig hoved ()
{

r1 = 0
hvis (c1 == 0)
{

LED = 0xff
}
}

3. WAP for å vise tallet 0,1,2,3,4,5 på det syv segmentet ved å trykke på den respektive tasten på tastaturet?

#inkludere

sbit r1 = P2 ^ 0

sbit c1 = P3 ^ 0

sbit r2 = P2 ^ 0

sbit c2 = P3 ^ 0

sbit a = P0 ^ 1

ugyldig hoved ()

{

r1 = 0 a = 1

hvis (c1 == 0)

{

a = 0xFC

}

Hvis (c2 == 0)

{

a = 0x60

}

hvis (c3 == 0)

{

a = 0xDA

}

Hvis (c4 == 0)

{

a = 0xF2

}

}

LCD-programmering med 8051 mikrokontroller

De LCD-skjerm er en elektronisk enhet, som ofte brukes i mange applikasjoner for å vise informasjonen i et tekst- eller bildeformat. LCD-skjermen er en skjerm som enkelt kan vise tegn på skjermen. LCD-skjermen består av 8-datalinjer og 3-kontrollinjer som brukes til å grensesnitt til mikrokontrolleren.

LCD-programmering med 8051 mikrokontroller

LCD-programmering med 8051 mikrokontroller

WAP for å vise “EDGEFX KITS” på LED-skjerm?

#inkludere
#definer kam P0

voidlcd_initi ()
voidlcd_dat (usignert røye)
voidlcd_cmd (usignert røye)
ugyldig forsinkelse ()
ugyldig visning (usignerte tegn *, usignerte tegn)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit ved = P2 ^ 2
ugyldig hoved ()
{

lcd_initi ()
lcd_cmd (0x80)
forsinkelse (100)
lcd_cmd (0xc0)
display (“edgefx kits”, 11)
mens (1)
}

ugyldig visning (usignerte tegn *, usignerte tegn)
{
usignertint m
for (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
forsinkelse (100)
lcd_cmd (0 × 38)
forsinkelse (100)
lcd_cmd (0 × 06)
forsinkelse (100)
lcd_cmd (0x0c)
forsinkelse (100)
}
voidlcd_dat (usignert char dat)
{
kam = det
rs = 1
rw = 0
i = 1
forsinkelse (100)
i = 0
}
}
voidlcd_cmd (usignert char cmd)
{
kom = cmd
rs = 0
rw = 0

i = 1
forsinkelse (100)
i = 0
}
ugyldig forsinkelse (usignert int n)
{

usignertint a
for (a = 0a}

Håper denne artikkelen gir grunnleggende informasjon om innebygd systemprogrammering ved bruk av 8051 mikrokontroller med noen få eksempler på programmer. For detaljert innebygd C-programmeringsveiledning, vennligst legg inn kommentarer og spørsmål i kommentarseksjonen nedenfor.