12
11/10/2013 1 Microcontrolador Microcontrolador Aula 5 – Tipos de Dados em C Prof. José Sergio Medeiros Jr. Prof. Mario Henrique Luchiari Tipos de Dados Tipos de Dados Ao contrário do que ocorre em Assembly, em C existem diversos tipos de dados, de tamanhos e faixas de valores diferentes. Basta que uma variável seja declarada como sendo de um determinado tipo e o compilador se encarrega de gerar o código necessário para sua utilização. O padrão ANSI define diversos tipos de dados para os compiladores C: São eles: char, int, float, double e void. 102

Aula 5x Tipos Dados_Mhl

Embed Size (px)

DESCRIPTION

Aula plc

Citation preview

11/10/2013

1

MicrocontroladorMicrocontroladorAula 5 – Tipos de Dados em C

• Prof. José Sergio Medeiros Jr.• Prof. Mario Henrique Luchiari

Tipos de DadosTipos de Dados

� Ao contrário do que ocorre em Assembly, em C existem diversos tipos de dados, de tamanhos e faixas de valores diferentes.

� Basta que uma variável seja declarada como sendo de um determinado tipo e o compilador se encarrega de gerar o código necessário para sua utilização.

� O padrão ANSI define diversos tipos de dados para os compiladores C:

� São eles: char, int, float, double e void.

102

11/10/2013

2

Tipos de DadosTipos de Dados

� char serve para representar o valor referente a um caractere (8 bits).

� int representa um valor do tipo inteiro, tipicamente do tamanho de barramento de dados do processador.

� float representa um valor do tipo ponto flutuante (fracionários) de precisão simples.

� double representa um valor de ponto flutuante de dupla precisão.

� void serve para indicar que o parâmetro é nulo ou inexistente nas funções.

102

ModificadoresModificadores

Eles alteram as características de cada tipo de dado.

� signed: informa que o dado é do tipo sinalizado, pode conter valores positivos e negativos.◦ Quando um dado é sinalizado, um de seus bits é usado para indicar o sinal. Isso reduz pela metade o valor absoluto que este dado pode representar.

◦ * Esse é o modificador padrão (default).� unsigned: informa que o dado é do tipo não sinalizado possui somente valores positivos.

103

Modificador Tipo Valor absoluto

signed * char -128 a +127

unsigned char 0 a 255

11/10/2013

3

ModificadoresModificadores

long: informa que o inteiro é uma variação maior que o padrão, seu alcance é maior.

� short: informa que o inteiro é uma variação menor que o padrão, seu alcance é menor.◦ Como os modificadores short e long atuam somente sobre dados do tipo int podemos escrever apenas o modificador, o int fica subentendido e pode ser omitido.

◦ Observe que no C18 short e int são iguais.

103

Modificador Tipo Valor absoluto

short int -32.768 a +32.767

int -32.768 a +32.767

long int -2.147.483.648 a +2.147.483.647

Tipos, tamanhos e faixa de valoresTipos, tamanhos e faixa de valores103

� Tipos de Dados para inteiros

11/10/2013

4

Tipos, tamanhos e alcanceTipos, tamanhos e alcance104

� Tipos de Dados para fracionários ou ponto flutuante.◦ Estes dados ocupam muita memória, use com sabedoria.

Declaração de variáveisDeclaração de variáveis

� Declarar uma variável é designar um local na memória de dados para ela.

� Este local ficará associado a um nome, que é o nome da variável.

� A declaração deve ser feita da seguinte forma:

104

11/10/2013

5

Declaração de ConstantesDeclaração de Constantes

� A declaração de constantes deve ser feita assim:

� A representação de caracteres deve ser feita entre apóstrofos ( ‘ ).Ex.: ‘S’, ‘m’.

104

Representação de valoresRepresentação de valores

� Podemos utilizar valores em diversas bases numéricas.

� O “y” representa o valor a ser expresso. � O símbolo usado para separar as partes inteiras e fracionária de um número é o ponto ( . ).

104

11/10/2013

6

Variáveis locais e globaisVariáveis locais e globais

� Variáveis locais são declaradas dentrode funções ou blocos de instruções (delimitados por chaves).◦ São reconhecidas somente dentro da função ou do bloco.

� Variáveis globais são declaradas fora das funções. ◦ São reconhecidas por todas as funções do programa.

105

Vetores e MatrizesVetores e Matrizes

� Com os tipos de dados básicos podemos criar vetores e matrizes.

� Vetores e matrizes são conjuntos de diversas variáveis de mesmo tipo que são referenciadas por um mesmo identificador e discriminadas por um índice.

� Vetores são unidimensionais, enquanto matrizes podem ter duas ou mais dimensões.

105

11/10/2013

7

Vetores e MatrizesVetores e Matrizes

� Na criação de um vetor ou matriz é necessário informar o número de elementos que ela contém. Isso é feito colocando o número de elementos entre colchetes na declaração.

� Para atribuir valores a constantes ou inicializar variáveis coloca-se valores de cada elemento entre chaves, separados por vírgulas.

� Um caso particular de vetores são os de caracteres, chamados de strings. São úteis para armazenar palavras e frases. Nesses casos, o conjunto de caracteres pode ser atribuído a um vetor constante simplesmente usando aspas para marcar início e fim. Não precisa indicar o número de elementos, isso é definido pela quantidade de caracteres.

105

unsigned int InitLCD[6] = {0x33,0x32,0x28,0x06,0x0C,0x01};

const char nome[] = “Escola e Faculdade Senai";

int Medidas[16];

Vetores e MatrizesVetores e Matrizes

� Para fazer referência a um elemento em particular dentro de uma matriz ou vetor usa-se a posição desse elemento que é o índice. ◦ Índices podem ser valores fixos ou variáveis.

◦ Atenção: Em C as posições começam em 0, portanto em um vetor de 10 elementos o índice irá assumir valores de 0 a 9.

105

11/10/2013

8

Matrizes multidimensionaisMatrizes multidimensionais

� Armazenam elementos em mais de uma dimensão.

� A declaração deste tipo de matriz deve ser:◦ tipo identificador [quant_pos_x] [quant_pos_y]... [quant_pos_z];

◦ Seja uma matriz linha–coluna 3 x 4 (bidimensional):

105

L C 0 1 2 3

0 'a' 'b' 'v' 'k'

1 'g' 'h' 't' 'n'

2 'e' 'o' 'b' 'm'

� caractere=mat[1][3]; // Retorna a letra ‘n’.

PonteirosPonteiros

� São um tipo especial de variáveis que contém o endereço de outras variáveis.

� Sua função é “apontar” ou indicar onde a variável está posicionada na memória.

� Para declarar um ponteiro usamos uma sintaxe parecida com a declaração de variável, mas com significado diferente.

� Deve ser colocado o tipo de dado que o ponteiro aponta e o nome do ponteiro, precedido por “*”.

◦ Por exemplo, na declaração acima x é uma variável do tipo inteiro enquanto ip é um ponteiro que aponta para variáveis do tipo inteiro.

106

11/10/2013

9

PonteirosPonteiros

� Para atribuir a um ponteiro o endereço de uma variável usamos o operador “&”.

� Para manipular o conteúdo da variável apontada pelo ponteiro usamos o operador “*”.

107

Qualificadores : Qualificadores : staticstatic e autoe auto107

� Indicam como os dados devem ser alocadas na memória.

� O Qualificador auto indica que a variável é válida somente naquele bloco de instruções (bloco delimitado por chaves ou função), sendo alocada numa posição quando o bloco começa e desalocada ou destruída quando ele terminar.

� O qualificador static informa que a variável não pode ser desalocada, portanto seu endereço de memória não será ocupado por outras variáveis e seu conteúdo não será alterado após a finalização do bloco. Seu comportamento é semelhante ao de variáveis globais, porem são reconhecidas apenas dentro do bloco ao qual pertencem.

◦ Quando não especificado, as variáveis são consideradas como auto.

11/10/2013

10

(Novos) Qualificadores C18: (Novos) Qualificadores C18: ramram e e romrom

� Definem se o dado (variável ou constante) deve ser alocado na memória de dados (ram) ou de programa (rom).

� Isso parece não fazer sentido, pois imagina-se que variáveis devam ser alocadas na memória de dados (RAM) e constantes na memória de programa (ROM).

� Constantes carregadas na memória de dados quando o programa é iniciado aumentam a velocidade de manipulação.

� Grandes tabelas de constantes quando armazenadas na ROM (FLASH) reduzem o uso de memória RAM.

� As variáveis declaradas em memória de programa ROM devem, obrigatoriamente, ser do tipo static.

◦ Quando não especificado, o C18 assume que os dados devem ser alocados na RAM. Isso é valido tanto para variáveis como para constantes.

107

(Novos) Qualificadores C18: (Novos) Qualificadores C18: nearnear e e farfar

� Informam em qual região da memória os dados devem ser alocados.

� Para dados na memória de programa, near(perto) significa alocar nos primeiros 64kbytes de memória.

� Para memória de dados, near significa na RAM de acesso.

� Em ambos os casos, far significa em qualquerregião da memória, inclusive nas regiões abrangidas por near.

� Quando não especificado, o C18 trata os dados qualificados como far.

108

11/10/2013

11

ModificadoresModificadores

� Exemplo de uso para os modificadores:

108

ResumoResumo

� Tipos de dados:◦ char, int, float, double e void

� Tipos de variáveis:◦ comuns, constantes, strings, vetores, matrizes e ponteiros.

� Declaração das variáveis:◦ local ou Global

� Modificadores:◦ short ou long

� Qualificadores:◦ static, auto, ram, rom, near e far

x

11/10/2013

12

#include<P18F4550.h>#include<delays.h>

//// Configurações#pragma config PLLDIV = 5 // PLL para 20MHz#pragma config CPUDIV = OSC1_PLL2 // PLL desligado#pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns#pragma config WDT = OFF // Watchdog desativado#pragma config PBADEN = OFF // PORTB começa como digital#pragma config LVP = OFF // Sem gravação em baixa tensão#pragma config DEBUG = ON // habilita debug

void main(void){int i;DDRD = 0x00;

for(;;){PORTD = 0xFE;for (i=0;i<8;i++){

Delay10KTCYx(200);// comentado na simulação e depuraçãoLATD = LATD << 1;//Delay10KTCYx(200);// Solução para acender só o 1º Led

}}

} Exercício Aula 4P1 (5)Exercício Aula 4P1 (5)231