Sie sind auf Seite 1von 13

Universidade Federal do Rio Grande do Sul

Departamento de Engenharia Elétrica

ÁREA 1
MICROPROCESSADORES I

Material da disciplina: Prof Ronaldo Husemann


Adaptado por Bruna Ramos de Carvalho
brurdcarvalho@gmail.com
Uma memória pode ser... ROM x RAM
Não Volátil Read Only Memory Random Access Memory
Volátil
• Conteúdo é perdido • Conteúdo é mantido
mesmo quando não está • Apenas leitura • Randomicidade:
quando não está • Não volátil: mantém os conteúdo é acessado
ligada à alimentação. ligada à alimentação.
dados armazenadas diretamente.
sem a necessidade de • Volátil: conteúdo é
Randômica Sequencial
uma fonte de energia. perdido quando não há
• A informação é • A informação é acessada
• Ex: CD’s e DVD’s. fonte de energia.
acessada diretamente. sequencialmente.
• Ex: memória que roda um
aplicativo de celular.
Dinâmica Estática
• Os dados podem ser • Os dados nunca são Contextualizando...
perdidos. perdidos. • No desenvolvimento de uma impressora, a memória ROM
guardaria as informações referentes a como imprimir,
enquanto a memória RAM guardaria impressão por
Forma de Acesso
impressão.
Read (RD) x Write (WR) • Em um microcontrolador, a memória ROM representa a
memória de programa (programa em C embarcado)
enquanto a memória RAM representa a memória de
dados (variáveis do programa).
Tipos de Memórias
ROM (Read Only Memory) DRAM (Dynamic Random Access Memory)
• Apenas leitura • Memória dinâmica: armazenamento bit
• Conteúdo é gerado no momento de a bit em uma célula de memória
sua fabricação (permanente) (capacitor + transistor)
PROM (Programable ROM) • Ocupa menos espaço em um chip, mas
• Conteúdo é gerado pelo usuário uma necessita ser constantemente atualizada
única vez (permanente) (circuito extra para a recarga dos
EPROM (Erasable PROM) capacitores)
• Conteúdo é gerado pelo usuário • Mais barata, porém mais lenta
• Apagamento por meio de luz SRAM (Static Random Access Memory)
ultravioleta • Memória estática: dados são
E2PROM (Eletrically EPROM) armazenados bit a bit em flip-flops
• Gravação e apagamento realizado • Ocupa mais espaço em um chip e
eletronicamente consome mais energia
FLASH • Mais cara, porém mais rápida
• Semelhante a E2PROM DDR (Double Data Rate)
• Gravação e apagamento em massa • Permite que dois dados sejam
• Aplicação: pen drive, firmware transferidos em um mesmo ciclo de
clock

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

ULA: Unidade Lógica e Aritmética


• Implementa operações lógicas
Unidade de Controle e aritméticas Controlador de Interrupções
• Gerencia, interpreta • Geradores de Interrupção
Circuito de Clock • Externas (IE1/IE0)
e armazena dados
• Frequência: 12MHz • Timers (TR1/TR0/TR2)
• Busca e execução de
• Instruções levam de 1 a 4 ciclos de • Serial (TI/RI)
instruções
máquina (1 ciclo de máquina = 12 • Flags atualizadas nos SFR’s
ciclos de clock).
Memória Interna
ROM
• 4k disponível
• Setar EA (External Access): executa memória de
programa interna

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);
}

unsigned char read_botao(void) {


char indice = 0;
char pino = 1;
for(indice=0;indice<8;indice++){
if((~P0) & pino){
if(debounce(indice))
return indice;
pino = pino<<1;
}
return -1;
}
Serial • RI é setado quando recebe o 8º bit e deve ser zerado
• O SBUFF é um buffer de dados para comunicação serial. para permitir a existência de novas interrupções.
• SCON é o registrador que permite uma comunicação serial • TI é setado quando envia o 8º bit, independe do fluxo
com o microprocessador, a qual é full-duplex (transmite e principal do programa, e também deve ser zerado para
recebe). permitir novas interrupções.

Função para transmitir


void transmite_serial(unsigned char dado){ //8051 transmite pela uart Para transmitir basta chamar a função,
SBUF=dado; //place value in buffer lembrando que é enviado um caractere por vez.
while(!TI); //wait for transmit (flag set by hw)
TI=0; //flag cleaned by sw
transmite_serial(‘O’);
transmite_serial(‘L’);
Função para receber transmite_serial(‘A’);
#define TAM
unsigned int vector[TAM]
Na recepção guardamos os caracteres recebidos (um
void recebe_serial (void) interrupt 4{ //8051 recebe pela serial por vez) em um vetor universal e vamos
static char contador=0;
if (RI==1){ //wait for transmit (flag set by hw)
comparando a posição do vetor com o seu conteúdo
vector[contador]=SBUF; para ver se fecha com a lógica.
contador++; if (vector[0] == ‘O’)
} if(vector[1] == ‘L’)
RI=0; //flag cleaned by sw if(vector[2] == ‘A')
}
Interface Serial Comunicação serial síncrona
• Transfere blocos de dados (caracteres) controlados por
sinal de clock
• Implementação por UART
• Cada caractere é delimitado por start e stop bit
• LSB (least significant bit) é enviado primeiro

Cálculo de Taxa Serial

Das könnte Ihnen auch gefallen