Embedded C Programming Tutorial met Keil Language

Probeer Ons Instrument Voor Het Oplossen Van Problemen





Embedded C is de meest populaire programmeertaal op softwaregebied voor het ontwikkelen van elektronische gadgets. Elke processor is gekoppeld aan embedded software. Ingebouwde C-programmering speelt een grote rol bij het uitvoeren van specifieke functies door de processor. In ons dagelijks leven gebruiken we vaak veel elektronische apparaten, zoals wasmachines, mobiele telefoons, digitale camera's enzovoort, die werken op basis van microcontrollers die zijn geprogrammeerd door ingebedde C.

Embedded systeemprogrammering

Embedded systeemprogrammering



De geschreven C-code is betrouwbaarder, draagbaarder en schaalbaarder en in feite veel gemakkelijker te begrijpen. De eerste en belangrijkste tool is de embedded software die de werking van een embedded systeem bepaalt. Embedded C-programmeertaal wordt het meest gebruikt voor het programmeren van de microcontrollers.


Zelfstudie voor embedded C-programmeren (8051)

Voor het schrijven van het programma moeten de ingebedde ontwerpers voldoende kennis hebben van de hardware van bepaalde processors of controllers, aangezien de ingebedde C-programmering een volledige hardware-gerelateerde programmeertechniek is.



Programmeerhandleiding

Programmeerhandleiding

Eerder werden veel embedded applicaties ontwikkeld met behulp van programmering op assemblagelevel. Ze boden echter geen draagbaarheid om dit probleem op te lossen met de komst van verschillende talen op hoog niveau, zoals C, COBOL en Pascal. Het was echter de C-taal die uitgebreid werd geaccepteerd ontwikkeling van embedded systemen , en dat blijft het doen.

Ingebouwd systeem

Het embedded systeem wordt gedefinieerd als de combinatie van embedded C-programmeersoftware en hardwaregedeelte dat grotendeels bestaat uit microcontrollers en is bedoeld om de specifieke taak uit te voeren. Dit soort embedded systemen worden in ons dagelijks leven gebruikt, zoals wasmachines en videorecorders, koelkasten enzovoort. Het embedded systeem werd voor het eerst geïntroduceerd door de 8051 microcontrollers.

Ingebouwd systeem

Ingebouwd systeem

Inleiding tot de 8051 Microcontroller

De 8051-microcontroller is een basismicrocontroller, die voor het eerst werd geïntroduceerd door de ‘Intel Corporation’ sinds 1970. Hij is ontwikkeld door de 8086-processorarchitectuur. De 8051 is een familie van de microcontroller, die is ontwikkeld door verschillende fabrikanten zoals Philips, Atmel, dalls, enzovoort. De 8051 microcontrollers is gebruikt in veel ingebedde producten, van speelgoed voor kleine kinderen tot grote autosystemen.


8051 Microcontroller

8051 Microcontroller

De 8051-microcontroller is de 8-bit ‘CISC’ -architectuur ​Het bestaat uit geheugens, seriële communicatie, interrupts, invoer- / uitvoerpoorten en timer / tellers, ingebouwd in een enkele geïntegreerde chip, die is geprogrammeerd om de randapparatuur te besturen die ermee is verbonden. Het programma wordt opgeslagen in het RAM van de microcontroller, maar voordat we het programma schrijven, moeten we ons bewust zijn van het RAM organisatie van de microcontroller.

Embedded systeemprogrammering: basisverklaring

Elke functie is een verzameling instructies die een specifieke taak uitvoeren en de verzameling van een of meer functies wordt een programmeertaal genoemd. Elke taal bestaat uit enkele basiselementen en grammaticale regels. De C-taalprogrammering is ontworpen om te functioneren met de karakterset, variabelen, gegevenstypen, constanten, trefwoorden, uitdrukkingen enzovoort worden gebruikt om een ​​C-programma te schrijven. Al deze beschouwd onder header-bestand of bibliotheekbestand en het wordt weergegeven als

#inclusief

Embedded C Programming Development

Embedded C Programming Development

De extensie van de C-taal wordt een Embedded C-programmeertaal genoemd. In vergelijking met hierboven heeft de ingebedde programmering in C-taal enkele extra functies, zoals gegevenstypen en trefwoorden en wordt het header- of bibliotheekbestand weergegeven als

#inclusief

Ingesloten C aanvullende trefwoorden

  • sbit
  • beetje
  • SFR
  • vluchtig
  • macro's definiëren

De “sbit” wordt gebruikt voor het declareren van de enkele PIN van de microcontroller. LED is bijvoorbeeld verbonden met de P0.1-pin, het wordt niet aanbevolen om de waarde rechtstreeks naar de poortpin te sturen, eerst moeten we de pin aangeven met een andere variabele en daarna kunnen we deze overal in het programma gebruiken.

Syntaxis: sbit a = P0 ^ 1 // declareert de respectieve pin met een variabele //
a = 0x01 // stuur de waarde naar de poortpin //

De 'bit' wordt gebruikt om de status van de variabele te controleren.

Syntaxis: bit c // declareert de bitvariabele //
c = a // een waarde wordt toegewezen aan de c variabele //
if (c == 1) // controleer de voorwaarde waar of niet waar //




Het sleutelwoord 'SFR' wordt gebruikt om toegang te krijgen tot de SFR-registers onder een andere naam. Het SFR-register gedefinieerd als een speciaal functieregister , het bevat alle perifere registers door het adres aan te geven. Het SFR-register wordt gedeclareerd door het SFR-sleutelwoord. Het SFR-sleutelwoord moet in hoofdletters zijn.

Syntaxis: SFR-poort = 0x00 // 0x00 is een poort0-adres dat wordt gedeclareerd door poortvariabele //
Port = 0x01 // stuur dan de waarde naar de port0 //
vertraging()
poort = 0x00
vertraging()

Het trefwoord 'vluchtig' is het belangrijkste bij de ontwikkeling van embedded systemen. De variabele die declareert met de vluchtige sleutelwoordwaarde kan niet onverwachts worden gewijzigd. Het kan worden gebruikt in geheugen-toegewezen perifere registers, globale variabelen gewijzigd door de ISR's. Zonder het vluchtige sleutelwoord te gebruiken voor het verzenden en ontvangen van de gegevens, zal er een codefout of een optimalisatiefout optreden.

Syntaxis: vluchtige int k

De macro is een naam die wordt gebruikt om het blok met instructies te declareren als een pre-processorrichtlijn. Telkens wanneer de naam wordt gebruikt, wordt deze vervangen door de inhoud van de macro. De macro's vertegenwoordigen de #define. De hele poortpinnen worden gedefinieerd door de macro's.

Syntaxis: #define dat Po // de hele poort wordt gedeclareerd door een variabele //
dat = 0x01 // data verzonden naar de port0 //

Basic Embedded C-programma's

De microcontroller-programmering zal voor elk verschillen type besturingssysteem ​Ook al zijn er veel besturingssystemen zoals Linux, Windows, RTOS enzovoort. RTOS heeft echter verschillende voordelen voor de ontwikkeling van embedded systemen. Dit artikel bespreekt elementaire embedded C-programmering om embedded C-programmering te ontwikkelen met behulp van een 8051-microcontroller.

Embedded C-programmeerstappen

Embedded C-programmeerstappen

  • LED knippert met 8051 microcontroller
  • Nummerweergave op 7-segment display met 8051 microcontroller
  • Timer / tellerberekeningen en programma met 8051 microcontroller
  • Seriële communicatie berekeningen en programma met behulp van 8051 microcontroller
  • Onderbreek programma's met 8051 microcontroller
  • Toetsenbord programmeren met behulp van 8051 microcontroller
  • LCD-programmering met 8051 microcontroller

LED knippert met 8051 Microcontroller

De LED is een halfgeleiderapparaat dat in veel toepassingen wordt gebruikt, meestal voor indicatiedoeleinden. Het vindt een enorm scala aan toepassingen als indicatoren tijdens de test om de validiteit van resultaten in verschillende stadia te controleren. Ze zijn erg goedkoop en gemakkelijk verkrijgbaar in verschillende vormen, kleuren en maten. De leds worden gebruikt om te ontwerpen berichtenweergaveborden en verkeersregelsignaallichten etc. Hier zijn de LED's gekoppeld aan de PORT0 van de 8051 microcontrollers.

LED knippert met 8051 Microcontroller

LED knippert met 8051 Microcontroller

1. 01010101
10101010

#include // header-bestand //
void main () // het stat-punt van de programma-uitvoering //

unsigned int i // data type //
while (1) // voor continue lus //

P0 = 0x55 // stuur de hexa-waarde naar de poort0 //
voor (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // stuur de hexa-waarde naar de port0 //
voor (i = 0i<30000i++) //normal delay//

2. 00000001

00000010

00000100

10.000.000

#inclusief

leegte main ()

unsignedint i

ongetekend teken j, b

terwijl (1)

P0 = 0x01

b = P0

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

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

b = b<<1

P0 = b

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

3. 00001111

11110000

#inclusief

leegte main ()

unsignedint i

terwijl (1)

P0 = 0x0F

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

P0 = 0xF0

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

4. 00000001

00000011

00000111

11111111

#inclusief

leegte main ()

unsignedint i

ongetekend teken j, b

terwijl (1)

P0 = 0x01

b = P0

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

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

0x01

P0 = b

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

Getallen weergeven op 7-segment display met 8051 Microcontroller

De 7-segment displays zijn de basis elektronische displays, die in veel systemen worden gebruikt om de numerieke informatie weer te geven. Het bestaat uit acht LED's die opeenvolgend zijn verbonden om de cijfers van 0 tot 9 weer te geven, wanneer de juiste combinaties van LED's zijn ingeschakeld. Ze kunnen slechts één cijfer tegelijk weergeven.

Getallen weergeven op 7-segment display met 8051 Microcontroller

Getallen weergeven op 7-segment display met 8051 Microcontroller

1. WAP om de getallen van ‘0 tot F’ weer te geven op vier 7-segmentdisplays?

#inclusief
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
leegte main ()

unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
ongetekende jij, j
een = b = c = d = 1
terwijl (1)

voor (i = 0i<10i++)

P2 = n [i]
voor (j = 0j<60000j++)


2. WAP om de cijfers van ’00 tot 10 ’weer te geven op 7-segmentdisplays?

#inclusief
sbit a = P3 ^ 0
sbit b = P3 ^ 1
leegte display1 ()
leegte display2 ()
ongeldige vertraging ()
leegte main ()

unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
ongetekende jij, j
ds1 = ds2 = 0
terwijl (1)

voor (i = 0, i<20i++)
display1 ()
display2 ()


leegte display1 ()

a = 1
b = 0
P2 = s [ds1]
vertraging()
a = 1
b = 0
P2 = s [ds1]
vertraging()

leegte display2 ()

ds1 ++
if (ds1> = 10)

ds1 = 0
ds2 ++
if (ds2> = 10)

ds1 = ds2 = 0



ongeldige vertraging ()

unsignedint k
voor (k = 0k<30000k++)

Timer / tellerberekeningen en programma met 8051 Microcontroller

De vertraging is een van de belangrijkste factoren bij de ontwikkeling van applicatiesoftware. De normale vertraging zal echter niet het kostbare resultaat geven om dit probleem voor het implementeren van de timervertraging op te lossen. De timers en tellers zijn hardwarecomponenten van de microcontroller, die in veel toepassingen wordt gebruikt om de kostbare tijdvertraging te voorzien van telpulsen. Beide taken worden uitgevoerd door de softwaretechniek.

Timer vertraging

WAP om de 500us-vertraging te genereren met behulp van T1M2 (timer1 en mode2)?

#inclusief

leegte main ()

unsigned char i
TMOD = 0x20 // stel de timermodus in //
voor (i = 0i<2i++) //double the time daly//

TL1 = 0x19 // stel de vertraging in //
TH1 = 0x00
TR1 = 1 // timer aan //
While (TF1 == 0) // controleer de vlagbit //
TF1 = 0

TR1 = 0 // timer uit //

Normale lusvertraging

ongeldige vertraging ()


unsignedint k
voor (k = 0k<30000k++)

Berekeningen en programmeren van seriële communicatie met behulp van 8051 Microcontroller

Seriële communicatie wordt gewoonlijk gebruikt voor het verzenden en ontvangen van het signaal. De 8051-microcontroller heeft bestaan UART seriële communicatie de signalen die worden verzonden en ontvangen door de Rx- en Tx-pinnen. De UART neemt bytes aan gegevens en verzendt de afzonderlijke bits op een sequentiële manier. De registers zijn een manier om de gegevens in het geheugen te verzamelen en op te slaan. UART is een half-duplex-protocol. Half-duplex betekent het overdragen en ontvangen van de gegevens, maar niet tegelijkertijd.

Berekeningen en programmeren van seriële communicatie met behulp van 8051 Microcontroller

Berekeningen en programmeren van seriële communicatie met behulp van 8051 Microcontroller

1. WAP om het teken ‘S’ naar het seriële venster te verzenden, 9600 als baudrate gebruiken?

28800 is de maximale baudrate van de 8051-microcontroller

28800/9600 = 3

Die baudrate ‘3’ wordt opgeslagen in de timers

#inclusief

leegte main ()


SCON = 0x50 // start de seriële communicatie //
TNOD = 0x20 // heeft de timermodus geselecteerd //
TH1 = 3 // laad de baudrate //
TR1 = 1 // Timer AAN //
SBUF = ’S’ // sla het teken op in het register //
while (TI == 0) // controleer het interruptregister //
TI = 0
TR1 = 0 // UIT de timer //
while (1) // continue lus //

2. WAP om de gegevens van de hyperterminal te ontvangen en die gegevens naar PORT 0 van de Microcontroller te sturen met 9600 baud?

28800 is de maximale baudrate van de 8051-microcontroller

28800/9600 = 3

Die baudrate ‘3’ wordt opgeslagen in de timers

#inclusief

leegte main ()

SCON = 0x50 // start de seriële communicatie //
TMOD = 0x20 // heeft de timermodus geselecteerd //
TH1 = 3 // laad de baudrate //
TR1 = 1 // Timer AAN //
PORT0 = SBUF // stuur de gegevens van SBUF naar poort0 //
while (RI == 0) // controleer het interruptregister //
RI = 0
TR1 = 0 // UIT de timer //
while (1) // stop het programma wanneer het teken wordt ontvangen //

Onderbreek programma's met 8051 Microcontroller

De interrupt is een signaal dat dwingt het huidige programma te stoppen en het andere programma onmiddellijk uit te voeren. De 8051-microcontroller biedt 6 interrupts, die intern en extern zijn bronnen onderbreken ​Wanneer de interrupt optreedt, pauzeert de microcontroller de huidige taak en zorgt hij voor de interrupt door de ISR uit te voeren, waarna de microcontroller terugkeert naar de recente taak.

WAP om de linkerdienst uit te voeren wanneer timer 0 onderbreekt, voer dan de onderbrekingsoperatie uit voor de P0 in de hoofdfunctie?

#inclusief

unsigned char b

void timer0 () interrupt 2 // geselecteerde timer0 interrupt //

b = 0x10
P1 = b<<2

leegte main ()

unsigned char a, i
IE = 0x82 // schakel de timer0 interrupt in //
TMOD = 0x01
TLo = 0xFC // onderbrekingstimer //
TH1 = 0xFB
TR0 = 1
a = 0x00
terwijl (1)

voor (i = 0i<255i++)

een ++
Po = een


Toetsenbordprogrammering met behulp van 8051 Microcontroller

Het matrixtoetsenbord is een analoog schakelapparaat dat in veel ingebedde toepassingen wordt gebruikt om de gebruiker in staat te stellen de nodige taken uit te voeren. EEN matrix toetsenbord bestaat uit een arrangement van schakelaars in matrixformaat in rijen en kolommen. De rijen en kolommen zijn zo verbonden met de microcontroller dat de rij schakelaars is verbonden met één pin en schakelaars in elke kolom zijn verbonden met een andere pin, en voer vervolgens de bewerkingen uit.

Toetsenbordprogrammering met behulp van 8051 Microcontroller

Toetsenbordprogrammering met behulp van 8051 Microcontroller

1. WAP om de LED te schakelen door op de schakelaar te drukken

#inclusief
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
ongeldige vertraging ()
leegte main ()

terwijl (1)

a = 0
b = 1
c = 1
d = 1
vertraging()
a = 1
b = 0
c = 1
d = 1
ongeldige vertraging ()

unsigned char i
TMOD = 0x20 // stel de timermodus in //
voor (i = 0i<2i++) //double the time daly//

TL1 = 0x19 // stel de vertraging in //
TH1 = 0x00
TR1 = 1 // timer aan //
While (TF1 == 0) // controleer de vlagbit //
TF1 = 0

TR1 = 0 // timer uit //

2. WAP om de LED in te schakelen door op de ‘1’ toets op het toetsenbord te drukken?

#inclusief

sbit r1 = P2 ^ 0
sbit c1 = P3 ^ 0
sbit-led = P0 ^ 1

leegte main ()

r1 = 0
if (c1 == 0)

LED = 0xff

3. WAP om het nummer 0,1,2,3,4,5 op de zeven segmenten weer te geven door op de respectieve toets op het toetsenbord te drukken?

#inclusief

sbit r1 = P2 ^ 0

sbit c1 = P3 ^ 0

sbit r2 = P2 ^ 0

sbit c2 = P3 ^ 0

sbit a = P0 ^ 1

leegte main ()

r1 = 0 een = 1

if (c1 == 0)

a = 0xFC

Als (c2 == 0)

a = 0x60

if (c3 == 0)

a = 0xDA

If (c4 == 0)

een = 0xF2

LCD-programmering met 8051 Microcontroller

De LCD scherm is een elektronisch apparaat dat in veel toepassingen vaak wordt gebruikt voor het weergeven van informatie in tekst- of beeldformaat. Het LCD-scherm is een display dat gemakkelijk tekens op het scherm kan weergeven. Het LCD-scherm heeft 8 datalijnen en 3 controlelijnen die worden gebruikt om te communiceren met de microcontroller.

LCD-programmering met 8051 Microcontroller

LCD-programmering met 8051 Microcontroller

WAP om de 'EDGEFX KITS' weer te geven op het LED-display?

#inclusief
# definiëren kam P0

voidlcd_initi ()
voidlcd_dat (niet-ondertekende teken)
voidlcd_cmd (niet-ondertekend teken)
ongeldige vertraging ()
ongeldige weergave (niet-ondertekende tekens, niet-ondertekende tekens)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit op = P2 ^ 2
leegte main ()

lcd_initi ()
lcd_cmd (0x80)
vertraging (100)
lcd_cmd (0xc0)
display ('edgefx kits', 11)
terwijl (1)

ongeldige weergave (niet-ondertekende tekens, niet-ondertekende tekens)

unsignedint w
voor (w = 0w
lcd_data (s [w])


voidlcd_initi ()

lcd_cmd (0 × 01)
vertraging (100)
lcd_cmd (0 × 38)
vertraging (100)
lcd_cmd (0 × 06)
vertraging (100)
lcd_cmd (0x0c)
vertraging (100)

voidlcd_dat(unsigned char dat)

kam = dat
rs = 1
rw = 0
in = 1
vertraging (100)
in = 0


voidlcd_cmd (niet-ondertekende teken cmd)

kwam = cmd
rs = 0
rw = 0

in = 1
vertraging (100)
in = 0

ongeldige vertraging (unsigned int n)

unsignedint a
voor (a = 0a

Ik hoop dat dit artikel basisinformatie geeft over ingebedde systeemprogrammering met behulp van 8051-microcontroller met een paar voorbeeldprogramma's. Plaats uw opmerkingen en vragen in het commentaargedeelte hieronder voor een gedetailleerde zelfstudie over embedded C-programmeren.