Embedded C Programmering Tutorial med Keil Language

Prova Vårt Instrument För Att Eliminera Problem





Embedded C är det mest populära programmeringsspråket inom programvarufältet för utveckling av elektroniska prylar. Varje processor är associerad med inbäddad programvara. Inbäddad C-programmering spelar en viktig roll för att utföra specifika funktioner av processorn. I vårt dagliga liv använder vi ofta många elektroniska enheter som tvättmaskiner, mobiltelefoner, digitalkameror och så vidare kommer att fungera baserat på mikrokontroller som är programmerade av inbäddade C.

Inbyggd systemprogrammering

Inbyggd systemprogrammering



C-koden som skrivs är mer tillförlitlig, bärbar och skalbar och faktiskt mycket lättare att förstå. Det första och främsta verktyget är den inbäddade programvaran som bestämmer driften av ett inbäddat system. Inbäddat C-programmeringsspråk används oftast för programmering av mikrokontroller.


Embedded C Programming Tutorial (8051)

För att skriva programmet måste de inbäddade formgivarna ha tillräcklig kunskap om hårdvaran hos vissa processorer eller styrenheter, eftersom den inbäddade C-programmeringen är en fullständig hårdvarurelaterad programmeringsteknik.



Programmeringshandledning

Programmeringshandledning

Tidigare utvecklades många inbäddade applikationer med hjälp av programmering på monteringsnivå. Men de gav inte portabilitet för att övervinna detta problem med tillkomsten av olika högnivåspråk som C, COBOL och Pascal. Det var dock C-språket som fick omfattande acceptans för inbyggda system applikationsutveckling , och det fortsätter att göra det.

Inbyggda system

Det inbäddade systemet definieras som kombinationen av inbäddad C-programmeringsprogramvara och hårdvarudel som huvudsakligen består av mikrokontroller och det är avsett att utföra den specifika uppgiften. Dessa typer av inbyggda system används i vårt dagliga liv som tvättmaskiner och videobandspelare, kylskåp och så vidare. Det inbäddade systemet introducerades först av 8051 mikrokontroller.

Inbyggda system

Inbyggda system

Introduktion till 8051 Microcontroller

8051-mikrokontrollern är en grundläggande mikrokontroller, den introducerades först av 'Intel Corporation' sedan 1970. Den har utvecklats av 8086-processorarkitekturen. 8051 är en familj av mikrokontroller som har utvecklats av olika tillverkare som Philips, Atmel, dallar och så vidare. 8051 mikrokontroller har använts i många inbäddade produkter från små barnleksaker till stora bilsystem.


8051 Microcontroller

8051 Microcontroller

8051-mikrokontrollern är 8-bitars 'CISC' -arkitektur . Den består av minnen, seriell kommunikation, avbrott, ingångs- / utgångsportar och timer / räknare, inbyggda i ett enda integrerat chip, som är programmerat för att styra de kringutrustning som är gränssnitt med det. Programmet lagras i RAM-minnet på mikrokontrollern men innan vi skriver programmet måste vi vara medvetna om RAM-minnet organisation av mikrokontrollern.

Inbyggd systemprogrammering: Grundförklaring

Varje funktion är en samling uttalanden som utför en specifik uppgift och samlingen av en eller flera funktioner kallas ett programmeringsspråk. Varje språk består av några grundläggande element och grammatiska regler. C-språkprogrammeringen är utformad för att fungera med teckenuppsättningen, variabler, datatyper, konstanter, nyckelord, uttryck och så vidare används för att skriva ett C-program. Alla dessa betraktas under rubrikfilen eller biblioteksfilen och den representeras som

#omfatta

Inbyggd C-programmeringsutveckling

Inbyggd C-programmering

Förlängningen av C-språket kallas ett inbäddat C-programmeringsspråk. I jämförelse med ovan har den inbäddade programmeringen i C-språket några ytterligare funktioner såsom datatyper och nyckelord och rubrikfilen eller biblioteksfilen representeras som

#omfatta

Inbäddade C Ytterligare nyckelord

  • sbit
  • bit
  • SFR
  • flyktig
  • makron definierar

'Sbit' används för att deklarera den enskilda PIN-koden för mikrokontrollern. Till exempel är LED ansluten till P0.1-stiftet, det rekommenderas inte att skicka värdet till portstiftet direkt, först måste vi deklarera stiftet med en annan variabel sedan efter att vi kan använda någonstans i programmet.

Syntax: sbit a = P0 ^ 1 // förklarar respektive stift med en variabel //
a = 0x01 // skicka värdet till portnålen //

”Bit” används för att kontrollera status för variabeln.

Syntax: bit c // förklarar bitvariabel //
c = a // ett värde tilldelas c-variabeln //
om (c == 1) // kontrollera villkoret sant eller falskt //

{
... ..
……
}

Nyckelordet “SFR” används för att komma åt SFR-registren med ett annat namn. SFR-registret definieras som en specialfunktionsregister innehåller den alla perifera relaterade register genom att ange adressen. SFR-registret deklareras av SFR-nyckelordet. SFR-nyckelordet måste ha stora bokstäver.

Syntax: SFR-port = 0x00 // 0x00 är en port0-adress som deklareras av portvariabel //
Port = 0x01 // skicka sedan värdet till port0 //
dröjsmål()
port = 0x00
dröjsmål()

Nyckelordet 'flyktigt' är det viktigaste i inbyggd systemutveckling. Variabeln som deklarerar med det flyktiga nyckelordsvärdet kunde inte ändras oväntat. Den kan användas i minneskartade perifera register, globala variabler som modifierats av ISR. Utan att använda det flyktiga nyckelordet för överföring och mottagning av data kommer kodfel eller ett optimeringsfel att ske.

Syntax: flyktig int k

Makrot är ett namn som används för att förklara blocket av uttalanden som ett förprocessordirektiv. När namnet används ersätts det med innehållet i makrot. Makrona representerar #define. Hela portnålarna definieras av makron.

Syntax: #define dat Po // hela porten deklareras av en variabel //
dat = 0x01 // data skickas till port0 //

Grundläggande inbäddade C-program

Programmeringen av mikrokontroller skiljer sig åt för varje typ av operativsystem . Även om det finns många operativsystem som Linux, Windows, RTOS och så vidare. RTOS har dock flera fördelar för inbyggd systemutveckling. Den här artikeln diskuterar grundläggande inbäddad C-programmering för att utveckla inbäddad C-programmering med en 8051-mikrokontroller.

Inbyggda C-programmeringssteg

Inbyggda C-programmeringssteg

  • LED blinkar med 8051 mikrokontroller
  • Nummer visas på 7-segmentsdisplay med 8051 mikrokontroller
  • Timer / Counter-beräkningar och program med 8051 mikrokontroller
  • Seriekommunikationsberäkningar och program med 8051 mikrokontroller
  • Avbryt program med 8051 mikrokontroller
  • Knappsatsprogrammering med 8051 mikrokontroller
  • LCD-programmering med 8051 mikrokontroller

LED blinkar med 8051 mikrokontroller

LED-lampan är en halvledaranordning som används i många applikationer, främst för indikationsändamål. Det hittar ett stort antal applikationer som indikatorer under testet för att kontrollera giltigheten av resultaten i olika stadier. De är mycket billiga och lätt tillgängliga i en mängd olika former, färger och storlekar. LED-lamporna används för att designa anslagstavlor och trafikstyrningssignallampor etc. Här lyser lysdioderna med PORT0 på 8051 mikrokontroller.

LED blinkar med 8051 mikrokontroller

LED blinkar med 8051 mikrokontroller

1. 01010101
10101010

#include // rubrikfil //
void main () // statens punkt för exekvering av program //
{
osignerad int i // datatyp //
medan (1) // för kontinuerlig slinga //
{
P0 = 0x55 // skicka hexavärdet till porten0 //
för (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // skicka hexa-värdet till port0 //
för (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10.000.000

#omfatta

ogiltigt huvud ()

{

unsignedint i

osignerad char j, b

medan (1)

{

P0 = 0x01

b = P0

för (j-0j<3000j++)

för (j = 0j<8j++)

{

b = b<<1

P0 = b

för (j-0j<3000j++)

}

}

}

3. 00001111

11110000

#omfatta

ogiltigt huvud ()

{

unsignedint i

medan (1)

{

P0 = 0x0F

för (j-0j<3000j++)

P0 = 0xF0

för (j-0j<3000j++)

}

}

4. 00000001

00000011

00000111

.

.

11111111

#omfatta

ogiltigt huvud ()

{

unsignedint i

osignerad char j, b

medan (1)

{

P0 = 0x01

b = P0

för (j-0j<3000j++)

för (j = 0j<8j++)

0x01

P0 = b

för (j-0j<3000j++)

}

}

Visar siffror på 7-segmentsdisplay med 8051 Microcontroller

De 7-segment skärmar är de grundläggande elektroniska bildskärmarna, som används i många system för att visa den numeriska informationen. Den består av åtta lysdioder som är anslutna i följd för att visa siffror från 0 till 9 när korrekta kombinationer av lysdioder är påslagna. De kan bara visa en siffra åt gången.

Visar siffror på 7-segmentsdisplay med 8051 Microcontroller

Visar siffror på 7-segmentsdisplay med 8051 Microcontroller

1. WAP för att visa siffrorna '0 till F' på fyra 7-segmentsdisplayer?

#omfatta
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
ogiltigt huvud ()
{
osignerad laddning n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
osignerad dig, j
a = b = c = d = 1
medan (1)
{
för (i = 0i<10i++)
{
P2 = n [i]
för (j = 0j<60000j++)
}
}
}

2. WAP för att visa siffrorna från '00 till 10 'på 7-segmentsdisplayer?

#omfatta
sbit a = P3 ^ 0
sbit b = P3 ^ 1
ogiltig display1 ()
ogiltig display2 ()
ogiltig fördröjning ()
ogiltigt huvud ()
{
osignerad laddning n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
osignerad dig, j
ds1 = ds2 = 0
medan (1)
{
för (i = 0, i<20i++)
display1 ()
display2 ()
}
}
ogiltig display1 ()
{
a = 1
b = 0
P2 = s [ds1]
dröjsmål()
a = 1
b = 0
P2 = s [ds1]
dröjsmål()
}
ogiltig display2 ()
{
ds1 ++
om (ds1> = 10)
{
ds1 = 0
ds2 ++
om (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
ogiltig fördröjning ()
{
unsignedint k
för (k = 0k<30000k++)
}

Timer / Counter-beräkningar och program med 8051 Microcontroller

Fördröjningen är en av de viktigaste faktorerna i programvaruutvecklingen. Den normala fördröjningen kommer emellertid inte att ge det värdefulla resultatet för att övervinna detta problem för implementering av tidsfördröjningen. De timers och räknare är hårdvarukomponenter i mikrokontrollern, som används i många applikationer för att ge den värdefulla tidsfördröjningen med räknepulser. Båda uppgifterna implementeras av programvarutekniken.

Timer Delay

WAP för att generera 500us tidsfördröjning med T1M2 (timer1 och mode2)?

#omfatta

ogiltigt huvud ()
{
osignerad char i
TMOD = 0x20 // ställ in timerläget //
för (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // ställ in tidsfördröjningen //
TH1 = 0x00
TR1 = 1 // timer på //
Medan (TF1 == 0) // kontrollera flaggbiten //
TF1 = 0
}
TR1 = 0 // timer av //
}

Normal loopfördröjning

ogiltig fördröjning ()

{
unsignedint k
för (k = 0k<30000k++)
}

Seriekommunikationsberäkningar och program med 8051 mikrokontroller

Seriekommunikation används ofta för att sända och ta emot signalen. 8051-mikrokontrollern har bestå UART seriell kommunikation signalerna som sänds och tas emot av Rx- och Tx-stiften. UART tar byte av data och skickar de enskilda bitarna på ett sekventiellt sätt. Registren är ett sätt att samla in och lagra data i minnet. UART är ett halv-duplexprotokoll. Half-duplex betyder överföring och mottagning av data, men inte samtidigt.

Seriekommunikationsberäkningar och program med 8051 mikrokontroller

Seriekommunikationsberäkningar och program med 8051 mikrokontroller

1. WAP för att överföra tecknet 'S' till seriefönstret använder 9600 som överföringshastighet?

28800 är den maximala baudhastigheten för 8051 mikrokontroller

28800/9600 = 3

Den överföringshastigheten '3' lagras i timern

#omfatta

ogiltigt huvud ()

{
SCON = 0x50 // starta seriekommunikationen //
TNOD = 0x20 // vald timerläge //
TH1 = 3 // ladda baudhastigheten //
TR1 = 1 // Timer PÅ //
SBUF = ’S’ // lagra tecknet i registret //
medan (TI == 0) // kontrollera avbrottsregistret //
TI = 0
TR1 = 0 // AV timern //
medan (1) // kontinuerlig slinga //
}

2. WAP för att ta emot data från hyperterminalen och skicka dessa data till PORT 0 på Microcontroller med 9600 baud?

28800 är den maximala baudhastigheten för 8051 mikrokontroller

28800/9600 = 3

Den överföringshastigheten '3' lagras i timern

#omfatta

ogiltigt huvud ()
{
SCON = 0x50 // starta seriekommunikationen //
TMOD = 0x20 // vald timerläge //
TH1 = 3 // ladda baudhastigheten //
TR1 = 1 // Timer PÅ //
PORT0 = SBUF // skicka data från SBUF till port0 //
medan (RI == 0) // kontrollera avbrottsregistret //
RI = 0
TR1 = 0 // AV timern //
medan (1) // stoppar programmet när karaktär tas emot //
}

Avbryt program med 8051 Microcontroller

Avbrottet är en signal som tvingar att stoppa det aktuella programmet och köra det andra programmet omedelbart. 8051-mikrokontrollern ger 6 avbrott, som är interna och externa avbryta källor . När avbrottet inträffar pausar mikrokontrollern den aktuella uppgiften och tar hand om avbrottet genom att utföra ISR, då återgår mikrokontrollern till den senaste uppgiften.

WAP för att utföra vänsterskift när timern 0 avbryts och utför sedan avbrytningen för P0 i huvudfunktionen?

#omfatta

osignerad röding b

ogiltig timer0 () avbrott 2 // vald timer0 avbrott //
{
b = 0x10
P1 = b<<2
}
ogiltigt huvud ()
{
osignerad char a, i
IE = 0x82 // aktivera timer0-avbrott //
TMOD = 0x01
TLo = 0xFC // interrupt timer //
TH1 = 0xFB
TR0 = 1
a = 0x00
medan (1)
{
för (i = 0i<255i++)
{
a ++
Po = a
}
}
}

Programmering av knappsats med hjälp av 8051 Microcontroller

Matrisens knappsats är en analog omkopplingsenhet som används i många inbäddade applikationer för att tillåta användaren att utföra nödvändiga uppgifter. A matris knappsats består av ett arrangemang av växlar i matrisformat i rader och kolumner. Raderna och kolumnerna är anslutna till mikrokontrollern så att växlaraden är ansluten till en stift och omkopplarna i varje kolumn är anslutna till en annan stift och utför sedan operationerna.

Programmering av knappsats med hjälp av 8051 Microcontroller

Programmering av knappsats med hjälp av 8051 Microcontroller

1. WAP för att växla lysdioden genom att trycka på strömbrytaren

#omfatta
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
ogiltig fördröjning ()
ogiltigt huvud ()
{
medan (1)
{
a = 0
b = 1
c = 1
d = 1
dröjsmål()
a = 1
b = 0
c = 1
d = 1
ogiltig fördröjning ()
{
osignerad char i
TMOD = 0x20 // ställ in timerläget //
för (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // ställ in tidsfördröjningen //
TH1 = 0x00
TR1 = 1 // timer på //
Medan (TF1 == 0) // kontrollera flaggbiten //
TF1 = 0
}
TR1 = 0 // timer av //
}

2. WAP för att sätta på LED-lampan genom att trycka på knappen '1' på knappsatsen?

#omfatta

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

ogiltigt huvud ()
{

r1 = 0
om (c1 == 0)
{

LED = 0xff
}
}

3. WAP för att visa siffran 0,1,2,3,4,5 på de sju segmenten genom att trycka på respektive knapp på knappsatsen?

#omfatta

sbit r1 = P2 ^ 0

sbit c1 = P3 ^ 0

sbit r2 = P2 ^ 0

sbit c2 = P3 ^ 0

sbit a = P0 ^ 1

ogiltigt huvud ()

{

r1 = 0 a = 1

om (c1 == 0)

{

a = 0xFC

}

Om (c2 == 0)

{

a = 0x60

}

om (c3 == 0)

{

a = 0xDA

}

Om (c4 == 0)

{

a = 0xF2

}

}

LCD-programmering med 8051 mikrokontroller

De LCD skärm är en elektronisk anordning som ofta används i många applikationer för att visa informationen i text- eller bildformat. LCD-skärmen är en skärm som enkelt kan visa tecken på skärmen. LCD-skärmen består av 8-datalinjer och 3-kontrollinjer som används för att ansluta till mikrokontrollern.

LCD-programmering med 8051 mikrokontroller

LCD-programmering med 8051 mikrokontroller

WAP för att visa “EDGEFX KITS” på LED-display?

#omfatta
#define kam P0

voidlcd_initi ()
voidlcd_dat (osignerad char)
voidlcd_cmd (osignerad char)
ogiltig fördröjning ()
ogiltig visning (osignerade tecken *, osignerade tecken r)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit vid = P2 ^ 2
ogiltigt huvud ()
{

lcd_initi ()
lcd_cmd (0x80)
fördröjning (100)
lcd_cmd (0xc0)
display (“edgefx kits”, 11)
medan (1)
}

ogiltig visning (osignerade tecken *, osignerade tecken r)
{
unsignedint w
för (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
fördröjning (100)
lcd_cmd (0 × 38)
fördröjning (100)
lcd_cmd (0 × 06)
fördröjning (100)
lcd_cmd (0x0c)
fördröjning (100)
}
voidlcd_dat (osignerad char dat)
{
kam = det
rs = 1
rw = 0
i = 1
fördröjning (100)
in = 0
}
}
voidlcd_cmd (osignerad char cmd)
{
kom = cmd
rs = 0
rw = 0

i = 1
fördröjning (100)
in = 0
}
tomrumsfördröjning (osignerad int n)
{

unsignedint a
för (a = 0a}

Hoppas den här artikeln ger grundläggande information om inbäddad systemprogrammering med 8051 mikrokontroller med några exempelprogram. För detaljerad inbäddad C-programmering, lägg upp dina kommentarer och frågor i kommentarsektionen nedan.