Tutorial de programação C incorporado com linguagem Keil

Experimente Nosso Instrumento Para Eliminar Problemas





Embedded C é a linguagem de programação mais popular na área de software para o desenvolvimento de dispositivos eletrônicos. Cada processador está associado a um software integrado. Programação C incorporada desempenha um papel importante no desempenho de funções específicas do processador. Em nosso dia-a-dia, frequentemente usamos muitos dispositivos eletrônicos, como máquinas de lavar, telefones celulares, câmeras digitais e assim por diante, que funcionam com base em microcontroladores programados por C.

Programação de sistema embutido

Programação de sistema embutido



O código C escrito é mais confiável, portátil e escalonável e, na verdade, muito mais fácil de entender. A primeira e principal ferramenta é o software embarcado que decide a operação de um sistema embarcado. A linguagem de programação C incorporada é usada com mais frequência para programar os microcontroladores.


Tutorial de programação C incorporado (8051)

Para escrever o programa, os projetistas incorporados devem ter conhecimento suficiente sobre o hardware de determinados processadores ou controladores, pois a programação C incorporada é uma técnica de programação totalmente relacionada ao hardware.



Tutorial de programação

Tutorial de programação

Anteriormente, muitos aplicativos incorporados foram desenvolvidos usando programação em nível de montagem. No entanto, eles não forneceram portabilidade para superar esse problema com o advento de várias linguagens de alto nível, como C, COBOL e Pascal. No entanto, foi a linguagem C que obteve ampla aceitação para desenvolvimento de aplicativos de sistemas embarcados , e continua a fazê-lo.

Sistema Embutido

O sistema embarcado é definido como a combinação de software de programação C embarcado e parte do hardware consiste principalmente em microcontroladores e se destina a realizar a tarefa específica. Esses tipos de sistemas embarcados estão sendo usados ​​em nossa vida diária, como máquinas de lavar e gravadores de vídeo, geladeiras e assim por diante. O sistema embarcado foi introduzido pela primeira vez pelos microcontroladores 8051.

Sistema Embutido

Sistema Embutido

Introdução ao microcontrolador 8051

O microcontrolador 8051 é um microcontrolador básico, foi introduzido pela 'Intel Corporation' desde 1970. Ele é desenvolvido pela arquitetura do processador 8086. O 8051 é uma família de microcontroladores, que foi desenvolvida por diferentes fabricantes, como Philips, Atmel, dalls e assim por diante. Os microcontroladores 8051 tem sido usado em muitos produtos incorporados, desde brinquedos de crianças até grandes sistemas automotivos.


Microcontrolador 8051

Microcontrolador 8051

O microcontrolador 8051 é o de 8 bits ‘CISC’ architecture . Consiste em memórias, comunicação serial, interrupções, portas de entrada / saída e temporizadores / contadores, embutidos em um único chip integrado, que é programado para controlar os dispositivos periféricos que fazem interface com ele. O programa é armazenado na RAM do microcontrolador, mas antes de escrever o programa, devemos estar cientes da RAM organização do microcontrolador.

Programação de sistema embarcado: declaração básica

Cada função é uma coleção de instruções que executam uma tarefa específica e a coleção de uma ou mais funções é chamada de linguagem de programação. Cada idioma consiste em alguns elementos básicos e regras gramaticais. A programação da linguagem C é projetada para funcionar com o conjunto de caracteres, variáveis, tipos de dados, constantes, palavras-chave, expressões e assim por diante são usados ​​para escrever um programa C. Todos estes considerados no arquivo de cabeçalho ou arquivo de biblioteca e são representados como

#incluir

Desenvolvimento de programação C embarcada

Desenvolvimento de programação C embarcada

A extensão da linguagem C é chamada de linguagem de programação C incorporada. Em comparação com o anterior, a programação incorporada na linguagem C tem alguns recursos adicionais, como tipos de dados e palavras-chave e arquivo de cabeçalho ou arquivo de biblioteca é representado como

#incluir

Palavras-chave adicionais C incorporadas

  • sbit
  • mordeu
  • SFR
  • volátil
  • macros definem

O “sbit” é usado para declarar o único PIN do microcontrolador. Por exemplo, o LED está conectado no pino P0.1, não é recomendado enviar o valor para o pino da porta diretamente, primeiro, temos que declarar o pino com outra variável depois podemos usar em qualquer lugar do programa.

Sintaxe: sbit a = P0 ^ 1 // declara o respectivo pino com uma variável //
a = 0x01 // envia o valor para o pino da porta //

O “bit” é usado para verificar o estado da variável.

Sintaxe: bit c // declara a variável de bit //
c = a // um valor é atribuído à variável c //
if (c == 1) // verifique a condição verdadeira ou falsa //

{
… ..
……
}

A palavra-chave “SFR” é usada para acessar os registros SFR por outro nome. O registro SFR definido como um registro de função especial , ele contém todos os registros relacionados à periferia, indicando o endereço. O registro SFR é declarado pela palavra-chave SFR. A palavra-chave SFR deve estar em letras maiúsculas.

Sintaxe: SFR port = 0x00 // 0x00 é um endereço de porta 0 declarado pela variável de porta //
Porta = 0x01 // então envie o valor para a porta0 //
atraso()
porta = 0x00
atraso()

A palavra-chave “volátil” é a mais importante no desenvolvimento de sistemas embarcados. A variável que declara com o valor da palavra-chave volatile não pode ser alterada inesperadamente. Pode ser usado em registros periféricos mapeados na memória, variáveis ​​globais modificadas pelos ISRs. Sem usar a palavra-chave volatile para transmitir e receber os dados, ocorrerá um erro de código ou de otimização.

Sintaxe: volatile int k

A macro é um nome que é usado para declarar o bloco de instruções como uma diretiva do pré-processador. Sempre que o nome é usado, ele é substituído pelo conteúdo da macro. As macros representam o #define. Todos os pinos da porta são definidos pelas macros.

Sintaxe: #define dat Po // toda a porta é declarada por uma variável //
dat = 0x01 // envio de dados para a porta 0 //

Programas C embarcados básicos

A programação do microcontrolador será diferente para cada tipo de sistema operacional . Embora existam muitos sistemas operacionais, como Linux, Windows, RTOS e assim por diante. No entanto, o RTOS tem várias vantagens para o desenvolvimento de sistemas embarcados. Este artigo discute a programação C embutida básica para desenvolver programação C embutida usando um microcontrolador 8051.

Etapas de programação C incorporada

Etapas de programação C incorporada

  • LED piscando usando com microcontrolador 8051
  • Número exibido no display de 7 segmentos usando o microcontrolador 8051
  • Cálculos e programa de temporizador / contador usando o microcontrolador 8051
  • Cálculos de comunicação serial e programa usando o microcontrolador 8051
  • Programas de interrupção usando o microcontrolador 8051
  • Programação do teclado usando o microcontrolador 8051
  • Programação LCD com microcontrolador 8051

LED piscando usando o microcontrolador 8051

O LED é um dispositivo semicondutor que é usado em muitas aplicações, principalmente para fins de indicação. É encontrar uma vasta gama de aplicações como indicadores durante o teste para verificar a validade dos resultados em diferentes etapas. Eles são muito baratos e facilmente disponíveis em uma variedade de formas, cores e tamanhos. Os LEDs são usados ​​para projetar painéis de exibição de mensagens e semáforos de controle de tráfego, etc. Aqui, os LEDs fazem interface com a PORT0 dos microcontroladores 8051.

LED piscando usando o microcontrolador 8051

LED piscando usando o microcontrolador 8051

1. 01010101
10101010

#include // arquivo de cabeçalho //
void main () // o ponto de estatística de execução do programa //
{
unsigned int i // tipo de dados //
while (1) // para loop contínuo //
{
P0 = 0x55 // envia o valor hexa para a porta0 //
para (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // envia o valor hexa para a porta0 //
para (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10.000.000

#incluir

void main ()

{

sem sinal i

unsigned char j, b

enquanto (1)

{

P0 = 0x01

b = P0

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

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

{

b = b<<1

P0 = b

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

}

}

}

3. 00001111

11110000

#incluir

void main ()

{

sem sinal i

enquanto (1)

{

P0 = 0x0F

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

P0 = 0xF0

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

}

}

4. 00000001

00000011

00000111

.

.

11111111

#incluir

void main ()

{

sem sinal i

unsigned char j, b

enquanto (1)

{

P0 = 0x01

b = P0

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

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

0x01

P0 = b

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

}

}

Exibindo Números em Display de 7 Segmentos usando o Microcontrolador 8051

O Monitores de 7 segmentos são os visores eletrônicos básicos, que são usados ​​em muitos sistemas para exibir as informações numéricas. Consiste em oito LEDs que são conectados de maneira sequencial para exibir os dígitos de 0 a 9, quando as combinações adequadas de LEDs são ligadas. Eles podem exibir apenas um dígito por vez.

Exibindo Números em Display de 7 Segmentos usando o Microcontrolador 8051

Exibindo Números em Display de 7 Segmentos usando o Microcontrolador 8051

1. WAP para exibir os números de '0 a F' em quatro monitores de 7 segmentos?

#incluir
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}
você não assinado, j
a = b = c = d = 1
enquanto (1)
{
para (i = 0i<10i++)
{
P2 = n [i]
para (j = 0j<60000j++)
}
}
}

2. WAP para exibir os números de '00 a 10 'em monitores de 7 segmentos?

#incluir
sbit a = P3 ^ 0
sbit b = P3 ^ 1
void display1 ()
void display2 ()
atraso vazio ()
void main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
você não assinado, j
ds1 = ds2 = 0
enquanto (1)
{
para (i = 0, i<20i++)
display1 ()
display2 ()
}
}
void display1 ()
{
a = 1
b = 0
P2 = s [ds1]
atraso()
a = 1
b = 0
P2 = s [ds1]
atraso()
}
void display2 ()
{
ds1 ++
if (ds1> = 10)
{
ds1 = 0
DS2 ++
if (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
atraso vazio ()
{
unsignedint k
para (k = 0k<30000k++)
}

Cálculos de cronômetro / contador e programa usando o microcontrolador 8051

O atraso é um dos fatores importantes no desenvolvimento do software aplicativo. No entanto, o atraso normal não dará o resultado precioso para superar este problema para a implementação do atraso do temporizador. O cronômetros e contadores são componentes de hardware do microcontrolador, que é usado em muitas aplicações para fornecer o precioso atraso de tempo com pulsos de contagem. As duas tarefas são implementadas pela técnica de software.

Atraso do temporizador

WAP para gerar o atraso de tempo de 500us usando T1M2 (timer1 e modo2)?

#incluir

void main ()
{
não assinado char i
TMOD = 0x20 // definir o modo do temporizador //
para (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // definir o atraso de tempo //
TH1 = 0x00
TR1 = 1 // temporizador oN //
Enquanto (TF1 == 0) // verifique o bit da bandeira //
TF1 = 0
}
TR1 = 0 // temporizador desligado //
}

Atraso de Loop Normal

atraso vazio ()

{
unsignedint k
para (k = 0k<30000k++)
}

Cálculos de comunicação serial e programa usando o microcontrolador 8051

A comunicação serial é comumente usada para transmitir e receber o sinal. O microcontrolador 8051 tem consistência Comunicação serial UART os sinais transmitidos e recebidos pelos pinos Rx e Tx. O UART pega bytes de dados e envia os bits individuais de maneira sequencial. Os registradores são uma forma de coletar e armazenar os dados na memória. UART é um protocolo half-duplex. Half-duplex significa transferir e receber os dados, mas não ao mesmo tempo.

Cálculos de comunicação serial e programa usando o microcontrolador 8051

Cálculos de comunicação serial e programa usando o microcontrolador 8051

1. WAP para transmitir o caractere 'S' para a janela serial use 9600 como a taxa de transmissão?

28800 é a taxa de transmissão máxima do microcontrolador 8051

28800/9600 = 3

Essa taxa de baud '3' é armazenada nos temporizadores

#incluir

void main ()

{
SCON = 0x50 // inicia a comunicação serial //
TNOD = 0x20 // selecionou o modo temporizador //
TH1 = 3 // carrega a taxa de baud //
TR1 = 1 // Timer ON //
SBUF = ’S’ // armazena o caractere no registro //
while (TI == 0) // verificar o registro de interrupção //
TI = 0
TR1 = 0 // OFF o cronômetro //
while (1) // loop contínuo //
}

2. WAP para receber os dados do hiperterminal e enviar esses dados para a PORTA 0 do microcontrolador usando 9600 baud?

28800 é a taxa de transmissão máxima do microcontrolador 8051

28800/9600 = 3

Essa taxa de baud '3' é armazenada nos temporizadores

#incluir

void main ()
{
SCON = 0x50 // inicia a comunicação serial //
TMOD = 0x20 // selecionou o modo temporizador //
TH1 = 3 // carrega a taxa de baud //
TR1 = 1 // Timer ON //
PORT0 = SBUF // envia os dados do SBUF para a porta0 //
while (RI == 0) // verificar o registro de interrupção //
RI = 0
TR1 = 0 // OFF o cronômetro //
while (1) // parar o programa quando o caractere for recebido //
}

Programas de interrupção usando o microcontrolador 8051

A interrupção é um sinal que obriga a parar o programa atual e executar o outro programa imediatamente. O microcontrolador 8051 fornece 6 interrupções, que são internas e externas fontes de interrupção . Quando a interrupção ocorre, o microcontrolador pausa a tarefa atual e atende à interrupção executando o ISR, então o microcontrolador retorna à tarefa recente.

WAP para realizar a operação de deslocamento à esquerda quando ocorrer interrupções do temporizador 0 e, em seguida, realizar a operação de interrupção para o P0 na função principal?

#incluir

unsigned char b

void timer0 () interrupt 2 // interrupção do timer0 selecionada //
{
b = 0x10
P1 = b<<2
}
void main ()
{
unsigned char a, i
IE = 0x82 // habilita a interrupção do timer0 //
TMOD = 0x01
TLo = 0xFC // temporizador de interrupção //
TH1 = 0xFB
TR0 = 1
a = 0x00
enquanto (1)
{
para (i = 0i<255i++)
{
a ++
Po = a
}
}
}

Programação do teclado usando o microcontrolador 8051

O teclado de matriz é um dispositivo de comutação analógico, que é usado em muitos aplicativos incorporados para permitir que o usuário execute as tarefas necessárias. UMA teclado de matriz consiste em um arranjo de interruptores em formato de matriz em linhas e colunas. As linhas e colunas são conectadas ao microcontrolador de forma que a linha de interruptores seja conectada a um pino e os interruptores em cada coluna sejam conectados a outro pino, então execute as operações.

Programação do teclado usando o microcontrolador 8051

Programação do teclado usando o microcontrolador 8051

1. WAP para alternar o LED pressionando o botão

#incluir
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
atraso vazio ()
void main ()
{
enquanto (1)
{
a = 0
b = 1
c = 1
d = 1
atraso()
a = 1
b = 0
c = 1
d = 1
atraso vazio ()
{
não assinado char i
TMOD = 0x20 // definir o modo do temporizador //
para (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // definir o atraso de tempo //
TH1 = 0x00
TR1 = 1 // temporizador oN //
Enquanto (TF1 == 0) // verifique o bit da bandeira //
TF1 = 0
}
TR1 = 0 // temporizador desligado //
}

2. WAP para ligar o LED pressionando a tecla '1' no teclado?

#incluir

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

void main ()
{

r1 = 0
if (c1 == 0)
{

LED = 0xff
}
}

3. WAP para exibir o número 0,1,2,3,4,5 no segmento sete pressionando a tecla respectiva no teclado?

#incluir

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

}

Se (c2 == 0)

{

a = 0x60

}

if (c3 == 0)

{

a = 0xDA

}

Se (c4 == 0)

{

a = 0xF2

}

}

Programação LCD com microcontrolador 8051

O tela de LCD é um dispositivo eletrônico, que é freqüentemente usado em muitas aplicações para exibir as informações em formato de texto ou imagem. O LCD é um display que pode mostrar facilmente os caracteres em sua tela. O display LCD consiste em 8 linhas de dados e 3 linhas de controle que são usadas para fazer a interface com o microcontrolador.

Programação LCD com microcontrolador 8051

Programação LCD com microcontrolador 8051

WAP para exibir os “KITS EDGEFX” no display LED?

#incluir
# define kam P0

voidlcd_initi ()
voidlcd_dat (unsigned char)
voidlcd_cmd (unsigned char)
atraso vazio ()
void display (unsigned char * s, unsigned char r)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit em = P2 ^ 2
void main ()
{

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

void display (unsigned char * s, unsigned char r)
{
unsignedint w
para (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
atraso (100)
lcd_cmd (0 × 38)
atraso (100)
lcd_cmd (0 × 06)
atraso (100)
lcd_cmd (0x0c)
atraso (100)
}
voidlcd_dat (unsigned char dat)
{
pente = isso
rs = 1
rw = 0
em = 1
atraso (100)
em = 0
}
}
voidlcd_cmd (unsigned char cmd)
{
veio = cmd
rs = 0
rw = 0

em = 1
atraso (100)
em = 0
}
void delay (unsigned int n)
{

unsignedint a
para (a = 0a}

Espero que este artigo forneça informações básicas sobre a programação de sistemas embarcados usando o microcontrolador 8051 com alguns programas de exemplo. Para o tutorial de programação C embarcado detalhado, poste seus comentários e dúvidas na seção de comentários abaixo.