aula 5x tipos dados_mhl
DESCRIPTION
Aula plcTRANSCRIPT
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