Embedded C Programmering Tutorial med Keil Language

Embedded C Programmering Tutorial med Keil Language

Embedded C er det mest populære programmeringssprog inden for softwarefeltet til udvikling af elektroniske gadgets. Hver processor er tilknyttet integreret software. Integreret C-programmering spiller en vigtig rolle i udførelsen af ​​specifikke funktioner af processoren. I vores daglige liv bruger vi ofte mange elektroniske enheder såsom vaskemaskiner, mobiltelefoner, digitalkamera og så videre fungerer baseret på mikrocontrollere, der er programmeret af indlejret C.

Integreret systemprogrammering

Integreret systemprogrammering



Den skrevne C-kode er mere pålidelig, bærbar og skalerbar og faktisk meget lettere at forstå. Det første og vigtigste værktøj er den integrerede software, der bestemmer driften af ​​et integreret system. Embedded C programmeringssprog bruges hyppigst til programmering af mikrocontrollere.




Embedded C Programmering Tutorial (8051)

For at skrive programmet skal de indlejrede designere have tilstrækkelig viden om hardwaren til bestemte processorer eller controllere, da den indlejrede C-programmering er en fuld hardware-relateret programmeringsteknik.

Programmeringsvejledning

Programmeringsvejledning



Tidligere blev mange indlejrede applikationer udviklet ved hjælp af programmering på forsamlingsniveau. De leverede imidlertid ikke bærbarhed for at overvinde dette problem med fremkomsten af ​​forskellige sprog på højt niveau som C, COBOL og Pascal. Det var dog C-sproget, der fik omfattende accept for indbyggede systemer applikationsudvikling , og det fortsætter med at gøre det.

Indbygget system

Det integrerede system er defineret som kombinationen af ​​integreret C-programmeringssoftware og hardwaredelen, der hovedsageligt består af mikrokontroller, og det er beregnet til at udføre den specifikke opgave. Disse typer af indlejrede systemer bruges i vores daglige liv som vaskemaskiner og videooptagere, køleskabe og så videre. Det integrerede system blev først introduceret af 8051 mikrokontrollere.

Indbygget system

Indbygget system



Introduktion til 8051 Microcontroller

8051-mikrocontrolleren er en grundlæggende mikrokontroller, den blev først introduceret af 'Intel Corporation' siden 1970. Den er udviklet af 8086-processorarkitekturen. 8051 er en familie af mikrokontroller, som er udviklet af forskellige producenter som Philips, Atmel, daller osv. 8051 mikrokontrollere er blevet brugt i mange indlejrede produkter fra små børnelegetøj til store bilsystemer.


8051 Mikrocontroller

8051 Mikrocontroller

8051-mikrocontrolleren er 8-bit 'CISC' arkitektur . Den består af hukommelser, seriel kommunikation, afbrydelser, input / output-porte og timer / tællere, der er indbygget i en enkelt integreret chip, der er programmeret til at styre de perifere enheder, der er grænseflade med den. Programmet er gemt i microcontrollerens RAM, men inden vi skriver programmet, skal vi være opmærksomme på RAM'en organisation af mikrokontrolleren.

Indbygget systemprogrammering: Grundlæggende erklæring

Hver funktion er en samling udsagn, der udfører en bestemt opgave, og indsamlingen af ​​en eller flere funktioner kaldes et programmeringssprog. Hvert sprog består af nogle grundlæggende elementer og grammatiske regler. C-sprogprogrammeringen er designet til at fungere med tegnsættet, variabler, datatyper, konstanter, nøgleord, udtryk og så videre bruges til at skrive et C-program. Alle disse betragtes under overskriftsfil eller biblioteksfil, og den er repræsenteret som

#omfatte

Embedded C Programmering Udvikling

Embedded C Programmering Udvikling

Udvidelsen af ​​C-sproget kaldes et Embedded C programmeringssprog. Sammenlignet med ovenstående har den integrerede programmering på C-sprog nogle yderligere funktioner såsom datatyper og nøgleord, og headerfilen eller biblioteksfilen er repræsenteret som

#omfatte

Indlejret C Yderligere nøgleord

  • sbit
  • bit
  • SFR
  • flygtige
  • makroer definerer

“Sbit” bruges til at deklarere den enkelte PIN-kode for mikrokontrolleren. For eksempel er LED tilsluttet P0.1-stiften, det anbefales ikke at sende værdien til portstiften direkte, først skal vi erklære stiften med en anden variabel, så efter at vi kan bruge hvor som helst i programmet.

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

“Bit” bruges til at kontrollere status for variablen.

Syntaks: bit c // erklærer bitvariablen //
c = a // en værdi tildeles c-variablen //
hvis (c == 1) // kontroller betingelsen sand eller falsk //

{
… ..
……
}

Nøgleordet “SFR” bruges til at få adgang til SFR-registre med et andet navn. SFR-registret defineret som en specialfunktionsregister , det indeholder alle perifert relaterede registre ved at angive adressen. SFR-registret erklæres af SFR-nøgleordet. SFR-nøgleordet skal være med store bogstaver.

Syntaks: SFR-port = 0x00 // 0x00 er en port0-adresse, den erklæres af portvariabel //
Port = 0x01 // send derefter værdien til port0 //
forsinke()
port = 0x00
forsinke()

Søgeordet 'flygtige' er det vigtigste inden for integreret systemudvikling. Den variabel, der erklærer med den flygtige nøgleordsværdi, kunne ikke ændres uventet. Det kan bruges i hukommelseskortede perifere registre, globale variabler modificeret af ISR'erne. Uden at bruge det ustabile nøgleord til transmission og modtagelse af data vil der forekomme kodefejl eller en optimeringsfejl.

Syntaks: flygtig int k

Makroen er et navn, den bruges til at erklære udsagnsblokken som et præprocessordirektiv. Hver gang navnet bruges, erstattes det af indholdet af makroen. Makroerne repræsenterer #define. Hele portnålene er defineret af makroerne.

Syntaks: #definer dat Po // hele porten erklæres af en variabel //
dat = 0x01 // data sendes til port0 //

Grundlæggende Embedded C-programmer

Microcontroller-programmeringen vil være forskellig for hver enkelt type operativsystem . Selvom der er mange operativsystemer, såsom Linux, Windows, RTOS og så videre. RTOS har dog flere fordele for indbygget systemudvikling. Denne artikel diskuterer grundlæggende indlejret C-programmering til udvikling af indlejret C-programmering ved hjælp af en 8051-mikrocontroller.

Integreret C-programmeringstrin

Integreret C-programmeringstrin

  • LED blinker ved hjælp af 8051 mikrokontroller
  • Nummer vises på 7-segment display med 8051 mikrocontroller
  • Timer / tællerberegninger og program ved hjælp af 8051 mikrokontroller
  • Seriekommunikationsberegninger og program ved hjælp af 8051 mikrokontroller
  • Afbryd programmer ved hjælp af 8051 mikrokontroller
  • Programmering af tastatur ved hjælp af 8051 mikrokontroller
  • LCD-programmering med 8051 mikrokontroller

LED blinker ved hjælp af 8051 mikrokontroller

LED'en er en halvlederanordning, der bruges i mange applikationer, hovedsagelig til indikationsformål. Det finder et stort udvalg af applikationer som indikatorer under testen for at kontrollere gyldigheden af ​​resultaterne på forskellige stadier. De er meget billige og let tilgængelige i en række forskellige former, farver og størrelser. LED'erne bruges til at designe meddelelseskort og trafikreguleringslys osv. Her er LED'erne grænseflade til PORT0 fra 8051 mikrokontrollere.

LED blinker ved hjælp af 8051 mikrokontroller

LED blinker ved hjælp af 8051 mikrokontroller

1. 01010101
10101010

#include // header file //
ugyldigt main () // statens punkt for programudførelse //
{
usigneret int i // datatype //
mens (1) // for kontinuerlig sløjfe //
{
P0 = 0x55 // send hexa-værdien til port0 //
for (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // send hexa-værdien til porten0 //
for (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10.000.000

#omfatte

ugyldig hoved ()

{

unsignedint i

usigneret char 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

#omfatte

ugyldig hoved ()

{

unsignedint i

mens (1)

{

P0 = 0x0F

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

P0 = 0xF0

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

}

}

4. 00000001

00000011

00000111

.

.

11111111

#omfatte

ugyldig hoved ()

{

unsignedint i

usigneret char j, b

mens (1)

{

P0 = 0x01

b = P0

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

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

0x01

P0 = b

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

}

}

Visning af numre på 7-segment display ved hjælp af 8051 Microcontroller

Det 7-segment skærme er de grundlæggende elektroniske skærme, der bruges i mange systemer til at vise den numeriske information. Den består af otte lysdioder, der er forbundet i rækkefølge for at vise cifre fra 0 til 9, når de rigtige kombinationer af lysdioder er tændt. De kan kun vise et ciffer ad gangen.

Visning af numre på 7-segment display ved hjælp af 8051 Microcontroller

Visning af numre på 7-segment display ved hjælp af 8051 Microcontroller

1. WAP for at få vist tallene fra '0 til F' på fire 7-segmentskærme?

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

2. WAP for at få vist numrene fra '00 til 10 'på 7-segmentskærme?

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

Timer / tællerberegninger og program ved hjælp af 8051 Microcontroller

Forsinkelsen er en af ​​de vigtige faktorer i udviklingen af ​​applikationssoftwaren. Den normale forsinkelse giver imidlertid ikke det dyrebare resultat at løse dette problem til implementering af tidsforsinkelsen. Det timere og tællere er hardwarekomponenter i mikrokontrolleren, som bruges i mange applikationer til at give den dyrebare tidsforsinkelse med tælleimpulser. Begge opgaver implementeres af softwareteknikken.

Timer Delay

WAP til at generere 500us tidsforsinkelse ved hjælp af T1M2 (timer1 og mode2)?

#omfatte

ugyldig hoved ()
{
usigneret char i
TMOD = 0x20 // indstil timertilstand //
for (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // indstil tidsforsinkelsen //
TH1 = 0x00
TR1 = 1 // timer på //
Mens (TF1 == 0) // kontrollerer flagbiten //
TF1 = 0
}
TR1=0 //timer off//
}

Normal sløjfeforsinkelse

ugyldig forsinkelse ()

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

Seriekommunikationsberegninger og program ved hjælp af 8051 Microcontroller

Seriel kommunikation bruges ofte til transmission og modtagelse af signalet. 8051-mikrocontrolleren har består UART seriel kommunikation signalerne transmitteret og modtaget af Rx- og Tx-benene. UART tager data bytes og sender de enkelte bits på en sekventiel måde. Registerene er en måde at indsamle og gemme dataene i hukommelsen på. UART er en halv-duplex-protokol. Half-duplex betyder overførsel og modtagelse af data, men ikke på samme tid.

Seriekommunikationsberegninger og program ved hjælp af 8051 Microcontroller

Seriekommunikationsberegninger og program ved hjælp af 8051 Microcontroller

1. WAP for at overføre tegnet 'S' til det serielle vindue, bruge 9600 som baudhastighed?

28800 er den maksimale baudhastighed for 8051-mikrocontrolleren

28800/9600 = 3

Denne baudrate '3' er gemt i timerne

#omfatte

ugyldig hoved ()

{
SCON = 0x50 // start den serielle kommunikation //
TNOD = 0x20 // valgt timer-tilstand //
TH1 = 3 // indlæs baudrate //
TR1 = 1 // Timer TIL //
SBUF = ’S’ // gemme tegnet i registret //
mens (TI == 0) // tjek afbrydelsesregistret //
TI = 0
TR1 = 0 // OFF timeren //
mens (1) // kontinuerlig sløjfe //
}

2. WAP for at modtage data fra hyperterminalen og sende disse data til PORT 0 på Microcontroller ved hjælp af 9600 baud?

28800 er den maksimale baudhastighed for 8051-mikrocontrolleren

28800/9600 = 3

Denne baudrate '3' er gemt i timerne

#omfatte

ugyldig hoved ()
{
SCON = 0x50 // start den serielle kommunikation //
TMOD = 0x20 // valgt timer-tilstand //
TH1 = 3 // indlæs baudrate //
TR1 = 1 // Timer TIL //
PORT0 = SBUF // send dataene fra SBUF til port0 //
mens (RI == 0) // tjek afbrydelsesregistret //
RI = 0
TR1 = 0 // OFF timeren //
mens (1) // stopper programmet, når tegnet modtages //
}

Afbryd programmer ved hjælp af 8051 Microcontroller

Afbrydelsen er et signal, der tvinger til at stoppe det aktuelle program og udføre det andet program med det samme. 8051-mikrocontrolleren giver 6 afbrydelser, som er interne og eksterne afbryde kilder . Når afbrydelsen sker, sætter mikrokontrolleren den aktuelle opgave på pause og overvåger afbrydelsen ved at udføre ISR, vender mikrokontrolleren tilbage til den seneste opgave.

WAP for at udføre venstre skiftoperation, når timer 0 afbryder, og udfør derefter afbrydelsen for P0 i hovedfunktionen?

#omfatte

usigneret char b

ugyldig timer0 () afbryd 2 // valgt timer0 afbryd //
{
b = 0x10
P1 = b<<2
}
ugyldig hoved ()
{
usigneret char a, i
IE = 0x82 // aktiver timer0-afbrydelse //
TMOD = 0x01
TLo = 0xFC // afbryd timer //
TH1 = 0xFB
TR0 = 1
a = 0x00
mens (1)
{
for (i = 0i<255i++)
{
a ++
Po = a
}
}
}

Programmering af tastatur ved hjælp af 8051 Microcontroller

Matrix-tastaturet er en analog omskifterenhed, der bruges i mange indlejrede applikationer for at give brugeren mulighed for at udføre de nødvendige opgaver. EN matrix tastatur består af et arrangement af switche i matrixformat i rækker og kolonner. Rækkerne og kolonnerne er forbundet til mikrokontrolleren, således at rækken af ​​kontakter er forbundet til en pin, og kontakterne i hver kolonne er forbundet til en anden pin, og udfør derefter operationerne.

Programmering af tastatur ved hjælp af 8051 Microcontroller

Programmering af tastatur ved hjælp af 8051 Microcontroller

1. WAP for at skifte LED ved at trykke på kontakten

#omfatte
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
forsinke()
a = 1
b = 0
c = 1
d = 1
ugyldig forsinkelse ()
{
usigneret char i
TMOD = 0x20 // indstil timertilstand //
for (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // indstil tidsforsinkelsen //
TH1 = 0x00
TR1 = 1 // timer på //
Mens (TF1 == 0) // kontrollerer flagbiten //
TF1 = 0
}
TR1=0 //timer off//
}

2. WAP for at tænde lysdioden ved at trykke på tasten '1' på tastaturet?

#omfatte

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

ugyldig hoved ()
{

r1=0
hvis (c1 == 0)
{

LED = 0xff
}
}

3. WAP for at få vist tallet 0,1,2,3,4,5 på det syv segment ved at trykke på den respektive tast på tastaturet?

#omfatte

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

Det LCD-skærm er en elektronisk enhed, der ofte bruges i mange applikationer til visning af oplysningerne i et tekst- eller billedformat. LCD'et er et display, der let kan vise tegn på sin skærm. LCD-skærmen består af 8-datalinjer og 3-kontrollinjer, der bruges til at grænseflade til mikrocontrolleren.

LCD-programmering med 8051 mikrokontroller

LCD-programmering med 8051 mikrokontroller

WAP for at få vist “EDGEFX KITS” på LED-display?

#omfatte
#definer kam P0

voidlcd_initi ()
voidlcd_dat (usigneret tegn)
voidlcd_cmd (usigneret tegn)
ugyldig forsinkelse ()
ugyldig visning (usigneret tegn *, usigneret tegn r)

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 (usigneret tegn *, usigneret tegn r)
{
usigneretint 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 (usigneret char dat)
{
kam = det
rs = 1
rw = 0
i = 1
forsinkelse (100)
i = 0
}
}
voidlcd_cmd (usigneret char cmd)
{
kom = cmd
rs = 0
rw = 0

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

usigneretint a
for (a = 0a}

Håber, at denne artikel giver en grundlæggende information om integreret systemprogrammering ved hjælp af 8051 mikrokontroller med et par eksempler på programmer. For detaljeret integreret C programmeringsvejledning, bedes du sende dine kommentarer og forespørgsler i kommentarfeltet nedenfor.