SlideShare uma empresa Scribd logo
1 de 23
Curso Profissional de Técnico de Eletrónica, Automação e
Computadores
Disciplina: Sistemas Digitais
UFCD 6072 – Microcontroladores-N3
Registos
Registos – gerais e especiais
 A linguagem Wiring, utilizada para
programação na IDE Arduino, traz diversos
comandos que facilitam a configuração e uso
de pinos.
 Iremos mais a fundo com uso de registos,
que trazem algumas otimizações para os
códigos e execução de comandos.
UFCD 6072 –
Microcontroladores-N3
2
Registos – gerais e especiais
 Assiste ao vídeo para conheceres melhor o
objetivo e funcionalidade dos registos.
 https://www.youtube.com/watch?v=Zc_4NgoJ
thU
UFCD 6072 –
Microcontroladores-N3
3
Registos – gerais e especiais
UFCD 6072 –
Microcontroladores-N3
4
Registos – gerais e especiais
 O cérebro do Arduino é o seu
microcontrolador, no caso do Arduino Uno, é
o ATMega328p. É ele que armazena os
programas, contém a memória e possui os
pinos de entrada/saída que utilizamos na
placa.
 Estes pinos de entrada/saída também são
conhecidos como GPIO (sigla para General
Purpose Input Output ou entrada/saída de
uso geral). Cada microcontrolador contém um
número de GPIOs que podem ser utilizadas
UFCD 6072 –
Microcontroladores-N3
5
Registos – gerais e especiais
 A placa Arduino Uno possui os pinos digitais
identificados de 0 a 13 e analógicos de A0 a
A5.
 Mas a arquitetura do microcontrolador pode
dar outra nomenclatura aos pinos que
conhecemos.
 Confire na placa Arduino Uno os detalhes
conforme as próximas figuras.
UFCD 6072 –
Microcontroladores-N3
6
 Repara na figura
que os pinos que
conhecemos como
digitais estão como
Dx (digitais) ou
Ax (analógicos),
sendo x um número.
Porém, ao lado de cada
pino há uma outra
nomenclatura para
aceder os mesmos
pinos.
UFCD 6072 –
Microcontroladores-N3
7
 Outra representação
equivalente….
UFCD 6072 –
Microcontroladores-N3
8
Registos – gerais e especiais
 Os microcontroladores podem ter seus
GPIOs divididos em “Portas”, um conjunto de
pinos que podem ser configurados ou
acedidos de uma só vez.
 O ATMega328p possui três conjuntos:.
•PORTB: PB0 a PB5 (8 a 13)
•PORTC: PC0 a PC5 (A0 a A5)
•PORTD: PD0 a PD7 (0 a 7)
UFCD 6072 –
Microcontroladores-N3
9
Registos – gerais e especiais
 Então, para aceder/configurar o pino 9 digital do
ATMega328p, utilizamos a nomenclatura PB1. Este acesso
ou configuração é feito a partir dos registos respetivos.
 OBS: Cada microcontrolador possui diferentes conjuntos de
portas e quantidade de GPIOs. Portanto, outras versões de
Arduino como Mega 2560, Leonardo e outras placas não
coincidem com as nomenclaturas dos pinos do Arduino Uno.
 É importante consultar o datasheet de cada
microcontrolador:
Datasheet ATmega328p
https://content.arduino.cc/assets/Atmel-7810-Automotive-
Microcontrollers-ATmega328P_Datasheet.pdf
UFCD 6072 –
Microcontroladores-N3
10
Registos – Configuração
 Os comandos para registos são baseados na linguagem C.
Fazem um outro caminho para configurar pinos, diferente
dos comandos já utilizados em Wiring. Eles realizam esta
configuração de forma mais segura e rápida. Utilizaremos
três tipos específicos de registos:
•PORTx: registo de dados, usado para escrever no port ou pino em
específico. x representa os ports disponíveis no microcontrolador, que no
caso do ATMega328p, são os ports B, C e D;
•DDRx: registo de direção, usado para ler a entrada de um port ou pino em
específico. No caso do ATMega328p, x representa os ports B, C e D;
•PINx: endereço de entrada do pino, usado para configurar um port inteiro
ou pino será entrada ou saída.
UFCD 6072 –
Microcontroladores-N3
11
Registos – substituir código por
registos
UFCD 6072 –
Microcontroladores-N3
12
 Onde:
x: letra referente à porta;
n: número do pino do porta (conjunto);
Y = variável qualquer para armazenar dado.
Registos – Lembrar que…
 Os comandos na versão registos possuem a característica
de trabalhar por operadores de bits, ou seja, manipulam 0 e
1. As operações realizadas nos comandos são:
•| (barra horizontal): operador OU, no caso dos registos ativa o bit em nível 1
(HIGH);
•& (E comercial): operador E, no caso dos registos desativa o bit em nível 0 (LOW);
•~ (til): operador NÃO, realiza o complemento de bits. O que era 1 vira 0 e vice-
versa;
•^ (circunflexo): operador OU EXCLUSIVO, no caso dos registos serve para
inversão de alguns bits;
•>> (dois sinais de maior): deslocamento de bits para a direita, insere zeros à
esquerda;
•<< (dois sinais de menor): deslocamento de bits para a esquerda, insere zeros à
UFCD 6072 –
Microcontroladores-N3
13
Registos – Exemplo 1
 Para configurar o pino 7 do Arduino Uno como saída,
precisamos encontrar a nomenclatura usada pelo
microcontrolador. :
O nome do pino 7 do Arduino é PD7. Então, o comando
usando registrador é:
DDRD = DDRD |(1 << DDD7);
No comando acima foi usado o registrador de direção DDR no
port D em PD7. É equivalente ao comando pinMode(7,
OUTPUT);
UFCD 6072 –
Microcontroladores-N3
14
Registos – Exemplo 2
 Para escrever LOW pino 12 do Arduino Uno, mais uma vez
vamos encontrar a nomenclatura equivalente do
microcontrolador:
O nome do pino 12 do Arduino é PB4. Então, o comando
usando registrador é:
PORTB = PORTB &~ (1<< PB4);
No comando acima foi usado o registrador de dados PORT no
port B em PB4. É equivalente ao comando digitalWrite(12,
LOW);
UFCD 6072 –
Microcontroladores-N3
15
Registos – Exemplo 3
 Faremos de forma visual a comparação entre os comandos
usados em Wiring e os registos em C usando um
osciloscópio. No sketch de exemplo, faremos uso do pino A3
como digital 17.
O pino digital 17 vai oscilar entre LOW e HIGH duas vezes
usando os registos e também com o comando digitalWrite,
sem uso de delay, para vermos o tempo de execução de cada
um.
Usa o código abaixo:
UFCD 6072 –
Microcontroladores-N3
16
Registos – Exemplo tinkercad
// Comandos Wiring para pino A3 (D17)
digitalWrite(17, HIGH); // Nível HIGH
digitalWrite(17, LOW); // Nível LOW
digitalWrite(17, HIGH);
digitalWrite(17, LOW);
delay(5000);
} // Fim do sketch
UFCD 6072 –
Microcontroladores-N3
17
// Comparação entre Wiring e registos em C
void setup() {
// Habilita porta PC3 como saída
DDRC = DDRC |(1 << DDC3);
// Habilita porta PC3 em nível HIGH
PORTC = PORTC | (1<< PC3);
}
void loop() {
// Comandos para pino A3 (ou D17) com
registos
PORTC = PORTC | (1<< PC3); // Nível HIGH
PORTC = PORTC &~ (1<< PC3); // Nível
LOW
PORTC = PORTC | (1<< PC3);
PORTC = PORTC &~ (1<< PC3);
Registos – Exemplo tinkercad
UFCD 6072 –
Microcontroladores-N3
18
Esquema
Registos – Exemplo tinkercad
 Qual a conclusão podemos retirar ao observar os
resultados no osciloscópio?
UFCD 6072 –
Microcontroladores-N3
19
Exercício – Tarefa 8
 Implementa o circuito seguinte no tinkercad
UFCD 6072 –
Microcontroladores-N3
20
Exercício – Tarefa 8
 Implementa código que permita que o LED
Vermelho e Verde liguem durante 1segundo e
voltem a desligar durante 1segundo usando
apenas registos internos do arduino.
Basicamente é “transformar” o código seguinte:
UFCD 6072 –
Microcontroladores-N3
21
const int LEDVERMELHO = 2;
const int LEDVERDE = 7;
void setup() {
Serial.begin(9600);
pinMode(LEDVERMELHO, OUTPUT);
pinMode(LEDVERDE, OUTPUT);
}
void loop() {
digitalWrite(LEDVERMELHO, HIGH);
digitalWrite(LEDVERDE, HIGH);
delay(1000);
digitalWrite(LEDVERMELHO, LOW);
digitalWrite(LEDVERDE, LOW);
delay(1000);
}
Exemplo – Porta 13
 Ligar e Desligar de 1 em 1segundo o Led de
testes(porta 13) através de registos internos do
Arduino
UFCD 6072 –
Microcontroladores-N3
22
Exemplo – Porta 13
UFCD 6072 –
Microcontroladores-N3
23
void setup()
{
// Habilita porta 13 como saída
DDRB = DDRB |(1 << DDB5);
}
void loop()
{
PORTB = PORTB | (1<< PB5); // Nível HIGH na
porta 13
delay(1000); // espera 1 segunda
PORTB = PORTB &~ (1<< PB5);// Nível LOW na
porta 13
delay(1000); // Wait for 1000 millisecond(s)
}
 Ligar e Desligar de 1 em 1segundo o Led de
testes(porta 13) através de registos internos do
Arduino

Mais conteúdo relacionado

Semelhante a UFCD-6072-Microcontroladores-Registos.pptx

Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicampFrancisco Fambrini
 
Arduino - Hardware Livre e Robótica
Arduino -  Hardware Livre e RobóticaArduino -  Hardware Livre e Robótica
Arduino - Hardware Livre e RobóticaMarinho Brandão
 
Arduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerArduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerGlobalcode
 
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014Fabio Souza
 
Introdução à plataforma Arduino
Introdução à plataforma ArduinoIntrodução à plataforma Arduino
Introdução à plataforma Arduinoentrebits
 
Perlduino - Interfaceando sua aplicação com o mundo real!
Perlduino - Interfaceando sua aplicação com o mundo real!Perlduino - Interfaceando sua aplicação com o mundo real!
Perlduino - Interfaceando sua aplicação com o mundo real!Samir Siqueira
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFengelrfs
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduinoRui Alves
 
Arduino - Parte 3.pdf
Arduino - Parte 3.pdfArduino - Parte 3.pdf
Arduino - Parte 3.pdfprofwtelles
 

Semelhante a UFCD-6072-Microcontroladores-Registos.pptx (20)

Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicamp
 
Arduino - Hardware Livre e Robótica
Arduino -  Hardware Livre e RobóticaArduino -  Hardware Livre e Robótica
Arduino - Hardware Livre e Robótica
 
Arduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerArduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius Senger
 
Tutorial de2
Tutorial de2Tutorial de2
Tutorial de2
 
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014
O impacto do arduino no mundo dos embarcados - TRILHA EMBEDDED - TDC2014
 
Introdução à plataforma Arduino
Introdução à plataforma ArduinoIntrodução à plataforma Arduino
Introdução à plataforma Arduino
 
Perlduino - Interfaceando sua aplicação com o mundo real!
Perlduino - Interfaceando sua aplicação com o mundo real!Perlduino - Interfaceando sua aplicação com o mundo real!
Perlduino - Interfaceando sua aplicação com o mundo real!
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDF
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduino
 
2 manual - clp pic40-v3
2 manual - clp pic40-v32 manual - clp pic40-v3
2 manual - clp pic40-v3
 
Processing e Arduino
Processing e ArduinoProcessing e Arduino
Processing e Arduino
 
Arduino
ArduinoArduino
Arduino
 
Mini Curso Introdutório ao Arduino
Mini Curso Introdutório ao ArduinoMini Curso Introdutório ao Arduino
Mini Curso Introdutório ao Arduino
 
Introdução a plataforma arduino
Introdução a plataforma arduinoIntrodução a plataforma arduino
Introdução a plataforma arduino
 
Oficina Arduino
Oficina ArduinoOficina Arduino
Oficina Arduino
 
Arduino - Parte 3.pdf
Arduino - Parte 3.pdfArduino - Parte 3.pdf
Arduino - Parte 3.pdf
 
Guia AC mod 5
Guia AC mod 5Guia AC mod 5
Guia AC mod 5
 
2 gravação
2 gravação2 gravação
2 gravação
 
Apresentando o Arduino - UESPI
Apresentando o Arduino - UESPIApresentando o Arduino - UESPI
Apresentando o Arduino - UESPI
 

UFCD-6072-Microcontroladores-Registos.pptx

  • 1. Curso Profissional de Técnico de Eletrónica, Automação e Computadores Disciplina: Sistemas Digitais UFCD 6072 – Microcontroladores-N3 Registos
  • 2. Registos – gerais e especiais  A linguagem Wiring, utilizada para programação na IDE Arduino, traz diversos comandos que facilitam a configuração e uso de pinos.  Iremos mais a fundo com uso de registos, que trazem algumas otimizações para os códigos e execução de comandos. UFCD 6072 – Microcontroladores-N3 2
  • 3. Registos – gerais e especiais  Assiste ao vídeo para conheceres melhor o objetivo e funcionalidade dos registos.  https://www.youtube.com/watch?v=Zc_4NgoJ thU UFCD 6072 – Microcontroladores-N3 3
  • 4. Registos – gerais e especiais UFCD 6072 – Microcontroladores-N3 4
  • 5. Registos – gerais e especiais  O cérebro do Arduino é o seu microcontrolador, no caso do Arduino Uno, é o ATMega328p. É ele que armazena os programas, contém a memória e possui os pinos de entrada/saída que utilizamos na placa.  Estes pinos de entrada/saída também são conhecidos como GPIO (sigla para General Purpose Input Output ou entrada/saída de uso geral). Cada microcontrolador contém um número de GPIOs que podem ser utilizadas UFCD 6072 – Microcontroladores-N3 5
  • 6. Registos – gerais e especiais  A placa Arduino Uno possui os pinos digitais identificados de 0 a 13 e analógicos de A0 a A5.  Mas a arquitetura do microcontrolador pode dar outra nomenclatura aos pinos que conhecemos.  Confire na placa Arduino Uno os detalhes conforme as próximas figuras. UFCD 6072 – Microcontroladores-N3 6
  • 7.  Repara na figura que os pinos que conhecemos como digitais estão como Dx (digitais) ou Ax (analógicos), sendo x um número. Porém, ao lado de cada pino há uma outra nomenclatura para aceder os mesmos pinos. UFCD 6072 – Microcontroladores-N3 7
  • 8.  Outra representação equivalente…. UFCD 6072 – Microcontroladores-N3 8
  • 9. Registos – gerais e especiais  Os microcontroladores podem ter seus GPIOs divididos em “Portas”, um conjunto de pinos que podem ser configurados ou acedidos de uma só vez.  O ATMega328p possui três conjuntos:. •PORTB: PB0 a PB5 (8 a 13) •PORTC: PC0 a PC5 (A0 a A5) •PORTD: PD0 a PD7 (0 a 7) UFCD 6072 – Microcontroladores-N3 9
  • 10. Registos – gerais e especiais  Então, para aceder/configurar o pino 9 digital do ATMega328p, utilizamos a nomenclatura PB1. Este acesso ou configuração é feito a partir dos registos respetivos.  OBS: Cada microcontrolador possui diferentes conjuntos de portas e quantidade de GPIOs. Portanto, outras versões de Arduino como Mega 2560, Leonardo e outras placas não coincidem com as nomenclaturas dos pinos do Arduino Uno.  É importante consultar o datasheet de cada microcontrolador: Datasheet ATmega328p https://content.arduino.cc/assets/Atmel-7810-Automotive- Microcontrollers-ATmega328P_Datasheet.pdf UFCD 6072 – Microcontroladores-N3 10
  • 11. Registos – Configuração  Os comandos para registos são baseados na linguagem C. Fazem um outro caminho para configurar pinos, diferente dos comandos já utilizados em Wiring. Eles realizam esta configuração de forma mais segura e rápida. Utilizaremos três tipos específicos de registos: •PORTx: registo de dados, usado para escrever no port ou pino em específico. x representa os ports disponíveis no microcontrolador, que no caso do ATMega328p, são os ports B, C e D; •DDRx: registo de direção, usado para ler a entrada de um port ou pino em específico. No caso do ATMega328p, x representa os ports B, C e D; •PINx: endereço de entrada do pino, usado para configurar um port inteiro ou pino será entrada ou saída. UFCD 6072 – Microcontroladores-N3 11
  • 12. Registos – substituir código por registos UFCD 6072 – Microcontroladores-N3 12  Onde: x: letra referente à porta; n: número do pino do porta (conjunto); Y = variável qualquer para armazenar dado.
  • 13. Registos – Lembrar que…  Os comandos na versão registos possuem a característica de trabalhar por operadores de bits, ou seja, manipulam 0 e 1. As operações realizadas nos comandos são: •| (barra horizontal): operador OU, no caso dos registos ativa o bit em nível 1 (HIGH); •& (E comercial): operador E, no caso dos registos desativa o bit em nível 0 (LOW); •~ (til): operador NÃO, realiza o complemento de bits. O que era 1 vira 0 e vice- versa; •^ (circunflexo): operador OU EXCLUSIVO, no caso dos registos serve para inversão de alguns bits; •>> (dois sinais de maior): deslocamento de bits para a direita, insere zeros à esquerda; •<< (dois sinais de menor): deslocamento de bits para a esquerda, insere zeros à UFCD 6072 – Microcontroladores-N3 13
  • 14. Registos – Exemplo 1  Para configurar o pino 7 do Arduino Uno como saída, precisamos encontrar a nomenclatura usada pelo microcontrolador. : O nome do pino 7 do Arduino é PD7. Então, o comando usando registrador é: DDRD = DDRD |(1 << DDD7); No comando acima foi usado o registrador de direção DDR no port D em PD7. É equivalente ao comando pinMode(7, OUTPUT); UFCD 6072 – Microcontroladores-N3 14
  • 15. Registos – Exemplo 2  Para escrever LOW pino 12 do Arduino Uno, mais uma vez vamos encontrar a nomenclatura equivalente do microcontrolador: O nome do pino 12 do Arduino é PB4. Então, o comando usando registrador é: PORTB = PORTB &~ (1<< PB4); No comando acima foi usado o registrador de dados PORT no port B em PB4. É equivalente ao comando digitalWrite(12, LOW); UFCD 6072 – Microcontroladores-N3 15
  • 16. Registos – Exemplo 3  Faremos de forma visual a comparação entre os comandos usados em Wiring e os registos em C usando um osciloscópio. No sketch de exemplo, faremos uso do pino A3 como digital 17. O pino digital 17 vai oscilar entre LOW e HIGH duas vezes usando os registos e também com o comando digitalWrite, sem uso de delay, para vermos o tempo de execução de cada um. Usa o código abaixo: UFCD 6072 – Microcontroladores-N3 16
  • 17. Registos – Exemplo tinkercad // Comandos Wiring para pino A3 (D17) digitalWrite(17, HIGH); // Nível HIGH digitalWrite(17, LOW); // Nível LOW digitalWrite(17, HIGH); digitalWrite(17, LOW); delay(5000); } // Fim do sketch UFCD 6072 – Microcontroladores-N3 17 // Comparação entre Wiring e registos em C void setup() { // Habilita porta PC3 como saída DDRC = DDRC |(1 << DDC3); // Habilita porta PC3 em nível HIGH PORTC = PORTC | (1<< PC3); } void loop() { // Comandos para pino A3 (ou D17) com registos PORTC = PORTC | (1<< PC3); // Nível HIGH PORTC = PORTC &~ (1<< PC3); // Nível LOW PORTC = PORTC | (1<< PC3); PORTC = PORTC &~ (1<< PC3);
  • 18. Registos – Exemplo tinkercad UFCD 6072 – Microcontroladores-N3 18 Esquema
  • 19. Registos – Exemplo tinkercad  Qual a conclusão podemos retirar ao observar os resultados no osciloscópio? UFCD 6072 – Microcontroladores-N3 19
  • 20. Exercício – Tarefa 8  Implementa o circuito seguinte no tinkercad UFCD 6072 – Microcontroladores-N3 20
  • 21. Exercício – Tarefa 8  Implementa código que permita que o LED Vermelho e Verde liguem durante 1segundo e voltem a desligar durante 1segundo usando apenas registos internos do arduino. Basicamente é “transformar” o código seguinte: UFCD 6072 – Microcontroladores-N3 21 const int LEDVERMELHO = 2; const int LEDVERDE = 7; void setup() { Serial.begin(9600); pinMode(LEDVERMELHO, OUTPUT); pinMode(LEDVERDE, OUTPUT); } void loop() { digitalWrite(LEDVERMELHO, HIGH); digitalWrite(LEDVERDE, HIGH); delay(1000); digitalWrite(LEDVERMELHO, LOW); digitalWrite(LEDVERDE, LOW); delay(1000); }
  • 22. Exemplo – Porta 13  Ligar e Desligar de 1 em 1segundo o Led de testes(porta 13) através de registos internos do Arduino UFCD 6072 – Microcontroladores-N3 22
  • 23. Exemplo – Porta 13 UFCD 6072 – Microcontroladores-N3 23 void setup() { // Habilita porta 13 como saída DDRB = DDRB |(1 << DDB5); } void loop() { PORTB = PORTB | (1<< PB5); // Nível HIGH na porta 13 delay(1000); // espera 1 segunda PORTB = PORTB &~ (1<< PB5);// Nível LOW na porta 13 delay(1000); // Wait for 1000 millisecond(s) }  Ligar e Desligar de 1 em 1segundo o Led de testes(porta 13) através de registos internos do Arduino