Post on 27-Nov-2018
30/8/2007
1
Microcontroladores 8051
Thiago B. Ló
Guilherme Galante
EPAC 2007
Organização do curso1. Parte I Introdução Visão Geral da família 8051 O circuito básico C para 8051 Atividades Práticas
2. Parte II Interrupções Contadores e Temporizadores Atividades Práticas
2 EPAC - Encontro Paranaense de Computação
30/8/2007
2
Parte I
Introdução ao 8051
EPAC - Encontro Paranaense de Computação3
Introdução
EPAC - Encontro Paranaense de Computação4
Um microcontrolador é um componente que possui em único chip: CPU memórias ROM e RAM temporizadores/contadores conversores AD canais de comunicação
Em sistemas baseados em microprocessadores, se utilizam vários componentes para implementar essas funções
Os microcontroladores permitem a implementação de sistemas mais compactos e baratos do que aqueles baseados em microprocessadores
30/8/2007
3
Introdução
EPAC - Encontro Paranaense de Computação5
CPUs dos microcontroladores são menos poderosas do que os microprocessadores
Seu conjunto de instruções costuma se limitar às instruções mais simples
Sua freqüência de clock é mais baixa e o espaço de memória endereçável costuma ser bem menor
Vê-se daí que o campo de aplicação dos microcontroladores é diferente daquele dos microprocessadores
Introdução
EPAC - Encontro Paranaense de Computação6
Microprocessador
• CPU => stand-alone, RAM, ROM, I/O, timers são separados;
• O projetista pode decidir a quantidade de ROM, RAM e ports de I/O;
• Expansível
• Versatilidade
• Uso geral
Microcontrolador
• CPU, RAM, ROM, I/O e timer estão integrados em um chip
• Quantidade fixa de elementos on-chip (ROM, RAM, I/O ports)
• Para aplicações onde custo, potência e espaço são fatores críticos;
• Uso específico
30/8/2007
4
Introdução
EPAC - Encontro Paranaense de Computação7
Exemplos de aplicações: controle de semáforos balanças eletrônicas telefones públicos controle de carregadores de baterias controles de acesso taxímetros sistemas de aquisição de dados de manufatura e eletrodomésticos em geral
A Família 8051
EPAC - Encontro Paranaense de Computação8
O Intel 8051 faz parte de uma popular família de microcontroladores de 8 bits lançada pela Intel em 1977
O dispositivo em si é um microcontrolador de 8 bits relativamente simples, mas com ampla aplicação
Porém, o mais importante é que não existe somente o CI 8051, mais sim uma família de microcontroladores baseada no mesmo
Entende-se família como sendo um conjunto de dispositivos que compartilha os mesmos elementos básicos, tendo também um mesmo conjunto básico de instruções.
30/8/2007
5
A Família 8051
EPAC - Encontro Paranaense de Computação9
Diversos fabricantes produzem microcontroladores da família 8051: Intel AMD Atmel Dallas OKI Matra Philips Siemens SMCSSI
A Família 8051
EPAC - Encontro Paranaense de Computação10
Além do 8051 propriamente dito, existem variantes: 8031 (sem memória ROM interna e com apenas 128 bytes de
memória RAM) 8751 (4 kB de memória EPROM) 8052 (8 kB de memória ROM, um terceiro timer e 256 bytes de
memória RAM)
A menos dessas diferenças, os modelos citados são idênticos, assim utilizaremos o termo “8051” de forma genérica
30/8/2007
6
Principais Características
EPAC - Encontro Paranaense de Computação11
Freqüência de clock de 12 MHz, com algumas versões que alcançam os 40 MHz
até 64 kB de memória de dados externa
128 bytes de RAM interna
até 64 kB de memória de programa configurável de duas formas mutuamente excludentes: 4 kB internos (ROM no 8051 e EPROM no 8751) e mais 60 kB externos 64 kB externos
4 portas bidirecionais de I/O, cada uma com 8 bits individualmente endereçáveis duas dessas portas (P0 e P2) e parte de uma terceira (P3) ficam comprometidas
no caso de se utilizar qualquer tipo de memória externa
2 temporizadores /contadores de 16 bits
1 canal de comunicação serial
5 fontes de interrupção (dois timers, dois pinos externos e o canal de comunicação serial) com 2 níveis de prioridade selecionáveis por software
oscilador de clock interno
Visão Interna: A Arquitetura do 8051
EPAC - Encontro Paranaense de Computação12
4 I/O Port’sOSC
CPU
Interrupt Control
External Interrupt
4K ROM 128 Bytes RAM
Timer 1
Timer 0
Counter Inputs
Serial Port
TXD RXDP0 P1 P2 P3
Address / Data
BUS
BUSControl
30/8/2007
7
Visão Externa: A Pinagem do 8051
EPAC - Encontro Paranaense de Computação13
Reset
Terra
+5V
Cristal
Acesso Externo(~)
Portas de E/S
Address latch enable
Acesso Externo(~)
Memória
EPAC - Encontro Paranaense de Computação14
O 8051 possui 4kB de memória de programa internos (ROM), podendo-se ainda utilizar 64kB externos (8031 não possui ROM interna)
Possui RAM interna e possibilidade de RAM externa, com espaços de endereçamento distintos (instruções distintas)
Mapeia em memória registradores, portas de I/O, ponteiros do sistema, temporizadores
30/8/2007
8
Memória
EPAC - Encontro Paranaense de Computação15
Área de Registradores R0-R7 (00-1FH) Área Booleana (binária) (20H-2FH): 16 bytes endereçados bit a bit (totalizando 128 bits)
Área de Rascunho (30H-7FH): memória de uso geral onde se localiza a pilha do sistema
Área de Registradores Especiais (SFR) (80H-FFH): Portas P0 (80H), P1 (90H), P2 (A0H), P3 (B0H) TMOD (89H): registrador de modo dos timers TCON (88H): registrador de controle do timer 1 T2CON (C8H): registrador de controle do timer 2
Memória
EPAC - Encontro Paranaense de Computação16
Memória de Programa
4k 8k0000H
0FFFH
0000H
1FFFH
8751AT89C51
8752AT89C52
30/8/2007
9
Entrada e Saída
EPAC - Encontro Paranaense de Computação17
A família 8051 possui as seguintes capacidades de I/O “nativas”, variáveis conforme o modelo: 32 Portas de I/O endereçáveis individualmente, divididas em 4
portas de 8 bits mapeadas em RAM com bits individualmente endereçáveis P0(80h) P1(90h) P2(A0h) P3(B0h)
1 UART Full-Duplex
Entrada e Saída
EPAC - Encontro Paranaense de Computação18
O acesso às portas pode ser feito a byte, com instruções normais de movimentação de dados (endereçamento direto) ou utilizando instruções de bit
Endereçamento direto entre os endereços 80h e FFh acessa os registradores especiais e portas de I/O, enquanto que endereçamento indireto acessa a memória
As portas são quase todas “multifuncionais”, ou seja, podem ser utilizadas tanto para I/O comum endereçável a bit quanto para sua função “especial”, como no caso de acesso à memória externa, com as portas 0,2 e 3: Porta 0: dados e parte baixa dos endereços multiplexados Porta 2: parte alta dos endereços Porta 3: WR e RD (write strobe e read strobe para memória dados) Combinações extremas:
1 Portas de I/O (8 bits em P1) + 6 bits da P3 + 64K ROM + 64K RAM (EXTERNAS)
4 Portas de I/O + 128bits RAM + 4K ROM (INTERNAS)
30/8/2007
10
Entrada e Saída
EPAC - Encontro Paranaense de Computação19
Além das funções especiais já vistas, ainda temos as portas 1 e parte da P3, que têm as seguintes funções especiais: Porta 1:
bit 0: T2 Timer/Counter2 external input bit 1: T2EX Timer/Counter2 Capture/Reload trigger(Apenas no 8052)
Porta 3: bit 0: RXD (serial input port) bit 1: TXD (serial output port) bit 2: INTO (external interrupt) bit 3: INT1 (external interrupt) bit 4: T0 (Timer/Counter 0 external) bit 5: T1 (Timer/Counter 1 external) bit 6: WR (external Data Memory write strobe) bit 7: RD (external DataMemory read strobe
Circuito Básico
EPAC - Encontro Paranaense de Computação20
30/8/2007
11
Clock
EPAC - Encontro Paranaense de Computação21
Ex.: Encontrar o ciclo de máquina para:(a) XTAL = 11.0592 MHz (b) XTAL = 16 MHz.
Solução:
(a) 11.0592 MHz / 12 = 921.6 kHz;Ciclo de máquina = 1 / 921.6 kHz = 1.085 s
(b) 16 MHz / 12 = 1.333 MHz;Ciclo de máquina = 1 / 1.333 MHz = 0.75 s
Ciclo de Máquina = 1/ (fext / 12)
C para 8051
EPAC - Encontro Paranaense de Computação22
Existem basicamente três linguagens de programação que são utilizadas com o 8051 BASIC ASSEMBLY C.
Nos últimos anos, a programação de microcontroladores em linguagem C tem sido adotada pela maioria das empresas devido às facilidades para programação e ao nível de portabilidade apresentada
30/8/2007
12
C para 8051
EPAC - Encontro Paranaense de Computação23
Muitos livros ensinam a programação padrão ANSI C, porém devemos tomar o cuidado ao utilizar este tipo de bibliografia, pois ela aborda a programação para o PC
Funções do tipo “printf”, “scanf”, “sprintf” entre outras, geralmente não estão disponíveis para o projetista ou apresentam um comportamento diferente quando utilizamos o compilador para microcontrolador
Neste curso utilizaremos o Compilador HITECH-C e o gravador EZ2
C para 8051
EPAC - Encontro Paranaense de Computação24
Compilador: HITECH-C
30/8/2007
13
C para 8051
EPAC - Encontro Paranaense de Computação25
Gravador: EZ2 Modo de uso: EZ2 <nome.hex> -C1
C para 8051
EPAC - Encontro Paranaense de Computação26
Tipos e variáveis
Exemplo de declaração de variáveis:int Contador; // Variável do tipo inteiro com sinalunsigned char Leitura; // Variável do tipo char sem sinalchar buffNome[6]; // Array do tipo char com 6 posicõesint buffTotal[4]; // Array do tipo int com sinal com 4 posições
30/8/2007
14
C para 8051
EPAC - Encontro Paranaense de Computação27
Operadores aritméticos - Subtração ou sinalização de negativo + Soma * Multiplicação / Divisão % Resto da divisão ++ Incremento (Variável = Variável + 1) -- Decremento (Variável = Variável – 1)
C para 8051
EPAC - Encontro Paranaense de Computação28
Operadores lógicos e relacionais > Maior que < Menor que >= Maior ou igual que <= Menor ou igual que == igual != Diferente && Relacional “e” || Relacional “ou” ! Relacional “não”
30/8/2007
15
C para 8051
EPAC - Encontro Paranaense de Computação29
Operadores de manipulação de bit & Operação lógica AND | Operação lógica OR ^ Operação lógica XOR ~ Operação lógica NOT >> Operação de deslocamento(shift) em bit para a direita << Operação de deslocamento em bit para a esquerda
C para 8051
EPAC - Encontro Paranaense de Computação30
Diretivas fundamentais do pré – compilador
#DEFINE <NOME> <ATRIBUICAO> Permite atribuir antes da compilação um valor para NOME.
Exemplo: #define LIGADO 1 #define MAXIMO 50 //Substitui o nome MAXIMO por 50 no programa
#INCLUDE <ARQUIVO> Informa ao que deverá ser incluído o ARQUIVO antes de realizar a compilação do programa.
Exemplo: #include <8051.h> // Inclui o arquivo 8051.h da pasta padrão #include “8051.h” // Inclui o arquivo 8051.h da pasta do programa
30/8/2007
16
C para 8051
EPAC - Encontro Paranaense de Computação31
Diretivas fundamentais do pré – compilador
#DEFINE <NOME> <ATRIBUICAO> Permite atribuir antes da compilação um valor para NOME.
Exemplo: #define LIGADO 1 #define MAXIMO 50 //Substitui o nome MAXIMO por 50 no programa
#INCLUDE <ARQUIVO> Informa ao que deverá ser incluído o ARQUIVO antes de realizar a compilação do programa.
Exemplo: #include <8051.h> // Inclui o arquivo 8051.h da pasta padrão #include “8051.h” // Inclui o arquivo 8051.h da pasta do programa
C para 8051
EPAC - Encontro Paranaense de Computação32
Controle de fluxo: IF
#include <8051.h>#define ENTRADA1 P3_BITS.B2main(){
if(ENTRADA1=1){
P1_BITS.B0=1;}else{
P2=1;P0=1;
}}
30/8/2007
17
C para 8051
EPAC - Encontro Paranaense de Computação33
Controle de fluxo: SWITCH
#include <8051.h>unsigned char IN;void main (void){
IN = P1;switch(IN){
case 0x00:P0=1;break;
case 0xFF:P2=1;break;
default:P3=1;break;
}}
C para 8051
EPAC - Encontro Paranaense de Computação34
Controle de fluxo: WHILE
#include <8051.h>
#define ENTRADA1 P3_BITS.B2
main()
{
while(!ENTRADA1)
{
P1_BITS.B0=1;
}
}
30/8/2007
18
C para 8051
EPAC - Encontro Paranaense de Computação35
Controle de fluxo: DO...WHILE
#include <8051.h>
#define ENTRADA1 P3_BITS.B2
main()
{
P1_BITS.B0=0;
do
{
P1_BITS.B0=~P1_BITS.B0;
wait(); //função definida pelo usuário
}
while(!ENTRADA1)
}
C para 8051
EPAC - Encontro Paranaense de Computação36
Controle de fluxo: FOR
#include <8051.h>
#define ENTRADA1 P3_BITS.B2
main()
{
int i;
P1_BITS.B0=0;
for(i=0;i<255;i++)
{
P1_BITS.B0=~P1_BITS.B0;
wait(); //função definida pelo usuário
}
}
30/8/2007
19
C para 8051
EPAC - Encontro Paranaense de Computação37
Procedimentos
#include <8051.h>#define ENTRADA1 P3_BITS.B2
void procedimento1(){
int i;P1_BITS.B0=0;
for(i=0;i<255;i++){
P1_BITS.B0=~P1_BITS.B0;wait(); //função definida pelo usuário
}}main(){
procedimento1();}
C para 8051
EPAC - Encontro Paranaense de Computação38
Funções
#include <8051.h>#define ENTRADA1 P3_BITS.B2
int funcao1(){
while(!ENTRADA1){
P1_BITS.B0=1;}return 1;
}
main(){
int OUT;OUT=funcao1();
}
30/8/2007
20
Atividades
EPAC - Encontro Paranaense de Computação39
Parte II
Interrupções, Contadores e Temporizadores
EPAC - Encontro Paranaense de Computação40
30/8/2007
21
Interrupções
EPAC - Encontro Paranaense de Computação41
Processo pelo qual a execução de um programa é interrompido, de acordo com as necessidades de eventos externos ou internos
Fontes de interrupção (8051): Interrupção externa 0 - INT0\ Interrupção externa 1 - INT1\ Interrupção do timer\contador 0 - T0 Interrupção do timer\contador 1 - T1 Interrupção do canal serial - TI ou RI
Cada interrupção pode ser individualmente habilitada ou não, e pode-se desabilitar todas de uma vez (Mascaramento)
Interrupções Níveis de prioridade Nível 0 -> Menor Nível 1 -> Maior
Interrupção vetorada
30/8/2007
22
Interrupções Para determinar quais interrupções estarão habilitadas, devermos
escrever no registrador especial IE - (Interrupt Enable) do SFR.
Interrupção habilitada -> 1 Interrupção desabilitada -> 0
07
Interrupções Prioridade Registrador Interrupt Priority (IP)
Quanto em 1 define como alta a prioridade
07
30/8/2007
23
Interrupções- Interrupção Externa Interrupção Externa A configuração é feita no registrador TCON (Timer Control) através
do nibble (4 bits) menos significativo.
IT0 e IT1 - Quando em nível lógico 0 a interrupção Externa(0 ou 1) será aceita simplesmente pela presença do nível zero no pino. Quando em nível lógico 1 a interrupção será aceita quanto ocorrer uma transição de 1 para 0 e o sinal permanecer em zero por pelo menos 1ciclo de máquina.
IE0 e IE1- É setado pelo hardware interno quando for detectado um pedido de interrupção. É resetado quando a interrupção for atendida.
07
Exemplo
30/8/2007
24
Interrupções - Temporizador e Contador Temporizador e Contador (T/C- Timer/Counter) O 8051 possui 2 T/C (timer/conter) Podem operar de maneira totalmente independente dos demais
recursos do chip. Os dois T/C podem ser ativados ou desativados pelo hardware ou
pelo software, dependendo da configuração adotada pelo projetista. No nibble (4 bits) mais significativo de TCON podemos ativar ou desativar os T/C`s como veremos a seguir:
7 0
Interrupções - Temporizador e Contador TCON
TF0 e TF1- Setado pelo hardware sempre que ocorrer um overflow (estouro no contador) no T/C. É resetado ao final da rotina de interrupção de T/C.
TR0 e TR1 - Quando em nível lógico 1 irá ligar o T/C0, e quando em zero o mesmo será desligado.
7 0
30/8/2007
25
Interrupções - Temporizador e Contador Configuração do modo de funcionamento do temporizador/contador Registrador TMOD
Gate0; Gate1 – Definem como o Timer/Contador irá funcionar. 0: O timer/contador será ativado simplesmente colocando TRn em 1 1: O timer/contador será ativado se TRn e o pino INTn forem 1.
Útil quando queremos medir largura de pulso externo.
C/T0; C/T1 - Definem a fonte do sinal de clock. 0: Tem a função de timer e a base de tempo será o clock do cristal. 1: Operando como contador e o clock será os pulsos presentes no pino Tn
M1-x;M0-x - Determinam o modo como irá operar o Timer/Contador. Modo 0, 1,2 e 3
Interrupções - Temporizador e Contador
30/8/2007
26
Interrupções - Temporizador e Contador Os modos de operação são:
MODO 0 - Temporizador/Contador de 8 bit`s com divisor de freqüência de até 32 vezes. Neste modo o TL0 ou TL1 servem como prescaler do divisor e os registradores TH0 e TH1 como contador de 8 bit`s.
MODO 1 - Temporizador/Contador de 16 bit`s. Neste modo o TLn e THn formam um par de forma a obter um registrador de 16 bit`s. Neste modo podemos contar até 65535, com o valor inicial programável por software.
MODO 2 - Contador/Temporizador de 8 bit`s com recarga automática. Neste modo o registrador TLn realiza a contagem e o registrador THn possui o valor que será recarregado em TLn sempre que ocorrer um overflow (estouro do contador). Os registradores podem ser alterados por software a qualquer momento, tornando bastante flexível o uso.
MODO 3 - Intervalador ou contador de eventos em 8 bit`s e temporizador de 8 bit`s. OBS: Este modo não é muito usual e não será estudado.
TH1 (8DH), TL1 (8BH), TH0 (8CH) e TL0 (8AH) contêm os valores das contagens dos temporizadores/contadores 1 e 0, respectivamente;
Exemplo