Escolar Documentos
Profissional Documentos
Cultura Documentos
Memória
UCP: Unidade central de
processamento
Memória: Armazenamento de
programas e dados
Unidade Unidade
de Lógica e I/O: Transferência de dados
Controle Aritmética entre computador e ambiente
externo
Unidade Central de Processamento
Barramentos: estabelece
comunicação entre UCP,
memória e I/O
Dispositivos de Dispositivos de
Entrada de Dados Saída de Dados
Tipos de Memórias de Semicondutores
Não Voláteis: - geralmente utilizadas para armazenamento de programa
- retém conteúdo mesmo quando desenergizadas
q EPROM: Erasable
Programmable Read Only
Memory: regravável.
q EEPROM: Electrically
Erasable Programmable Read
Only Memory
Tipos de Memórias de Semicondutores
24 = 16 palavras de 4 bit
Endereços de 0000B a 1111B
Barramento de
endereços
Barramento
de entrada de
dados
Representação da 74189
D3 D2 D1 D0
/CS
/WE
Word 15 A3
E Ck E Ck E Ck E Ck
Address Decoder
Q D Q D Q D Q D A2
Word 14 A1
E Ck E Ck E Ck E Ck
Q D Q D Q D Q D A0
: : : :
Word 0
E Ck E Ck E Ck E Ck
Q D Q D Q D Q D
Buffer Buffer Buffer Buffer
§ 8051 trabalha com memórias que armazenam palavras de oito bits; barramento de
único dados - bidirecional;
Microprocessador de Propósito Geral conectado a Memórias e Periféricos
§ UCP + “Periféricos”
1
CAN: Controller Area Network
2
SPI: Serial Peripheral Interface
3 NVRAM: Nonvolatile SRAM
Escolhendo um Microcontrolador
q UCP de 8 bits;
q endereça 64 KiB (kibibyte) de memória de programa externa;
q endereça 64 KiB de memória de dados externa;
2 interrupções externas
2 temporizadores / contadores
1 interface serial
P0 P2 P1 P3 TxD RxD
Endereço/Dados
Microcontrolador 8051
As portas de um
microcontrolador são
úteis para escrever em
leds, ler de chaves,
como também
interagir com
periféricos mais
complexos, tais como
display de cristal
líquido (LCD), módulo
GPRS (General Packet
Radio Service) e
outros.
Exemplo de conexão a dispositivos externos
Modelo
EDSIM51
www.edsim51.com
Para escrita no display
P0.7/ P3.4/ P3.3/ Q3 Q2 Q1 Q0
CS A1 A0
1 0 0 1 1 1 0
1 0 1 1 1 0 1
1 1 0 1 0 1 1
1 1 1 0 1 1 1
0 X X 1 1 1 1
1 0 0 1 1 1 1 1 P1
Exercício
Fazer programa em linguagem C para mostrar 1 no display 0 do hardware
simulado pelo EDSIM51
Linguagem C – 8051
Operadores
(http://www.keil.com/support/man/docs/c51/)
• Atribuição: = += -=
• Incremento/decremento: ++ --
Linguagem C – 8051
Estruturas para Seleção
if - else if (condição_1) declaração_1;
switch - case
switch (variável)
{
case constante_1: declaração_1; break;
case constante_2: declaração_2; declaração_3; break;
.
.
case constante_n: declaração_L; break;
default: declaração_default;
}
Linguagem C – 8051
Estruturas para Repetição
declaração_1;
for ...
declaração_n;
}
do { declaração_1;
do – while ...
(Executa ao menos, declaração_n;
1 vez o laço do) }
while (condição);
break Interrompe a execução de um comando (switch) ou de
loop (for, while, do-while). O break força a saída do
laço mais interno.
enum mes {jan, fev, mar, abr, mai, jun, jul, ago, set, out, nov, dez};
mes valor;
Modelo EDSIM51
www.edsim51.com
Organização de Programa em Liguagem C
Startup.a51
I. Apaga RAM interna e externa
// diretiva de compilação
#include <reg51.h> // inclusão de arquivo com endereços de registradores do 8051
// declaração de constantes
#define CS 0x80; // 10000000B
// função main
void main (void)
{
unsigned char digito = 1 ;
P0 = CS;
P3 = dsp_0;
P1 = converte_7seg(digito);
while(1);
}
// função
unsigned char converte_7seg (unsigned char dado) // função retorna valor a ser escrito…
{ //… nos displays para formar o caractere
return dado;
} // end converte
Conversão de
linguagem de alto
nível para código
de máquina
8051
código binário deve
ser armazenado na
memória de programa
Interrupções Externas
ROM para
memória de
Controle de Entradas
programa RAM Timer 1
Interupções do
4 KiB 128 bytes Timer 0 contador
P0 P2 P1 P3 TxD RxD
Endereço/Dados
MEMÓRIA DE PROGRAMA
Contendo códigos das instruções (opcodes)
Representação no Keil
ENDEREÇOS Instruções ENDEREÇOS Instruções
(HEXADECIMAL) (BINÁRIO) (HEXADECIMAL) (HEXADECIMAL)
7 6 5 4 3 2 1 0
CY AC F0 RS1 RS0 OV P D0H
5 bits 3 bits
Código da instrução (opcode) Operando
1 1 1 0 1 R R R
8 bits
8 bits
Código da instrução (opcode)
0 0 1 0 0 1 0 1 endereço
Valores possíveis para o campo RRR do slide anterior e seguinte
REGISTRADOR RRR
R0 000
R1 001
R2 010
R3 011
R4 100
R5 101
R6 110
R7 111
Exercício: Obter o código das instruções abaixo
MOV A,R2
ADD A,32H
Special 128
Function bytes
Registers FFH
a 80H FFh:
SFR
80h:
7Fh:
REGIS-
TERS
00h:
128
RAM bytes
(8051)
7FH
a 00H
ADD A, direct
Special Function Registers (SFR)
/*--------------------------------------------------------------------------
REG51.H // Conteúdo parcial do registrador reg51.h
Header file for generic 80C51 and 80C31 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __REG51_H__
#define __REG51_H__
/* BYTE Register */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
...
/* BIT Register */
/* PSW */
sbit CY = 0xD7;
sbit AC = 0xD6;
.....
Organização da RAM Interna
Instrução MOV A,direct
8 bits
8 bits
Código da instrução (opcode)
1 1 1 0 0 1 0 1 endereço
5 bits 3 bits
Código da instrução (opcode) Operando
1 1 1 0 1 R R R
Registrador de Flags
PSW - Program Status Word - Bit Addressable
7 6 5 4 3 2 1 0
CY AC F0 RS1 RS0 OV P D0H
08H
RS0=0 RS0=1
RS0 e RS1 do
registrador PSW RS1=0 Banco 0 Banco 1
RS1=1 Banco 2 Banco 3
Special Function Registers (SFR)
Linguagem C
Assembly (SETB bit address)
sbit P0_0 = 0x80;
SETB 80H ou SETB P0.0; P0_0 = 1;
Organização da RAM Interna
Modelo
EDSIM51
www.edsim51.com
Solução do Exercício
// EXEMPLO: Programa que mostra número 1 no display 1 do EDSIM51
//diretiva de compilação
#include <reg51.h> // inclusão de arquivo com endereços de registradores SFR do 8051
sbit CS = P0^7;
CS = 1;
END1 = 0;
END0 = 1;
P1=dsp7_code[1];
while(1);
}
Solução do Exercício
// EXEMPLO: Programa que mostra número 1 no display 1 do EDSIM51
//diretiva de compilação
#include <reg51.h> // inclusão de arquivo com endereços de registradores SFR do 8051
sbit CS = P0^7;
CS = 1;
END1 = 0;
END0 = 1;
P1 = dsp7_code[1];
while(1);
}
Especificação de Regiões de Memória
CS = 1;
cntdsp = 3;
while (1) {
END1 = cntdsp_1; //end. dsp7
END0 = cntdsp_0;
P1 = dsp7_code[digito++];
for (delay = 0; delay< 30000; delay++); // atraso Edsim 2.1.20 – Update freq=50000
if (cntdsp == 0) cntdsp = 3;
else cntdsp--;