Vous êtes sur la page 1sur 12

11/10/2013

Microcontrolador
Aula 5 Tipos de Dados em C

Prof. Jos Sergio Medeiros Jr.


Prof. Mario Henrique Luchiari




Ao contrrio do que ocorre em Assembly,


em C existem diversos tipos de dados, de
tamanhos e faixas de valores diferentes.
Basta que uma varivel seja declarada
como sendo de um determinado tipo e o
compilador se encarrega de gerar o
cdigo necessrio para sua utilizao.
O padro ANSI define diversos tipos de
dados para os compiladores C:
So eles: char, int, float, double e void.
Tipos de Dados
102

11/10/2013







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 (fracionrios) de preciso
simples.
double representa um valor de ponto
flutuante de dupla preciso.
void serve para indicar que o parmetro
nulo ou inexistente nas funes.
Tipos de Dados
102

Eles alteram as caractersticas 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 padro (default).

unsigned: informa que o dado do tipo no


sinalizado possui somente valores positivos.
Modificador

Tipo

Valor absoluto

signed *

char

-128 a +127

unsigned

char

0 a 255

Modificadores
103

11/10/2013

long: informa que o inteiro uma variao


maior que o padro, seu alcance maior.
 short: informa que o inteiro uma variao
menor que o padro, 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 so iguais.
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

Modificadores
103

Tipos de Dados para inteiros

Tipos, tamanhos e faixa de valores


103

11/10/2013

Tipos de Dados para fracionrios ou ponto


flutuante.
Estes dados ocupam muita memria, use com
sabedoria.

Tipos, tamanhos e alcance


104





Declarar uma varivel designar um local


na memria de dados para ela.
Este local ficar associado a um nome,
que o nome da varivel.
A declarao deve ser feita da seguinte
forma:

Declarao de variveis
104

11/10/2013

A declarao de constantes deve ser feita


assim:

A representao de caracteres deve ser


feita entre apstrofos ( ).Ex.: S, m.

Declarao de Constantes
104





Podemos utilizar valores em diversas


bases numricas.
O y representa o valor a ser expresso.
O smbolo usado para separar as partes
inteiras e fracionria de um nmero o
ponto ( . ).

Representao de valores
104

11/10/2013

Variveis locais so declaradas dentro


de funes ou blocos de instrues
(delimitados por chaves).
So reconhecidas somente dentro da funo ou
do bloco.

Variveis globais so declaradas fora das


funes.
So reconhecidas por todas as funes do
programa.

Variveis locais e globais


105




Com os tipos de dados bsicos podemos


criar vetores e matrizes.
Vetores e matrizes so conjuntos de
diversas variveis de mesmo tipo que so
referenciadas por um mesmo identificador
e discriminadas por um ndice.
Vetores so unidimensionais, enquanto
matrizes podem ter duas ou mais
dimenses.

Vetores e Matrizes
105

11/10/2013

Na criao de um vetor ou matriz necessrio informar o


nmero de elementos que ela contm. Isso feito
colocando o nmero de elementos entre colchetes na
declarao.
int Medidas[16];

Para atribuir valores a constantes ou inicializar variveis


coloca-se valores de cada elemento entre chaves,
separados por vrgulas.
unsigned int InitLCD[6] = {0x33,0x32,0x28,0x06,0x0C,0x01};

Um caso particular de vetores so os de caracteres,


chamados de strings. So teis para armazenar palavras e
frases. Nesses casos, o conjunto de caracteres pode ser
atribudo a um vetor constante simplesmente usando aspas
para marcar incio e fim. No precisa indicar o nmero de
elementos, isso definido pela quantidade de caracteres.
const char nome[] = Escola e Faculdade Senai";

Vetores e Matrizes
105

Para fazer referncia a um elemento em


particular dentro de uma matriz ou vetor usa-se
a posio desse elemento que o ndice.
ndices podem ser valores fixos ou variveis.

Ateno: Em C as posies comeam em 0, portanto em


um vetor de 10 elementos o ndice ir assumir valores de
0 a 9.

Vetores e Matrizes
105

11/10/2013

Armazenam elementos em mais de uma


dimenso.
 A declarao deste tipo de matriz deve ser:


tipo identificador [quant_pos_x] [quant_pos_y]...


[quant_pos_z];
Seja uma matriz linhacoluna 3 x 4 (bidimensional):

'a'

'b'

'v'

'k'

'g'

'h'

't'

'n'

'e'

'o'

'b'

'm'

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

Matrizes multidimensionais
105





So um tipo especial de variveis que contm o


endereo de outras variveis.
Sua funo apontar ou indicar onde a varivel
est posicionada na memria.
Para declarar um ponteiro usamos uma sintaxe
parecida com a declarao de varivel, 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 declarao acima x uma varivel do


tipo inteiro enquanto ip um ponteiro que aponta para
variveis do tipo inteiro.

Ponteiros
106

11/10/2013




Para atribuir a um ponteiro o endereo de uma


varivel usamos o operador &.
Para manipular o contedo da varivel apontada pelo
ponteiro usamos o operador *.

Ponteiros
107

Indicam como os dados devem ser alocadas na


memria.

O Qualificador auto indica que a varivel vlida


somente naquele bloco de instrues (bloco delimitado
por chaves ou funo), sendo alocada numa posio
quando o bloco comea e desalocada ou destruda
quando ele terminar.

O qualificador static informa que a varivel no pode


ser desalocada, portanto seu endereo de memria no
ser ocupado por outras variveis e seu contedo no
ser alterado aps a finalizao do bloco. Seu
comportamento semelhante ao de variveis globais,
porem so reconhecidas apenas dentro do bloco ao qual
pertencem.
Quando no especificado, as variveis so consideradas
como auto.

Qualificadores : static e auto


107

11/10/2013

Definem se o dado (varivel ou constante) deve ser


alocado na memria de dados (ram) ou de programa
(rom).

Isso parece no fazer sentido, pois imagina-se que


variveis devam ser alocadas na memria de dados
(RAM) e constantes na memria de programa (ROM).
Constantes carregadas na memria de dados quando o
programa iniciado aumentam a velocidade de
manipulao.
Grandes tabelas de constantes quando armazenadas na
ROM (FLASH) reduzem o uso de memria RAM.
As variveis declaradas em memria de programa ROM
devem, obrigatoriamente, ser do tipo static.




Quando no especificado, o C18 assume que os dados


devem ser alocados na RAM. Isso valido tanto para
variveis como para constantes.

(Novos) Qualificadores C18: ram e rom


107







Informam em qual regio da memria os


dados devem ser alocados.
Para dados na memria de programa, near
(perto) significa alocar nos primeiros
64kbytes de memria.
Para memria de dados, near significa na
RAM de acesso.
Em ambos os casos, far significa em qualquer
regio da memria, inclusive nas regies
abrangidas por near.
Quando no especificado, o C18 trata os
dados qualificados como far.

(Novos) Qualificadores C18: near e far


108

10

11/10/2013

Exemplo de uso para os modificadores:

Modificadores
108

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

Tipos de variveis:
comuns, constantes, strings, vetores, matrizes
e ponteiros.

Declarao das variveis:


local ou Global

Modificadores:
short ou long

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

Resumo
x

11

11/10/2013

#include<P18F4550.h>
#include<delays.h>
//// Configuraes
#pragma config
#pragma config
#pragma config
#pragma config
#pragma config
#pragma config
#pragma config

PLLDIV = 5
CPUDIV = OSC1_PLL2
FOSC = HS
WDT = OFF
PBADEN = OFF
LVP = OFF
DEBUG = ON

//
//
//
//
//
//
//

PLL para 20MHz


PLL desligado
Fosc = 20MHz -> Tcy = 200ns
Watchdog desativado
PORTB comea como digital
Sem gravao em baixa tenso
habilita debug

void main(void){
int i;
DDRD = 0x00;
for(;;){
PORTD = 0xFE;
for (i=0;i<8;i++){
Delay10KTCYx(200);// comentado na simulao e depurao
LATD = LATD << 1;
//Delay10KTCYx(200);// Soluo para acender s o 1 Led
}
}
}

Exerccio Aula 4P1 (5)

231

12

Vous aimerez peut-être aussi