Ponteiros e Arquitetura de Microcontroladores
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajubá
Linguagem C
Operações com Bits
Linguagem C
Operações com Bits
Operação Bit set
Passo a Passo
char bit = 2;
char mascara; mascara = 1 << bit; arg = arg | mascara;
Uma linha arg = arg | (1<<bit)
Linguagem C
Operações com Bits
Operação Bit clear
Passo a Passo
char bit = 2;
char mascara; mascara = 1 << bit; arg = arg & ~mascara;
Uma linha arg = arg & ~(1<<bit)
Linguagem C
Operações com Bits
Operação Bit ip
Passo a Passo
char bit = 2;
char mascara; mascara = 1 << bit; arg = arg ^ mascara;
Uma linha arg = arg ^ (1<<bit)
Linguagem C
Operações com Bits
Operação Bit test
Passo a Passo
char bit = 2;
char mascara; mascara = 1 << bit; arg = arg & mascara;
Uma linha if (arg & (1<<bit)) { }
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
denidos 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, oat, double, . . .)
é necessário na declaração de um ponteiro, especicar para
qual tipo de variável ele irá apontar
os ponteiros são declarados com um * antes do nome da
variável
Sintaxe
Ponteiros e Referência
int *aux;
float *temp;
char *pont;
aux, temp e pont são
variáveis que armazenam endereços de memória e não valores do tipo int, oat, 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
Linguagem C
Linguagem C
Operador & e Operador *
O operador & e o operador * são utilizados quando se trabalha com ponteiros
Operador &
obtém sempre o endereço de uma variável (endereço de)
como os ponteiros também são variáveis eles também 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
Linguagem C
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; //ponteiro 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
Arquitetura de Microcontroladores
Arquitetura de Microcontroladores
Acesso à memória
Arquitetura de Microcontroladores
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
Arquitetura de Microcontroladores
Acesso à memória Stack 1 Stack 31 Reset Baixa prioridade Alta prioridade Memória EEPROM Não implementado ... GPR1 GPR3 GPR4 GPR2 Não implementado SFR 0x0000 0x0008 0x0018 0x0028 0x7FFF 0X8000 0X1FFFFF 0x000 0x0FF 0x200 0x2FF 0x300 0x3FF 0x100 0x1FF ... 0xF60 0xFFF V et or d e In te rr up çã oArquitetura de Microcontroladores
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
Arquitetura de Microcontroladores
Arquitetura de Microcontroladores
Clock e tempo de instrução
Arquitetura de Microcontroladores
Clock e tempo de instrução
Multiplicação de inteiros Multiplicação de fracionários
A = 123456; B = 34567; C = A x B; //C = 4267503552 //1. Multiplicar os números // 123456 // * 34567 // 4267503552 A = 1.23456 x 10 ^ 5 B = 3.4567 x 10 ^ 4 C = A x B //C = 4.267503552 x 10 ^9
//1. Converter para o mesmo expoente // 12.3456 x 10 ^ 4
// 3.4567 x 10 ^ 5
//2. Mult. os números somar a mantissa // 12.3456 x 10 ^ 4
// x 3.4567 x 10 ^ 4 // 42.67503552 x 10 ^ 8
//3. Corrigir quantidade de casas dec. // 4.267503552 x 10 ^ 9
Arquitetura de Microcontroladores
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
Arquitetura de Microcontroladores
Esquema elétrico e circuitos importantes
Esquema elétrico e circuitos
importantes
Arquitetura de Microcontroladores
Arquitetura de Microcontroladores
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
Arquitetura de Microcontroladores
Multiplexação nos terminais do microcontrolador
Multiplexação nos terminais do
microcontrolador
Arquitetura de Microcontroladores
Multiplexação nos terminais do microcontrolador
Ex: o oitavo terminal do PIC18F4550.
Pode ser congurado 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)
Arquitetura de Microcontroladores
Registros de conguração do microcontrolador
Registros de conguração do
microcontrolador
Arquitetura de Microcontroladores
Registros de conguração do microcontrolador
O microcontrolador é congurado através de registros especiais
Existem registros que:
alteram o funcinamento básico do microcontrolador
modicam o modo de operação de um terminal
Arquitetura de Microcontroladores
Arquitetura de Microcontroladores
Registros de conguração do microcontrolador
//config.h
#ifndef CONFIG_H #define CONFIG_H
// Pll desligado
code char at 0x300000 CONFIG1L = 0x01; // Oscilador c/ cristal externo HS code char at 0x300001 CONFIG1H = 0x0C; // Watchdog controlado por software code char at 0x300003 CONFIG2H = 0x00; // Sem programação em baixa tensão code char at 0x300006 CONFIG4L = 0x00;