Você está na página 1de 15

Wlamir 

Passos

SEMANA 2
Wlamir Passos

Processador AVR ‐ Atmel

Atmega32U4
Wlamir Passos

Diagrama de blocos
Wlamir Passos

ATmega8 / ATmega32U4
Wlamir Passos

Portas de I/O
Wlamir Passos

Revisão de “C”

• #include <arquivo.ext>
– Inclui neste ponto o arquivo definido que está no diretório do compilador
• #include “arquivo.ext”
– Inclui neste ponto o arquivo definido que está no diretório atual ou 
especificado (“c:\teste\arquivo.ext”)
• #define APELIDO  texto a ser colocado
– Define que onde for escrito APELIDO o compilador deve ententer o texto que 
está colocado a seguir.
• int funcao_teste (char a; char b);
– Declaração do prototipo da funcao_teste, a funcao pode estar em qualquer 
lugar no arquivo.
• extern int....
– Define que a função ou variavel definida a seguir pode estar em um outro 
arquivo.
Wlamir Passos

Estrutura de um programa em C
Wlamir Passos

Revisão de Lógica Booleana
• Operação And • Operação Or
– X * 1 = X – X + 1 = 1
– X * 0 = 0 – X + 0 = X

– Valor= XXXXXXXX – Valor= XXXXXXXX


– Const= 01011001 – Const= 01011001
– And = 0X0XX00X – Or = X1X11XX1

• A operação and “zera” onde é  • A operação or “seta” onde é 
colocado bits em “0” e  colocado bits em “1” e 
mantem o valor original nos  mantem o valor original nos 
bits em “1”. bits em “0”.
• Em C • Em C
– result = valor & const – result = valor | const
– valor &= const – valor |= const
Wlamir Passos

Operações com bits em “C”
• Valor = (1<<5);
– Valor terá em binario o valor 1 deslocado para esquerda 5 casas, assim em 8 
bits seria 00100000. Ou seja, é colocado 1 no bit 5.
• Valor = (1<<5) | (1<<3);
– Teriamos uma operação or entre 00100000 e 00001000 que será 00101000. 
Ou seja 1 nos bits 5 e 3.
• Valor = Valor | (1<<5) | (1<<3);
– Teriamos uma operação or entre 00100000 , 00001000 e o conteudo do byte 
Valor, que será xx1x1xxx. Ou seja 1 nos bits 5 e 3 mantendo os outros bits 
como estavam.
• Conclusão:
– A operação Or pode servir para ligar Ligar bits em uma variavel
Wlamir Passos

Operações com bits em “C”
• Valor = ~(1<<5);
– Valor terá em binario o NOT  do valor 1 deslocado para esquerda 5 casas, 
assim em 8 bits seria 11011111. Ou seja, é colocado 0 no bit 5. e 1 nos demais 
bits
• Valor = ~(1<<5) & ~(1<<3);
– Teriamos uma operação And entre 11011111 e 11110111 que será 11010111. 
Ou seja 0 nos bits 5 e 3.
• Valor = Valor & ~(1<<5) & ~(1<<3);
– Teriamos uma operação And entre 11011111 , 11110111 e o conteudo do byte 
Valor, que será xx0x0xxx. Ou seja 0 nos bits 5 e 3 mantendo os outros bits 
como estavam.
• Valor = Valor & (1<<5)
– Teriamos uma operação and entre 00100000 e o conteudo do byte Valor, que 
será 00X00000. Ou seja 0 em todos os bits e mantendo o valor do bit 5.
• Conclusão:
– A operação And pode servir para ligar zerar bits em uma variavel
– A operação And pode servir para testar bits de uma variavel
Wlamir Passos

bit 7 6 5 4 3 2 1 0 bit 7 6 5 4 3 2 1 0

Valor X X X X X X X X Valor X X X X X X X X
(1<<4) 0 0 0 1 0 0 0 0 ~(1<<4) 1 1 1 0 1 1 1 1

(1<<6) 0 1 0 0 0 0 0 0 ~(1<<6) 1 0 1 1 1 1 1 1

OR X 1 X 1 X X X X AND X 0 X 0 X X X X

Resultado: Seta o bit 4 e 6 do valor Resultado: Reseta o bit 4 e 6 do valor

PORTB = PORTB | (1<<6) | (1<<4); PORTB = PORTB & ~(1<<6) & ~(1<<4);

PORTB |= (1<<4); // Seta bit 4 PORTB &= ~(1<<4); // Reseta bit 4

#define LED 4 #define LED 4

PORTB |= (1<<LED); // Acende led PORTB &= ~(1<<LED); // Apaga led

#define Liga_led PORTB |= (1<<4) #define Apaga_led PORTB &= ~(1<<4)

Liga_led; Apaga_led;
Wlamir Passos

SEMANA 3
Wlamir Passos

Revisão linguagem C
Wlamir Passos

Estruturas do C
Repetição  Repetição 
Teste (if) (while) (do while)
in in in

False Test True


?
Bloco
B A True
Test
? True
Test
out False Bloco ?
False

out out
se (condição){
bloco A verdadeiro
} se não { Enquanto (condição){ Faça{
bloco B falso bloco a executar bloco a executar
} } } Enquanto(condição)

if ( chave ==1) { while ( bt_soma_atv) { do {


Acende_led(); fogo++; temp++;
} else { } }while(temp<100)
Apaga_led();
}
Wlamir Passos

Estruturas do C
Repetição 
(for)
Casos (case)
in
in
Inicia contador

1 2 3 Outros

A B C D
Bloco

out
Muda contador
conforme (expressão){ switch ( valor) {
caso 1: case 1:
teste True
bloco A Acende_led1();
?
caso 2: break;
False
bloco B case 2:
out caso 3: Acende_led2();
Para( cnt =0; enquanto cnt<100; cnt=cnt+1){ bloco C break
bloco a executar outros: case 3:
} bloco D Acende_led3();
} break 
for ( x=0; x<100; x++ ){ default:
pisca_led(); Apaga_leds();
} break
}

Você também pode gostar