Beruflich Dokumente
Kultur Dokumente
rodrigomax@unifei.edu.br
ELT024
rodrigomax@unifei.edu.br
1 / 48
Teclado
Reviso
ELT024
rodrigomax@unifei.edu.br
2 / 48
Dados Importantes
Terica:
Laboratrio:
Local Sala I.2.1.11 Horrio 15:45-17:35 (ter) Local Sala LEC I / LASER Horrio
P1: P2: P3: P1:
Datas Importantes *:
Levar a placa + adaptador de tomada Prova 01 17/09 Prova 02 26/11 Sub 03/12
8:00-9:45 (qui) ELT025 (LASER) 10:15-12:00 (qui) ELT025 (LASER) 15:50-17:30 (qui) ELT025 (LECI) 13:30-15:10 (ter) ELT802 (LECI)
* Datas
Todas as datas esto sujeitas a alteraes
ELT024 Tipos de dados, funo main e tempo
rodrigomax@unifei.edu.br
3 / 48
Linguagem C
A funo LerTemperatura() faz um teste: se o valor for maior que um patamar chama a funo EnviaSerial() com o cdigo 0x30.
1 #include 2 3
ELT024
rodrigomax@unifei.edu.br
4 / 48
Linguagem C
temp.h
#include serial.h char LerTemperatura(void); void AjustaCalor(char val);
serial.h
#include temp.h
temp.h
#include serial.h char LerTemperatura(void); void AjustaCalor(char val);
ELT024
rodrigomax@unifei.edu.br
5 / 48
Linguagem C
TAG_CONTROLE TAG_CONTROLE
o contedo do arquivo vem aqui .
5 #endif
/ /TAG_CONTROLE
ELT024
rodrigomax@unifei.edu.br
6 / 48
Linguagem C
Referncia circular(rev)
temp.h
#infdef TEMP_H #define TEMP_H #include serial.h char LerTemperatura(void) void !"usta#alor(char val) #endif
serial.h
#infdef $E%&!L_H #define $E%&!L_H #include temp.h char Ler$erial(void) void Envia$erial(char val) #endif
temp.h
#infdef TEMP_H ''ta( ") definida* ''pula o conte+do #endif
ELT024
rodrigomax@unifei.edu.br
7 / 48
Linguagem C
Tipos de dados em C
Tipos de dados em C
ELT024
rodrigomax@unifei.edu.br
8 / 48
Linguagem C
Toda informao que inserida num computador armazenada em formato binrio Cada tipo de informao contm uma quantidade diferente de bits Cada bit pode representar informaes diferentes, mesmo dentro de uma mesma varivel
ELT024
rodrigomax@unifei.edu.br
9 / 48
Linguagem C
Tipos de dados em C
Tipo
Bits
8 16 32 64
Bytes
1 2 4 8
Faixa de valores
-128 127 -32.768 32.767 3,4 x 10-38 3,4 x 1038 3,4 x 10-308 3,4 x 10308
ELT024
rodrigomax@unifei.edu.br
10 / 48
Linguagem C
Quando resolvemos codicar uma informao num formato digital, e portanto nito, sempre existe perda de
informao resoluo amplitude
ELT024
rodrigomax@unifei.edu.br
11 / 48
Linguagem C
Exemplos:
1 2 3 4 5 6 }
float x = 0; w h i l e ( x != 4 )
{
printf ( "i" ) ; x += 0 . 4 f ;
1 2 3 4 5 6
char x = while (x
{
0; < 200)
ELT024
rodrigomax@unifei.edu.br
12 / 48
Linguagem C
Converso Binrio-decimal
Dividir o nmero por 2 Anotar o valor do resto (0 ou 1) Se o valor maior que 0 voltar ao nmero 1 Escrever os valores obtidos atravs do passo 2 de trs para frente. Apresentar o resultado
ELT024
rodrigomax@unifei.edu.br
13 / 48
Linguagem C
ELT024
rodrigomax@unifei.edu.br
14 / 48
Linguagem C
Nmero 18:
18 2 9 2 4 2 2 2 1 2
= 9, resto
1 0 0 1
ELT024
rodrigomax@unifei.edu.br
15 / 48
Linguagem C
ELT024
rodrigomax@unifei.edu.br
16 / 48
Linguagem C
Complemento de dois
Denir tamanho da palavra Achar o representao em binrio positiva com a mesma magnitude Inverter todos os bits Somar um ao resultado
ELT024
rodrigomax@unifei.edu.br
17 / 48
Linguagem C
So divididos em expoente, mantissa e sinal Sinal ocupa apenas um bit, como nos inteiros A mantissa representa os algarismos signicativos O expoente representa a magnitude
Ponto xo
ELT024
rodrigomax@unifei.edu.br
18 / 48
Linguagem C
Base Hexadecimal
Possui 16 "unidades"diferentes. 10 algarismos mais 6 letras Facilita escrita de valores binrios Fcil converso bin-hex
ELT024
rodrigomax@unifei.edu.br
19 / 48
Linguagem C
Dec
0 1 2 3 4 5 6 7
Bin
Hex
0 1 2 3 4 5 6 7
Dec
8 9 10 11 12 13 14 15
Bin
Hex
8 9 A B C D E F
ELT024
rodrigomax@unifei.edu.br
20 / 48
Linguagem C
Exercicio 02) Converter os nmeros 1810 - 100102 51310 - 10000000012 7310 - 10010012 6010 - 1111002 -1510 - 11110012_8bits
ELT024
rodrigomax@unifei.edu.br
21 / 48
Linguagem C
ELT024
rodrigomax@unifei.edu.br
22 / 48
Linguagem C
ELT024
rodrigomax@unifei.edu.br
23 / 48
Linguagem C
Tipo
unsigned char signed char unsigned int signed int long int unsigned long int short int
Bytes
1 1 2 2 4 4 2
Excurso mxima
0 255 -128 127 0 65.535 -32.768 32.767 -2.147.483.648 2.147.483.647 0 4.294.967.295 -32.768 32.767
ELT024
rodrigomax@unifei.edu.br
24 / 48
Linguagem C
Modicadores de Acesso
Modicadores de Acesso
ELT024
rodrigomax@unifei.edu.br
25 / 48
Linguagem C
Modicadores de Acesso
1 #define 2 3 4 5 } {
while
( X != X ) ;
ELT024
rodrigomax@unifei.edu.br
26 / 48
Linguagem C
Modicadores de Acesso
Starting
p C od e
code
block
19
//
Teste . c
while
( X!=X ) ;
ELT024
rodrigomax@unifei.edu.br
27 / 48
Linguagem C
Modicadores de Acesso
1 #define 2 3 4 5 } {
while
( X != X ) ;
ELT024
rodrigomax@unifei.edu.br
28 / 48
Linguagem C
Modicadores de Acesso
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
S_Teste__main code _main : _00105_DS_ : . line 19 MOVLW 0 x83 MOVWF r0x00 MOVLW 0 x0f MOVWF r0x01 MOVFF r0x00 , FSR0L MOVFF r0x01 , FSR0H MOVFF INDF0 , r0x00 MOVLW 0 x83 MOVWF r0x01 MOVLW 0 x0f MOVWF r0x02 MOVFF r0x01 , FSR0L MOVFF r0x02 , FSR0H MOVFF INDF0 , r0x01 MOVF r0x00 , W XORWF r0x01 , W BNZ _00105_DS_ RETURN
ELT024
//
Starting
p C od e
block
//
Teste . c
( X != X ) ; endereo endereo
// p r i m e i r a // s e g u n d a
// r e a l i z a // p r i m e i r a // s e g u n d a
// r e a l i z a
segunda
leitura
// f a z
teste
para
igualdade
29 / 48
rodrigomax@unifei.edu.br
Linguagem C
Modicadores de Acesso
Utilizao de const:
1 #define 2 3 4 5 6 } // i n i c i o {
(*( do
v o i d main ( v o i d )
X
= 3;
programa
ELT024
rodrigomax@unifei.edu.br
30 / 48
Linguagem C
Modicadores de Posicionamento
Modicadores de Posicionamento
ELT024
rodrigomax@unifei.edu.br
31 / 48
Linguagem C
Modicadores de Posicionamento
No so padronizadas pela ISO C(99) Indicam ao compilador a regio em que a varivel deve ser colocada
near - regio de acesso mais rpido far - regio de acesso normal
ELT024
rodrigomax@unifei.edu.br
32 / 48
Linguagem C
Modicador de persistncia
Modicador de persistncia
ELT024
rodrigomax@unifei.edu.br
33 / 48
Linguagem C
Modicador de persistncia
static
Padronizada pela ISO C(99) Garante que no haver perda de informao na varivel Uma regio de memria reservada apenas para a varivel em questo
1 2 3 4 5 6 7 8 // c r i a um contador a persistente chamada que de
// i n c r e m e n t a d o
cada
funo
ELT024
rodrigomax@unifei.edu.br
34 / 48
Linguagem C
Modicador de persistncia
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// c r i a
um
contador a
persistente chamada
que de
// i n c r e m e n t a d o {
i n t ContadorPersistente ( i n t reseta )
cada
funo
variavel_persistente
0;
else return
(
variavel_persistente ++) ;
r e t u r n 1;
ELT024
rodrigomax@unifei.edu.br
35 / 48
Linguagem C
Operaes Aritimticas
Operaes Aritimticas
ELT024
rodrigomax@unifei.edu.br
36 / 48
Linguagem C
Operaes Aritimticas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
v o i d main
{
void )
char var8 ; i n t var16 ; l o n g i n t var32 ; f l o a t pont16 ; double pont32 ; var8 = var8 + var16 ; var8 = var8 + var8 ; var16 = var8 * var8 ; var32 = var32 / var16 ; var32 = pont32 * var32 ; pont16 = var8 / var16 ; pont16 = pont32 * var32 ; pont16 = 40 / 80;
// // // // // // // //
1 2 3 4 5 6 7 8
ELT024
rodrigomax@unifei.edu.br
37 / 48
Linguagem C
Funo main()
Funo main()
ELT024
rodrigomax@unifei.edu.br
38 / 48
Linguagem C
Funo main()
Endereo Instruo 0x00 P"lo 0x0# 0x8A 0x0! P"lo 0x03 0x55 0x0$ ... 0x55 0x56 0x57 0x58 0x59 0x8A 0x8B 0x8C 0x8D 0x8 Limpa A A recebe 30 Testa A
...
A recebe 50 Salva em Porta B
...
ELT024
rodrigomax@unifei.edu.br
39 / 48
Linguagem C
Funo main()
O linker aloca a funo main() em algum lugar disponvel na memria O linker atualiza o vetor de reset colocando um pulo para a funo main
1 2 3 4 }
v o i d main
{ // a q u i
void )
o cdigo do programa
entra
ELT024
rodrigomax@unifei.edu.br
40 / 48
Linguagem C
Funo main()
Ateno!
Para sistemas embarcados a funo main a primeira a ser executada, portanto no pode receber parmetro nenhum. Como ela a ultima a ser executada, tambm no existe a possibilidade de retornar algum valor. Deve ser declarada como:
1 2 3 4 }
v o i d main
{ //
void )
o cdigo aqui .
Insira
ELT024
rodrigomax@unifei.edu.br
41 / 48
Linguagem C
Funo main()
Geralmente os sistemas embarcados so feitos para serem continuamente executados As rotinas devem ser cclicas O sistema s para quando desligado
Ateno!
ELT024
rodrigomax@unifei.edu.br
42 / 48
Linguagem C
Funo main()
1 3 4 5 6 7
v o i d main for
{
void )
1 3 4
v o i d main
{
void )
2{
2{ (;;) // a q u i entra o
while (1)
// a q u i } entra o // c d i g o principal
5 6 7 8}
// c d i g o }
principal
8}
ELT024
rodrigomax@unifei.edu.br
43 / 48
Linguagem C
Rotinas de Tempo
Rotinas de Tempo
ELT024
rodrigomax@unifei.edu.br
44 / 48
Linguagem C
Rotinas de Tempo
muito comum necessitar que o microcontrolador que um tempo sem fazer nada. Uma maneira de atingir esse objetivo utilizar um lao for.
1 2
Ateno!
ELT024
rodrigomax@unifei.edu.br
45 / 48
Linguagem C
Rotinas de Tempo
1 2 3 4 5 6 7
// c d i g o
MOVF
em
r0x00
0 x0a
assembler ,
equivalente
do :
f o r ( i =0; 0
i <10;
i ++) ;
// i n i c i a l i z a // c o l o c a / / muda o o
W com 10
(0 x0a ) F no registro W
SUBLW MOVWF
(1 (1 (1
ciclo ) ciclo )
valor
r0x00
,
valor
de W p a r a
ciclo )
F, o
se
F>0
executa
prximo
_00107_DS_
lugar
_00107_DS_
ELT024
rodrigomax@unifei.edu.br
46 / 48
Linguagem C
Rotinas de Tempo
So gastos 3 passos para inicializao, cada um de 1 ciclo. Cada iterao gasta 2 passos, um de 1 ciclo e um de 2 ciclos Para um PIC a 8 MHz cada ciclo gasta 0,5 us Se desejamos um tempo de x segundos so necessrias 2 109 x instrues.
ELT024
rodrigomax@unifei.edu.br
47 / 48
Linguagem C
Rotinas de Tempo
1 2 3 4 5 6 7 8
= 1 ,020 ,207
instrues instrues
f o r ( j =0; j
{ }
<
100; <
j++)
98;
f o r ( k =0; k
k++) ;
instrues
ELT024
rodrigomax@unifei.edu.br
48 / 48