Você está na página 1de 33

Ponteiros e Arquitetura de Microcontroladores

Rodrigo Almeida

Universidade Federal de Itajubá

rodrigomax@unifei.edu.br

ECOP04 Ponteiros e Arquitetura de Microcontroladoresrodrigomax@unifei.edu.br 1 / 33


Revisão

Revisão

ECOP04 Ponteiros e Arquitetura de Microcontroladoresrodrigomax@unifei.edu.br 2 / 33


Revisão

Operações com Bits (rev)

Operação Bit set

1 char bit = 2 ;
2 char mascara ;
Passo a Passo 3 mascara = 1 << bit ;
4 arg = arg | mascara ;

1 arg = arg | (1 < < bit )


Uma linha

1 # define BitSet ( arg , bit ) (( arg ) |= (1 < < bit ) )


Com define

ECOP04 Ponteiros e Arquitetura de Microcontroladoresrodrigomax@unifei.edu.br 3 / 33


Revisão

Operações com Bits (rev)

Operação Bit clear

1 char bit = 2 ;
2 char mascara ;
Passo a Passo 3 mascara = 1 << bit ;
4 arg = arg & ~ mascara ;

1 arg = arg & ~( 1 < < bit )


Uma linha

1 # define BitClr ( arg , bit ) (( arg ) &= ←-


Com define ~( 1 < < bit ) )

ECOP04 Ponteiros e Arquitetura de Microcontroladoresrodrigomax@unifei.edu.br 4 / 33


Revisão

Operações com Bits (rev)

Operação Bit flip

1 char bit = 2 ;
2 char mascara ;
Passo a Passo 3 mascara = 1 << bit ;
4 arg = arg ^ mascara ;

1 arg = arg ^ (1 < < bit )


Uma linha

1 # define BitFlp ( arg , bit ) (( arg ) ^= (1 < < bit ) )


Com define

ECOP04 Ponteiros e Arquitetura de Microcontroladoresrodrigomax@unifei.edu.br 5 / 33


Revisão

Operações com Bits (rev)

Operação Bit test

1 char bit = 2 ;
2 char mascara ;
Passo a Passo 3 mascara = 1 << bit ;
4 arg = arg & mascara ;

1 if ( arg & (1 < < bit ) ) { }


Uma linha

1 # define BitTst ( arg , bit ) (( arg ) & (1 < < bit ) )


Com define

ECOP04 Ponteiros e Arquitetura de Microcontroladoresrodrigomax@unifei.edu.br 6 / 33


Ponteiros e Referências

Ponteiros e Referências

ECOP04 Ponteiros e Arquitetura de Microcontroladoresrodrigomax@unifei.edu.br 7 / 33


Ponteiros e Referências

Ponteiros e Referência
Ponteiros
são variáveis que guardam um endereço (localização) de memória
os tipos de valores colocados nos endereços de memória são definidos
na declaração de um ponteiro
é esse tipo que indica ao compilador a quantidade de memória
necessária para armazenar os valores
uma variável do tipo ponteiro aponta para uma variável de um
determinado tipo (char, int, float, double, . . .)
é necessário na declaração de um ponteiro, especificar para qual tipo
de variável ele irá apontar
os ponteiros são declarados com um * antes do nome da variável

Sintaxe
tipo *nomeVariavel;

ECOP04 Ponteiros e Arquitetura de Microcontroladoresrodrigomax@unifei.edu.br 8 / 33


Ponteiros e Referências

Ponteiros e Referência

1 int * aux ;
aux, temp e pont são variáveis
2 float * temp ; que armazenam endereços de
3 char * pont ; memória e não valores do tipo
int, float, char
* é usado quando deseja-se
acessar o valor que está na
posição de memória e não ao
endereço da memória

ECOP04 Ponteiros e Arquitetura de Microcontroladoresrodrigomax@unifei.edu.br 9 / 33


Ponteiros e Referências

Operador & e Operador *

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 10 / 33
Ponteiros e Referências

Operador & e Operador *

O operador & e o operador * são utilizados quando trabalhamos com


ponteiros
Operador &
obtém o endereço da variável escrita depois do operador (endereço
de)
como os ponteiros também são variáveis eles ocupam memória
pode-se obter o endereço do ponteiro e ter ponteiros para ponteiros
(múltiplos *)
Operador *
o operador * faz o contrário do operador &
dado um ponteiro, o operador * acessa o conteúdo apontado por ele

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 11 / 33
Ponteiros e Referências

Operador & e Operador *

Exemplo 01 - Ponteiro que referencia um inteiro

1 # include < stdio .h >


2 int main ( int argc , char * argv []) {
3 int x = 10 ;
4 int * p1 = & x ; // p o n t e i r o para um inteiro
5
6 printf ( " x = % d \ n \ n " , x ) ;
7 * p1 = 20 ; // ou p1 [ 0 ] = 20 ;
8
9 printf ( " p1 = % u \ n " , p1 ) ;
10 printf ( " x = % d \ n " , x ) ;
11 printf ( " * p1 = % d \ n " , * p1 ) ;
12 printf ( " p1 [ 0 ] = % d \ n \ n " , p1 [ 0 ]) ;
13 return 0 ;
14 } // endMain

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 12 / 33
Arquitetura de Microcontroladores

Arquitetura de Microcontroladores

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 13 / 33
Arquitetura de Microcontroladores

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 14 / 33
Acesso à memória

Acesso à memória

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 15 / 33
Acesso à memória

Acesso à memória

Total de memória disponı́vel depende:


Do tamanho da palavra de dados
Do tamanho do “apontador”
Total de memória embutida no chip
Total de memória anexada à placa (modo expandido)
A arquitetura Harvard possui dois barramentos
Memória
Dados

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 16 / 33
Acesso à memória

Acesso à memória

Stack 1 0x000
GPR1
... 0x0FF
Stack 31 0x100
GPR2
0x1FF
Interrupção

Reset 0x0000 0x200


Vetor de

GPR3
Baixa prioridade 0x0008 0x2FF
Alta prioridade 0x0018 0x300
GPR4
0x3FF
0x0028
Memória EEPROM
0x7FFF
Não implementado ...
0X8000
Não implementado 0xF60
0X1FFFFF SFR
0xFFF

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 17 / 33
Acesso à memória

Acesso à memória

Algumas posições podem ser de “tipos”diferentes


RAM
ROM
EEPROM
Algumas não funcionam como uma memória tradicional
SFR
Vetor de interrupção
Algumas nem são memórias
Portas de entrada e saı́da
Registros de timers

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 18 / 33
Acesso à memória

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 19 / 33
Clock e tempo de instrução

Clock e tempo de instrução

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 20 / 33
Clock e tempo de instrução

Clock e tempo de instrução


Multiplicação de inteiros Multiplicação de fracionários

1 A = 1 . 23456 x 10 ^ 5
2 B = 3 . 4567 x 10 ^ 4
3 C = A x B
4 // C = 4 . 2 6 7 5 0 3 5 5 2 x 10 ^ 9
1 A = 123456 ;
5
2 B = 34567 ;
6 // 1 . C o n v e r t e r para o mesmo ←-
3 C = A x B;
expoente
4 // C = 4 2 6 7 5 0 3 5 5 2
7 // 12 . 3456 x 10 ^ 4
5
8 // 3 . 4567 x 10 ^ 4
6 // 1 . M u l t i p l i c a r ←-
9 // 2 . M u l t i p l i c a r as ←-
os números
m a n t i s s a s somar o e x p o e n t e
7 // 123456
10 // 12 . 3456 x 10 ^ 4
8 // ∗ 34567
11 // x 3 . 4567 x 10 ^ 4
9 // 4 2 6 7 5 0 3 5 5 2
12 // 42 . 6 7 5 0 3 5 5 2 x 10 ^ 8
13 // 3 . C o r r i g i r q u a n t i d a d e de ←-
casas d e c i m a i s
14 // 4 . 2 6 7 5 0 3 5 5 2 x 10 ^ 9

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 21 / 33
Clock e tempo de instrução

Clock e tempo de instrução

Operação com: Quantidade Total de tarefas


1 tarefa 104 104
2 tarefas 63 126
3 tarefas 21 63
4 tarefas 12 48
Total 200 341

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 22 / 33
Esquema elétrico e circuitos importantes

Esquema elétrico e circuitos importantes

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 23 / 33
Esquema elétrico e circuitos importantes

Esquema elétrico e circuitos importantes

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 24 / 33
Esquema elétrico e circuitos importantes

Esquema elétrico e circuitos importantes

Alimentação
Depende do modelo
PIC18F4550, entre 2 e 5,5 volts
Clock
Xc Externo
RC Externo
RC Interno
Fonte de clock externa
ICSP
Programação na própria placa
Permite debug
Utiliza alguns pinos do microcontrolador

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 25 / 33
Esquema elétrico e circuitos importantes

Esquema elétrico e circuitos importantes

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 26 / 33
Multiplexação nos terminais do microcontrolador

Multiplexação nos terminais do microcontrolador

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 27 / 33
Multiplexação nos terminais do microcontrolador

Multiplexação nos terminais do microcontrolador

Ex: o oitavo terminal do PIC18F4550.


Pode ser configurado como terminal:
de entrada ou saı́da referente ao primeiro bit da porta E (RE0)
de leitura analógica pertencente ao quinto conversor analógico - digital
(AN5)
utilizado para enviar um clock externo de comunicação paralela
(CK1SPP)

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 28 / 33
Registros de configuração do microcontrolador

Registros de configuração do microcontrolador

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 29 / 33
Registros de configuração do microcontrolador

Registros de configuração do microcontrolador

O microcontrolador é configurado através de registros especiais


Existem registros que:
alteram o funcinamento básico do microcontrolador
modificam o modo de operação de um terminal
alteram as caracterı́sticas dos periféricos disponı́veis

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 30 / 33
Registros de configuração do microcontrolador

Esquema elétrico e circuitos importantes

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 31 / 33
Registros de configuração do microcontrolador

Registros de configuração do microcontrolador

1 // config . h
2 // u t i l i z a n d o o SDCC 3 . 3
3 # ifndef CONFIG_H
4 # define CONFIG_H
5
6 # pragma config MCLRE = ON
7 # pragma config OSC = HS
8 # pragma config WDT = OFF
9 # pragma config LVP = OFF
10 # pragma config PBADEN = OFF
11 # pragma config DEBUG = OFF
12
13 # endif // C O N F I G H

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 32 / 33
Registros de configuração do microcontrolador

Registros de configuração do microcontrolador

1 // config . h
2 // u t i l i z a n d o o SDCC 2 . 9
3 # ifndef CONFIG_H
4 # define CONFIG_H
5
6 // Pll d e s l i g a d o
7 code char at 0x300000 CONFIG1L = 0x01 ;
8 // O s c i l a d o r c / cristal externo HS
9 code char at 0x300001 CONFIG1H = 0x0C ;
10 // W a t c h d o g c o n t r o l a d o por s o f t w a r e
11 code char at 0x300003 CONFIG2H = 0x00 ;
12 // Sem p r o g r a m a ç a~ o em baixa tens~ ao
13 code char at 0x300006 CONFIG4L = 0x00 ;
14
15 # endif // C O N F I G H

ECOP04 Ponteiros e Arquitetura de Microcontroladores


rodrigomax@unifei.edu.br 33 / 33

Você também pode gostar