Teoria linguagem c



Baixar 2.75 Mb.
Página12/30
Encontro30.10.2016
Tamanho2.75 Mb.
1   ...   8   9   10   11   12   13   14   15   ...   30

Introdução à Linguagem C

Neste capítulo vamos estudar detalhadamente a linguagem C com ênfase nos microcontroladores 8051.


A partir deste ponto do livro, todos os programas devem ser editados no JFE Editor e não são compatíveis com outros Compiladores como Turbo C, Dev C++, etc (pois estes são compiladores para computadores e não para microcontroladores).

Nota

O emprego da linguagem C na programação dos microcontroladores não é complicado, mas exige o conhecimento mínimo da estrutura de programação e conhecimento sobre as estruturas internas do 8051, para fazer programas eficientes e compactos, tendo como resultado economia de memória e maior rapidez no processamento do programa pelo chip.

Vejamos um exemplo do programa exemplo1.C:



#include //contém as definições do chip


void main(){ //declara início do programa

P2_0=1; //liga o pino P2.0

} //declara fim do programa

Com o uso inteligente dos comentários e funções, o programa se torna mais compreensível. Programas extensos podem ser divididos em sub-rotinas (funções) que ocasionalmente consumirão menos memória do microcontrolador e tornarão o seu processamento mais rápido.

O programa exemplo1.C descrito anteriormente, tem como função ativar o pino P2.0 do microcontrolador.

Conforme comentado nos capítulos anteriores, para o programa exemplo1.C ser gravado no microcontrolador, precisamos primeiramente compilá-lo, ou seja, transformar os comandos digitados na linguagem C em linhas de comandos de máquina que obedecem o padrão hexadecimal da Intel.

Conteúdo do arquivo exemplo1.hex gerado no JFE Editor:

:040000000200383290

:01000B0032C2

:0100130032BA

:01001B0032B2

:0100230032AA

:01002B0032A2

:100038007581CF120034E582600302002C7900E953

:100048004400601B7A00900080780075A000E4935B

:10005800F2A308B8000205A0D9F4DAF275A0FF7877

:1000680000E84400600C7900900000E4F0A3D8FC9C

:08007800D9FAF6D8FD02002CB4

:0C002C0012003180FED28022758200227A

:00000001FF



Não se preocupe caso não tenha entendido o programa1c. Ao longo deste livro os programas serão abordados de forma mais detalhada.

Nota
4.2. A Linguagem C é Case Sensitive

Isto significa dizer que C diferencia letras minúsculas de maiúsculas. Os identificadores: CONTADOR, contador, Contador são diferentes entre si e especial atenção deve ser dada a esse fato, pois ao criarmos uma variável de uma maneira e escrevê-la de outro, gera-se um erro na compilação. Essa regra aplica-se também a todos os comandos da linguagem C. Os comandos devem ser escritos com letras minúsculas, ex.: while, for, if.

4.3. Palavras Reservadas

A linguagem C possui um conjunto de palavras reservadas que não podem ser usadas como variáveis de programa ou para outros fins. As palavras reservadas da linguagem C (padrão ANSI) são:



auto

break

case

char

const

continue

default

do

double

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

volatile

while

main








Tabela 4.1 - Palavras reservadas do padrão ANSI-C.

As palavras realçadas com a cor cinza são as mais freqüentemente utilizadas para o aprendizado da Programação C para microcontroladores 8051.

Para facilitar o uso de algumas características da família 8051, o SDCC Compiler adiciona novas palavras ao conjunto-padrão de palavras reservadas do C:


bit

interrupt

using

sfr


Tabela 4.2 - Conjunto adicionado ao padrão ANSI-C.

Uma palavra reservada da linguagem C não pode ser utilizada pelo programador como uma variável do programa. A seguir temos um exemplo de erro no emprego destas palavras:

while = 1;

int = 200;

Assim como as palavras reservadas, temos um conjunto de registradores que também não devem ser utilizados para outros fins. São eles:


TCON

Timer/counter control

SCON

Serial port control

IE

Interrupt Enable

IP

Interrupt priority control

PSW

Program status word

ACC

Accumulador

B

B

SP

Stack pointer

DPL

Data pointer Low Word

DPH

Data pointer High Word

PCON

Power control

TMOD

Timer/counter mode control

TL0

Timer/counter 0 low Byte

TL1

Timer/counter 1 low Byte

TH0

Timer/counter 0 high Byte

TH1

Timer/counter 1 high Byte

SBUF

Serial data port

P0

Port P0

P1

Port P1

P2

Port P2

P3

Port P3


Tabela 4.3 - Conjunto de registradores do 8051.

A seguir temos um exemplo de erro no emprego destas palavras:

int B = 10;

int SBUF = 3;

Não podemos declarar variáveis com o nome de SBUF, pois SBUF é uma palavra reservada da linguagem.

4.4. Comentários

Os comentários recebem o nome de “documentação do programa” e é de vital importância para entendermos futuramente o programa. O compilador SDCC Compiler aceita dois tipos de marcadores de comentários: os comentários de múltiplas linhas e os comentários de linha.

Os comentários de múltiplas linhas devem iniciar com /* (barra-asterísco) e terminar com */ (asterisco-barra), exemplo:

/*


TUDO OQUE ESTIVER ENTRE OS MARCADORES DE COMENTÁRIO É IGNORADO PELO COMPILADOR

*/

Os comentários de linha iniciam com // (dupla barra) e o que estiver depois dele na mesma linha é ignorado pelo compilador, exemplo:



#include //contém as definições do chip
void main(){ //declara início do programa

P2_0=1; //liga o pino P2.0

} //declara fim do programa


4.5. Tipos de Dados

Toda variável usada em um programa deve ser declarada como de um determinado tipo, ou seja, assume um certo número de Bits (tamanho) que define suas características. As variáveis podem ser definidas como:



Tipo de dado

bits

Bytes

Alcance

bit

1




0 a 1

signed char

8

1

-128 a +127

unsigned char

8

1

0 a 255

signed int

16

2

-32768 a + 32767

unsigned int

16

2

0 a 65535

signed long

32

4

-2147483648 a +2147483648

unsigned long

32

4

0 a 4294967295

float

32

4

±1,175494E-38 a ±3,402823E+38

Tabela 4.4: - Tipos de dados

4.5.1. Constantes - const

Podemos definir a um símbolo valores constantes pela função const, utilizada quando definimos um valor numérico ou uma string para um símbolo.

No momento da compilação, o compilador encarrega-se de trocar todos os símbolos criados pelo seu respectivo valor. Exemplo:

const LIGADO=1;

const DESLIGADO=0;

const TEMPO_MAXIMO=100;

Após a definição dessas constantes, é possível utilizar as palavras como tendo mesmo significado do valor numérico igualado.

4.5.2. Definições - #define

No tópico anterior vimos a utilização de constantes. As definições servem para criar novos símbolos que sejam equivalentes a outros já existentes. No momento da compilação, o compilador encarrega-se de trocar todos os símbolos criados pelo seu respectivo valor. Exemplo:


#define MOTOR P2_0

#define LAMPADA P2_1




Na linguagem C, os comandos iniciados pelo caractere # são os únicos que não recebem ponto-e-vírgula no final da sintaxe.

Nota


Os comandos de definição #define e const servem para tornar o programa mais compreensível e podem ser utilizados sempre que forem úteis e por tendo em vista que são eliminados durante a compilação, acabam por não consumir memória extra do microcontrolador.

A seguir temos dois programas iguais. Veja como os comandos de definição auxiliam na compreensão do programa.


Exemplo de um programa utilizando os comandos de definição:


#include //contém as definições do chip

#define LAMPADA P0_0

const LIGADO=1;
void main(){ //declara início do programa

P0=0; //desliga todos os pinos

LAMPADA=LIGADO; //liga o pino P0.0

} //declara fim do programa


Exemplo de um programa sem os comandos de definição:



#include //contém as definições do chip


void main(){ //declara início do programa

P0=0; //desliga todos os pinos

P0_0=1; //liga o pino P0.0

} //declara fim do programa




4.6. Funções

Quando temos no programa comandos que são repetidos várias vezes, podemos utilizar o recurso da função. As funções são blocos modulares de comandos que podem ser “chamados” de diferentes pontos do programa, para que não sejamos forçados a reescrevê-los todas as vezes necessárias.




Neste livro as funções da linguagem C são abordadas com ênfase em microcontroladores, o que reduz a diversidade de comandos estudados sobre a linguagem C.

Nota


4.6.1. Estruturas das Funções

As funções devem ser declaradas antes de serem chamadas.

As funções podem conter parâmetros que carregam informações para o bloco de comandos da função.

Para chamar uma função inserimos seu respectivo nome no trecho do programa em que a mesma deva ser executada (chamada ou CALL em Assembly).

Finalizada a função, o programa retorna na linha seguinte ao comando que a chamou.

#include //contém as definições do chip

#include //contém as definições do chip

void piscaLED(){ //declara início da função piscaLED

P2_0=1; //liga o pino P2.0

delay_ms(1000); //aguarda 1 segundo

P2_0=0; //desliga o pino P2.0

delay_ms(1000); //aguarda 1 segundo

} //declara fim da função piscaLED

void main(){ //declara início do programa



piscaLED(); //chama a função pisca led

} //declara fim do programa


É importante observar que todas as novas funções do programa devem ser declaradas antes da função principal (main).



4.6.2. O Tipo void

O void, que traduzido para o português quer dizer “vazio”, é um tipo de dado utilizado em funções que não retornam nada e também em funções que não possuem nenhum parâmetro declarado. A função main para o 8051 é um exemplo de função que não retorna nada e não recebe nenhum parâmetro.

Devido o direcionamento dado à Linguagem C para microcontroladores 8051, as funções abordadas neste livro não retornarão valores e por isso sempre utilizarão o identificador void para preceder o nome da função.

4.7. O Comando #include

Os arquivos cabeçalho (ou header em inglês) contém definições para que o arquivo na linguagem C possa ser compilado.

Na compilação, baseado nesse arquivo header, o compilador gera o código correto para a utilização das funções. Algumas dessas funções já estão compiladas e embutidas no próprio compilador, gerando então, o código correto no momento da sua linkagem (união do arquivo header com o arquivo em C e outros arquivos do compilador).

Todos os programas em C para microcontroladores tem pelo menos, um arquivo de cabeçalho. O nome deste arquivo depende do microcontrolador utilizado.



Todos os microcontroladores da família 8051 possuem uma variação na série do mesmo modelo, observe as letras ‘S’ e ‘C’:

AT89C51 ou AT89S51

AT89C52 ou AT89S52

Figura 4.1. – Diferenças entre a série ‘S’ e ‘C’.

Ambos chips são compatíveis (exceto no método de gravação). No caso dos microcontroladores da série “C”, estes podem ser programados apenas uma única vez, ou seja, a sua memória ROM (Read-Only Memory), onde é gravado o programa .HEX não poderá ser reprogramada. Por este motivo, os microcontroladores da série “C” estão cada vez mais caindo em desuso.

Os microcontroladores da série “S” são classificados como In-System Programmable e podem ser reprogramados (regravados) mais de mil vezes.

Em função da variação entre série “C” e “S”, o arquivo cabeçalho (header), o qual contém as definições dos registradores e palavras reservadas do chip é nomeado de AT89X52.H. A letra “X” presente no nome deste arquivo deve ser entendida como letra “curinga”, tornando esse header compatível com os microcontroladores das duas séries (“C” e “S”).




Os microcontroladores da série C51 e S51 são 100% compatíveis no funcionamento e na programação. Entretanto, o método de gravação do chip é diferente. As principais diferenças encontram-se nos protocolos de gravação e na tensão de gravação (Vpp).Por isso, não é possível gravar um AT89C52 com o gravador do AT89S52.

Nota
Conteúdo parcial do arquivo AT89X52.H contido no SDCC Compiler:



sfr at 0x80 P0

sfr at 0x81 SP

sfr at 0x82 DPL

sfr at 0x83 DPH

sfr at 0x87 PCON

sfr at 0x88 TCON

sfr at 0x89 TMOD

sfr at 0x8A TL0

sfr at 0x8B TL1

sfr at 0x8C TH0

sfr at 0x8D TH1

sfr at 0x90 P1

sfr at 0x98 SCON

sfr at 0x99 SBUF

sfr at 0xA0 P2

sfr at 0xA8 IE

sfr at 0xB0 P3

sfr at 0xB8 IP

sfr at 0xC8 T2CON

sfr at 0xC9 T2MOD

sfr at 0xCC TL2

sfr at 0xCD TH2

sfr at 0xD0 PSW

sfr at 0xE0 ACC

sfr at 0xE0 A

sfr at 0xF0 B


/* P0 */


sbit at 0x80 P0_0

sbit at 0x81 P0_1

sbit at 0x82 P0_2

sbit at 0x83 P0_3

sbit at 0x84 P0_4

sbit at 0x85 P0_5

sbit at 0x86 P0_6

sbit at 0x87 P0_7


/* TCON */

sbit at 0x88 IT0

sbit at 0x89 IE0

sbit at 0x8A IT1

sbit at 0x8B IE1

sbit at 0x8C TR0

sbit at 0x8D TF0

sbit at 0x8E TR1

sbit at 0x8F TF1

/* P1 */


sbit at 0x90 P1_0

sbit at 0x91 P1_1

sbit at 0x92 P1_2

sbit at 0x93 P1_3

sbit at 0x94 P1_4

sbit at 0x95 P1_5

sbit at 0x96 P1_6

sbit at 0x97 P1_7


/* P2 */

sbit at 0xA0 P2_0

sbit at 0xA1 P2_1

sbit at 0xA2 P2_2

sbit at 0xA3 P2_3

sbit at 0xA4 P2_4

sbit at 0xA5 P2_5

sbit at 0xA6 P2_6

sbit at 0xA7 P2_7


O arquivo AT89X52.H nomeia todos os registradores do microcontrolador com um apelido que visa facilitar a vida do programador. Sem o uso deste header o programador precisaria trabalhar diretamente com os endereços de memória onde encontram-se os registradores especiais (SRF’s).

O primeiro item dos registradores da lista acima apelida o endereço 0x80 (em hexadecimal) como sendo o PORT P0.

sfr at 0x80 P0  Special function register at 0x80 P0  define o registrador que está na posição de memória 0x80 com o apelido de P0.

É somente após esta definição que o compilador “entende” que o significado do símbolo P0 e esta associação ocorre com todos os registradores especiais do microcontrolador.

Devido a importância de criar apelidos para os registradores do microcontrolador, o comando #include deve ser a primeira instrução de qualquer programa escrito para microcontroladores 8051 na linguagem C.

4.7.1. Como Incluir um header no Programa

Para incluir um cabeçalho no programa em C, utilizamos a seguinte sintaxe:

#include<nome do arquivo.h>

Assim temos:

#include<at89x52.h> ou

#include<AT89X52.h>




No ambiente Windows, os nomes de arquivo não tem distinção entre letras minúsculas e maiúsculas. No entanto, a linguagem C sugere o uso predominante de letras minúsculas.

Nota




CAPÍTULO

5


Operadores




Baixar 2.75 Mb.

Compartilhe com seus amigos:
1   ...   8   9   10   11   12   13   14   15   ...   30




©bemvin.org 2020
enviar mensagem

    Página principal
Prefeitura municipal
santa catarina
Universidade federal
prefeitura municipal
pregão presencial
universidade federal
outras providências
processo seletivo
catarina prefeitura
minas gerais
secretaria municipal
CÂmara municipal
ensino fundamental
ensino médio
concurso público
catarina município
Dispõe sobre
reunião ordinária
Serviço público
câmara municipal
público federal
Processo seletivo
processo licitatório
educaçÃo universidade
seletivo simplificado
Secretaria municipal
sessão ordinária
ensino superior
Relatório técnico
Universidade estadual
Conselho municipal
técnico científico
direitos humanos
científico período
espírito santo
pregão eletrônico
Curriculum vitae
Sequência didática
Quarta feira
prefeito municipal
distrito federal
conselho municipal
língua portuguesa
nossa senhora
educaçÃo secretaria
segunda feira
Pregão presencial
recursos humanos
Terça feira
educaçÃO ciência
agricultura familiar