Micro Iv 2
Micro Iv 2
Programação de Microcontroladores I
M.M. / 2001 (revisão)
L.M.S. e P.S.C. / 2001 (revisão)
E.T.M./2004 (revisão)
E.T.M./2005 (revisão)
E.T.M./2010 (revisão)
E.T.M./2011 (revisão da parte experimental)
RESUMO
Nesta experiência serão estudados os conceitos básicos de microprocessadores e microcontroladores e de
sua programação. A parte experimental consiste no desenvolvimento de atividades para a compreensão
do funcionamento de programas na linguagem de montagem ou assembly e testes dos mesmos numa
placa experimental do microcontrolador Intel 8051.
1. INTRODUÇÃO TEÓRICA
1.1. Microcomputadores
Os microcomputadores são muito populares hoje em dia, pois servem para várias aplicações, desde
balanças eletrônicas, piloto automático de carros, reserva de passagens e controle de orçamento
doméstico, até controle de reatores nucleares.
Esta popularização deve-se em grande parte ao avanço da Microeletrônica que disponibiliza rapidamente
componentes cada vez mais poderosos. Além disto, os programas que implementam estas aplicações
estão se tornando cada vez mais complexos e necessários nos dias atuais.
O elemento central dos microcomputadores é o microprocessador. Adicionando-se memórias e interfaces
de entrada/saída (E/S), teremos a arquitetura básica de todos os microcomputadores comerciais,
conforme a Figura 1.1.
Microprocessador
dispositivos
Registrador de
Dados de Saída
Contador Instruções
ULA (8)
(16)
Increm/Decrem
Endereços
+15 V
-5 V
Via de Endereço s
GND WR DBIN INTE INT HOLD HOLD WAIT READY SYNC 1 2 “RESET” A15- A0
ACK
1.3. Microcontroladores
Um microcontrolador é um componente que apresenta, além da CPU, as memórias RAM e ROM,
interfaces para entrada e saída de periféricos paralelos ou seriais e, opcionalmente, temporizadores e
contadores, todos integrados em uma única pastilha. Um microcontrolador típico apresenta instruções de
manipulação de bits, dispõe de acesso fácil e direto às interfaces de entrada e saída, bem como processa
interrupções rápida e eficientemente.
O microcontrolador é amplamente utilizado em aplicações voltadas para robótica, controle e automação
industrial, indústria automotiva, controle de periféricos e equipamentos de comunicação de dados.
Muitos microcontroladores são baseados no conceito CISC (Complex Instruction Set Computer) dispondo,
geralmente, de mais de 80 instruções, muitas das quais poderosas e destinadas especificamente a
tarefas de controle. É muito comum que a execução das instruções seja realizada de forma diferenciada,
sendo que muitas delas operem somente sobre certos intervalos de endereços ou registradores, e outras
reconheçam somente determinados modos de endereçamento.
A arquitetura RISC (Reduced Instructions Set Computers) compõe outra parte do mercado dos
microcontroladores, incorporando-lhes suas vantagens como: área menor de silício, encapsulamento com
menor número de pinos e menor consumo de potência.
DIL 40 PLCC
Figura 1.3 – A pinagem do 8051.
INTERRUPÇÕES
EXTERNAS
ROM
4K TIMER 1
CONTROLE DE
INTERRUPÇÕES
RAM 128 TIMER 0
BYTES
CPU
TXD RXD
P0 P1 P2 P3
Exemplos:
FFFF FFFF
EXTERNA
0FFF 0FFF
A Figura 1.6 apresenta o diagrama dos primeiros 128 bytes da memória RAM.
7F
Bytes Endereçáveis
30
2F
Bits e Bytes Endereçáveis
20
1F R7
BANCO 3
(RS1 =1, RS0=1)
18 R0
17 R7
BANCO 2
(RS1 =1, RS0=0)
10 R0
0F R7
BANCO 1
(RS1 =0, RS0=1)
08 R0
07 R7
BANCO 0
(RS1 =0, RS0=0)
00 R0
A Figura 1.7 apresenta os registradores de funções especiais que apresentam bits endereçáveis. Observe
que o endereço do bit menos significativo coincide com o endereço de byte do registrador.
Será deixado para cursos posteriores o detalhamento dos seguintes registradores de funções especiais:
TH0, TL0, TH1, TL1, TMOD e TCON: referentes aos temporizadores/contadores 1 e 0.
SBUF, SCON: referentes à porta serial.
IP, IE: referentes ao tratamento de interrupções.
CY AC F0 RS1 RS0 OV - P
D7 D6 D5 D4 D3 D2 D1 D0
onde:
PSW.7 ou CY = flag de carry.
PSW.6 ou AC = flag auxiliar de carry.
PSW.5 ou F0 = flag geral, tem seu estado definido pelo software.
PSW.4, PSW.3 ou RS1, RS0, respectivamente: selecionam os bancos de registradores.
00 = banco 0 (00 - 07H)
01 = banco 1 (08 - 0FH)
10 = banco 2 (10 - 17H)
11 = banco 3 (18 - 1FH)
PSW.2 ou OV = flag de overflow.
PSW.0 ou P = flag de paridade.
Endereçamento Imediato
Essas instruções usam como operando imediato um valor de constante numérica que se segue ao
opcode. A constante pode ser de 8 ou 16 bits, dependendo da instrução.
Exemplos:
MOV A,#25H ;armazena no acumulador a constante 25h.
MOV DPTR,#2515H ;armazena a constante 2515h no registrador DPTR.
Endereçamento Indexado
Neste modo de endereçamento, o endereço efetivo é a soma do conteúdo do acumulador e de um
registrador de 16 bits armazenado no registrador PC ou no registrador DPTR.
Exemplos:
MOV A,@A+PC ;copia o byte presente no endereço obtido pela soma dos registradores A e
;PC, no acumulador.
JMP @A+DPTR ;desvia para o endereço obtido pela soma dos conteúdos dos registradores
;A com DPTR
A instrução POP remove o elemento armazenado no topo da pilha. Na execução dessa instrução, o
conteúdo da memória cuja posição é endereçada pelo SP é lido e transferido para o operando presente
na instrução. O valor do registrador SP é decrementado de 1.
Exemplos:
POP DPL ; move o conteúdo da memória endereçada pelo registrador SP para o registrador DPL.
POP R1 ; move o conteúdo da memória endereçada por SP para R1.
Exemplo:
1.5. Software
Nesta experiência, são usados os seguintes programas: no PC, o cross-assembler X8051, o link-editor
LINK2 e um programa de comunicação serial (HyperTerminal ou XTALK), e o programa Monitor
residente da placa experimental.
1.5.2. LINK2
Projetos mais complexos costumam ter vários arquivos de programas. Uma vez gerado o código objeto
de cada programa, é necessário que os programas sejam conectados e transformados em código
executável, fornecendo a informação necessária para que os diversos programas possam se referenciar
mutuamente. Essa função é realizada por um programa denominado linker (ou ligador).
O linker utilizado denomina-se LINK2, que, além da função de ligar módulos, também converte o código
objeto para um formato adequado para ser transmitido serialmente (formato "HEX").
1.5.3. HyperTerminal
O HyperTerminal é um programa de comunicação serial disponível no sistema operacional Windows. Para
permitir a comunicação com a placa experimental do 8051, crie uma nova conexão na porta COM1, com
velocidade de comunicação em 9600 bps, 8 bits de dados, sem paridade, 2 bits de parada e sem
protocolo de controle de fluxo.
A janela principal do programa apresenta os dados enviados pelo MONITOR, e opções de comandos são
disponibilizadas nos menus. Por exemplo, para enviar um arquivo executável HEX, basta executar a
sequência Transferir > Enviar Arquivo de Texto.
1.5.4. XTALK
É outro programa que pode ser utilizado para a comunicação do PC com a placa experimental do 8051,
permitindo assim que o código executável gerado no ambiente PC-MSDOS seja carregado na placa
experimental (através do comando "SE"), e que o PC possa emular um Terminal de Vídeo a ser utilizado
pelo programa monitor do 8051. A comunicação serial entre o Kit e o Microcomputador é feita em 9600
bps. Os comandos fornecidos pelo teclado são repassados, pelo XTALK, para a placa experimental, via
comunicação serial. Para que um comando seja fornecido ao próprio XTALK, é preciso, antes, acionar a
tecla "ESC" ou “HOME”.
O programa LINK2 permite a combinação de vários arquivos objeto (.OBJ) para a geração do arquivo de
saída. Quando o programa solicitar mais um arquivo de entrada e não houver mais nenhum, basta teclar
<ENTER>. Em seguida, vai ser solicitado o nome do arquivo de saída.
Se for usado o XTALK, este é ativado na linha de comando da janela Prompt de Comando, digitando o
seguinte comando:
XTALK <enter> [execução do programa XTALK]
Depois que o programa iniciar, é solicitada a configuração da conexão. Neste momento digite:
1 <enter> [configuração da comunicação do 8051]
Caso for necessário mudar a configuração, acione a tecla HOME e ajuste os parâmetros na tela que for
apresentada. Por exemplo, para mudar a velocidade de comunicação para 9600 bps, digite “sp 9600”.
Se for usado o HyperTerminal, crie uma nova conexão na porta COM1, e configure-o com os seguintes
parâmetros: 9600 baud, 8 bits, 2 bits de parada, sem paridade, sem controle de fluxo.
DICA: para verificar se uma conexão está ativa, pressione o botão reset da placa experimental do 8051 e
verifique o aparecimento da mensagem inicial do MONITOR na tela do programa de comunicação.
2. PARTE EXPERIMENTAL
2.1 Atividades Pré-Laboratório
Antes de executar os procedimentos experimentais no Laboratório Digital, execute as atividades descritas
nesta seção como forma de preparação aos tópicos a serem desenvolvidos na bancada.
Para os dois primeiros itens experimentais, considere o programa abaixo (figura 2.1), que subtrai o valor
6 do valor 23 e guarda o resultado na posição 9000H da memória externa. A figura apresenta tanto o
código fonte em linguagem assembly como também o código binário ou de máquina.
Repare que ao lado de cada instrução em linguagem assembly é mostrado o código de máquina
correspondente. As linhas em que não é apresentado um código de máquina correspondente se referem
a pseudo-instruções do programa montador.
ATENÇÃO:
Antes de iniciar os procedimentos experimentais, crie uma nova área de trabalho no computador da
bancada (por exemplo, crie um diretório novo na área de trabalho com a identificação da turma).
Lembre-se do caminho (pathname) deste diretório para ser usado na janela de Prompt de Comando.
Depois copie os arquivos com os programas a serem usados nesta experiência neste diretório de trabalho
do grupo. A localização destes arquivos será indicada pelo professor.
f) Com base no estudo pré-laboratório do programa, qual é o resultado esperado ao final da execução
do programa? Em que posição de memória este valor estará armazenado?
g) Estabeleça uma conexão do computador da bancada com a placa experimental do 8051 conforme
descrito na seção 1.6. Verifique se a conexão está ativa, acionando o botão de RESET.
h) Usando o comando M (ou S) do monitor, introduza o código de máquina na memória do kit, a partir
do endereço 8000H. O código de máquina está localizado na coluna da direita da figura 2.1.
i) Antes de executar o programa, observe o conteúdo da memória na posição 9000H, através do
comando DM.
j) Modifique o conteúdo da posição 9000H para o valor "00H", através do comando M (ou S).
k) Execute o programa através do comando "G 8000". O que acontece neste instante?
l) Por que existe o "loop eterno" no final do programa?
m) Localize o botão de reset no kit. Dê um reset na placa. Por que é necessário este reset?
n) Verifique o resultado da execução do programa na posição 9000H. Qual é o número hexadecimal
obtido? Explique o resultado.
o) Usando o comando M (ou S) do monitor, apague (preenchendo com zeros) o código de máquina do
programa na memória do kit (p.ex. apague do endereço 8000H até 800FH).
Recomendações:
Colocar comentários em todas as instruções do programa.
Não usar a instrução assembly DA.
Explique como o método da correção posterior de seis é implementado em seu programa.
Quais casos de teste serão aplicados? Mostre que estes casos cobrem todas as situações
possíveis.
ii) Agora modifique o programa anterior para transformá-lo em uma subrotina que recebe os valores
pela pilha. A subrotina deve retornar o resultado da soma também pela pilha.
Recomendação:
Acrescente um diagrama indicando o conteúdo da pilha e dos registradores em cada momento da
execução do programa.
Perguntas:
3. BIBLIOGRAFIA
1. HIRAKAWA, A; CUGNASCA, C. Laboratório de Microprocessadores, Apostila da experiência
“Familiarização com a placa experimental de microcontrolador 8051”, 1998.
2. MATSUNAGA, A., TSGAWA, M. Sistema de Pesagem Dinâmica, Projeto de formatura, EPUSP,
1997.
3. SILVA, V. Microcontrolador 8051, São Paulo: Érica, 1990.
4. SINHA, P. K. Microprocessors for Engineers – Interfacing for Real Time Applications, Ellis
Horwood Limitted, 1987.
5. Intel – Embedded Microcontrollers, 1995.
6. Intel – Embedded Applications V.2 1995/1996.
7. 2500AD Software, 8044/51 Cross Assembler for MSDOS.
8. Instruções e comandos do programa XTALK.
9. Intel Home Page ApBUILDER - http://developer.intel.com/design/builder/apbldr/
4. EQUIPAMENTOS NECESSÁRIOS
1 placa experimental de microcontrolador 8051, com cabo de conexão serial.
1 fonte de alimentação variável de +12Vcc.
1 computador PC com interface serial.
5. PROGRAMAS NECESSÁRIOS
Cross Assembler do 8051 (X8051).
Linker do 8051 (LINK2).
Programa de comunicação com a placa experimental (HyperTerminal ou XTALK).