Beruflich Dokumente
Kultur Dokumente
ÁREA 1
MICROPROCESSADORES I
brurdcarvalho@gmail.com
Interface com Memórias:
Barramentos
Endereços [Am...A0]
RD WD CS CE • Pinos de Entrada
• O tamanho da memória em endereços é
dado por 2𝑀 𝑠𝑒𝑛𝑑𝑜 𝑀 = 𝑚 + 1.
Am
MEMÓRIA Dados [Dm...D0]
A0 • Pinos de saída
• O tamanho da memória em dados é obtido
por N=m+1.
• Se N=8, a memória é organizada por bytes
Dm D0 (1 byte/endereço).
Controle
CS (Chip Select) RD (Read) Então, se uma memória tem M=16 e N=8,
• Seleciona memória • Leitura de dados da podemos dizer que esta é uma memória de
CE (Chip Enable) memória 64k bytes por endereço.
• Habilita memória • Pode ser chamado de OE
WR (Write) (Output Enable)
• Gravação de dados
na memória
MCS8051
Pinagem
Arquitetura
RAM
• 128 bytes: pilha + 4 banco de registradores
• Special Function Registers (SFR’s)
• PC (Program Counter)
• Guarda endereço da próxima instrução a
ser executada
• Modificado em caso de saltos
• Acumulador
• Saída da ULA
• PSW (Program Status Word)
• Overflow
• Seta banco de registradores
• SP (Stack Pointer)
• Guarda valor de PC na pilha
Memória Externa ROM
• 64k disponível
RAM
• 64k disponível
• Zerar EA (External Access): seleciona memória de • Acesso por RD/WR
programa externa
• Setar PSEN (Program Store Enable): habilita memória
de programa externa
Timers
Temporizadores
8051: Timer 0 e Timer 1 de 8 bits
8052: Timer 2 de 16 bits O modo adequado de operação para cada timer depende do tempo
• Suporta captura de eventos para de contagem desejado.
garantir reconhecimento de A frequência de oscilação define a velocidade com que as instruções
instante preciso da ocorrência de são executadas dentro do microcontrolador.
evento. Para o 8051, 𝑓𝑜𝑠𝑐𝑖𝑙𝑎𝑐𝑎𝑜 = 11.059𝑀𝐻𝑧.
A frequência do timer é sempre 1/12 da 𝑓𝑜𝑠𝑐𝑖𝑙𝑎𝑐𝑎𝑜 .
Modo Timer 12
• Timer incrementa sua 𝑓𝑡𝑖𝑚𝑒𝑟 = 11.059𝑀 = 921583 𝐻𝑧.
contagem a cada ciclo de Para gerar delay, precisamos do período do timer.
1
máquina 𝑇𝑡𝑖𝑚𝑒𝑟 = = 1.085 µ𝑠.
𝑓𝑡𝑖𝑚𝑒𝑟
• Frequência fixa
A partir deste período, podemos setar o overflow do timer conforme o
valor de contagem desejado. O timer no modo 8 bits possui um valor
Modo Contador de contagem máximo de 256, enquanto no modo 16 bits o valor
• Incrementa a cada transição do máximo é de 65536.
pino externo T0/01 (borda de
descida)
• A frequência é variável O registrador TCON controla contagens e temporizações no 8051,
(depende do sinal de entrada) enquanto o TMOD serve para definir o modo de funcionamento do
TCON.
Exemplo 1: Timer 1 com contagem de 200µs Exemplo 2: Timer 2 com contagem de 1ms
Cálculos
200 µ𝑠 Cálculos
𝑁 = = 184,33 = 185. 1 𝑚𝑠
1.085 µ𝑠 𝑁 = = 1000.
1.085 µ𝑠
256-185=71
65536-1000=64536
#71d = #47h
#64536d = #FC18h
Código
#include <reg51.h>
Código
void delay_200us(void){
TMOD = 0x20; //modo 2: 8 bits com recarga
#include <reg52.h>
TH1=0x47; //registradores onde ocorre a contagem (incremento)
void timer2_init(void){
TL1=0x47;
T2CON = 0; //recarga automática
TR1=1; //run control flag set by software
RCAP2H =0xFC;
while(!TF1); //overflow flag set by hardware (default=1)
RCAP2L = 0x18;
TF1=0; //overflow flag cleaned by software
TH1= RCAP2H;
TF1=0; //run control flag cleaned by software
TL1= RCAP2L;
} TR2=1; // run control flag set by software
ET2=1; // enable interrupt timer 2
• Para gerar delays derivados de 200us: laço for{} }
Exemplo: delay de 1ms
void delay_1ms(void){ • Flag TF2 deve ser zerada dentro do Código conforme a lógica
int i; de uso para o timer;
for(i=0;i<500;i++){ • Biblioteca do keil para usar a interrupção do timer 2: void
delay_200us(); nome_da_função(void) interrupt 5{}
}
}
Portas I/O
4 registradores chamados de portas com 8 pinos P0
associados a cada. Todos pinos com o propósito de • Porta bidirecional de 8 bits para I/O.
entrada ou saída. • Fornece multiplexada a parte menos significativa do
endereço e dos dados para acesso à memoria
externa.
P1
• Porta bidirecional de 8 bits para I/O.
P2
• Porta bidirecional de 8 bits para I/O.
• Fornece multiplexada a parte mais significativa do
endereço para acesso à memoria externa.
P3
• Porta bidirecional de 8 bits para I/O.
• Rxd/Txd
• INT0/INT1
• T0/T1
Multiplexação de dados e endereços • WR/RD
• Setar pino ALE (Address Latch Enable)
#define BOUNCE 8
Deboucing (SW)
unsigned char debounce (unsigned char pino){
Solução em software para ruídos advindos de char valor_atual;
chaveamentos mecânicos. char valor_anterior=0;
char contador=0;
do{
delay_1ms();
valor_atual=(~(P0)& 1<<pino);
if(valor_atual==valor_anterior)
contador++;
else
contador=0;
valor_anterior=valor_atual;
}while(contador<BOUNCE);
return(valor_atual);
}