Tutorial de programació incrustat C amb llenguatge Keil

Proveu El Nostre Instrument Per Eliminar Problemes





Embedded C és el llenguatge de programació més popular en el camp del programari per al desenvolupament de dispositius electrònics. Cada processador està associat amb programari incrustat. Programació C incrustada té un paper important en la realització de funcions específiques pel processador. En el nostre dia a dia, sovint fem servir molts dispositius electrònics, com ara rentadores, telèfons mòbils, càmeres digitals, etc. funcionaran basats en microcontroladors programats per C. incrustat.

Programació de sistemes incrustats

Programació de sistemes incrustats



El codi C escrit és més fiable, portàtil i escalable i, de fet, és molt més fàcil d’entendre. La primera eina principal és el programari incrustat que decideix el funcionament d’un sistema incrustat. El llenguatge de programació C incrustat s’utilitza amb més freqüència per programar els microcontroladors.


Tutorial de programació incrustat C (8051)

Per escriure el programa, els dissenyadors incrustats han de tenir prou coneixement sobre el maquinari de determinats processadors o controladors, ja que la programació C incrustada és una tècnica de programació completa relacionada amb el maquinari.



Tutorial de programació

Tutorial de programació

Anteriorment, moltes aplicacions incrustades es van desenvolupar mitjançant la programació a nivell de muntatge. Tot i això, no van proporcionar portabilitat per superar aquest problema amb l’aparició de diversos llenguatges d’alt nivell com C, COBOL i Pascal. No obstant això, va ser el llenguatge C el que va obtenir una àmplia acceptació desenvolupament d'aplicacions de sistemes incrustats , i continua fent-ho.

Sistema incrustat

El sistema incrustat es defineix com la combinació de programari de programació C incrustat i part de maquinari que consisteix majoritàriament en microcontroladors i està destinat a realitzar la tasca específica. Aquest tipus de sistemes incrustats s’utilitzen en la nostra vida diària, com ara rentadores i gravadores de vídeo, neveres, etc. El sistema incrustat va ser introduït per primera vegada pels microcontroladors 8051.

Sistema incrustat

Sistema incrustat

Introducció al microcontrolador 8051

El microcontrolador 8051 és un microcontrolador bàsic, introduït per primera vegada per la ‘Intel Corporation’ des del 1970. Està desenvolupat per l’arquitectura del processador 8086. El 8051 és una família de microcontroladors, que ha estat desenvolupada per diferents fabricants com Philips, Atmel, dalls, etc. Els microcontroladors 8051 s’ha utilitzat en molts productes incrustats, des de joguines per a nens petits fins a sistemes automotors grans.


Microcontrolador 8051

Microcontrolador 8051

El microcontrolador 8051 és de 8 bits Arquitectura ‘CISC’ . Consisteix en memòries, comunicacions en sèrie, interrupcions, ports d'entrada / sortida i temporitzador / comptadors, integrats en un sol xip integrat, que està programat per controlar els dispositius perifèrics que hi estan interfície. El programa s’emmagatzema a la memòria RAM del microcontrolador, però abans d’escriure el programa, hem de tenir en compte la memòria RAM organització del microcontrolador.

Programació de sistemes incrustats: Declaració bàsica

Totes les funcions són una col·lecció d’afirmacions que realitzen una tasca específica i la col·lecció d’una o més funcions s’anomena llenguatge de programació. Cada idioma consta d’alguns elements bàsics i regles gramaticals. La programació en llenguatge C està dissenyada per funcionar amb el conjunt de caràcters, s’utilitzen variables, tipus de dades, constants, paraules clau, expressions, etc. per escriure un programa C. Tots aquests es consideren a fitxer de capçalera o fitxer de biblioteca i es representa com a

#incloure

Desenvolupament de programació incrustada C

Desenvolupament de programació incrustada C

L’extensió del llenguatge C s’anomena llenguatge de programació Embedded C. En comparació amb l'anterior, la programació incrustada en llenguatge C té algunes funcions addicionals, com ara tipus de dades i paraules clau, i el fitxer de capçalera o fitxer de biblioteca es representa com

#incloure

Paraules clau addicionals incrustades en C

  • sbit
  • mica
  • SFR
  • volàtil
  • macros defineix

El 'sbit' s'utilitza per declarar el PIN únic del microcontrolador. Per exemple, el LED està connectat al pin P0.1, no es recomana enviar el valor al pin del port directament, primer hem de declarar el pin amb una altra variable i després després d’utilitzar-lo en qualsevol lloc del programa.

Sintaxi: sbit a = P0 ^ 1 // declara el pin corresponent amb una variable //
a = 0x01 // envieu el valor al pin del port //

El 'bit' s'utilitza per comprovar l'estat de la variable.

Sintaxi: el bit c // declara la variable de bits //
c = a // s’assigna un valor a la variable c //
if (c == 1) // comproveu la condició true o false //

{
... ..
......
}

La paraula clau 'SFR' s'utilitza per accedir als registres SFR amb un altre nom. El registre SFR definit com a registre de funcions especials , conté tots els registres relacionats perifèricament indicant l'adreça. El registre SFR es declara mitjançant la paraula clau SFR. La paraula clau SFR ha d'estar en majúscules.

Sintaxi: port SFR = 0x00 // 0x00 és una adreça port0 que es declara mitjançant la variable de port //
Port = 0x01 // a continuació, envieu el valor al port0 //
retard()
port = 0x00
retard()

La paraula clau 'volàtil' és la més important en el desenvolupament de sistemes incrustats. La variable que declara amb el valor de la paraula clau volàtil no s'ha pogut canviar inesperadament. Es pot utilitzar en registres perifèrics assignats a la memòria, variables globals modificades pels ISR. Sense utilitzar la paraula clau volàtil per transmetre i rebre les dades, es produirà un error de codi o un error d’optimització.

Sintaxi: volàtil int k

La macro és un nom que s’utilitza per declarar el bloc d’instruccions com a directiva prèvia al processador. Sempre que s’utilitza el nom, se substitueix pel contingut de la macro. Les macros representen el #define. Totes les clavilles de port estan definides per les macros.

Sintaxi: #define dat Po // tot el port és declarat per una variable //
dat = 0x01 // dades enviades al port0 //

Programes bàsics de C incrustats

La programació del microcontrolador serà diferent per a cadascun tipus de sistema operatiu . Tot i que hi ha molts sistemes operatius existents com Linux, Windows, RTOS, etc. No obstant això, RTOS té diversos avantatges per al desenvolupament de sistemes incrustats. En aquest article es parla de la programació bàsica C incrustada per desenvolupar programació C incrustada mitjançant un microcontrolador 8051.

Passos de programació de C incrustats

Passos de programació de C incrustats

  • LED parpellejant mitjançant microcontrolador 8051
  • Visualització de números en pantalla de 7 segments mitjançant microcontrolador 8051
  • Càlculs de temporitzadors / comptadors i programa mitjançant microcontrolador 8051
  • Càlculs i programes de comunicació en sèrie mitjançant microcontrolador 8051
  • Interrompre els programes mitjançant el microcontrolador 8051
  • Programació de teclat mitjançant microcontrolador 8051
  • Programació LCD amb microcontrolador 8051

LED parpellejant mitjançant el microcontrolador 8051

El LED és un dispositiu semiconductor que s'utilitza en moltes aplicacions, principalment amb finalitats indicatives. S'està trobant una gran quantitat d'aplicacions com a indicadors durant la prova per comprovar la validesa dels resultats en diferents etapes. Són molt econòmics i són fàcilment disponibles en diverses formes, colors i mides. Els LED s’utilitzen per dissenyar taulers de visualització de missatges i senyals de control de trànsit, etc. Aquí, els LED estan interfaciats amb el PORT0 dels microcontroladors 8051.

LED parpellejant mitjançant el microcontrolador 8051

LED parpellejant mitjançant el microcontrolador 8051

1. 01.010.101
10101010

#include // fitxer de capçalera //
void main () // el punt estadístic d'execució del programa //
{
int signat i // tipus de dades //
while (1) // per a bucle continu //
{
P0 = 0x55 // envia el valor hexa al port0 //
per a (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // envia el valor hexa al port0 //
per a (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10000000

#incloure

void main ()

{

unsignedint i

sense signar j, b

mentre que (1)

{

P0 = 0x01

b = P0

per a (j-0j<3000j++)

per a (j = 0j<8j++)

{

b = b<<1

P0 = b

per a (j-0j<3000j++)

}

}

}

3. 00.001.111

11110000

#incloure

void main ()

{

unsignedint i

mentre que (1)

{

P0 = 0x0F

per a (j-0j<3000j++)

P0 = 0xF0

per a (j-0j<3000j++)

}

}

4. 00000001

00000011

00000111

.

.

11111111

#incloure

void main ()

{

unsignedint i

sense signar j, b

mentre que (1)

{

P0 = 0x01

b = P0

per a (j-0j<3000j++)

per a (j = 0j<8j++)

0x01

P0 = b

per a (j-0j<3000j++)

}

}

Visualització de números en pantalla de 7 segments mitjançant microcontrolador 8051

El Pantalles de 7 segments és la pantalla electrònica bàsica, que s’utilitza en molts sistemes per mostrar la informació numèrica. Consta de vuit LED connectats de manera seqüencial per mostrar dígits del 0 al 9, quan s’activen les combinacions adequades de LED. Només poden mostrar un dígit a la vegada.

Visualització de números en pantalla de 7 segments mitjançant microcontrolador 8051

Visualització de números en pantalla de 7 segments mitjançant microcontrolador 8051

1. WAP per mostrar els números del formulari '0 a F' en quatre pantalles de 7 segments?

#incloure
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
void main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
us ha signat, j
a = b = c = d = 1
mentre que (1)
{
per a (i = 0i<10i++)
{
P2 = n [i]
per a (j = 0j<60000j++)
}
}
}

2. WAP per mostrar els números del '00 al 10 'a les pantalles de 7 segments?

#incloure
sbit a = P3 ^ 0
sbit b = P3 ^ 1
visualització nul·la1 ()
void display2 ()
retard nul ()
void main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
us ha signat, j
ds1 = ds2 = 0
mentre que (1)
{
per a (i = 0, i<20i++)
display1 ()
display2 ()
}
}
visualització nul·la1 ()
{
a = 1
b = 0
P2 = s [ds1]
retard()
a = 1
b = 0
P2 = s [ds1]
retard()
}
void display2 ()
{
ds1 ++
si (ds1> = 10)
{
ds1 = 0
ds2 ++
si (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
retard nul ()
{
unsignedint k
per a (k = 0k<30000k++)
}

Càlculs de temporitzadors / comptadors i programa mitjançant microcontrolador 8051

El retard és un dels factors importants en el desenvolupament de programari d'aplicacions. No obstant això, el retard normal no donarà el resultat preciós per superar aquest problema en implementar el retard del temporitzador. El temporitzadors i comptadors són components de maquinari del microcontrolador, que s’utilitza en moltes aplicacions per proporcionar el preuat retard de temps amb impulsos de recompte. Les dues tasques s’implementen mitjançant la tècnica del programari.

Retard del temporitzador

WAP per generar el retard de 500us mitjançant T1M2 (temporitzador1 i mode2)?

#incloure

void main ()
{
unsigned char i
TMOD = 0x20 // estableix el mode de temporitzador //
per a (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // defineix el retard //
TH1 = 0x00
TR1 = 1 // temporitzador oN //
While (TF1 == 0) // comproveu el bit de senyalador //
TF1 = 0
}
TR1 = 0 // temporitzador desactivat //
}

Retard de bucle normal

retard nul ()

{
unsignedint k
per a (k = 0k<30000k++)
}

Càlculs i programes de comunicació en sèrie mitjançant microcontrolador 8051

La comunicació en sèrie s’utilitza habitualment per transmetre i rebre el senyal. El microcontrolador 8051 ha consistit Comunicació en sèrie UART els senyals transmesos i rebuts pels pins Rx i Tx. La UART pren bytes de dades i envia els bits individuals de manera seqüencial. Els registres són una forma de recollir i emmagatzemar les dades a la memòria. UART és un protocol semi-dúplex. Mitjans dúplex significa transferir i rebre les dades, però no al mateix temps.

Càlculs i programes de comunicació en sèrie mitjançant microcontrolador 8051

Càlculs i programes de comunicació en sèrie mitjançant microcontrolador 8051

1. WAP per transmetre el caràcter 'S' a la finestra serial utilitzeu 9600 com a velocitat en bauds?

28800 és la velocitat de transmissió màxima del microcontrolador 8051

28800/9600 = 3

Aquesta velocitat de transmissió '3' s'emmagatzema als temporitzadors

#incloure

void main ()

{
SCON = 0x50 // inicia la comunicació en sèrie //
TNOD = 0x20 // ha seleccionat el mode de temporitzador //
TH1 = 3 // carrega la velocitat en bauds //
TR1 = 1 // Temporitzador ON //
SBUF = 'S' // emmagatzema el caràcter al registre //
while (TI == 0) // comproveu el registre d’interrupcions //
TI = 0
TR1 = 0 // DESACTIVA el temporitzador //
while (1) // bucle continu //
}

2. WAP per rebre les dades de l'hiperterminal i enviar-les al PORT 0 del microcontrolador mitjançant 9600 bauds?

28800 és la velocitat de transmissió màxima del microcontrolador 8051

28800/9600 = 3

Aquesta velocitat de transmissió '3' s'emmagatzema als temporitzadors

#incloure

void main ()
{
SCON = 0x50 // inicia la comunicació en sèrie //
TMOD = 0x20 // ha seleccionat el mode de temporitzador //
TH1 = 3 // carrega la velocitat en bauds //
TR1 = 1 // Temporitzador ON //
PORT0 = SBUF // envia les dades des de SBUF al port0 //
while (RI == 0) // comproveu el registre d’interrupcions //
RI = 0
TR1 = 0 // DESACTIVA el temporitzador //
while (1) // atura el programa quan es rep el caràcter //
}

Interrompre els programes mitjançant el microcontrolador 8051

La interrupció és un senyal que obliga a aturar el programa actual i executar l'altre programa immediatament. El microcontrolador 8051 proporciona 6 interrupcions, que són internes i externes interrompre les fonts . Quan es produeix la interrupció, el microcontrolador posa en pausa la tasca actual i atén la interrupció executant l'ISR, el microcontrolador torna a la tasca recent.

WAP per realitzar l'operació de desplaçament a l'esquerra quan es produeix una interrupció del temporitzador 0 i després realitzar l'operació d'interrupció per al P0 a la funció principal?

#incloure

sense signar b

void timer0 () interrupt 2 / // temporitzador seleccionat0 interrupt
{
b = 0x10
P1 = b<<2
}
void main ()
{
unsigned char a, i
IE = 0x82 // habilita la interrupció del temporitzador0 //
TMOD = 0x01
TLo = 0xFC // temporitzador d'interrupció //
TH1 = 0xFB
TR0 = 1
a = 0x00
mentre que (1)
{
per a (i = 0i<255i++)
{
a ++
Po = a
}
}
}

Programació de teclat mitjançant microcontrolador 8051

El teclat matricial és un dispositiu de commutació analògic que s’utilitza en moltes aplicacions incrustades per permetre a l’usuari realitzar les tasques necessàries. A teclat matricial consisteix en una disposició de commutadors en format matricial en files i columnes. Les files i les columnes es connecten al microcontrolador de manera que la fila dels commutadors estigui connectada a un pin i els commutadors de cada columna estiguin connectats a un altre pin i, a continuació, realitzeu les operacions.

Programació de teclat mitjançant microcontrolador 8051

Programació de teclat mitjançant microcontrolador 8051

1. WAP per commutar el LED prement el commutador

#incloure
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
retard nul ()
void main ()
{
mentre que (1)
{
a = 0
b = 1
c = 1
d = 1
retard()
a = 1
b = 0
c = 1
d = 1
retard nul ()
{
unsigned char i
TMOD = 0x20 // estableix el mode de temporitzador //
per a (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // defineix el retard //
TH1 = 0x00
TR1 = 1 // temporitzador oN //
While (TF1 == 0) // comproveu el bit de senyalador //
TF1 = 0
}
TR1 = 0 // temporitzador desactivat //
}

2. WAP per encendre el LED prement la tecla '1' del teclat?

#incloure

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

void main ()
{

r1 = 0
if (c1 == 0)
{

LED = 0xff
}
}

3. WAP per mostrar el número 0,1,2,3,4,5 al segment de set prement la tecla respectiva del teclat?

#incloure

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

if (c1 == 0)

{

a = 0xFC

}

Si (c2 == 0)

{

a = 0x60

}

if (c3 == 0)

{

a = 0xDA

}

Si (c4 == 0)

{

a = 0xF2

}

}

Programació LCD amb microcontrolador 8051

El Pantalla LCD és un dispositiu electrònic que s’utilitza freqüentment en moltes aplicacions per mostrar la informació en format de text o imatge. La pantalla LCD és una pantalla que pot mostrar fàcilment personatges a la pantalla. La pantalla LCD consta de 8 línies de dades i 3 línies de control que s’utilitzen per a la interfície amb el microcontrolador.

Programació LCD amb microcontrolador 8051

Programació LCD amb microcontrolador 8051

WAP per mostrar els 'KITS EDGEFX' a la pantalla LED?

#incloure
#define kam P0

voidlcd_initi ()
voidlcd_dat (caràcter sense signar)
voidlcd_cmd (caràcter sense signar)
retard nul ()
visualització nul·la (caràcters sense signe *, caràcters sense signe r)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
SBIT en = P2 ^ 2
void main ()
{

lcd_initi ()
lcd_cmd (0x80)
retard (100)
lcd_cmd (0xc0)
pantalla ('kits edgefx', 11)
mentre que (1)
}

visualització nul·la (caràcters sense signe *, caràcters sense signe r)
{
unsignedint w
per a (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
retard (100)
lcd_cmd (0 × 38)
retard (100)
lcd_cmd (0 × 06)
retard (100)
lcd_cmd (0x0c)
retard (100)
}
voidlcd_dat (dades de caràcters sense signar)
{
pentinar = això
rs = 1
rw = 0
a = 1
retard (100)
a = 0
}
}
voidlcd_cmd (cmd de caràcter sense signar)
{
came = cmd
rs = 0
rw = 0

a = 1
retard (100)
a = 0
}
retard nul (int signat n)
{

unsignedint a
per a (a = 0a}

Espero que aquest article ofereixi informació bàsica sobre la programació de sistemes incrustats mitjançant microcontrolador 8051 amb alguns exemples de programes. Per obtenir un tutorial de programació C incrustat detallat, publiqueu els vostres comentaris i consultes a la secció de comentaris següent.