Você está na página 1de 127

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS

DEEB - Coordenação de Eletrônica


Disciplina: Laboratório de Sistemas Microprocessados

Laboratório
de Sistemas
Microprocessados
Práticas com o microcontrolador MSP430
AUTORES:
1ª versão
Prof. Hércules M. Carvalho
Prof. Joel Augusto dos Santos
Prof. José Jonas da Silva Maia
Prof. Marcos Antônio da Silva Pinto

2ª versão – 2001
Prof. John Kennedy Schettino de Souza
Prof. Marcos Antônio da Silva Pinto
Prof. Paulo Sérgio Roque

3ª versão – 2003/ 4ª versão – 2004


Prof. John Kennedy Schettino de Souza
Prof. Marcos Antônio da Silva Pinto
Profa. Rosângela Fátima da Silva

5ªversão – 2010
Profa. Rosângela Fátima da Silva

6ª versão – 2012
Prof. Marcos Antonio da Silva Pinto
Profa. Rosângela Fátima da Silva

7ª versão – 2013 – Revisão 2014 V2


Prof. John Kennedy Schettino de Souza
Prof. Marcos Antonio da Silva Pinto

8ª versão – 2015
Prof. John Kennedy Schettini de Souza
Prof. Marcos Antonio da Silva Pinto

9ª versão - 2016
Prof. Marcos Antonio da Silva Pinto

10ª versão - 2017


Prof. Marcos Antonio da Silva Pinto

11ª versão - 2019


Prof. Marcos Antonio da Silva Pinto

CEFET-MG 1
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Índice

Introdução 04

Prática 01 05
Ambiente de programação da IAR Systems

Prática 02 18
Instruções de carga e transferência de 8 bits

Prática 03 22
Instruções de carga e transferência de 16 bits

Prática 04 26
Operações lógicas e aritméticas

Prática 05 30
Codificação
ificação de programa a partir de um fluxograma

Prática 06 34
Instruções de desvio

Prática 07 37
Estudo de Sub-rotinas
rotinas

Prática 08 41
Exercícios de programa
rogramação

Prática 09 43
Dispositivo de saída

Prática 10 48
Dispositivo de entrada

Prática 11 52
Interrupção

Prática 12 56
Teclado

Prática 13 60
Display de LCD

Prática 14 65
Integração de programas

Prática 15 73
Semáforo

CEFET-MG 2
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 16 77
Motor de passo

Prática 17 84
Controle digital de velocidade de motor cc

Prática 18 90
Controle de portão de garagem

Prática 19 93
Dimmer digital

Prática 20 98
Voltímetro dc

Apêndice A – Tabela ASCII 102

Apêndice B – O conjunto
onjunto de Instruções 103

Referências Bibliográficas 127

CEFET-MG 3
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Introdução

Caros alunos,

Como se pode observar na capa desta apostila,


apostila existem várias versões.
versões Isto
significa que estamos, cada vez mais, tentando melhorar o material que você utiliza.
Parte destas versões é devido a mudanças da tecnologia. Mas o que nos move é o
desejo de que estasta apostila seja a melhor possível,, portanto gostaríamos que você
vo
prestasse muita
uita atenção em tudo que vamos oferecer e nos ajude nesta missão.
Talvez assim consigamos atingir nossos objetivos.
Esta apostila tem como público
p alvo estudantes da área de sistemas digitais de
cursos técnicos e superiores. Esta se destina a disciplinas com duração de dois
semestres (80 0 horas aula) com vistas a fornecer roteiros de aulas práticas para o
aprendizado das estruturas internas da famíliafamília de microcontroladores MSP430
MSP
fabricado pela Texas Instruments.
Instruments A primeira aula (prática 1) é um tutorial para a
familiarização com o ambiente de programação da IAR Systems (empresa que
desenvolveu o software).. As práticas dois até
a oito se destinam ao aprendizado da
programação Assembly,, uso do conjunto de instruções do microcontrolador, estruturas
de repetição e sub-rotina,
rotina, sendo usado o ambiente de programação em modo
simulação. Da prática
ica nove em diante são utilizadas
utilizadas as portas de entrada e saída e
outros módulos periféricos do microcontrolador e passa-se a usar o ambiente de
programação em modo de emulação,
emulação, sendo então necessário o hardware do MSP430,
MSP430
ou seja, o kit do microcontrolador.
microcontrolador Ressalta-sese também que a partir desta prática a
codificação é realizada na linguagem C e da pratica quatorze em diante inicia-se o uso
da técnica de modularização de códigos. Na segunda parte deste material (após prática
8) é imprescindível o conhecimento do hardware utilizado.

No mais, desejo a todos um bom aproveitamento.

Atenciosamente,

Ro
Rosângela Fátima da Silva e Marcos Antonio
ntonio da Silva Pinto

CEFET-MG 4
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 1 - Ambiente Integrado


ntegrado de
Desenvolvimento
esenvolvimento (IDE) da IAR Systems
OBJETIVO

Introduzir o ambiente integrado de desenvolvimento (IDE) da IAR Systems


(IAR
IAR Embedded Workbench – IAR EW)
Construção de programas
progra em linguagem Assembly

1.1 - INTRODUÇÃO
O desenvolvimento de programas em linguagem Assembly exige não apenas o
conhecimento de um ambiente de programação, mas também do processador em
questão. A Texas Instruments desenvolveu a família de microcontroladores
microcontrolador MSP430.
Cada membro desta família possui em seu chip além de um microprocessador, outros
dispositivos acoplados como memória de programa, memória de dados e vários
dispositivos periféricos,, que é o objeto do nosso estudo.
estudo A IAR Systems é a
responsável pelo desenvolvimento
desenvolviment do IDE que será utilizado ao longo deste curso.
O processo de criação de um programa em Assembly é muito parecido com o
processo de criação de programas em linguagem C, Observe a sequencia na Figura 1,
apresentada a seguir:

Edição Montagem Linkedição Depuração

Figura 1 - Procedimento para criação de um programa.


programa

A edição consiste na digitação,


digitação de todos os mnemônicos pertencentes ao
programa, utilizando um editor de texto tipo ASCII. Neste estágio o programa está
e em
linguagem Assembly e é conhecido como código fonte.
A montagem é a tradução do texto digitado (mnemônicos) para o respectivo
código de máquina da CPU. Caso seja obtido sucesso nesta etapa será gerado o
código objeto. Caso haja erros, eles
e serão relatados
tados pelo programa montador. O
usuário deverá então corrigi-los
corrigi na edição e novamente fazer a montagem.
montagem Este
procedimento deverá ser repetido até que não haja mais erros.
A linkedição faz a ligação das
d referências (sub-rotinas e variáveis) entre vários
códigos
digos objetos. Isto ocorre quando construímos programas
program s muito grandes que por
questão de projeto é importante que o programa seja construído em partes separadas.
A depuração é a etapa final do desenvolvimento do programa, servindo para
reparar defeitos de lógica. Esta etapa pode ser realizada de duas formas diferentes:
simulação ou emulação. No modo simulação o programa desenvolvido é simulado,
bastandoo para isto apenas o computador. Porém no modo emulação, é necessário
além do computador, o hardware do microcontrolador,
microcontrolador, pois neste caso o programa
realmente roda na máquina na qual ele foi projetado (no microcontrolador). Desta
forma a depuração é muito mais precisa e efetiva, podendo ajudar a detectar inclusive
defeitos de conexão entre terminais do microcontrolador
microcontrolador e dispositivos externos.

CEFET-MG 5
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Cada etapa anteriormente mencionada é realizada por um software específico.


Porém o ambiente de desenvolvimento oferecido pela IAR Systems proporciona um
ambiente integrado para desenvolvimento de programas em linguagem Assembly, C e
C++, contendo os quatro softwares na mesma ferramenta. Desta forma o usuário
poderá editar, montar, link editar e depurar seu programa no mesmo ambiente,
utilizando apenas um clique do mouse para trocar de tarefa. Mas é necessário criar um
workspace e um projeto antes de executar os passos mencionados.
mencionados.

1.2 - ATIVIDADES
1.2.1. - Explorando o IDE - ambiente integrado de desenvolvimento da IAR
Systems – IAR Embedded Workbench ( IAR EW)
Para abrir o programa IAR Embedded Workbench (IAR EW),, vá ao botão Iniciar
e selecione as seguintes opções, sequencialmente: Todos os programas,
programas IAR
Systems,, IAR Embedded Workbench kickstart, IAR Embedded Workbench, Workbench
conforme se pode observar na Figura 2,, apresentada a seguir, ou clique
cli no ícone
correspondente na área de trabalho.

Figura 2 - Janela de trabalho do Windows.

Quando clicar sobre a opção IAR Embedded Workbench, aparecerá


aparecer a janela de
abertura do Embedded Workbench (Figura 3).

CEFET-MG 6
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 3 - Janela de Início do IAR Embedded Workbench.


Workbench

Caso
aso esteja iniciando a tarefa de desenvolvimento do programa,
programa naturalmente
deve-se escolher a opção File no menu principal (lado superior esquerdo da tela)
tel e
nesta aba escolher a opção New sub opção Workspace, conforme a Figura 4.

Figura 4 - Opções apresentadas pela janela Embedded Workbench Startup.


Startup

Estaa opção abre uma nova janela, que permite criar uma nova
nov área de trabalho
(Figura 5). Uma área de trabalho é uma região lógica destinada à inserção de diversos
projetos que apresentam aplicações correlatas. Em nossas aulas práticas utilizaremos
um único projeto para cada área de trabalho.

CEFET-MG 7
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 5 – Janela do novo workspace.

Um projeto reúne um ou mais códigos fontes do sistema que estamos


desenvolvendo e também é importante para definições das características do
processador utilizado no projeto. Ao longo da montagem do projeto estes detalhes
ficarão mais claros. Para criar um novo projeto, selecione na barra do menu principal a
opção Project e em seguida a sub opção Creat New Project... (Figura
Figura 6).

Figura 6 – Janela para criar um novo projeto.

Será então apresentada uma nova janela que permite escolher o tipo de projeto.
proj
Como já foi dito,, iniciaremos os nossos estudos pela linguagem Assembly. Portanto
deve-se abrir a opção asm e selecionar o item asm (Figura 7).

CEFET-MG 8
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 7 - Janela para a escolha do tipo de projeto.

Uma vez determinado o tipo de projeto a ser criado,


criado, o próximo passo é salvá-lo.
sa
Quando se salva um arquivo, naturalmente deve-se que escolher uma pasta. Vá ao
disco D ou G/Alunos, lá existe uma pasta para a sua turma. Caso não exista, faça a
gentileza de criá-la.
la. Dentro desta pasta crie a sua pasta, de preferência
pre com o seu
nome. Assim você saberá onde estão os seus arquivos. Agora crie uma nova pasta,
ela pode se chamar,, por exemplo, AULA_01. Cada projeto que criarmos, criarmos
terá uma pasta exclusiva para ele.

Atenção:

Todos os seus arquivos devem estar dentro de uma única pasta com o
seu nome.
Crie uma pasta exclusiva para cada projeto,, ou seja, para cada novo
programa que você vai implementar.

A janela Salvar como,


como, que surgiu na tela, lhe dá a opção de escolher o nome do
projeto. Observe, neste caso, foi salvo na pasta AULA_01 o projeto com o nome
PRJ_01, Figura 8.

CEFET-MG 9
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 8 - Janela Salvar como.

Enfim, surgiu na tela o editor de texto, Figura 9, onde se pode digitar o programa.

Figura 9 - Janela com workspace e o editor de texto.

A janela apresentada anteriormente possui duas partes básicas: a janela


Workspace,, que contém o projeto recém-criado,, bem como os arquivos pertencentes a
ele e a janela asm.43*,, que contém o código fonte.

CEFET-MG 10
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Agora digite
igite o seguinte código a partir da linha onde está escrito ;Insira o seu
programa aqui (Figura 9).
MOV.B #0xAA,R4 ;IMEDIATO −> REGISTRO
MOV.B R4,R5 ;REGISTRO −> REGISTRO
MOV.B R5,&0x200 ;REGISTRO −> MEMÓRIA
MOV.B &0x200, &0x201 ;MEMÓRIA −> MEMÓRIA
MOV.B &0x201
&0x201,R6 ;MEMÓRIA −> REGISTRO

Uma vez digitado o programa é necessário salvá-lo.


salvá lo. Vá ao menu principal e
selecione a opção File e em seguida Save Workspace. Surgirá à janela Save
Workspace As, Figura 10.

Figura 10 - Janela para salvar o Workspace.

Escolha um nome para o workspace e salve. Neste caso foi escolhido o nome
AREA_01.
Agora
a é hora de verificar se o código digitado está correto e transformá-lo
tra em
código de máquina utilizando os processos de montagem e linkedição
edição. Entretanto, para
que tenhamos sucesso é necessário selecionar para qual componente da família
MSP430 estamos escrevendo
evendo o programa. Selecione no menu principal a opção
Project>Options (Alt F7) (Figura
Figura 11).
Na caixa category (Figura
Figura 12) selecione a aba General Options e verifique se o
MSP selecionado é o 430F1611 na caixa de opção Device. Caso aso contrário clique no
ícone a direita do MSP selecionado, para que sejam listados todos os MSPs
suportados pela versão atual do ambiente IAR instalado. Em seguida selecione
MSP430x1xx Family e então
entã click na apção MSP430F1611.
Com o modelo de MSP selecionado clique na aba Debugger (Figura
( 13) e confira
se na caixa de diálogo Driver está selecionado o modo simulação.

CEFET-MG 11
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 11 - Preparação
eparação para seleção do tipo de MSP430.

Figura 12 - Janela de configuração do MSP.

CEFET-MG 12
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 13 - Selecionado modo simulação.

Com o MSP selecionado podemos executar os processos de montagem e


linkedição. No
o menu principal selecione a opção Project e clique sobre Make ou
pressione a tecla F7, ou ainda pode-se
pode clicar no ícone Make que aparece na linha
logo abaixo do menu principal.
principal Com os processos de montagem e linkedição
concluídos,, o seu ambiente de trabalho
tr deve estar
star com a aparência da Figura 14.

Figura 14 - Janela do Workspace,


Workspace, do editor de texto e mensagens do linkeditor.

Observe que na parte inferior da tela apareceram algumas informações


ormações referentes
ao processo de montagem
ontagem do programa, aba Messages. Neste caso não foram
encontrados erros de sintaxe (Total
( number of errors: 0)) e nem avisos de alerta (Total
(

CEFET-MG 13
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

). As warnnigs ao contrário dos erros sintaxe não impedem


number of warnings: 0). impede a
execução do programa, apenas indica a possibilidade da ocorrência de falha na
execução do programa.
Se houver algum erro no seu programa, uma mensagem de erro aparecerá nesta
aba, descrevendo resumidamente o erro.
erro. Se você der um duplo clique sobre a
mensagem,
ensagem, o cursor será imediatamente movido para o ponto onde se encontra o erro.
Após corrigir o erro, basta clicar novamente sobre o ícone ou pressionar a tecla F7
para que o processo de montagem ocorra novamente. Quando não houver mais erros
o programaa poderá ser executado.
Agora resta simular a execução do programa. Em outras palavras, fazer de conta
que o programa está sendo executado. Isso porque o simulador é um programa que
nos permite rodar um código escrito para um processador, indicando o que aconteceria
a
caso ele existisse de fato.. Para carregar o programa no ambiente de simulação,
simulação vá ao
menu principal, selecione a opção Project e clique sobre Download and Debug, ou
pressione as teclas CTRL + D, D ou então clique sobre o ícone , disponível na barra
bar de
ferramentas do Embedded Workbench.
Workbench. Um novo ambiente, o modo depuração, é
disponibilizado, conforme a Figura 15.

Figura 15 - Ambiente de depuração.

Observe a janela adicional de Disassembly que foi aberta no lado direito da tela.
Nela está exibido o conteúdo da memória de programa do processador, no formato
hexadecimal intercalado com o código-fonte
código original.
Uma nova barra de ferramentas,
ferramentas, a barra de depuração, também foi adicionada.
Essa barra disponibiliza vários botões para o usuário interagir com o programa em
simulação, permitindo a execução do programa de forma: contínua nua e passo a passo
com possibilidade de reiní
início, parada e etc. Os botões
otões da barra de ferramenta de
depuração estão
tão apresentados na Figura 17.

CEFET-MG 14
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

É possível acrescentar novas janelas neste ambiente.


ambiente. Vá ao menu principal,
clique sobre o botão View e observe a lista de opções. Selecione
elecione a opção Register e
repita este procedimento selecionando a opção Memory. Em seguida feche as janelas
Dissambly e Messages.. Após estas alterações a tela de depuração ficará como
apresentado na Figura 16.. As janelas Register e Memory,, geralmente, são as mais
utilizadas
adas em nossas aplicações.
aplicações

Figura 16 - Ambiente para depuração com as janelas Register e Memory.

Observe na Figura 16 que na janela de depuração (asm.s43) existe uma tarja


verde sobre uma linha a de código.
código. É a indicação da próxima linha de programa a ser
executada. Agora basta você escolher uma das opções de execução do programa na n
barra de ferramentas (Figura
Figura 17) e verificar a simulação do mesmo
esmo. É interessante
iniciar a execução pela opção step over que executa apenas uma instrução.

CEFET-MG 15
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

einicia o programa.
Reset - Reinicia programa

ra a execução do programa.
Break - Pára programa

Step Over - Executa a próxima instrução,, se for uma chamada de


sub-rotina,, ela é inteiramente executada em único passo e o cursor
retorna para a instrução após a chamada.
chamada

Step Into - Executa a próxima instrução. Se for uma chamada de


sub-rotina,
rotina, entra na sub-rotina.
sub

Step Out - Executa o programa até o término da sub-rotina


sub atual.

Next Statement - Pula para o próximo comando, o atual é


executado sem a visualização do depurador.
depurador

Run to Cursor - Executa o programa até o ponto em que


qu encontra
o cursor.

Go - Executa o programa até um ponto de parada (breakpoint) ou o


término do programa.
programa

Toggle Breakpoint - Cria/apaga um ponto de parada (breakpoint).


(breakpoint)

Stop Debugging - Saída do modo de depuração.


Figura 17 - Botões da barra de ferramentas de depuração.

Atenção:
As opções de execução de programas presentes na barra de
ferramentas de depuração,
depuração mostradas na Figura 17,, podem ser acessadas
através da seleção do botão Debug no menu principal.

1.2.2. Teste todos os botões


botões da barra de ferramentas de depuração.
depuração

Dica:
Se você não observar diferenças
diferença entre alguns deles, fique ligado, pois
é apenas uma questão de tempo.
Não se esqueça de salvar os seus arquivos no seu pen drive, ao final
de todas as aulas. Salve apenas o código fonte, com extensão .s43

CEFET-MG 16
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Pontos de checagem

Criar projeto. Passos


Não é possível carregar um Abrir um Workspace.
programa no MSP sem que se tenha Criar uma nova pasta para cada novo projeto.
projeto
criado um arquivo projeto.. Os passos Salvar arquivo.
paraa criação do projeto estão Definir modelo do MSP.
descritos na prática01. Definir para modo simulação.

Editar e compilar programa. Editar o programa.


Todo programa a passa pelas fases de Montar o programa.
edição do código fonte e pela Identificar erros de sintaxe indicados pela
tradução no respectivo código de montagem.
máquina. Corrigir erros.
Carregar programa no simulador. Carregar programa no simulador e em e caso
de falhas:
Para a execução do programa é Verificar de modelo do MSP foi selecionado
necessário entrar no modo corretamente.
simulação do IAR. Verificar se o IAR está em modo simulação.
Rodar programa no simulador. Executar o programa com a opçãoopçã Go ( ).
Após a execução do programa deve-
deve Verificar se a lógica programada foi realizada
se verificar se o mesmo está corretamente.
realizando o que projetado.
Investigar erros de funcionamento Rodar o programa passo a passo (Figura
( 17).
do programa no simulador.
A realização das etapas anteriores Inserir break points para avaliar se o
não garante a inexistência de erros programa está sendo executado
lógicos. corretamente até um determinado ponto.
Inserir janelas
las auxiliares para avaliação do
conteúdo das variáveis utilizadas no
programa (Figura 16).

Atenção:
O seu desenvolvimento no processo de depuração de programa é tão
importante quanto o próprio processo de construção
construção de um novo programa.
Desta forma é fundamental conhecer os recursos de depuração de programa
que a ferramenta de desenvolvimento lhe oferece.

CEFET-MG 17
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 2 - Instruções de carga e


transferência de 8 bits
OBJETIVO

Estudar as instruções
nstruções de carga e transferência de 8 bits
Familiarização com os registros de uso geral do MSP430

2.1 - INTRODUÇÃO
Na aula anterior, você executou algumas das instruções de transferência de oito
bits existentes no conjunto de instruções do MSP430.
MSP . E também aprendeu a elaborar
seus programas usando o o ambiente de programação IAR EW.. Vamos agora
ago aproveitar
o projeto elaborado na aula anterior e estudar mais atentamente as instruções de carga
carg
e transferência de oito bits.

COMO CARREGAR UM PROJETO JÁ EXISTENTE


Basta abrir o ambiente de programação da IAR Systems e clicar sobre o botão
botã
File no menu principal, opção Open, sub-opção Workspace.. Aparecerá uma janela
contendo a árvore de diretórios, onde se deve localizar a pasta que contém o
Workspace desejado (Figura
Figura 18). Atenção o Workspace tem extensão .eww
Talvez, você não se lembre de como abrir o IAR Embedded Workbench . Então
consulte o item 1.2 da apostila onde é descrito este procedimento.

Figura 18 - Janela para abrir o Workspace.

CEFET-MG 18
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

INSTRUÇÕES DE CARGA E TRANSFERENCIA


TRANSFERE DE 8 BITS
Estas instruções movem o conteúdo do operando fonte para o operando destino.
Sintaxe: instrução fonte, destino,
destino exemplo: MOV R4, R15.
Todos os registros do MSP são de dezesseis bits (Tabela
Tabela 1). Mas é possível
carregar, transferir e executar operações lógicas e aritméticas com apenas oito bits.
Neste caso, basta acrescentar o sufixo “.B” na instrução, exemplo: MOV.B. Se você
omitir esse detalhe ou colocar o sufixo “.W”, a instrução realizada será de dezesseis
bits: MOV.W ou apenas MOV.
MOV

Contador de programa (PC) R0


Apontador de Pilha (SP) R1
Registro de status (SR) R2
Gerador de constante (CG2) R3
Registro de uso geral R4
. .
. .
. .
Registro
gistro de uso geral R15
Tabela 1 - Registros da CPU.

Atenção:
O MSP possui
ossui 12 registros de uso geral: R4 a R15. Eles podem ser
usados em suas aplicações habituais: transferência de dados, operações
lógicas, aritméticas, desvios e etc. Eles armazenam dados ou endereços.
As operações de 8 bits com destino em registro são executadas
apenas com a parte menos significativa dos
do registros,, sendo a parte mais
significativa zerada.
Operações de 8 bits com destino em memória altera apenas o
endereço especificado. Porém operações de 16 bits em memória devem deve ter
endereço par, sendo o byte menos significativo enviado para o endereço
especificado (par) e o byte mais significativo ocupa o endereço seguinte (impar).

2.2 - ATIVIDADE
ATIVIDADES

2.2.1. Execute passo a passo


pa o programa da aula anterior e preencha a Tabela 2.

INSTRUÇÕES/ MOV.B #0AAH,R4 MOV.B R4,R5 MOV.B R5,&200H MOV.B &200H,&201


&201H MOV.B &201H, R6
REG. e MEM.
R4

R5

R6

(200H)

(201H)
Tabela 2 - Conteúdo corrente de registros e posições de memória.

CEFET-MG 19
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Dica:
Para executar o programa passo a passo, entre no
n ambiente de
simulação ( ) e pressione a tecla F10 ou o ícone para executar cada linha
do programa.. Consulte a Figura 17.
Para ver os registros, vá
vá ao menu principal, clique sobre o botão View
e selecione a opção Register.
Para ver a memória, clique sobre botão View no menu principal e
selecione a opção Memory. Na janela da memória, na aba Go to digite o
endereço desejado: 0x200 e tecle enter.

2.2.2. Crie uma nova pasta (Aula_02) e construa um novo projeto para testar as
seguintes instruções:

MOV.B #0AAH
H,R4 ;IMEDIATO −> REGISTRO
MOV.B #0BBH
H,R5 ;IMEDIATO −> REGISTRO
MOV.B R4,R6 ;REGISTRO −> REGISTRO
MOV.B R5,R4 ;REGISTRO −> REGISTRO
MOV.B R6,R5 ;REGISTRO −> REGISTRO

• O que ocorreu com os valores carregados nos registros R4 e R5?

• Porque foi usado o registro


regis R6?

2.2.3. Construa
onstrua um novo projeto para testar as seguintes instruções:
MOV.W #0x200, R4 ;Modo imediato
MOV.W #0x201, R5 ;Modo imediato
MOV.B #0xCC,, &0x200 ;Modo imediato
MOV.B #0xDD,, &0x201 ;Modo imediato
MOV.B 0(R4), R6 ;Modo indexado
MOV.B 0(R5), 0(R4) ;Modo indexado
MOV.B R6, 0(R5) ;Modo indexado
MOV.B @R5, R10 ;Modo indireto

• Qual é a diferença entre as seguintes instruções:


a) MOV.B R5,R4 e MOV.B 0(R5),0(R4)
b) MOV.B 0(R4
R4), R6 e MOV.B @R4, R6

CEFET-MG 20
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

• O que foi armazenado nos registros R4 e R5, dados ou endereços?


endereços

• O que ocorreu com o conteúdo das posições de memória 0x200 e 0x201?

• Explique o funcionamento do programa.

2.2.4. Elabore um programa que troque entre si o conteúdo da posição de


memórias 200H e do registrador R5. Teste o programa.

CEFET-MG 21
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 3 - Instruções
Instruções de carga e
transferência de 16 bits
OBJETIVO

Estudar as instruções
nstruções de carga e transferência de 16 bits
Aplicação de registros especiais de 16 bits

3.1. INTRODUÇÃO
Você já estudou todas as instruções de carga e transferência
ência de 8 bits. Isto
significa que você já conhece as instruções de carga
ga e transferência de 16 bits, uma
u
vez que a única diferença é o número de bits transferidos. Agora, temos
t que prestar
muita atenção em alguns registros que são utilizados apenas em operações de 16 bits:
o contador de programa (PC) e o ponteiro da pilha (SP).

INSTRUÇÕES
ES DE CARGA E TRANSFERÊNCIA DE 16 BITS

O Contador de Programa (PC) e o Ponteiro da Pilha (SP) armazenam apenas


endereços de posição de memória,
memória, portanto eles são utilizados em operações de 16
bits. Esses registros (Tabela
Tabela 1) são controlados pela própria CPU durante a execução
de programas. O máximo que podemos fazer é inicializá-los.
Na versão do IAR EW que estamos usando, quando criamos um novo projeto
surge o editor de texto com algumas linhas de códigos. Observe as duas linhas
seguintes:
ORG 0FFFEh
DC16 init ;set
set reset vector to 'init' label
Elas inicializam o Program Counter (PC) para você. Observe que ao carregar o
programa no ambiente de simulação o PC sempre está com o valor de 0x4000.0x40
Observe também que após a execução de cada instrução, ele é automaticamente
incrementado.
O Stack Pointer (SP) é inicializado pela seguinte linha de código:
init: MOV #SFE(CSTACK), SP ;set up stack
Agora está um pouquinho
pouqui mais claro, pois a instrução MOV você conhece e SP
representa o registro Ponteiro da Pilha.
P A instrução acima inicializa o SP com o
endereço par após o final da memória RAM. Esse sse registro é automaticamente
incrementado
crementado ou decrementado, em situações específicas que serão vistas no decorrer
deste curso.

3.2. ATIVIDADE
ATIVIDADES
3.2.1. Abra uma nova pasta (Aula_03) e construa um novo projeto para testar as
seguintes instruções:
CEFET-MG 22
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

;Número da instrução
MOV.W #0x1234
1234,R7 ;1
MOV.W #0x5678
5678,R8 ;2
PUSH R7 ;3
PUSH R8 ;4
MOV.W #0x00,R7 ;5
MOV.W #0x00,R8 ;6
POP R8 ;7
POP R7 ;8

Execute o programa e preencha as a colunas da Tabela 3 com o conteúdo dos registros


ou das posições de memória (o parêntese indica posição de memória) após ter
executado as referidas instruções:
instruções

INSTRUÇÕES/ 1 2 3 4 5 6 7 8
REG. e PILHA
PC
SP
R7
R8
(38FF H)
(38FE H)
(38FD H)
(38FC H)
Tabela 3 - Conteúdo corrente de registros e memória.
memória

• Descreva o que ocorreu com PC após a execução de cada instrução.


instrução

• O que ocorreu com o SP e com a pilha quando foram executadas as instruções


PUSH?

• Descreva o que ocorreu quando foram executadas as instruções POP.

CEFET-MG 23
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

3.2.2. Construa
onstrua um novo projeto para testar as seguintes instruções:
; Número da instrução
MOV.W #0xAAAA
AAAA, R10 ;1
MOV.W #0xBBBB
BBBB, R11 ;2
PUSH R10 ;3
PUSH R11 ;4
POP R10 ;5
POP R11 ;6

Execute o programa e preencha as colunas da Tabela 4 após ter executado as


referidas instruções:

INSTRUÇÕES/ 1 2 3 4 5 6
REG. e PILHA
PC
SP
R10
R11
(38FF H)
(38FE H)
(38FD H)
(38FC H)
Tabela 4 - Conteúdo corrente de registros e memória.

• Explique o que o programa faz

CEFET-MG 24
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

3.2.3. Construa
onstrua um novo projeto para testar as seguintes instruções:
; Número da instrução
MOV #0xBBBB, R4 ;1 - IMEDIATO −> REGISTRO
MOV R4, R5 ;2 - REGISTRO −> REGISTRO
MOV R5, &0x200 ;3 - REGISTRO −> MEMÓRIA
MOV &0x200, &0x202 ;4 - MEMÓRIA −> MEMÓRIA
MOV &0x202 R6
&0x202, ;5 - MEMÓRIA −> REGISTRO
MOV #0x202
202, R7 ;6 - IMEDIATO −> REGISTRO
MOV 0(R7), R8 ;7 - MEMÓRIA −> REGISTRO

Execute o programa e preencha as colunas da Tabela 5 após ter executado as


referidas instruções:

INSTRUÇÕES/ 1 2 3 4 5 6 7
REG. E MEM.
PC
R4
R5
R6
R7
R8
(0200H)
(0202H)
Tabela 5 - Conteúdo corrente de registros e memória.

• Qual é a diferença entre as seguintes instruções:


MOV &0x202, R6
MOV #0x202, R6

CEFET-MG 25
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 4 - Operações lógicas e aritméticas

OBJETIVO

Estudar as instruções lógicas e aritméticas


Análise do registro de status do MSP
Manipulação
lação de números binários e hexadecimal

4.1. INTRODUÇÃO
A CPU contém a Unidade Lógica e Aritmética (ULA). Essa,, como o próprio
própr nome
diz, é responsável pela realização das operações lógicas e aritméticas. Ela geralmente
utiliza os registros de propósito gerais e/ou posições de memória como operandos das
d
operações aritméticas (soma e subtração) e lógicas (and, or, xor, etc).
etc
A maioria das operações lógicas e aritméticas afetam
afeta os flags. Por isto é
importante consultar o conjunto de instruções para saber como e quando
qu os flags são
afetados. Os flags são bits que sinalizam o resultado das d operações lógicas ou
aritméticas. Eles são usados pela CPU para tomada de decisão (operações de jump
condicional). Os flags existentes no MSP encontram-se se localizados no Registro de
Status (SR - Figura 19) ocupando os seguintes bits:

Figura 19 – Registro de status.

C – Carry (bit 0) sinaliza a ocorrência de vai um nas operações de


soma ou um pedido de empréstimo nas operações de subtração e
resetado em caso contrário. Para a operação de soma caso ocorra vai um
o flag C é setado,
setado, já para operação de subtração caso haja vem um o flag
C é resetado.. Em operações lógicas (and, bit, inv e xor),
xor) será setado se o
resultado
ado for diferente de zero e resetado em caso contrário.
Z – Zero (bit 1) será setado caso o resultado de uma operação
operaç seja
zero e resetado em caso contrário.
contrário
N – Negative (bit 2) será setado se o resultado
ado de uma operação for
negativo e resetado
setado se positivo.
pos
V – Overflow (bit 8) será setado se no resultado de uma operação
aritmética houver um estouro de capacidade da variável sinalizada (erro
de sinal) e resetado em caso contrário.

Dica:
É necessário consultar o conjunto de instruções do MSP para verificar
veri
quais os flags que atuam após a execução de cada instrução e como eles
são afetados.

CEFET-MG 26
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

4.2. ATIVIDADES
4.2.1. Resolva manualmente as seguintes operações aritméticas anote o resultado
da operação e os respectivos flags na Tabela 6:

Instrução Operação Resultado V N Z C


1 79 -79
2 57H + 4B H
3 160H AND 54F9H
4 45H – 56H
5 8FH + 64H
Tabela 6 - Operações lógicas e aritméticas.

4.2.2. Escreva em Assembly


ssembly o código para testar as instruções apresentadas no
item anterior. Considere no código de seu programa que as instruções são
operações de byte exceto a instrução 3 que deve ser tratada como word.
Execute o programa e aproveite para verificar se os flags sinalizados por você
estão corretos.

4.2.3. Analise o código apresentado a seguir:


MOV.B &0x200,R4
MOV.B &0x201,R5
ADD.B R4,R5
MOV.B &0x200,R6
MOV.B &0x201,R7
DADD.B R7,R6

1. Digite no editor de texto do IAR EW o programa.


2. Armazene manualmente nas posições de memória 200H
200 e 201H os
valores 35H e 47H
47 respectivamente.

CEFET-MG 27
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Dica:
Para inserir um conteúdo em um espaço de memória RAM, siga os
seguintes passos:
a. Vá ao ambiente de depuração.
b. Acrescente a janela Memory.
c. Clique com o botão esquerdo do mouse sobre a seta da
caixa de texto
tex onde está escrito Memory e selecione RAM.
d. Marque com o botão esquerdo do mouse a posição de
memória que você deseja modificar e escreva o valor desejado por
cima.

3. Execute o programa e explique os valores contidos nos registros R5 e


R6.

ns 2 e 3 para os valores 49H e 67H.


4. Repita os itens

4.2.4. Analise o código apresentado a seguir:


MOV.W #202H,, R4
MOV.B 0(R4), R5
INC.W R4
MOV.B 0(R4), R6
INC.W R4
MOV.B 0(R4), R7
MOV.B R5, R15
AND.B R6, R15
INV.B R15
XOR.B R7, R15
INC.W R4
MOV.B R15, 0(R4)

• Digite o programa no editor de texto do IAR EW.


• Armazene nas posições de memória 202H, 203H e 204H os valores CCH, BBH e
AAH respectivamente.
• Execute o programa e anote os resultados na Tabela 7 obtidos após executar as
seguintes instruções:
nstruções:

CEFET-MG 28
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Instrução R15 Análise do resultado


AND.B R6,R15
INV.B R15
XOR.B R7,R15
Tabela 7 - Operações lógicas.

• Represente através de um circuito lógico seu funcionamento.

4.2.5. Observe o circuito lógico da Figura 20.

A
B S

Figura 20 – Circuito lógico.

• Faça um programa que simule o diagrama apresentado.


• Teste o seu programa fazendo A = B1H e B = 83H.

CEFET-MG 29
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 5 - Codificação de programa a partir


de um fluxograma
OBJETIVO

Verificar a implementação de um programa em Assembly


ssembly a partir de
um fluxograma;
Estudar uma tomada de decisão em Assembly e
Desvio condicional e incondicional.

5.1. INTRODUÇÃO

Um programa nada mais é do que uma lista de instruções que a CPU deve
executar na sequência
ncia em que ela foi escrita. Porém a capacidade de tomada de
decisão oferecida
ecida pela CPU é uma poderosa ferramenta que proporciona a escrita de
programas mais inteligentes. A tomada de decisão permite a realização de estruturas
de repetição (loop), que reduz drasticamente as dimensões do programa. Uma tomada
de decisão é obtida através da consulta de um dos flags,, pois eles são os indicadores
do estado corrente do programa. Dependendo do estado deste flag o programa segue
um caminho ou outro. Ela é representada em um fluxograma por um losango que
permite que o programa siga por um de dois caminhos possíveis,
possíveis como pode ser
observado na Figura 21.
O fluxograma de uma rotina que faz a transferência (cópia) de dados de um bloco
de memória para outro é apresentada pela Figura 21, a seguir:

INÍCIO

DEFINA O ENDEREÇO DO BLOCO DE ORIGEM


DEFINA O ENDEREÇO DO BLOCO DE DESTINO
DEFINA O TAMANHO DO BLOCO

TRANSFIRA UM BYTE
ATUALIZE O ENDEREÇO DO BLOCO DE ORIGEM
ATUALIZE O ENDEREÇO DO BLOCO DE DESTINO
ATUALIZE O NÚMERO DE BYTES RESTANTES

F TODOS OS
BYTES FORAM
TRANSFERIDOS?

V
FIM

Figura 21 – Fluxograma de transferência de dados.

Como se pode observar,


observar o fluxograma independe da linguagem
nguagem de programação
e também não apresenta nenhum vínculo com a CPU utilizada. O fluxograma revela
apenas o procedimento, ou seja, revela o que será feito e não como será feito.
CEFET-MG 30
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

O programa a seguir mostra a codificação do fluxograma da Figura 21,


considerando o bloco de origem armazenado a partir do endereço 200H e o de destino
a partir do endereço 220H sendo o tamanho dos blocos de 16 bytes.

PROGRAMA EM ASSEMBLY
;*********************************************************************************************************
;*********************************************************************************************************
; Descrição:: Este programa transfere dados de um bloco de memória para outro.
outro
;*********************************************************************************************************
#include "msp430.h" ; #define controlled include file
NAME main ; module name
PUBLIC main ; make the main label visible
; outside this module
ORG 0FFFEh
DC16 init ; set reset vector to 'init' label

RSEG CSTACK ; pre-declaration


declaration of segment
RSEG CODE ; place program in 'CODE' segment

init: MOV #SFE(CSTACK), SP ; set up stack


main: NOP ; main program
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
MOV.W #200H, R4 ; Apontador do bloco 1
MOV.W #220H, R5 ; Apontador do bloco 2
MOV.B #10H, R6 ; Tamanho do bloco
volta MOV.B 0(R4), 0(R5) ; Transferir o dado
INC.W R4 ; Atualizar apontadores
INC.W R5
DEC.B R6 ; Atualizar tamanho
JNZ volta
JMP $ ; jump to current location '$'
; (endless loop)
END

CEFET-MG 31
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

5.2. ATIVIDADES

5.2.1. Teste do programa proposto.


• Digite no editor de texto do IAR EW o programa apresentado anteriormente.
anteriormente

• Armazene os valores 00, 01, 02, ...,


... 0F nos endereços 200H
200 a 20FH

• Execute o programa
rama e observe através do espaço de memória compreendido
entre 220H a 22FH se o programa foi executado.

Dica:
Para executar o programa,
programa totalmente, acione a tecla F5 ou o ícone
e em seguida clique sobre o ícone para parar. Consulte a Figura 17.

• Reinicie
e o programa clicando no ícone e o execute passo a passo até a
instrução DEC.B R6 inclusive. Justifique os valores encontrados no registro
R6 e no flag Z.

• Saia do modo de depuração e troque


t no editor a instrução
MOV.B #10H,R6
#10 por
MOV.B #01H,R6.
#01
Faça a montagem e o carregamento do programa no ambiente de depuração e repita a
atividade 5.2.1 item 3.

• Saia novamente
ovamente do modo de depuração e desfaça a troca, substituindo
MOV.B #01H,R6
#01 por
MOV.B #10H,R6.
#10

• Troque a instrução
JNZ volta por
JZ volta
Armazene
rmazene o valor AA nos endereços 200H
200 a 20FH e execute o programa.

CEFET-MG 32
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Dica:
Se você quiser inserir o mesmo valor em um bloco de memória RAM,
siga os seguintes passos:
1. Vá ao ambiente de depuração.
2. Acrescente a janela Memory.
3. Clique com o botão
botã esquerdo do mouse sobre a seta da caixa de
texto onde está escrito Memory e selecione RAM.
4. Clique com o botão direito do mouse sobre uma posição de
memória qualquer e selecione Memory Fill... Aparecerá a Janela Fill.
5. Preencha os seguintes campos: Start address
ddress, Length e Value.
No nosso caso use respectivamente os seguintes valores 0x200, 0x10 e
0xAA.

• Observe os blocos de memória e verifique se o programa foi executado.

• Justifique sua resposta.

5.2.2. Faça o fluxograma e o programa em Assembly que troque o conteúdo


co de
dois blocos de memória. O endereço inicial do bloco 1 (200H),
(200 o endereço do
bloco 2 (220H)) e o tamanho do bloco (20H).
(20

CEFET-MG 33
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 6 - Estudo de instruções de desvio


OBJETIVO
Estudar as instruções de tomadas de decisão (jump
( condicional) e
Estudar os jumps relativo e absoluto.
6.1. INTRODUÇÃO
As instruções lógicas e aritméticas afetam os flags.. Isto significa que logo após a
execução de qualquer uma delas é possível tomar tom decisões. As instruções que
usamos, neste caso são os jumps condicionais: JZ, JNZ, JC, JNC, JN, JN JGE e JL.
Jumps relativos são ão aqueles que desviam o programa para um endereço endere
calculado
culado a partir da posição atual do PC (Program Counter). Além m da instrução JMP,
todos os jumps condicionais dão saltos relativos ao apontador de programa. Estes
saltos relativos
ativos são ditos curtos, pois a extensão do salto está limitada a faixa de -511 a
+512 words.
A instrução BR (Branch
Branch) desvia o programa
ma para qualquer uma das 64k posições
de memória endereçáveis e por isto é dito salto incondicional longo.
longo Ela salta para o
destino, portanto é um jump absoluto.
O fluxograma de uma rotina que faz a comparação byte a byte do conteúdo de
dois blocos de memória
mória e escreve como resposta em um terceiro bloco:b 00 se os bytes
são iguais, 01 se o byte do bloco1 é maior que o do bloco 2 e 02 se menor é
apresentado na figura 22.
COMPARA

APT1 ← end. inic. bloco 1


APT
APT ← end. inic. bloco 2
APT2
APT ← end. inic. bloco 3
APT3
CONT ← 10

S
(APT_1) = (APT_2) (APT3) = 0

S
(APT1) > (APT2) (APT3) = 1

(APT3) = 2

APT1 ++
APT2 ++
APT3 ++
CONT --

N CONT = 0

S
FIM

Figura 22 – Fluxograma de comparação de dados..

CEFET-MG 34
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

;*********************************************************************************************************
; Descrição:
;*********************************************************************************************************
#include "msp430.h" ; #define controlled include file
NAME main ; module name
PUBLIC main ; make the main label visible outside thisth module
ORG 0200h
APT1 DB 0,1,2,3,4,5,6,7,8,9
ORG 0210h
APT2 DB 0,2,1,3,5,6,9,7,8,4
ORG 0220h
APT3 DB 30H,30H,30H,30H,30H,30H,30H,30H,30H,30H

ORG 0FFFEh
DC16 init ; set reset vector to 'init' label

RSEG CSTACK ; pre-declaration of segment


ment
RSEG CODE ; place program in 'CODE' segment

init: MOV #SFE(CSTACK), SP ; set up stack


main: NOP ; main program
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
MOV.W #APT1,R4
MOV.W #APT2,R5
MOV.W #APT3,R6
MOV.B #10,R7
volta CMP.B 0(R5),0(R4)
JZ igual
JNC maior
MOV.B #02,0(R6)
cont INC.W R4
INC.W R5
INC.W R6
DEC.B R7
JNZ volta
JMP $ ; (endless loop)
igual
MOV.B #00,0(R6)
BR #cont
maior
MOV.B #01,0(R6)
JMP cont
END

CEFET-MG 35
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

6.2. ATIVIDADES
6.2.1. Teste do programa proposto.

• Abra um novo projeto


rojeto no IAR EW, crie um arquivo e digite
igite no editor de texto o
programa de comparação de dados.

• Execute o programa e verifique seu funcionamento.

• Reinicie o programa e execute-o


execute passo a passo até a instrução “JZ igual” e
justifique os valores
alores dos flags C, Z, N e V.

• Troque a instrução
JMP cont por
BR #cont
e execute o programa.

• Qual é a diferença observada entre as duas instruções apresentadas?


apresentadas

6.2.2. Altere o programa proposto de tal forma que seja armazenado em cada
posição do bloco 3 o maior valor entre os dois bytes comparados.
comparado

CEFET-MG 36
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 7 - Estudo de sub-rotina


sub
OBJETIVO

Utilização e chamada de sub-rotina;


Aplicação da pilha e
Passagem de parâmetros.

7.1. INTRODUÇÃO

Considere uma operação como a divisão, para a qual o MSP não dispõe de uma
única instrução capazz de executá-la.
executá Torna-sese necessário implementar um grupo de
instruções, que denominamos rotina, para realizá-la.
realizá Portanto, para esse caso
especificamente, teremos a rotina de divisão.
Dentro de um programa pode ser necessário executar a operação de divisão divis
diversas vezes. O que nos obriga a copiar a rotina de divisão diversas vezes dentro
dent do
programa, provocando um gasto excessivo de memória. Uma forma mais eficiente de
resolver esse problema é fazer uma única cópia desse programa e chamá-lo
chamá todas as
vezess que for necessário, observe a Figura 23.

Figura 23 – Sub-rotina.

Um programa implementado desta forma é chamado de sub-rotina.


sub O programa
principal é responsável por chamar a sub-rotina a através da instrução CALL.
CALL Essa
instrução carrega no PC o endereço inicial da sub-rotina,
sub rotina, fazendo mudar a sequencia
de execução do programa. E guarda na pilha o endereço de volta, o que garante o
retorno à sequência interrompida. Essa operação é denominada
denominada chamada de sub-
sub
rotina.
rotina é executada até a sua última instrução, que é obrigatoriamente a
A sub-rotina
instrução de retorno de sub-rotina
sub - RET.. Esta instrução retira da pilha o endereço de
volta ao programa, armazenado-o
armazenado no PC.
CEFET-MG 37
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

7.2. ATIVIDADES

7.2.1. Analise e verifique


fique se o fluxograma apresentado na Figura 24 e o programa
em Assembly apresentando após o fluxograma correspondem a um programa
com um módulo principal que chama uma sub-rotina
rotina que recebe em R4 o valor
do dividendo em R5 o divisor e retorna em R6:
• -1
1 se divisor = 0
• Caso contrário o resultado da divisão (parte inteira)

PRINCIPAL DIVISÃO

DIVIDENDO 15 SALVA CONTEXTO


DIVISOR 3

DIVISÃO QUOC = 0

FIM
DIVIDENDO = 0 S

DIVISOR = 0 S QUOC = -1

DIVISOR > DIVIDENDO S

DIVIDENDO = DIVIDENDO - DIVISOR

DIVIDENDO < 0 S

N
RESTAURA CONTEXTO
QUOC = QUOC + 1

FIM

Figura 24 – Fluxogramas: principal e sub-rotina de divisão.

CEFET-MG 38
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Programa da divisão relativo


relat ao fluxograma proposto na Figura 24.

#include "msp430.h" ; #define controlled include file


NAME main ; module name
PUBLIC main ; make the main label vissible outside this module
ORG 0FFFEh
DC16 init ; set reset vector to 'init' label
RSEG CSTACK ; pre-declaration of segment
RSEG CODE ; place program in 'CODE' segment
init: MOV #SFE(CSTACK), SP ; set up stack
main: NOP ; main program
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
MOV.W #15,R4 ; determinar o dividendo
MOV.W #3,R5 ; determinar o divisor
CALL #DIVISAO
JMP $ ; endless loop
;*********************************************************************************************************
;Sub:rotina: DIVISAO
;Descrição:
scrição: Executa da divisão entre dois números inteiros não sinalizados
;Entrada: dividendo – R4
; divisor – R5
;Saída: R6 - quociente = -1 se divisor = 0
; R6 = resultado da divisão
;*********************************************************************************************************
;*********************************************************************************************************
DIVISAO
PUSH R4 ; Salva contexto
PUSH R5
MOV.W #00,R6
TST R4 ; verifica se dividendo =0
JZ fim
TST R5 ; verifica se divisor =0
JZ menos_1
CMP.W R5,R4 ; verifica se divisor > dividendo
JNC fim
volta SUB.W R5,R4 ; efetua a divisão
JNC fim
INC.W R6
JMP volta
menos_1
MOV.W #0FFFFH,R6
fim POP R5 ; restaura contexto
POP R4
RET
END
Modifique
odifique o programa anterior de forma que a sub-rotina
sub rotina além de devolver o resultado
em R6, devolvaa o resto da divisão em R7. Teste o programa.

CEFET-MG 39
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

7.2.2. Faça o fluxograma e o programa em Assembly que é constituído por um


módulo principal
ncipal e uma sub-rotina
sub que receba duas strings apontadas por R4 e
R5 e faça a concatenação das duas strings, sendo a string inicial apontada por
R4. A string concatenada deverá ser retornada na posição de memória indicada
por R6. O fim da string será indicado pelo delimitador $. Para criar as strings na
memória RAM use as diretivas abaixo após a diretiva PUBLIC main:
main

ORG 200H
string1 DB 'CEFET
CEFET-MG/$'
ORG 210H
string2 DB 'LAB. ELT.$'
ORG 220H
stringc DS 18

CEFET-MG 40
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 8 - Ex cícios de programação


Exercícios

OBJETIVO

Elaborar fluxogramas e os respectivos programas em Assembly.


Assembly

8.1. INTRODUÇÃO

A única maneira de aprender é praticando.


praticando Naturalmente, cometeremos
ometeremos enganos,
mas podemos minimizá-los los nos habituando a resolver os problemas da maneira
correta. O primeiro passo é elaborar o fluxograma e só depois elaboramos o programa
em Assembly.

8.2. ATIVIDADES

8.2.1. Faça o fluxograma e o programa em Assembly que é constituído


co por um
módulo principal e uma sub-rotina
s que recebe uma string através da posição de
memória indicada por R4 e retorne a string escrita em ordem inversa na mesma
posição de memória. O tamanho
taman da string está definido em R5.R5

8.2.2. Faça o fluxograma e o programa que é constituído por um módulo principal e


uma sub-rotinaa que desloque
deslo circularmente uma string.. A sub-rotina
sub recebe em
R4 o endereço inicial,
inicial em R5 o tamanho da string e circula os seus caracteres
de uma posição da direita para a esquerda, conforme
confo Figura 25.
Endereço (h) 0200
200 0201 0202 0203 0204 0205 0206
0 0207
Posição B I M E S T R E
Posição I M E S T R E B
Posição M E S T R E B I
.
.
.

Posição B I M E S T R E
Figura 25 – Deslocamento da string.

Dica:

As mesmas dicas do exercício 8.2.3.

CEFET-MG 41
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

8.2.3. Faça o fluxograma e o programa que é constituído por um módulo principal,


uma sub-rotina
rotina que atualiza as horas de um relógio digital e uma sub-rotina
sub de
tempo. O relógio digital é representado
representado na memória a partir do endereço 0300H,
0
utilizando dois bytes para as horas, dois bytes para os minutos e dois bytes para
os segundos. As horas,
horas minutos e segundos serão separados por dois pontos,
conforme Figura 26.

Endereço(h) 0300 0
0301 0302 0303 0304 0305 0306 0307
Posição H H : M M : S S
Figura 26 – Formatação do relógio.

Dicas:

Cada posição de memória deve conter o código ASCII do digito


corrente.
Para verificar os conteúdos
conteúdos de memória sendo alterados enquanto
programa está executando, execute o programa selecionando no menu
principal a opção DEBUG>AUTOSTEP... . Na a janela da Figura 27 selecione
opção de execução Step Over (Source level) e configure o Delay para 1
milisegundo.

Figura 27 – Configuração de execução autostep.

8.2.4. Faça o fluxograma e o programa que é constituído por um módulo principal,


uma sub-rotina. A sub-rotina
sub rotina deve receber através de R4 o endereço
e inicial de
uma área de memória RAM contendo 4 bytes consecutivos de dados e então
faça a média aritmética destes e a retorne em R5. A área de dados e os dados
devem ser criadas em memória RAM por meio de diretivas.

CEFET-MG 42
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 9 - Dispositivo de saída


OBJETIVO

Acionar LEDs com temporização de software

9.1. INTRODUÇÃO

Até agora apenas simulamos os nossos programas. Isto foi conveniente porque os
programas executados usavam apenas os dispositivos internos do microcontrolador,
registros da CPU e espaço de memória. Agora imagine que você queira acionar um
dispositivo externo, como um led, e não possa vê-lo
vê piscando.
Acionar leds, displays, chaves, teclados, motores e etc, requer que os programas
sejam carregados na memória do próprio microcontrolador. Isto significa que serão
executados, de fato. E poderemos acompanhar o andamento da execução através do
IAR EW.
Nesta aula veremos como configurar um projeto para que o código seja carregado
no microcontrolador.
controlador. Relembre como configurar as portas, para que possamos usá-las
para acionar os leds.

PROGRAMAÇÃO DE PORTAS

Como vocês sabem existe um conjunto de registros para a configuração de cada


bit das portas. Nesta prática necessitaremos apenas os seguintes registros:

1. Registro de Seleção

BIT = 0 pino é configurado


rado como porta de IO
BIT = 1 pino é configurado como função especial

2. Registro de Direção

BIT = 0 pino da porta é programado como entrada


BIT = 1 pino da porta é programado como saída

CEFET-MG 43
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

3. Registro de Saída

BIT = 0 pino da porta sai 0V


BIT = 1 pino da porta sai +3,3V
+

4. Registro de Entrada

BIT = 0 pino da porta tem aproximadamente 0V


BIT = 1 pino da porta tem aproximadamente +3,3V
+

CONFIGURANDO UM PROJETO PARA EMULAÇÃO

O primeiro passo é criar um novo projeto,


projeto, fazendo tudo como antes. O segundo é
configurá-lo:
lo: vá ao menu principal e selecione Project e em seguida clique em
Options,, aparecerá a janela Options for node “PROJ”, Figura 28. Na categoria
(Category) General Options selecione o microcontrolador utilizado no kit didático
did
utilizado (MSP430F1611).

Figura 28 – Janela de Opções de Projeto (Debugger).

Observe na Figura 28 que foram selecionados a categoria (Category


Category) Debugger
e o driver (Driver) FET Debugger.
Debugger. Essas opções de projeto permitem a emulação do
programa, ou seja, que você verifique na tela do seu computador o que está ocorrendo,
de fato, no microcontrolador.

CEFET-MG 44
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

HARDWARE
A Figura 29 mostra o diagrama dos led'ss presentes no kit didático.
didático Para que o led
seja ligado ou desligado basta colocar o nível lógico 1 ou 0,, respectivamente, no
terminal L0.
+5V

L0
330R
74HC04
100
100k

Figura 29 – Esquema de ligação do led no kit didático.

FLUXOGRAMAS

A Figura 30 apresenta os
o fluxogramas do programa principal e da sub-rotina
sub
PISCA_LED no qual um led pisca na frequência estabelecida pela rotina de
temporização.

principal pisca_led

configura io liga led

tempo pisca
pisca_led

desliga led

tempo pisca

fim

Figura 30 – Fluxogramas para o acionamento de led.

CEFET-MG 45
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

PROGRAMA EM ASSEMBLY
;*********************************************************************************************************
;****************************************************************************** ***************************
; Descrição: Este programa aciona ciona LED
;*********************************************************************************************************
#include "msp430.h" ; #define controlled include file
NAME main ; module name
PUBLIC main ; make the main label visible outside
ou this module
ORG 0FFFEh
DC16 init ; set reset vector to 'init' label
RSEG CSTACK ; pre-declaration of segment
RSEG CODE ; place program in 'CODE' segment
init: MOV #SFE(CSTACK), SP ; set up stack
main: NOP ; main program
MOV.W #WDTPW+WDTHOLD,&WDTCTL
DTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
BIS.B #0xFF,P1DIR ; programa todos os bits da porta 1 como saída
BIC.B #0xFF, P1OUT ;Desliga todas as saídas
repeteCALL #PISCA_LED
JMP repete
;*********************************************************************************************************
;*********************************************************************************************************
;Sub-rotina: PISCA_LED
;Descrição: Faz o led presente no bit 0 da porta P1 piscar com a frequência
;definida por um intervalo de tempo da rotina TEMPO_PISCA
;Entrada: -
;Saída: -
******************************************************************************
;*********************************************************************************************************
PISCA_LED
BIS.B #1,P1OUT ; ligar o led
MOV #100, R5 ; define o tempo de atraso em 100 ms
CALL #TEMPO_PISCA
BIC.B #1,P1OUT ; desligar o led
MOV #100, R5 ; define
fine o tempo de atraso em 100 ms
CALL #TEMPO_PISCA
RET
;*********************************************************************************************************
;Subrotina: TEMPO_PISCA
;Descrição: Intervalo
ervalo de tempo gasto pela CPU com tempo base de 1ms
;Entrada: R5, define o tempo total de atraso em milissegundos
; Tempo base = 3K/Fclk. Para T=1ms e Fclk=750kHz, k=250
;Saída: -
;*********************************************************************************************************
K EQU 250
TEMPO_PISCA ; ciclos de instrução
PUSH R5 ;3
PUSH R6 ;3
cont_ext
MOV #K,R6 ;2
cont_int
DEC R6 ;1
JNZ cont_int ;2
DEC R5 ;1
JNZ cont_ext ;2
POP R6 ;2
POP R5 ;2
RET ;3
;*********************************************************************************************************
**************************************************************************************
END

CEFET-MG 46
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Programa em “C”
//Programa pisca led na frequência de 5Hz. A função delay tem tempo base de 1ms e parâmetro de
entrada (x) que define o tempo de atraso da função.
função

#include "msp430.h"
//função delay com tempo base de 1ms. O parâmetro de entrada é um multiplicador deste tempo.

void delay(unsigned int x)


{
unsigned char y;
while (x != 0)
{
for (y=0;y<150;y++); //Loop de 1ms p/ clock de 750kHz: T=(5*k)/750kHz
)/750kHz
x--;
}
}

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Desliga o watchdog timer
P1DIR |= 0x01; // bit 0 =1 para configurar saída
P1OUT=0; //desliga todas as saídas
for (;;) //Loop infinito
{
P1OUT ^= 0x01; // inverte P1.0 com exclusive-OR
delay (100); //define o atraso de 100 ms para piscar em 5Hz
}
}

9.2. ATIVIDADES

9.2.1. Teste do programa proposto

• Execute
xecute o programa e verifique se o led piscou.
piscou

• Ajuste
juste o parâmetro de entrada para que o led pisque na frequência de 1Hz,
1Hz
considerando a frequência do oscilador de 750 kHz.

9.2.2. Faça um novo programa PISCA-LED


PISCA para que o led permaneça aceso o
dobro do tempo de apagado.

9.2.3. Ligue quatro led's


led's respectivamente nas portas P1.0 a P1.3. A partir desta
montagem faça
ça o fluxograma e o programa que garanta o piscamento dos led's
de forma sequencial. O tempo de duração do acendimento de cada led é de
200ms.

CEFET-MG 47
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 10 - Dispositivo de entrada


OBJETIVO

Monitorar uma chave através da técnica espera ocupada.


ocupada

10.1. INTRODUÇÃO

Na aula anterior acionamos um led, em outras palavras, a CPU enviou sinais para o
led. Para executar essa operação, primeiro tivemos que programar um bit de uma porta
como
omo saída. Naturalmente, o bit no qual estava ligado o led. A programação foi
efetuada através do registro de direção, P1DIR.
P DIR. Em seguida, foi possível enviar o sinal
para o led através do registro de saída P1OUT.
P
Imagine que você queira ler o sinal de uma chave. Naturalmente o bit no qual está
ligada a chave será programado como entrada no registro de direção P1DIR. O sinal da
chave também será obtido pelo registro P1OUT?
P
Além da preocupação
eocupação com os registros envolvidos
envolvidos nas leitura de chaves também
trataremos
os do problema do repique de chaves. Quando ligamos ou desligamos uma
chave eletromecância
mecância ocorre uma trepidação que acarreta a geração de mais um
pulso. Como os sistemas microprocessados são extremamente rápidos esses pulsos
são percebidos pelo sistema podendo
podendo provocar alteração no seu comportamento.

HARDWARE ACIONADO

Conecte uma chave e um led ao kit microcontrolador conforme a Figura 31.

+3,3V

CH0
P1.0

10k

MSP430F
F1611
+5V

L0
P1.4
330R
74HC04
100k

Figura 31 – Conexão da chave e led ao kit microcontrolador


rocontrolador

O diagrama dee cada chave presente no kit é apresentado na figura 31. Observe
que no terminal CH0 sempre existe um
um sinal bem definido, terra ou +3,3V.
+3,3V

CEFET-MG 48
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

FLUXOGRAMAS

A Figura 32 mostra oss fluxogramas


fluxogram envolvidos na
a leitura da chave.
chave Note que no
fluxograma MONITORA_CHAVE a CPU permanece lendo a chave até que ela seja
ligada. Essa técnica é chamada Espera Ocupada.

Principal monitora chave

configura io
chave = 1 N

S
monitora chave
liga led

fim
Figura 32 – Fluxogramas para leitura
leit de chave utilizando a técnica espera ocupada.
o

PROGRAMA EM ASSEMBLY
;*********************************************************************************************************
; Descrição: Este programa monitora uma chave através da técnica de espera ocupada ocupada
;*********************************************************************************************************
#include "msp430.h" ; #define controlled include file
NAME main ; module name
PUBLIC main ; make the main label visible outside thist module
ORG 0FFFEh
DC16 init ; set reset vector to 'init' label
RSEG CSTACK ; pre-declaration of segment
RSEG CODE ; place program in 'CODE' segment
init: MOV #SFE(CSTACK), SP ; set up stack
main:
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
MOV.B #0xF0,P1DIR ; programar os quatro bits + signif. da porta 1 como
; saída e os quatro bits menos signif.
sig como entrada
BIC.B #0XFF,, P1OUT ;Zera as saídas
repete
CALL #MONITORA_CHAVE
JMP repete

;*********************************************************************************************************
*****************************************************************************
;Subrotina: MONITORA_CHAVE
;Descrição: Monitora o estado de uma chave
;Entrada: -
;Saída: -
;*********************************************************************************************************
;*********************************************************************************************************
MONITORA_CHAVE
BIT.B #1,P1IN ; monitorar chave
JZ MONITORA_CHAVE
BIS.B #0X10,P1OUT
RET
END

CEFET-MG 49
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

PROGRAMA EM “C”
//Programa monitora chave com espera ocupada

#include "msp430.h"
//função monitora chave

void monitora_chave (void)


{
while ((P1IN&0x01)==0)) //espera enquanto chave =0
{ }
P1OUT|=0x10;

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR = 0xF0;; // Os 4 bits mais significativos
significati de P1 como
//saída e os 4 menos sign. Entrada.
P1OUT = 0; //Zera as saídas
for (;;) //Loop infinito
{
monitora_chave( ); //chama a função monitora chave
}
}

Embora o programa tenha funcionado corretamente ele mascarou


masca o efeito da
trepidação de chave. Vamos capturar tal comportamento utilizando o seguinte
procedimento. Nos fluxogramas da Figura 33 a monitoração da chave avalia a
ocorrência de transição de nível baixo para alto
alt e faz o incremento de um contador
para cada transição de chave.

main espera chave

configura io
contador = 0 chave = 1 N

S
contador ++
espera chave

chave = 0 N

fim

Figura 33 – Fluxogramas para captura do efeito da trepidação.


trepidação

CEFET-MG 50
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

10.2. ATIVIDADES

10.2.1. Crie um novo projeto para codificar os algoritmos da


d Figura 33.

10.2.2. Com o programa criado, carregue no MSP.MSP Coloque a chave em nível lógico
baixo antes de executar o programa. Rode o programa, faça apenas uma ÚNICA
transição na chave (posicione a chave para nível
ní lógico alto).

10.2.3. Pare a execução do programa e observe na


n variável utilizada como contador o
valor obtido.

10.2.4. Resete o programa e repita os procedimentos 10.2.2


10.2 e 10.2.3
10. e observe a
aleatoriedade do número de transições ocorridas.

10.2.5. Apresente uma possível solução para solucionar o problema da trepidação.


Então crie um novo projeto que conte o numero de acionamentos da chave sem a
interferência da trepidação.

CEFET-MG 51
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 11 - Interrupção
I
OBJETIVO

Monitorar uma chave através da técnica de interrupção


interrupção.

11.1. INTRODUÇÃO
Quando fazemos leitura de chave através da técnica de Espera Ocupada,
observamos que a CPU permanece por um tempo indetermidado lendo a chave. Este
fato justifica o nome da técnica, pois ela está ocupada lendo a chave e está esperando
a chavee ser ligada para processar a atividade para a qual foi destinada.
Você acha que esta técnica é utilizada no seu PC? Imagine então que a CPU lesse
o seu teclado atravéss dessa técnica. Seria possível você escutar música, baixar um
texto pela internet e visualizar
alizar a tecla digitada no monitor de vídeo, “simultaneamente”?

Não se esqueça que a CPU executa uma atividade de cada vez.
Nesta aula utilizaremos a técnica de interrupção para a leitura da chave. Nesta
técnica a CPU permanece livre para executar uma atividade atividade qualquer e quando a
chave é acionada a CPU é interrompida e depois de processar a rotina de tratamento
de interrupção ela retorna as sua atividade anterior.
PROGRAMAÇÃO DE PORTAS

Nesta aula precisamos programar e acionar registros relativos à interrupção:


interr

1. Registro de Habilitação de Interrupção

BIT = 0 interrupção desabilitada


BIT = 1 interrupção habilitada

2. Registro de Seleção de Borda de Interrupção

BIT = 0 o flag de interrupção é setado com uma transição de baixo para alta
BIT = 1 o flag de interrupção é setado com uma transição de alto para baixo

3. Registro de Flag de Interrupção

BIT = 0 não existe interrupção pendente


BIT = 1 existe interrupção pendente
CEFET-MG 52
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

A Figura 34 apresenta osos fluxogramas para monitoração de chave através da


técnica de interrupção. Observe que não está explicito a leitura da chave nos
fluxogramas e nem tão pouco o programa principal chama a função de tratamento da
interrupção. Nesta aplicação, o programa
pr principal fará o led conectado em P1.4 piscar
continuamente na frequencia de 5 Hz. Toda vez que a chave push botton 3 do teclado
for acionada o led conectado em P1.5 deverá trocar de estado.

Principal pisca_led trata interrupção

liga led inverte led


configura io
habilita interrupção
tempo desliga flag

pisca_led desliga led


fim

tempo

fim

Figura 34 – Fluxogramas para leitura de chave utilizando a técnica Interrupção.

Conecte dois led's ao microcontrolador. A chave push botton 3 do teclado já esta


conectada nas portas P3.0 e P2.0, conforme a Figura 35.

3
P2.0

P3.0

47k

+5V

MSP
MSP430F1611 330R
P1.4
Led pisca
74HC04
100k

330R
P1.5
Led togle
100k 74HC04

Figura 35 - Conexão do botão 3 e dos leds ao microcontrolador

CEFET-MG 53
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

PROGRAMA EM ASSEMBLY
;*********************************************************************************************************
; Descrição: Este programa monitora uma chave através da técnica de interrupção enquanto um led
;pisca(P1.4).
pisca(P1.4). Caso a chave seja acionada um segundo led deverá mudar de estado (P1.5).
;*********************************************************************************************************
#include "msp430.h" ; define a biblioteca
NAME main ; Nome do modulo
PUBLIC main ; torna o rótulo main visível fora do módulo

ORG 0FFFEh
DC16 init ; insere o vetor de reset - rótulo init
ORG 0FFE2h
DC16 TRATA_INTERRUPCAO ; insere o vetor de interrupção da porta 2
RSEG CSTACK ; Declaração do segmento de pilha
RSEG CODE ; Declaração do segmento de código
init: MOV #SFE(CSTACK), SP ; Escreve no registrador de pilha o endereço
main:
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Desliga watchdog timer
BIS.B #0xF0,P1DIR ; os quatro bits mais significativos da porta 1 e
BIS.B #0x01,P3DIR ; P3.0 como saída
BIC.B #0xFF, P1OUT ;Desliga todas as saídas
BIS.B #1, P3OUT ; Porta P3.0 =1

BIC.B #0x01,P2IES ; interrupção por borda


da de subida
BIS.B #0x01,P2IE ; habilita interrupção do bit 0 da porta 2
EINT ; habilita interrupção geral
repete
CALL #PISCA_LED
JMP repete

;*********************************************************************************************************
;**************************************************************** *****************************************
;Subrotina: PISCA_LED
;Descrição: Faz um led conectado na porta P1.4 piscar na frequência de 5 Hz
;Entrada: -
;Saída: -
;*********************************************************************************************************
;*********************************************************************************************************
PISCA_LED

RET

;*********************************************************************************************************
;Subrotina: TRATA_INTERRUPCAO
;Descrição: Inverte o estado do led ligado na porta P1.5
;Entrada: -
;Saída: -
;*********************************************************************************************************
********************************************************************************************************
TRATA_INTERRUPCAO
XOR.B #0x20,0, P1OUT ; inverte o estado do led
BIC.B #0x01,P
#0x01,P2IFG ; desliga o flag de interrupção
RETI
END

CEFET-MG 54
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

PROGRAMA EM “C”
#include "io430.h"
//Função de tratamento
amento de interrupção da porta P2.0
P
#pragma vector = PORT2_VECTOR
_VECTOR //Define o endereço da RTI da porta 2
__interrupt void PORT2 (void)
{
P1OUT ^= 0X20; //
//Inverte o estado de P1.5
P2IFG &= ~0x01; //desliga o flag de interrupção
}

void PISCA_LED (void)


{

void main( void )


{
WDTCTL = WDTPW + WDTHOLD; // Desliga watchdog timer
P1DIR = 0XF0; // Define P1.7,6,5,4 como saída
P3DIR |= 0x01; // Define P3.0 como saída
P1OUT = 0; // Apaga todos os leds
P3OUT |= 1; // Coloca nível lógico 1 na linha da tecla
P2IES &= 0XFE; // Define interrupção de P2.0 pela borda de subida.
P2IE |= 0X01; // Habilita interrupção da porta P2.0.
asm ("EINT"); // Habilita interrupção geral.
for(;;)
{
PISCA_LED( );
}
}
11.2. ATIVIDADES
11.2.1. Crie um novo projeto para codificar os algoritmos da Figura 34.
11.2.2. Compile e teste o programa.
11.2.3. Altere o programa nas seguintes funções:
Rotina de tratamento de interrupção (RTI) – insira um contador do d número de
vezes que a chave foi acionada;
Pisca led – substitua a função pisca led por uma função (envia) que envie o
valor doo contador presente na RTI para os quatro leds do kit didático, utilizando
a parte alta da porta P1,
P1 conforme Figura 36.

3
P2.0

P3.0

47k

MSP430F1611
P1.4
P1.5
P1.6
P1.7

Figura 36 - Conexão do botão 3 e dos 4 leds ao microcontrolador

Dicas:
Todo contador deve ser inicializado, caso contrário
contrário você poderá obter uma
contagem incorreta.
O contador deve ser uma variável global, pois, será acessado em funções
distintas (RTI, main e envia).
Não se esqueça de tratar o repique da chave.
A chave gerará interrupção quando for apertada e quando for
f solta.
CEFET-MG 55
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 12 - Teclado
OBJETIVO

Implementação
ção de uma função básica de tratamento de um teclado.
teclado

12.1. INTRODUÇÃO
Alguns sistemas dedicados utilizam
u chaves push-bottom ou on--off como entrada de
dados. Entretanto, a medida que o grau de complexidade do sistema aumenta
aume é
necessário o uso de interfaces mais amigáveis. Uma das principais interfaces de
entrada de dados em sistemas microprocessados é o teclado.

HARDWARE DO TECLADO
O teclado presente
ente no kit didático é constituído por
por uma matriz de 4 linhas por 3
colunas (4x3) que possibilita a identificação de até doze teclas como mostrado na
Figura 37.

P2.0

P2.1
1

P2.2
2
C2 C1 C0

MSP430F1611
L0
1 2 3
P3.0
0
1k2

L1
4 5 6
P3.1
1
1k2

L2
7 8 9
P3.2
2
1k2

L3
A 0 E
P3.3
3
1k2

47k 47k 47k

Figura 37 – Hardware do teclado.

Como você pode observar o teclado já está internamente ligado às portas


port P2 e P3
do microcontrolador no kit didático e nos
nos cruzamentos das linhas com as colunas estão
conectadas as chaves push-botton.
push
O primeiro passo para a programação do teclado é garantir a configuração dos
io'ss envolvidos no hardware do teclado (Figura
( 38).

CEFET-MG 56
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

configura teclado

configura io

fim

Figura 38 – Configuração dos io's do teclado.

teclado TECLADO TABELA COM CÓDIGO


DAS TECLAS
1 2 3 ENDEREÇO CONTEÚDO

Índice ← 0 TAB_TEC + 0 NULL


LINHAS ← F 4 5 6 TAB_TEC + 1 3
TAB_TEC + 2 2
7 8 9 TAB_TEC + 3 1
S TAB_TEC + 4 6
TODAS COLUNAS = 0 A 0 E TAB_TEC + 5 5
TAB_TEC + 6 4
N TAB_TEC + 7 9
TAB_TEC + 8 8
tempo_repique TAB_TEC + 9 7
TAB_TEC + 10 E
TAB_TEC + 11 0
TAB_TEC + 12 A
LINHAS ← 1

TODAS COLUNAS = 0 N S
LINHAS = 16 Índice ← 0
&S
LINHAS < 16
N
S
S
COLUNAS = 1 Índice + 1
Índice + 3
LINHAS ← LINHAS*2 N

S
COLUNAS = 2 Índice + 2 Retorna ← tabela [indice]

N
FIM
S
COLUNAS = 4 Índice + 3

Índice ← 0

Figura 39 – Fluxograma da função de tratamento do teclado.

O fluxograma da Figura 39 utiliza a técnica de espera ocupada (polling)


( para
detecção e captura de tecla. A idéia mostrada neste fluxograma
ograma consiste em criar na
memóriaria uma tabela contendo os códigos que devem ser atribuidos a cada tecla
(código ASCII). Em linguagem C esta tabela pode ser criada por meio de um vetor.
Para o uso do vetor cria-se
se uma variável de indice que é inicializada apontando para o
primeiro elemento do vetor (i = 0). A medida em que o programa faz a varredura para
identificar
ntificar a tecla apertada, o indice vai sendo incrementado acompanhando a
varredura e no final retorna o conteudo da tabela apontada pelo indice.
CEFET-MG 57
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

12.2. ATIVIDADES
12.2.1. Monte um novo projeto que monitore o teclado presente no kit didático
codificando-o na linguagem
guagem C. C. Este projeto deve ser constituído de um programa
principal que será responsável por chamar a função teclado cujo comportamento
encontra-se descrito no
o fluxograma da Figura 39 e as funções teclado e tempo repique.
Vamos montar as estruturas
estrutura básicas das funções do teclado. A função de
configuração do teclado não retorna parâmetro apenas faz a configuração dos io's.

void configura_teclado (void


void)
{

}
Já a função teclado irá retornar o código ASCII da tecla
cla ou 0 (zero) se não houver
tecla pressionada. Desta forma definimos como tipo de retorno o unsigned char.

unsigned char teclado (void


void)
{

...
return (tab_tec[i]);
}
A função tempo repique pode ser a mesma função utilizada na pratica pisca led
cujo nome da função é delay. Esta função recebe como parâmetro de entrada um
numero não sinalizado de 16 bits (unsigned int) que
ue define o tempo de atraso em
milissegundos.
void delay (unsigned int x)
{

...
}

Juntamente com o fluxograma da Figura 39 é apresentada a tabela de


configuração das teclas. Como cada tecla ocupa um único byte da memória podemos
criar um vetor de caracteres não sinalizados seguido de sua inicialização:

unsigned char tab_tec[13]


tab_t ={” \00””321654987E0A”};

12.2.2. Codifique as funções


ões do teclado

12.2.3. Codifique o programa


program principal de tal forma que ele escreva na porta 5 o
codigo da tecla apertada.
apertada Caso não tenha tecla apertadaada espere, conforme o
fluxograma da Figura 40.

CEFET-MG 58
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

main

configura teclado

teclado

N
tem tecla?

P5OUT ← tecla

Figura 40 - Fluxograma para teste do teclado

12.2.4. Rode e teste o programa. Todas as teclas devem ser verificadas.


Dica: insira um Break Point na
n linha de codigo P5OUT=tecla;

CEFET-MG 59
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 13 - Display de crital líquido (LCD)


OBJETIVO

Implementartar as funções básicas de tratamento de um Módulo Display de


Cristal Líquido (LCM).

13.1. INTRODUÇÃO

Em sistemas digitais é comum utilizar


utiliza led'ss para sinalizar a ocorrência de eventos.
Entretanto, em muitas aplicações mais complexas é necessário o envio de mensagens
para informar o estado do sistema,
sistema permitindo ao operador atuar. atuar Os LCDs são
frequentemente utilizados para estas tarefas.

HARDWARE DO DISPLAY

O display presente no n kit didático mostrado na Figura 41 é um módulo


microcontrolado (LCM),, baseado em caracteres, com capacidade de apresentar um
total de 32 caracteres, sendo estes distribuídos em duas linhass (16 x 2).
2)

Figura 41 – Diagrama de ligação do LCD.

Pode-se observar que o LCM


LC está utilizando oito bits para receber dados por meio
dos pinos D0 a D7 que estão conectados à porta 5 do microcontrolador MSP430. O
envio de dados são controlados pelos sinais RS e E que estão conectados aos pinos
P3.7 e P3.6 respectivamente.
respectivamente O sinal R/W está aterrado permitindo apenas operações
de escrita.
R/W = 0 operação de escrita no LCD
LC
R/W = 1 operação de leitura da memória interna do LCD
LC
RS = 0 comando (palavras de
de programação ou endereço de memória)
RS = 1 dado (caractere a ser apresentado no LCD)
LC

CEFET-MG 60
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

O pino E corresponde ao sinal de habilitação da comunicação do


o LCD
LC ativo em nível
lógico 1.
No LCM, o endereço de memória DDRAM de cada posição visível no LCD é
apresentado na Figura 42, caso não tenha havido deslocamento de mensagem:
mensagem

Posição do display 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Linha 1 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
Endereço de
DDRAM Linha 2 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
Figura 42 – Endereçamento do LCD para o display de duas linhas.

FLUXOGRAMA
Utilizamos três funções básicas para acionamento
aci do
o LCD. A primeira refere-se
refere à
programação do mesmo (Figura
Figura 43).

Programa LCD

define numero de linhas do display


(1) define numero de bits do barramento
define formato do caracter

envia comando

ativa display e cursor


(2)
define a intermitência do cursor

envia comando

(3) define o deslocamento do cursor

envia comando

(4) limpa display

envia comando

fim

Figura 43 – Programação do LCD.

As caixas de processamento de 1 a 4 presentes no fluxograma


fluxograma da Figura 43
definem as características do display. Esses comandos são interpretados
interpretados pelo módulo
LCD conforme Tabela 8 obtidos na Tabela 9,, fornecida pelo fabricante.

CEFET-MG 61
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Comando Código Descrição


Fixação das condições de utilização 00111000 8 bits – 2 linhas – matriz 5x8
Controle Ativo/Inativo do display 00001110 Display e cursor ativos sem piscar
Fixação do modo 00000110 Deslocamento do cursor p/ direita
Limpeza do display 00000001 Limpa display
Tabela 8 - Comandos usados na programação do LCD

Instrução R W D D D D D D D D Descrição Tempo de


execução
S R 7 6 5 4 3 2 1 0
Limpa display 0 0 0 0 0 0 0 0 0 1 Limpa todo o display e retorna o cursor à primeira 1,53 ms
posição da primeira linha
Retorno 0 0 0 0 0 0 0 0 1 * Retorna o cursor à primeira posição da primeira linha. 1,53 ms
Retorna mensagem deslocada a sua posição original
Fixação do modo 0 0 0 0 0 0 0 1 I S I/D – Define o sentido do deslocamento do cursor 39 µs
D S – Define o deslocamento da mensagem: 0 não desl.
Controle ON/OFF 0 0 0 0 0 0 1 D C B D – Display ON/OFF C – Cursor ON/OFF 39 µs
do display B – ativa/ desativa intermitência do cursor
curso
Deslocamento do 0 0 0 0 0 1 S R * * Move cursor e desloca mensagem sem mudança de 39 µs
cursor/mensagem C L conteúdo da DDRAM
Condições de 0 0 0 0 D1 N
* * F DL – Numero de bits da interface 39 µs
utilização L N – Numero de linhas F – Formato do caractere
Endereçamento 0 0 0 1 Endereço da 39 µs
de CGRAM CGRAM
Endereçamento 0 0 1 Endereço da DDRAM 39 µs
de DDRAM
Leitura do busy 0 1 B Contador de endereços 0 µs
flag e do endereço F
Escrita de dados 1 0 Dado a ser escrito 43 µs
na CG ou DDRAM
Leitura de dados 1 1 Dado a ser lido 43 µs
na CG ou DDRAM
* irrelevante FOSC
270 kHz
Tabela 9 – Conjunto de instruções do LCD

Para enviar comandos e dados ao display é preciso respeitar itar a sequencia de


sinais apresentada na Figura 44, que mostram as temporizações da comunicação com
o LCM. Para
ara escrever mensagens
mensagens no display é necessário primeiro programar o LCD e
em seguida enviar os caracteres codificados em ASCII (Apêndice A) seguidos da
sequencia de comandos apresentados na Figura 46. Os fluxogramas
fluxogram para as
funções env_comando e env_dado
env_dado que geram respectivamente os sinais apresentados
na Figura 44 são mostrados na Figura 45 e Figura 46 respectivamente.

RS

D0 ~ D7 Comando Dado

Envia Envia
preparação comando preparação dado
2 ms 2 ms 2 ms 2 ms tempo
Figura 44 – Temporização do módulo LCD

CEFET-MG 62
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 45 – Fluxograma envio de Comando Figura 46 - Fluxograma envio de Dado

Assim como no teclado, o display já esta conectado àss portas P3 e P5 do


MSP430. O primeiro passo para a programação
program do LCD é garantir a configuração dos
do
IOs envolvidos no seu hardware (Figura
( 47).
Configura LCD

configura IO

fim

Figura 47 – Configuração dos IOs


Os conectados ao LCD

13.2. ATIVIDADES

13.2.1. Implemente
mplemente as funções de programação e controle do LCD. LCD Observe o
diagrama de conexão (Figura
Figura 41) do LCM e MSP430 para utilizar corretamente os io's
que já estão definidos no kit didático.
didático Resumindo, o arquivo de software
ftware LCD deverá ter
quatro funções:
1. void configura_LCD
LCD (void)
2. void programa_LCDLCD (void)
3. void env_comando (char)
4. void env_dado (char
char)
5. void main (void)
Observe que as funções env_comando
env_ e env_dado recebem um parametro de entrada
tipo char (8 bits) e escrevee este parametro no barramento de dados do LCM (porta 5),
como descrito no fluxograma da Figura 45 e da Figura 46.
CEFET-MG 63
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

13.2.2. Escreva o programa principal (main) que programará o LCD e chamará a


função env_dado passando como parâmetro a letra “A”. Desta forma ao rodar o main
aparecerá na primeira posição da primeira linha do display a letra “A”.

13.2.3. Incremente a funcionalidade do módulo


módulo LCD criando a função envia
envi string.
Faça o algoritmo e a respectiva codificação. O protótipo desta função é:
void envia string (const char *apt)
Onde o parametro passado (const
( char *apt) é um parametro tipo ponteiro.
ponteiro Para criar
uma string na memória flash utilize o modificador de variável const.
const Esta variável
deverá ser global para ser vista dentro de outras funções. Por exemplo, para criar a
string CEFET-MG:
onst char mensagem1[9] = {“CEFET-MG$”};
const
O caracter "$" é o delimitador de fim de string e serve para a função envia string
finalizar sua tarefa. Para
ara chamar a função envia string, deve-se
se passar o parametro:
parametro

envia string (mensagem1);

13.2.4. Rode e teste a função envia string.

CEFET-MG 64
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 14 - Integração de programas


OBJETIVO

Integração ou modularização de programas


Arquivo de protótipo.
pro

14.1. INTRODUÇÃO
A linguagem de programação C é extremante interessante para construção de
programas aplicados a sistemas eletrônicos, pois nos permite acessar os recursos de
hardware assim como nos fornece funcionalidades de programação como as estruturas
de dados e controle não disponíveis na linguagem Assembly. Também permite inserir
módulos de programas escritos em Assembly assim como apenas instruções Assembly
dentro de um código em C.
A modularização proporciona uma maior clareza do código e facilidade no
desenvolvimento e manutenção do sistema. Modularizar arizar significa utilizar vários
módulos (códigos fonte) para a construção do software.
software Até então o utilizamos apenas
um módulo para ra escrever todo o código devido à simplicidade dos problemas. Porém a
medida que e o sistema vai crescendo em complexidade é necessário dividir o software
em módulos. Nesta prática utilizaremos o teclado e o display. Observe que temos duas
funcionalidades distintas, assim devemos criar um modulo para as rotinas do teclado,
um módulo para ra as rotinas do display e um modulo para o main. Na maioria dos
sistemas microprocessados temos a coexistência destas destas funcionalidades (teclado e
display).. Nosso desafio nessa prática é fazer a ligação lógica
l desta
estas funcionalidades
que estão descritas na Figura 48.
main
Teclado_LCD

configura LCD

programa LCD

configura teclado

teclado

N
tem tecla

S
envia dado
(tecla)

Figura 48- Fluxograma TECLADO_LCD.


Observe que este algoritmo basicamente chamará as funções presentes nos
demais módulos, no módulo do LCD: configura LCD, programa LCD e envia env dado e no
módulo teclado: configura teclado e teclado.
eclado. Este algoritmo retrata exatamente como
CEFET-MG 65
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

ocorre a integração
ntegração de módulos.
módulos. Não estamos preocupados nesta etapa de
desenvolvimento como será realizada cada uma das funções, pois elase já foram
escritas nas aulas anteriores.
anteriores. Nossa preocupação se restringe na utilização das
funcionalidades providas pelas funções.

14.2. ATIVIDADES
14.2.1 Monte um novo projeto. O ambiente de programação IAR cria
automaticamente um arquivo cujo nome é main.c. Ele é constituído de um conjunto de
instruções que enviará para o display o código ASCII da tecla apertada,
apertada conforme
algoritmo da Figura 48.
Na janela Workspace (à esquerda na Figura 49)) é apresentada uma estrutura
hierárquica cujo nome do projeto vem destacado no nível mais alto. Dentro desta
estrutura também são encontrados o código fonte main.c e uma pasta denominada
Output. Esta janela é extremamente importante para construção de projetos que são
constituídos de mais de um código fonte, recurso que utilizaremos nesta prática.

Figura 49 - Arquivo padrão.

Vamos utilizar este recurso separando o programa principal que irá chamar a
funções do modulo teclado e do módulo display em três arquivos distintos. Uma vez
que o próprio ambiente já cria o arquivo principal (main.c), vamos criar um segundo
arquivo que irá conter as funções
funç do teclado e um terceiro módulo que irá conter as
funções do display.. Clique no ícone New document ou selecione no menu principal a
opção File>New>File (atalho ctrl N). Será aberto um segundo arquivo denominado
Untitled1 (Figura 50),, selecione a opção
opção Save e nomeie o arquivo como
co teclado.c.
Salve na mesma pasta onde está o arquivo main.c. Repita este procedimento para criar
o módulo LCD e nomeie LCD.c.
LCD

Figura 50 - Novo código fonte.

CEFET-MG 66
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Embora os arquivos estejam salvos eles ainda não pertencem


pertence ao projeto. Sua
inclusão é bem simples. Dê um clique sobre o arquivo, em seguida clique sobre o nome
do projeto (Teclado_lcd)) na janela Workspace e o mesmo ficará destacado. Com o
botão direito do mouse selecione a opção Add>>Add “Teclado.c” e este novo código
fonte será inserido no arquivo de projeto (Figura
( 51). Repita o procedimento para
adicionar o modulo LCD.

Figura 51 - Inserindo no projeto um novo código fonte.

Observe que o módulo


dulo main chama funções que estão em outro modulo (Teclado
( e
LCD). Se compilar-mos
mos o arquivo main.c da forma que está o compilador indicara erro,
pois não encontrará as funções que estão fora do módulo. Para
Para resolver este problema
deve-se indicar no inicio deste arquivo que
ue tais funções não pertencem a este módulo
de programa e sim a outros módulos que foram incorporados no arquivo de projeto.
Basicamente neste exemplo seria necessário inserir no início do main tais declarações:

extern void configura_teclado (void);


);
extern unsigned char teclado (void);
);
extern void delay (unsigned int);
extern void configura_LCD (void);
extern void programa_LCD (void);
extern void env_dado (char);
extern void env_comando (char);
Observe que falamos que um dos papéis da modularização é separar o programa
em partes funcionais e acabamos de misturar declarações do módulo de teclado e
LCD. Podemos melhorar a aparência de nosso código utilizando utilizando os arquivos de
protótipos.. Na prática você já faz uso deste recurso, só que provavelmente ainda não
percebeu. Um m exemplo típico é o arquivo io430.h .h que é agregado em cada novo
programa que você escreve. Estes arquivos cuja extensão é a letra “h” são
denominados arquivos de protótipos. Neles são inseridas diversas definições do
respectivo módulo de programa.

CEFET-MG 67
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Vamos utilizar a técnica de prototipação com o módulo teclado. Crie um novo


arquivo fonte e salve na mesma pasta com o nome teclado.h. Escreva as três primeiras
linhas da lista de declarações extern acima e cole
cole no arquivo teclado.h. Retire as
diretivas extern presente em cada uma das linhas e salve o arquivo teclado.h.
void configura_teclado(void);
unsigned char teclado(void);
void delay (unsigned int);
Observe que se link editarmos
ed novamente o programa ocorrerá
ocorr uma falha, pois
não será possível dentro do módulo main encontrar as funções do módulo teclado.
Desta forma, é necessário inserir o arquivo teclado.h dentro do módulo main utilizando
a diretiva include conforme indicado a seguir:
#include “teclado.h”
Faça a prototipação também para o módulo LCD. Observe que o modulo LCD
necessitará de uma função de tempo. Não é preciso escrever esta função, pois ela já
existe
ste dentro do modulo de teclado e já foi declarada no arquivo de protótipo teclado.h.

void configura_LCD (void);


void programa_LCD (void);
void env_comando (char);
void env_dado (char);

Com os protótipos criados, monte o programa do algoritmo Teclado_LCD


Teclado , apresentado
na Figura 48. Observe que o arquivo main será iniciado com as seguintes linhas:
#include "io430.h"
#include “teclado.h”
#include “lcd.h”

14.2.2 Compile e teste o algoritmo.

INTEGRAÇÃO DE PROGRAMAS EXCLUSIVAMENTE EM ASSEMBLY

O procedimento de integração
integração programas também pode ser realizado com
módulos de programa escrito exclusivamente em Assembly.. A seguir é apresentado tal
procedimento.
Quando criarmos um novo projeto automaticamente surgirá na tela uma janela
contendo
endo o projeto recém criado e a janela de edição, identificada pela aba asm.43*,
com a estrutura básica de um programa. A janela asm.43* é usada para digitar o
programa principal (Figura
Figura 52) que neste caso é o algoritmo TecladoLCD. Além da
janela asm.43*, outras janelas de texto devem ser criadas, uma para cada módulo.

CEFET-MG 68
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 52 - Primeira janela de edição (programa principal).


Paraa criar novas janelas de edição selecione no
no menu principal a opção
File>New>File. Sugirá uma nova janela de edição totalmente em branco, e a sua
respectiva aba Untitled1, Figura 53.

Figura 53 - Segunda janela de edição


O próximo passo é salvar e inserir esse novo módulo em seu
eu projeto. Para salvar
selecione no menu principal a opção File> Save As. Observe que na janela Save As
(Figura 54) o Nome do arq quivo é igual ao nome da aba da janela de edição. Não se
esqueça de selecionar Salvar como tipo: Asm Files (“.s”, “.msa”, “.asm d”) antes
de escolher o nome apropriado para esse módulo, que deve ter extensão .s43
(teclado.s43 ). E finalmente, clique sobre o botão Salvar.

CEFET-MG 69
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 54 - Janela para salvar


Para inserir
ir o novo arquivo no seu projeto vá à janela Workspace,
Workspace selecione
PROJ, clicando com o botão direito do mouse sobre ele. Selecione a opção Add> Add
“teclado.s43” (Figura 55).. Você perceberá no Workspace que o arquivo
arqui teclado.s43
será inserido no PROJ.

Figura 55 - Adicionar um novo arquivo fonte ao projeto.


CÓDIGO FONTE
Uma vez que já sabemos criar, salvar e adicionar novos arquivos fonte em um
projeto está na hora de nos preocuparmos com o código que devemos colocar em cada
um deles.
CEFET-MG 70
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Para escrever o código fonte do programa principal vamos nos orientar pelo
fluxograma da Figura 48,, já mencionado.
mencionado. O algoritmo configura IOs do MSP e testa se
uma teclala foi pressionada. Quando ocorre tal evento a tecla é apresentada no display.
Observe bem o algoritmo, parte dele já foi refinado e implementado por você,
você tais
como: as subrotinas do LCD e do TECLADO. Como aproveitar esses códigos já
escritos? O procedimento nto é bem simples e envolve o conceito de localidade de
funções.
Uma função é denominada global quando a mesma pode ser acessada por
outros módulos do programa e é local quando só pode ser acessada dentro do próprio
módulo.
Vamos pegar como exemplo o módulomódu do TECLADO que é constituído por uma
função global e uma local.
A função TECLADO foi declarada como pública, observe a diretiva PUBLIC antes
do nome da função. Ela poderá ser chamada por qualquer outro módulo do projeto. A
função TEMPO_REPIQUE é uma função ção local, portanto só poderá ser chamada dentro
do módulo corrente, que neste caso é o módulo teclado.s43.
Observe que a variável TECLA e o label TAB_TEC foram declarados como
externos. Isso significa que as definições dos referidos termos estão em outro módulo,
mas a diretiva EXTERN permite que eles sejam acessados no módulo corrente,
teclado.s43.

Módulo teclado.s43:

#include “msp430x14x.h”
;Função global
PUBLIC TECLADO
;Variável externa
EXTERN TECLA
;Label externo
EXTERN TAB_TECLA

RSEG CODE
;**************************
;SUBROTINA: TECLADO
;DESCRIÇÃO: verifica se alguma tecla foi pressionada
;ENTRADA: -
;SAÍDA: TECLA – retorna o valor da tecla pressionada
pre
;**************************
TECLADO
.
MOV.W #TAB_TEC,R4
.
CALL #TEMPO_REPIQUE ;função local
.
MOV.B 0(R4),TECLA
.
RET
;**************************
END

No módulo teclado.s43, a função TECLADO foi definida e declarada como


publica. Agora, necessitamos acessá-la
acessá la no módulo principal, então é necessário
informar ao linkeditor
or que ela está externa ao módulo
m corrente (asm.s43), através da
diretiva EXTERN.
Modulo asm.s43 (principal):
CEFET-MG 71
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

;Função externa
EXTERN TECLAD0
;Variável global
PUBLIC TECLA
;Label global
PUBLIC TAB_TECLA

ler_tecla
CALL #TECLADO
CMP.B #0,TECLA
JZ ler_tecla
.
;**************************
END

CEFET-MG 72
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 15 - Semáforo
OBJETIVO

Aplicação dos
os conceitos de IO
I e
Codificação em C a partir de uma
um FSM.

15.1. INTRODUÇÃO

Nas aulas anteriores


es acionamos LEDs baseado no estado de uma chave. A
implementação de um semáforo passa pelos mesmos conceitos
conceitos com um aumento
au no
número de IOs
Os e da complexidade do problema.

MÁQUINA DE ESTADO FINITO (FSM)

A FSM da Figura 56 modela o funcionamento de um semáforo com apenas uma


fase. Os estados da FSM retratam o ponto de vista do motorista.
motorista. A simbologia de
representação dos estados segue o formato
formato descrito a seguir para o estado Livre. A
saída “VD”,, em letra maiúscula, indica a sinalização para o veículo, enquanto da saída
“vm”, em letra minúscula, indica a sinalização para o pedestre.

Figura 56- FSM do semáforo de uma fase com pedido de passagem.


A Figura 57 mostra um cruzamento onde poderemos tratartrata situações com apenas
uma única fase, ou seja, tratar apenas o controle
controle entre veículo e pedestre de uma única
rua, conforme descrito na Figura 56 ou mesmo situações mais complexas envolvendo 4
fases com possibilidade de mão dupla em cada uma das ruas.
Para implementarmos a FSM da d Figura 56 a linguagem C nos oferece recursos
(estruturas de controle) apropriados. No caso específico do semáforo necessitamos de
uma estrutura de repetição para garantir o funcionamento cíclico da FSM e uma
estrutura
utura de tomada de decisão múltipla para determinação do estado corrente.
Também será utilizado o tipo enumerado para que possamos representar os estados
da FSM com seus respectivos nomes.

CEFET-MG 73
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Pb

b b

a c
Pa

Pc
a c

d d Sentido de
Rotação

Pd
Figura 57 – Lay-out do cruzamento com sinais
sinais luminosos para carro e pedestre.

15.2. ATIVIDADES

15.2.1 Com base na Figura 57 faça as conexões


xões dos sinais luminosos aos IOs
I que
garantam o controle do semáforo da rua A. Observe que a FSM só descreve o
comportamento
ento de apenas uma das ruas com possibilidade de pedido de passagem.

A estrutura do seu programa pode ser baseada no código a seguir, embora esta
solução não seja a única.

Dicas:
Não se esqueça que para utilização
utilização dos dispositivos de IO
I é necessário
realizar
izar sua configuração (entrada/saída).
Lembre-sese também ded filtrar a trepidação presente nas chaves.
enum estados {LIVRE,ATENCAO,ESPERA};
enum estados estado;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
while(1)

CEFET-MG 74
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

{
switch (estado)
{
case LIVRE:
break;
case ATENCAO:
break;
case ESPERA:
break;
}
}
}

15.2.2 Com base na Figura 58 implemente o código para esta FSM que faz f o
controle de um sinal de duas fases (ex: rua A e B), com pedidos de passagem distintos.

Figura 58 - FSM do semáforo de duas fases com pedidos de passagem


passage distintos.
15.2.3 Faça uma nova FSM e sua respectiva codificação considerando
considerando as seguintes
condições de funcionamento:

• Semáforo de quatro fases.


• Ambas as vias de mão dupla.
• Somente permitindo conversão à direita.
• Semáforo A, B, C e D em estados distintos.
• Semáforos para pedestres ligados.
• Utilize duas chaves push-bottom
push para
a que o pedestre possa solicitar passagem
na rua A e C.
• Tempo do estado verde: 30s.

CEFET-MG 75
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

• Tempo do estado vermelho: 35s.


• Tempo do estado amarelo: 5s.
• Usar uma chave do KIT para indicar defeito:
CHAVE = 1 – semáforo funcionando
CHAVE = 0 – semáforo com defeito: luz
luz amarela de todos os semáforos piscando de 1
em 1 segundo.

CEFET-MG 76
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 16 - Motor de Passo


OBJETIVO

Aplicar
plicar os conceitos de IO
I para controle de motor de passo.
passo

16.1. INTRODUÇÃO

O comportamento desses motores é previsível a ponto de dispensar os


tradicionais elementos de realimentação
realimentação negativa, cujo objetivo é combater a
instabilidade dos servomecanismos. Devido as suas características eles se adaptam
perfeitamente à lógica digital, o que levou à sua utilização em sistemas de periféricos
para computadores, como: acionadores de disco, plotter, impressoras e também em
robôs industriais, CNC, etc.
Eles giram em etapas e exibem três estados: parados, ativados com rotor
travado e girando em etapas. Este movimento pode ser brusco ou suave,
dependendo da frequência dos passos em relação relação à inércia do motor. Como todos os
motores, os de passo são transdutores eletromecânicos, embora pertençam a uma
categoria separada, devido as suas aplicações específicas. De fato eles respondem de
uma forma bem definida, ou seja, a rotação do eixo em em um ou vários passos, a certos
sinais digitais fornecidos aos seus circuitos eletrônicos de comando.
Os motores de passo podem ser usados como um sistema aberto, isto é, sem
qualquer realimentação de controle normalmente proporcionada por potenciômetros,
codificadores ou geradores tacométricos. Para isto, basta haver a segurança de que o
torque produzido pelo motor seja suficiente para arrastar a carga. Portanto, podem-se
podem
evitar os problemas comumente encontrados nos sistemas de realimentação, como
instabilidade
ilidade e ultrapassagem (overshoot),
( ), com a possibilidade de substituir os servo-
motores cc convencionais.

Princípio de funcionamento
No que se refere ao funcionamento, o motor de passo pode ser comparado ao
motor síncrono. Um campo rotativo (nesse caso gerado
gerado pela eletrônica de controle) faz
girar um rotor magnético a ele acoplado. Tais motores foram subdivididos de acordo
com a forma em que é gerado o campo rotativo: enrolamento unipolar ou bipolar e com
o material empregado na confecção do rotor: ferro doce ou material permanentemente
magnetizado.

Figura 59 - Motor de passo bipolar com rotor de ima permanente.


permanente
CEFET-MG 77
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

O motor de passo bipolar com rotor magnético (ímã permanente) está


representado na Figura 59. 59. No momento do arranque, passa corrente nos dois
enrolamentos, o estator gera os pólos magnéticos e o rotor orienta-se
orienta de acordo
(Figura 60a).. Caso em seguida,
seguida a corrente no enrolamento A seja invertida
inver (daí a
designação bipolar), o campo magnético irá deslocar-se
deslocar se 90° no sentido anti-horário
arrastando consigo o rotor (Figura 60b). Para continuar este movimento, deve-se
deve agora
inverter a corrente no enrolamento B (Figura 60c)) e o rotor irá deslocar mais 90° no
mesmo sentido,, e em seguida inverter novamente a corrente no enrolamento A (Figura
(
60d).
). Para fazer o motor girar continuamente
continuam deve-se
se repetir continuamente este
processo. A cada inversão de corrente o campo o magnético e o rotor a ele acoplado
gira 90°. A sequência
ncia de ativação para uma volta completa do rotor no sentido anti-
horário é: AB AB AB AB A AB ou seja, quatro passos de 90°.

a b

c d
Figura 60 - Acionamento a passo inteiro
Também é possível cortar a corrente de um dos enrolamentos, antes de inverter a
polaridade na fase correspondente (acionamento
( a meio passo). Nesse caso
ca a
sequência será: AB B AB A AB B AB A AB, conforme mostra a Figura
61a,b,c,d
a,b,c,d onde a cada passo o rotor gira 45° no sentido anti horário.
horário Nessa operação a
meio passo,
sso, o ângulo de passo é a metade do passo,
passo mas o torque é irregular
irr e menor
em média já que durante a metade do tempo apenas uma fase está sendo utilizada
(Força = N° espiras x corrente).

CEFET-MG 78
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

a b

c d

Figura 61 - Acionamento a meio passo


Costuma-se
se exigir ainda dos motores de passo uma resolução elevada, isto é,
muitos passos por volta. As máquinas com esta característica são construídas com
rotores e estatores múltiplos, porém com menor numero de pólos no rotor em relação
ao estator (Figura 62).
A máxima frequência de operação é limitada pelo rotor magnetizado, que induz
uma tensão no estator. Desse modo, motores com velocidades relativamente elevadas
usam normalmente rotores de ferro doce e enrolamento unipolar.

Figura 62 - Rotor.
Os motores de passo unipolares assemelham-se
assemelham se aos bipolares, mas são
enrolados de modo diferente. Neles, cada fase consiste de um enrolamento com
derivação central ou mesmo de dois enrolamentos separados, de forma que o campo
magnético
gnético possa ser invertido sem a necessidade de inverter o sentido da corrente
(Figura 63).

CEFET-MG 79
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 63 - Motor unipolar.


Como em geral essas bobinas são alojadas na mesma carcaça utilizada
utiliza para os
motores bipolares, é evidente que devem empregar menos espiras ou fio de menor
bitola, o que significa em ambos os casos, menos amperes-espiras
amperes espiras e, portanto, um
campo magnético mais fraco. Assim sendo os motores unipolares desenvolvem torque
inferior
rior aos bipolares com as mesmas dimensões.
A rotação do eixo do motor é caracterizada por um específico ângulo incremental
de passo para cada pulso de excitação. O erro que possa existir num determinado
ângulo incremental é geralmente menor que 5%, sendo este erro não acumulativo. A
Tabela 10 ilustra os valores de ângulo de passo de motores comumente encontrados
no mercado com seu respectivo passo por volta. Já a Tabela 11 mostra uma
comparação motor de passo x motor cc.

Ângulo de passo Passos por volta


0,72 500
0,9 400
1,8 200
2,0 180
2,5 144
3,6 100
5,0 72
7,5 48
15,0 24
Tabela 10 - Característica de passo de motores comerciais.

Motor de passo Servo-motor


motor cc
Controle relativamente complexo controle simples
dispensa realimentação exige realimentação negativa
má relação de potência - volume boa relação potência - volume
pouco veloz alcança velocidades relativamente elevadas
robusto, pouco desgaste maior desgaste, devido ao uso de escovas
boa característica de bloqueio bloqueio requer frenagem adicional
Tabela 11 – Comparação entre motor de passo x motor cc.

Como o campo magnético do estator é produzido por bobinas


bobinas o torque do motor
cai com o aumento da frequência de acionamento. Isto porque com o aumento da
frequência, a corrente média de estator cai devido à característica indutiva do estator. A
Figura 64 mostra duas curvas, a curva inferior refere-se
refere se ao torque de arranque, ou seja,
com o motor parado e a curva superior refere-se
refere se ao torque desenvolvido com o motor
girando.

CEFET-MG 80
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 64 - Torque x frequência.


Circuito de controle
O uso de motoresres de passo torna-se
torna se um tanto complicado pela necessidade de
uma fonte inteligente, que produza o campo rotativo. A Figura 65 apresenta o diagrama
de blocos simplificado de dois circuitos de acionamento, um utilizando utiliz
microprocessador e outro utilizando lógica fixa.

Figura 65 - Diagrama de acionamento.


A configuração do excitador de potência (driver)
( ) vai depender do tipo de motor,
unipolar ou bipolar e do nº de fases a serem controladas.
controladas A
Figura 66 apresenta opções de circuito driver unipolar e bipolar. Os motores unipolares
necessitam de apenas um transistor por fase. Já os motores bipolares necessitam de
uma ponte de H por fase, pois existe a necessidade de inversão da corrente. Nos
motores bipolares é possível também utilizar apenas dois transistores por fase (meia
ponte), desde que se utilize fonte simétrica.
A
Tabela 12 mostra as características elétricas
elétricas do motor de passo e a Figura 67 o
diagrama elétrico do motor e circuito driver utilizado no kit didático.
Obs: Velocidade máxima atingida com o kit foi de em torno de 700 pps.

Figura 66 – Driver
river para o motor de passo: a) unipolar e b) bipolar.

CEFET-MG 81
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Tensão 12V
Resistência 75Ω
Corrente 160 mA
Passos por rotação 100
Ângulo de passo 3,6°

Tabela 12 – Características elétricas do motor de passo do kit didático.


didátic

a b
iagrama elétrico do motor de passo e b) driver do kit didático.
Figura 67 – a) Diagrama didático

A
Tabela 13 mostra a sequência
sequência de estados para acionamento do motor no sentido
horário e anti-horário,
horário, passo inteiro torque pleno (a), meio passo (b) e passo inteiro
meio torque (c).

FASES 1 2 3 4 FASES 1 2 3 4
1 1 0 0 1 1 0 0
sentido 0 1 1 0 0 1 0 0
anti-horário 0 0 1 1 0 1 1 0
1 0 0 1 sentido 0 0 1 0
1 1 0 0 Anti-horário 0 0 1 1
sentido 1 0 0 1 0 0 0 1
horário 0 0 1 1 1 0 0 1
0 1 1 0 1 0 0 0
a- passo inteiro torque pleno b-meio
meio passo

FASES 1 2 3 4
1 0 0 0
sentido 0 1 0 0
anti-horá
horário 0 0 1 0
0 0 0 1
c- passo inteiro meio torque

Tabela 13 – Sequência para acionamento das fases do motor de passo: a) passo inteiro
torque pleno, b) meio passo e c) passo inteiro meio torque.
CEFET-MG 82
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

16.2. ATIVIDADES
16.2.1 Conecte o MSP430 ao motor de passo conforme o diagrama da Figura 68.

Figura 68 - Diagrama
iagrama de conexão do motor de passo e o kit didático.
16.2.2 Escreva um programa conforme os fluxogramas da Figura 69 para acionar o
motor de passo com as seguintes características:
• Velocidade constante de 5 passos por segundo (pps)
• Sentido de rotação anti-horário
• Girando
irando ininterruptamente;
• Acionamento to a passo inteiro torque pleno (Tabela
( 13a).

Dicas:
A velocidade dee rotação do motor é definida pela função de tempo.
Crie um vetor de constantes global contendo os 4 estados do motor (tabela).
Crie uma variável global para armazenar o índice do vetor (i).
(i)
main configura io passo

configura io configura io i++

motor = tabela[ i ] S
I=4
passo
fim N I=0

tempo (x)

motor = tabela[ i ]

fim

Figura 69 – Fluxogramas para acionamento do motor de passo

16.2.3 Escreva fluxograma e programa que faça o motor girar ininterruptamente


com velocidade de 10 pps, sendo a direção definida por uma chave conectada na
porta P1.7: 0 – horário
1 – anti-horário.
horário.
Nestee caso, a função passo primeiramente deve testar
estar a chave para então definir se
incrementa ou decrementa o índice da tabela.

16.2.4 Escreva fluxograma e programa que acione o motor da seguinte forma:


1- Inicialmente o motor deve ir para a posição zero.
2- A velocidade de acionamento deve ser de 20 passos por segundo.
3- Uma chave conectada em P1.7 define a direção de giro do motor, como na
questão anterior.
4- Uma segunda chave conectada em P1.6 fará o motor girar 1,5 voltas
vo (540°) toda
vês que for para nível lógico alto.
CEFET-MG 83
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 17 - Controle de velocidade de motor cc


OBJETIVO

Implementação de um conversor digital/analógico com PWM


Acionamento de motor cc com PWM

17.1. INTRODUÇÃO

O motor de corrente contínua (cc) em termos elétricostricos é composto de dois


enrolamentos, campompo e armadura e um comutador. O enrolamento de campo instalado
no estator (parte estática do motor) é responsável pela geração do campo magnético.
magnético
Pode também ser produzido por ímã permanente. O enrolamento de armadura
instalado no rotor (parte rotativa do d motor) necessita de escova e anéis coletores
(comutador),, para permitir a passagem da corrente elétrica,
elétrica, já que este fica na parte
rotativa do motor.. O rotor fica imerso no campo magnético gerado pelo enrolamento de
campo. Ao passar uma corrente elétrica pela armadura (caminho da corrente elétrica:
fonte cc, escova, anéis coletores,
coletores enrolamento de armadura) produzirá um campo
magnético que ao interagir com o outro campo magnético produzido pelo enrolamento
en
de campo produzirá uma força magnética fazendo o rotor girar na tentativa de alinhar
os dois campos magnéticos.
magnéticos. Ao girar os anéis coletores comutarão de enrolamento
enrolam na
armadura, mantendo sempre esta força próxima do o seu nível máximo e não permitindo
que os campos se alinhem e por este motivo o motor gira continuamente.
continuamente
Generalidades sobre motores cc.
Dado o modelo aproximado do motor cc (Figura
( 70),
Ia La Ra

Ic

Rc

Vc Lc E
Va

CL N

Figura 70 - Modelo aproximado do motor cc.


onde:
Rc é a resistência
tência de campo Ia a corrente de armadura
Lc a indutância de campo Va a tensão nos terminais da armadura
Ic a corrente de campo E a força contra-eletromotriz
eletromotriz
Vc a tensão
ensão nos terminais do campo C o conjugado motor
Ra a resistência de armadura N a velocidade
La a indutância de armadura CL o conjugado de carga.
Equações do conjugado (C)) e da velocidade (N)
( do motor:

C = Kt ∅Ia onde: Kt é uma constante do motor


∅ é o fluxo indutor de campo e
Ia é a corrente de armadura
CEFET-MG 84
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

• O conjugado motor (C ) é proporcional ao fluxo indutor e a corrente de armadura.


armadura
• Para se inverter o conjugado motor é necessário inverter o fluxo indutor de campo
ou a corrente de armadura.
• Velocidade do motor:
=

• A velocidade (N) é proporcional à tensão
tensão de alimentação da armadura (Va) e
inversamente proporcional ao fluxo indutor de campo (∅).
• Para inverter a velocidade é necessário inverter a tensão Va ou o fluxo ∅. A
expressão geral da velocidade indica três maneiras de como se pode atuar sobre o
motor
tor de modo a exercer o controle de sua velocidade:
1. Variar o fluxo de campo (∅)
2. Variar a resistência associada à armadura ( )
3. Variar a tensão de armadura (Va)
Utilizando o primeiro método tem-se
tem se a desvantagem de perder torque a uma
dada corrente Ia, poiss quanto menor ∅,, menor o torque. Além disso, a resposta ao
controle será mais lenta, uma vez que a constante de tempo elétrica do enrolamento de
campo Lc/Rc é bastante elevada devido ao grande número de espiras do enrolamento
de campo. Este procedimento tem tem como vantagem o fato de se atuar com níveis de
potência relativamente baixos.
O segundo método é de baixo rendimento, por isso não é utilizado atualmente,
mas já foi muito utilizado em tempos remotos (controle
( ole de velocidade de trem urbano -
bonde).
O terceiro
rceiro método é o mais usado. O controle de velocidade do motor, pela
variação da tensão de armadura é o procedimento mais versátil e que apresenta maior
velocidade de resposta, em função da sua menor constante de tempo elétrica, La/Ra.
Mantendo-se o fluxo ∅ constante e atuando-se
atuando em Va, pode-sese desenvolver o mesmo
conjugado em todas as velocidades.
As configurações possíveis para motores cc são: excitação independente,
excitação em derivação, campo série e ima permanente.
permanente

Excitação independente Ima permanente

Excitação em derivação Campo série

CEFET-MG 85
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Kit didático motor cc


O kit motor cc (Figura
Figura 71) foi concebido com motor cc de ima permanente para
realização
ação de alguns ensaios.
ensaios Entre eles podemos citarr o controle de velocidade e
sentido de rotação do motor, medição da velocidade via contagem de pulsos do taco-
gerador ou via medida da tensão de saída do conversor frequência/tensão.
frequência/tensão
Na entrada Vf do kit,, pode-se
pode aplicar um sinal cujo valor médio pode variar
var entre
0 e 3,3 V que é a tensão de trabalho das portas do MSP430, quando este é alimentado
com 3,3 V. A variação da tensão Vf permite apenas a alteração da velocidade do
motor, uma vez que a mudança do sentido de rotação depende do sentido da corrente
na armadura.

Figura 71 - Kit motor cc.


Para tornar possível a mudança do sentidosentido de rotação foi implementado um
circuito driver (Figura 72)) que desloca o nível cc
c aplicado ao motor fazendo com que
tensões Vf entre 0 e 1,65 V produza rotação no sentido anti-horário
anti horário e tensões Vf entre
1,65 e 3,3VV no sentido horário. O circuito é constituído de um amplificador operacional,
cuja entrada inversora tem o ganho igual a 5 (G=R6/R5) e a entrada não n inversora tem
ganho 6 (G=1+R6/R5).. A entrada inversora provoca um deslocamento do nível cc
aplicado ao motor (Va) de forma a produzir zero volt no motor quando a entrada Vf for
igual a 1,65 V. Este comportamento pode ser resumido na curva de transferência
transferênc
tensão de armadura em função da tensão Vf (Va x Vf)) e no diagrama de controle do
driver onde também é mostrada sua equação característica (
Figura 73).

Figura 72 - Diagrama do Driver do motor cc.

CEFET-MG 86
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Va
(V)
+ 9,9

0 1,65 3,3 Vf
(V)

- 9,9

a b

Figura 73 – a) Curva de transferência


t Va x Vf e b) Diagrama de controle.
controle

17.2. ATIVIDADES
17.2.1 Conecte a saída de PWM P1.2/TA1 do kit microcontrolador MSP430
MSP à entrada
Vf do kit do motor cc conforme diagrama
diagram da Figura 74.

MSP
MSP430F1611 Motor cc
14
53 P1.2/TA1 Vf
XT2IN
4 MHz
52
XT2OUT

GND GND

Figura 74 - Diagrama de ligação para acionamento do motor cc.


cc

17.2.2 Desenvolva um programa para acionar o motor cc no sentido horário com


velocidade constante de 10% da
d velocidade máxima com a utilização da técnica de
PWM,, por meio do timer A conforme fluxograma da Figura 75. A frequência de PWM
deve ser de 1kHz.
main

configura io

configura clock

configura timer A

defina a velocidade

fim
Figura 75 - Fluxograma
luxograma para gerar PWM com velocidade constante

CEFET-MG 87
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Orientações:

1. Configure io:: Porta P1.2/TA1


P1.2 como saída e função especial. Defina
Defin os registros:
o Registro P1DIR =
o Registro P1SEL =
2. Configure o modulo de clock para que gere 4 MHz na saída SMCLK. O oscilador
XT2CLK
T2CLK do módulo de clock tem um cristal de 4 MHz (Figura
(Figura 74).
o Ligue o oscilador XT2CLK (bit XT2Off do registro BCSCTL1)
o Selecione o oscilador XT2CLK como fonte para SMCLK (bit SELS do registro
BCSCTL2)
3. Configure o timer A. Defina o conteúdo de cada registro
gistro veja orientações abaixo:
o Registro TACCR0 =
o Registro TACCR1 =
o Registro TACCTL1 =
o Registro TACTL =

o Frequência de PWM = 1 kHz


o Configuração do registro do bloco CCR0
TACCR0 define a frequência do sinal de PWM conforme
confor a equação:
TACCR0 = onde FCLK é a frequência de clock do timer A e FPWM é a
frequência de PWM.
o Configuração dos registros do bloco CCR1
O ciclo de trabalho do sinal de PWM da saída OUT1 (P1.2/TA1) é definido
!"##$%
pelo registro TACCR1 da seguinte forma: CT = . O CT = 50%, produz
!"##$&
uma tensão media de 1,65V, que por sua vez produzirá uma tensão media no
motor (Va) igual a 0 V e o motor permanecerá
permanecerá parado, já com um CT ≈ 0%
produzirá a máxima rotação no sentido anti-horário
anti horário e CT ≈ 100% máxima
rotação no sentido horário. Defina o CT=50%.
Configure o timer A para gerar o sinal de PWM na saída OUT1 (pino P1.2),
conforme a temporização mostrada na Figura 76,, no registro TACCTL1
o Configuração do nucleo dpo timer A, registro TACTL:
Defina a fonte de clock do timer A como SMCLK (4 MHz).
Defina o modo de contagem do Timer A em up mode, ou seja, conta de 0 até
atingir TACCR0. Desta forma o registro TACCR0 definirá o período do sinal de
PWM.

17.2.2 Desenvolva um novo programa para acionar o motor cc no sentido horário


partindo de velocidade zero até velocidade máxima segundo uma rampa linear de 10
segundos permanecendo em velocidade máxima. A frequência de PWM deve ser de
1kHz e a rampa de 10 segundos
segundo deve ser realizada em 50 passos.

Orientações:
1. Habilite a interrupção produzida pelo bloco 0 (CCIFG0).. Esta interrupção é
produzida no modo compare quando o valor do timer A (TAR) for igual ao valor
do registro TACCR0. Esta interrupção tem um vetor exclusivo.
excl Desta forma
ocorrerá uma interrupção a cada 1 ms (Figura
( 76). Utilize a função de tratamento
da interrupção como um contador de interrupção para a marcação de tempo.

CEFET-MG 88
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

2. Para produzir uma rampa de acionamento de 10 segundos em 50 passos, deve-


deve
se fazer atualização
o CT para acelerar o motor a cada 200
00 ms, pois, 10s/50 =
200ms. Então faça a atualização doo registro TACCR1 após 200 interrupções.
Desta formaa em 10 segundos devem ocorrer 200 200 atualizações, conforme o
fluxograma
ograma mostrado na Figura 77.

Figura 76 - Temporização do timer A.


Utilize o fluxograma da Figura 77 para elaborar o programa.

Figura 77 – Fluxogramas para gerar PWM em rampa linear de 10s


17.2.3 Faça fluxograma e programa
programa para que o motor parta no sentido horário em
rampa de 10s somente após apertar
a a tecla 3 do teclado (start).

17.2.4 Idem exercício anterior,


ante porém acrescente a tecla 2 para parar (stop), também
em rampa de 10 segundos. Neste caso após parar pode-se se partir novamente.

17.2.5 Idem exercício anterior,


anterior acrescentado uma chave que define o sentido de
rotação,, ficando então assim:
chave = 0 rotação no sentido anti-horário
chave = 1 rotação no sentido horário
Tecla 2 – pára (stop)
Tecla 3 – parte (start)
OBS: a chave é lida somente com o motor parado.
CEFET-MG 89
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 18 - Controle de portão de garagem


OBJETIVO

Aplicar
plicar os conceitos de IO
I
Codificação em C a partir de uma máquina de
de estados finitos (FSM)
Implementação de Timeout com dispositivos de hardware.

18.1. INTRODUÇÃO

O kit portão de garagem simula uma situação real de controle, onde um sistema
digital pode controlar os estados do portão. O kit consiste de um mecanismo contendo
um motor cc acoplado ao portão por meio de caixa de redução, pinhão e cremalheira.
O motor cc é acionado pelo circuito driver TA8409F (Ponte H), que contém duas
entradas (IN1 e IN2) que definem a ação do motor (figuras 79 e 80)
80 conforme a Tabela
14.
IN2 IN1 MOTOR
0 0 Desligado
0 1 Abre
1 0 Fecha
1 1 Parado
Tabela 14 – Condições de funcionamento do motor.

O portão por sua vez contém duas chaves fim de curso (FC) para sinalização de
portão fechado e portão aberto, cuja denominação no kit é F para fechado e A para
aberto. Estas duas saídas são ativas em nível lógico baixo, conforme Tabela 15.

F A PORTÃO
1 1 Meio do curso
1 0 Aberto
0 1 Fechado
Tabela 15 – Posicionamento do portão.

Além disto, o kit contém um módulo acoplável de controle remoto (módulo


receptor RX3302R) e um módulo transmissor para o acionamento do motor, mas o
portão também pode ser acionado localmente (botão do teclado) sem o uso do controle
remoto. A saída OUT do kit terá um pulso alto de 200 ms caso o módulo receptor esteja
conectado no kit e o botão I do controle remoto seja apertado (Figura
Figura 78).
Para o portão funcionar precisa ser alimentado com +5Vcc e GND. Todas as
entradas (IN1 e IN2, +5V e GND) e saídas (OUT, F, A e GND), podem ser vistas no
lay-out da placa de circuito impresso (Figura
( 79)) e no circuito do motor e controle
remoto (Figura 80).

Botão do controle remoto Botão do controle remoto

OUT

200 ms 200 ms
Figura 78 – Sinal de saída do módulo receptor do controle
controle remoto.
remoto

CEFET-MG 90
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 79 – Lay-Out
Out da placa de circuito impresso.
impresso

+5V

+5V F
C1
100nF R11
D1 D2 47k +5V
1N4148 1N4148 20
20cm

2 7
1 Vs OUT1 3 R11 10
IN1 IN1 Vcc RX3302R GND
47k
R17 + 9
1k ANT
Fechado Aberto
M1 A
8
Receptor de D1 R15
TA8409F Controle 3k74
Chave fim 7
de curso Remoto LA
10 IN2 6 L2
IN2 8
- D0
R10 CH
CH1/Prog
R16 GND Vref OUT2 100R 5
1k VT OUT
5 9
4 L1
ADJ
R9 R8
1k5 47k 3 +5V
VCC
2 R14 C5 C4
R4 OUT
+5V 3k74 100uF 100nF
10k
1
2 GND
- 8
R5
R1 R2 R3 CI_2:A 1
110k
3 LMV358
C3
3 x 1R65 C2 + 4 100nF
10uF R6
110k

GND +5V
TP1 R7
7
500R 16k2 Driver para motor cc

Marcos P.

Figura 80 – Circuito do motor e controle remoto..

18.2. ATIVIDADES
18.2.1 Conecte o kit do MSP ao kit do portão conforme diagrama de ligações da d
Figura 81. Caso não tenha o controle remoto, utilize a tecla 3 do teclado e P2.0 no
lugar de P1.0. Neste caso deve-se
deve se configurar P3.0 como saída e colocar nível lógico
'1' nesta porta.

+5V +5V
GND GND
Saídas
IN1 P1.4
IN2 P1.3
Kit Kit
Portão MSP430
F P1.2
A P1.1
Entradas
OUT P1.0
GND GND

Figura 81 – Diagrama de ligações.


CEFET-MG 91
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

18.2.2 Codifique o programa para controle do portão conforme a descrição abaixo


e diagrama de estados 1 mostrado na Figura 82.
1. Inicialmente
ente o portão deve fechar.
fechar
2. Quando o sensor fim
f de curso F for atingido o motor deve parar.
3. Se receber pulso do controle remoto ou botão 3, o portão
rtão deve abrir.
4. Quando o sensor fim
f de curso A for atingido o motor deve parar.
5. Se receber pulso do controle remoto ou botão 3, o portão
rtão deve fechar.
6. Volta ao item 2
OUT=0

0 Travado/F OU
T=
F= 11 1 A=1
F=1

Fecha Abre
10 01

0
OUT
=1 Travado/A A=
11
inicio
OUT – saída do controle remoto
F - saída do sensor FC fechado
OUT=0 A - saída so sensor FC aberto
Figura 82 – Diagrama de estados 1 para controle do portão.
portão
18.2.3 Rode o programa e teste seu funcionamento.
18.2.4 Modifique o programa para controle do portão conforme diagrama de
estados 2 mostrado na Figura 83. Agora o controle remoto (CR) poderá parar o
portão no meio do curso,
curso ou seja, se o portão estiver fechando e receber o comando
do CR ele pára.ra. Se depois de parado no meio do curso receber novamente o
comando do CR ele fará o movimento inverso. O mesmo ocorrerá se o portão
estiver abrindo.
OUT=0

T=
1 Travado/F OU
T=
OU 0 1 OUT=0
OUT=0 = 11
F

Fecha Abre
10 01

0
A= =1
OUT T
=1 Travado/A OU
11
inicio
OUT – saída do controle remoto
F - saída do sensor FC fechado
OUT=0 A - saída so sensor FC aberto

Figura 83 – Diagrama de estados 2 para controle do portão.


portão

18.2.5 Rode o programa e teste o funcionamento.


CEFET-MG 92
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 19 - Dimmer digital


OBJETIVO
Aplicação do timer A.
Implementação de um dimmer digital.
19.1. INTRODUÇÃO
Dimmers são dispositivos utilizados para variar a amplitude da tensão em uma
carga alimentada em CA.. Eles consistem de gradadores, que através da variação
da tensão eficaz resultata na variação da potência.
po Este tipo de dimmer pode ser
aplicado a alguns tipos
ipos de cargas como lâmpadas incandescentes,
incandescente fornos elétricos,
motores universal e não pode ser aplicado a outros como lâmpadas de descarga
(fluorescente, vapor de mercúrio,
mercúr vapor de sódio, mista, etc) e lâmpada LED. Quando Q
aplicado a uma lâmpada incandescente tem como objetivo variar sua intensidade
luminosa. Originalmente
nalmente o dimmer é um equipamento analógico onde ond a variação da
tensão é realizada por meio da variação do ângulo de disparo de um tiristor. Esta
variação por sua vez é conseguida pela variação da resistência (potenciômetro) de
uma rede de atraso RC (resistor e capacitor). Já no dimmer digital, a variação do
ângulo de disparo o é feita através de um circuito digital e não por uma rede RC. O
diagrama do driver para o dimmer digital pode ser visto na Figura 83.83 No lado direito da
figura é apresentado um circuito detector de cruzamento zero zero que visa o sincronismo
entre a rede CA e o comando para disparo. Este circuito produz em sua saída (DCZ)
um pulso estreito de tensão toda vez que a tensão da rede cruzar pelo zero (Figura
( 84).
Já no lado esquerdo da figura mostra o driver para o dimmer. O driver dispara o tiristor
toda vez que a entrada ‘IN’
IN’ for para nível lógico alto. Ambos os circuitos são isolados
da rede elétrica por meio de opto-acoplador
opto acoplador (CI_1 e CI_2), o que garante proteção e
robustez ao circuito.

Figura 83 – Diagrama do driver para dimmer digital e detector de cruzamento zero.


zero

CEFET-MG 93
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Rede
127V
60Hz

0 t (ms)

5V

DCZ

0
t (ms)

8,33 ms 8,33 ms

Interrupção
captura

0
t (ms)
4,167 4,167
ms ms
IN

0
t (ms)
90° 90°

Tensão
na
carga

0
t (ms)

Figura 84 – Formas de onda: na rede, saída do detector de zero, interrupção de captura,


entrada do driver e tensão na carga.
Dimmer digital
O dimmer digital pode ser implementado de várias formas. A idéia adotada é
utilizar o timer A como contador de tempo para definir o ângulo de disparo e a duração
do respectivo pulso. O timer A deverá ser configurado como descrito
descrito (Figura
( 85):
• Timer A no modo contínuo
contínu (0 a FFFFh).
• O bloco CCR0 configurado em modo captura e sua entrada conectada à
saída do detector de cruzamento zero (DCZ) para registrar o instante do
cruzamento pelo zero
zer e produzir uma interrupção.
• O bloco CCR1 configurado no modo compara com o objetivo de gerar o sinal
para disparo do tiristor. Desta forma, sua saída (conectada à entrada IN do
driver)) deverá produzir um sinal alto toda vez que timer A (TAR) for igual a
TACCR1 (saída em modo 3).
• O registro TACCR0 CCR0 é usado para a captura e para definir momento do
desligamento do pulso de disparo.
O sinal de saída do detector de cruzamento zero que informa o momento em
que o sinal da rede passa pelo 0° elétrico produzirá uma uma captura do timer e uma
interrupção será gerada. A rotina de tratamento da interrupção (RTI) deverádever somar ao
valor capturado (TACCR0)) o número correspondente ao ângulo de disparo desejado e
escrever este resultado no o registro de compara do bloco 1:
1: TACCR1=TACCR0+ângulo.
TACCR
Como o registro TACCR0 tem também a função de definir o desligamento do sinal de
disparo do tiristor, deve-sese então escrever neste registro o momento do desligamento
da seguinte forma: TACCR0 = TACCR1 + duração do pulso.
CEFET-MG 94
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Dado que a frequência


cia da rede CA é 60 Hz, então o tempo relativo a 1° elétrico
vale: 1/(60*360)=46,3 µs. O timer A com um sinal de clock de 4 MHz, terá uma
resolução de 1/4MHz = 0,25 µs que equivale a 0,25 µs/46,3 µss = 5,4 x 10-3 grau. Isto
significa que cada unidade do timer corresponde a 5,4 x 10-33 grau elétrico. Por
exemplo, para
ara fazer um disparo a 45° com pulso de 1ms de largura,
largura o valor da captura
(TACCR0)) que corresponde a 0° deve ser somado a 45/5,4 x 10-33 = 8333 e escrito em
TACCR1.. Por sua vez, o valor de TACCR0 que define a descida do pulso de disparo,
deve conter a somaa de TACCR1 + 1ms/0,25us,
1ms/0,25us, ou seja TACCR0 = TACCR1 + 4000.

Figura 85 – TAR e valor dos registros


registr TACCR0, TACCR1; int. de
e captura e saída OUT1.

19.2. ATIVIDADES
19.2.1 Conecte o kit microcontrolador MSP430 ao dimmer conforme diagrama da
Figura 86
• Conecte a entrada de captura do bloco CCR0, CCI0A (P1.1/TA0)
(P1.1/TA0 do kit
microcontrolador à saída DCZ do kit dimmer.
• Conecte a saída do bloco CCR1, OUT1 (P1.2/TA1)
(P1.2/TA1) do kit microcontrolador à
entrada IN do dimmer.
dimmer
• Conecte a alimentação
entação do dimmer: +5V e GND.

CEFET-MG 95
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

13
8
XIN P1.1/TA0 DCZ
CCI0A
X1 14
P1.2/TA1 IN
32768 Hz 9
XOUT OUT1
Microcontrolador MSP 430F1611 Dimmer
52
XT 2OUT
OUT
+5V +5V
X2
4 MHz 53
XT2OUT
OUT GND GND

Figura 86 – Diagrama de ligação para dimmer digital.


digital

19.2.2 Desenvolva um programa para acionar o dimmer com ângulo de disparo fixo de
90°, conforme fluxograma da Figura 87.
Orientações:
1. Configure io:: Porta P1.1/TA0
P1. como entrada, função especial e P1.2/TA1
P1. como
saída, função especial. Defina os registros:
o Registro P1DIR =
o Registro P1SEL =
2. Configure o módulo de clock para gerar 4 MHz na saída SMCLK (Figura 86). O
oscilador XT2CLK do módulo de clock tem um cristal de 4 MHz.
MHz
o Ligue o oscilador XT2CLK (bit XT2Off do registro BCSCTL1)
o Selecione o oscilador XT2CLK como fonte para SMCLK (bit SELS do
registro BCSCTL2)
3. Configure o timer A. Defina o conteúdo de cada registro.
o Registro TACCTL0
TACCTL =
Modo captura
Síncrona
Captura pela borda de subida
Interrupção habilitada
o Registro TACCTL1
TACCTL =
Modo compara
Modo de saída 3
o Registro TACTL =
Defina SMCLK como fonte de clock do timer A (4 MHz).
Defina o modo de contagem do Timer A em modo contínuo.
o Registro TACCR1 e TACCR0
Defina o valor referente ao angulo de 90°.
Defina o valor referente à duração do pulso de disparo (10µs).
4. Utilize os fluxogramas
fluxograma da
5. Figura 87 para a elaboração do software.
main configura Trata
Trata_int

TACC1=TACCR
TACCR0
configura IO
configura +angulo
angulo

configura TACCR0=
=TACCR1
habilita clock +duração
duração
interrupção

configura fim
timer A
define ângulo
define duração
fim

Figura 87 – Fluxogramas do dimmer.

CEFET-MG 96
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

19.2.3 Altere o fluxograma e o programa para que inicialmente a lâmpada fique


apagada (ângulo
lo de 180°) e a tecla 3 funciona como liga/desliga. Um toque liga em
rampa de 5 segundos e próximo toque desliga também em rampa de 5 segundos.
segundos

19.2.4 Faça fluxograma e programa para que a tecla as teclas 3(↑)


3( e 2(↓) funcionem
para alterar o ângulo de disparo
d em passos de 1° a cada 50 0 ms.
ms Inicialmente a
lâmpada deve ficar apagada.

CEFET-MG 97
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Prática 20 - Voltímetro dc
OBJETIVO
Aplicação do conversor analógico/digital (A/D)
Implementação de um voltímetro
voltímetro dc com a utilização do conversor A/D.

20.1 INTRODUÇÃO

O conversor analógico digital (CAD) do MSP430F1611 é do tipo aproximações


sucessivas (SAR) com resolução de 12 bits.
bits Tem 12 entradas multiplexadas,
multiplexadas sendo 8
entradas externas (A0 a A7) e 4 internas (VeREF+,
(Ve VeREF-,, AVcc/2 e temperatura do
chip). Além disto, contem internamente um bloco gerador de tensão de referencia
capaz de gerar dois níveis de tensão para VR+: 1,5V ou 2,5V. O sinal de clock do CAD
pode ser selecionado entre quatro fontes: um oscilador
oscilador interno tipo RC com frequência
de aproximadamente 5 MHz (ADC12OSC) ou um dos três sinais do d módulo de clock:
ACLK, SMCLK ou MCLK. As conversões podem ser disparadas por software através
do bit ADC12SC do registro ADC12CTL0, ou por hardware com a utilizaçãoutilizaç do timer A
ou do timer B. Já o tempo de amostragem pode ser definido internamente por meio do
temporizador da amostragem na faixa de 4 a 1024 ciclos de clock do CAD, ou
externamente com a utilização do timer A ou B. Para obter o resultado
resu da conversão,
basta ler a memória de conversão. O CAD denominado ADC12 contém um banco de
registros com 16 registros de 16 bits cada para armazenar os resultados das
conversões (ADC12MEM0 a ADC12MEM15).
ADC12MEM15). O ADC12 após terminar uma conversão,
automaticamente escreve o resultado
resultado em umas das memórias de conversão, conversão
ADC12MEMx previamente configurada para receber o resultado e posteriormente
poderá gerar uma interrupção caso seja habilitada.
O kit microcontrolador MSP430F1611 permite a utilização de apenas quatro das
oito possíveis entradas externas A0, A1, A2 e A3 que são função especial das portas
P6.0, P6.1, P6.2 e P6.3 respectivamente. NestasNestas quatro entradas foram inseridos
inserido
quatro amplificadores operacionais com ganho 1 nas entradas A0 e A1 e ½ nas
entradas A2 e A3, além de umu filtro anti-aliasing passa baixa com frequência de corte
de 13 kHz, como pode ser visto na Figura 88. A tensão de alimentação dos quatro
amplificadores operacionais LM 324 é de 4,3V (5V - 0,7V),, que por sua vez limita li a
máxima tensão de saída a aproximadamente 2,8V (Vcc - 1,5V).. Esta característica
protege as entradas do MSP430 contra sobre tensão. Além disto, a inserção do
amplificador operacional trás outras características necessárias à utilização do CAD,
como alta
lta impedância de entrada e baixa impedância de saída.

CEFET-MG 98
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Figura 88 – Amplificador de entrada do CAD

20.2 ATIVIDADES

20.2.1 Conecte a entrada AD0 do d kit microcontrolador MSP430F1611 ao


potenciômetro conforme diagrama da Figura 89.

470Ω

+5V

AD0 MSP430F1611
470Ω

V LFXT1
GND

32.768Hz

Figura 89 – Diagrama de ligações para o conversor analógico digital

20.2.2 Desenvolva um programa para testar o conversor analógico digital conforme


fluxogramas da Figura 90, com as seguintes características:
• Taxa de amostragem de aproximadamente 30 amostras por segundo (30 aps)
• Frequência de clock do CAD = 32.768/8 = 4096 Hz
• Faixa dinâmica de 0 a 2,5V

CEFET-MG 99
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Orientações:
1. Configure io:: Porta P6.0
P como entrada e função especial.. Defina os registros:
o Registro P6DIR DIR =
o Registro P6SEL SEL =
2. Configure o ADC12.
ADC12 Defina o conteúdo de cada registro.
o Registro ADC12CTL0
ADC12 =
Calcule o tempo de amostragem (Ta) mínimo 9ζ
Calcule o Ta necessário para
para garantir a taxa de 30 aps
ap
Define os bits SHT
Conversões múltiplas, REF+ = 2,5V, REF on e ADC12 on
Interrupções de overflow e timer overflow desligadas
Enquanto configura os bits ENC e ADC12SC = 0.
o Registro ADC12CTL1
ADC12 =
Defina a memória
mem para receber o resultado.
Disparo do ADC12 por po software
Temporizador da amostragem utilizado
Sinal de clock dividido por 8
Fonte de clock ACLK
Modo de conversão:
conversão: canal único conversões repetidas
o Registro ADC12IE =
Interrupção pela escrita na memória habilitada
o Registro ADC12MCTLx =
EOS = 0
VR+ = VREF+ e VR- = AVss
Defina o canal 0 (A0)

main Trata interrupção

configura io lê resultado

configura adc fim

hab interrupção
hab.

hab e dispara AD
hab.

fim
Figura 90 – Fluxogramas do CAD.

20.2.3 Ajuste o potenciômetro para


para obter 1,0V aproximadamente e calcule o valor que
deverá ser obtido como resultado da conversão do ADC12. Rode o programa e
verifique se o valor obtido é próximo do valor calculado. Valores exatos dificilmente
ocorrerão devido a presença de ruído (até 20 unidades para mais ou para menos são
considerados normais).. Ajuste outros valores no potenciômetro e teste.

20.2.3 Insira mais uma funcionalidade no código para que seja mostrado no display a
tensão de entrada em volts, com duas casas decimais.

CEFET-MG 100
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Dicas:
Para enviar a tensão medida ao display, o dado antes deve ser convertido para
BCD (decimal codificado em binário) e posteriormente para ASCII.
./0 1%2340 1356
Faça o equacionamento matemático da tensão de entrada:
entrada +,- =
357 1356

Faca o cálculo de Vin com inteiros. A primeira divisão fornecerá a parte inteira do
resultado. Para obter a parte fracionária do resultado, multiplique o resto da
primeira divisão por 10 (0xA) e faça
faça a segunda divisão que fornecerá como
resultado a primeira
a casa decimal. Se quiser mais casas decimais repita o
procedimento.
A taxa de atualização do display não deve ser muito elevada, pois isto dificulta
sua visualização. Utilize uma taxa de atualização
atualização de aproximadamente 0,5 Hz.

20.2.4 Adicione um filtro de média ao exercício anterior para minimizar as variações


no resultado da conversão devido à presença de ruído aleatório. Para reduzir os
cálculos faça a média com os valores retirados do ADC12 e só s então realize os
∑=>
= 9:;<
cálculos e a escrita no display. Sugestão de cálculo de média: 'é)*
)* = %?

CEFET-MG 101
CENTRO
TRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Apêndice A – Tabela ASCII (American


American Standard Code for Information Interchange)
Interchange

CEFET-MG 102
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Apêndice B – O conjunto
onjunto de Instruções
B.1 Introdução
• A CPU do microcontrolador MSP430 tem um reduzido conjunto de instruções
(RISC). São apenas 27 instruções executadas pelo hardware, contudo o gerador de
constante auxilia ao programa montador (Assembly)
( ) do MSP emular mais 24
instruções. A seção seguinte descreve
descreve todas as instruções do núcleo do MSP e
instruções emuladas de forma detalhada.
• As instruções aparecerão em ordem alfabética.
• O sufixo .W ou a ausência de sufixo no mnemônico da instrução indica operação
de 16 bits ou operação de word e o sufixo .B indica
ndica operação de 8 bits ou operação
de byte.
• As letras src e dst significam operando fonte e operando destino respectivamente.
• O asterisco (*) na frente da instrução indica que a mesma é emulada.
• Nas instruções emuladas, os bits de status são afetados conforme a instrução
original.

B.2 Descrição das instruções

1) *ADC Adiciona o bit de carry ao destino


*ADC.B

Sintaxe ADC dst ou ADC.W dst


ADC.B dst

Operação dst + C dst

Emulação ADDC #0,dst


ADDC.B #0,dst

Descrição O bit de carry (C) é somado ao operando destino. O conteúdo anterior


do operando destino é perdido.

Bits de status N: Setado se o resultado for negativo, resetado se positivo


Z: Setado se resultado for zero, caso contrário resetado
C: Setado se dst foi incrementado
incrementado de 0FFFF para 0000, resetado
em caso contrário.
Setado se dst foi incrementado
incrementado de 0FFh para 00, resetado em
caso contrário.
V: Setado se ocorrer um overflow aritmético, resetado em caso
contrário.

Exemplo 1 Um contador de 16 bits apontado


apontado por R13 é adicionado a um
contador de 32 bits apontado por R12.
ADD @R13, 0(R12) ;Adiciona a word menos significativa
ADC 2(R12) ;adiciona o carry a word mais signif.

Exemplo 2 Um contador de 8 bits apontado por R13 e adicionado a um contador


cont
de 16 bits apontado por R12.
ADD.B @R13, 0(R12) ;adiciona LSD
ADC.B 1(R12) ;adiciona o carry ao MSD

CEFET-MG 103
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

2) ADD Adiciona a fonte ao destino


ADD.B

Sintaxe ADD src, dst


ADD.B src, dst

Operação src + dst dst

Descrição O operando
operando fonte e adicionado ao operando destino. O operando
fonte não é afetado. O operando destino perde o conteúdo prévio
para armazenar o resultado da operação.

Bits de status N: Setado se resultado negativo, resetado se positivo.


Z: Setado se o resultado
resultado for zero, resetado em caso contrário.
C: Setado se houver carry no resultado, resetado em caso
contrário.
V: Setado se ocorrer um overflow aritmético, resetado em caso
contrário.

Exemplo R5 é incrementado de 10. Ocorrerá o jump se houver


houver um carry
ADD #10, R5
JC TONI ;fará o salto se carry
... ;não ocorreu o carry.

3) ADDC Adiciona a fonte e o carry ao destino


ADDC.B

Sintaxe ADDC src, dst


ADDC.B src, dst

Operação src + dst + C dst

Descrição O operando fonte


fonte e o bit de carry são adicionados ao operando
destino. O operando fonte não é afetado. O operando destino perde o
prévio conteúdo para armazenar o resultado da operação.

Bits de status N: Setado se resultado negativo, resetado se positivo.


Z: Setado se o resultado for zero, resetado em caso contrário.
C: Setado se houver carry no resultado, resetado em caso
contrário.
V: Setado se ocorrer um overflow aritmético, resetado em caso
contrário.

Exemplo Um contador de 32 bits apontado


apontado por R13 é adicionado a outro
contador de 32 bits, onze palavras acima (20/2 + 2/2).
ADD @R13+, 20(R13) ;adiciona os LSD’s sem o carry
ADDC @R13+, 20(R13) ;adiciona os MSD’s com o carry dos LSD’s.

CEFET-MG 104
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

4) AND Fonte AND destino


AND.B

Sintaxe AND src, dst


AND.B src, dst

Operação src AND dst dst

Descrição Realiza a operação lógica AND entre os operandos fonte e destino. O


operando fonte não é afetado e o operando destino conterá o
resultado da operação.

Bits de status N: Setado se o MSB do resultado for um, resetado se zero.


Z: Setado se resultado zero. Resetado em caso contrário.
C: Setado se resultado diferente de zero, resetado em caso
contrário. ( NOT ZERO )
V: Resetado.

Exemplo O registro R5 é usado


usado para mascarar (#0AA55h) a palavra
endereçada por TOM. Se o resultado for zero saltará para o rótulo
TONI.
MOV #0AA55h, R5 ;carrega a mascara em R5
AND R5, TOM ;Mascara a palavra TOM com R5
JZ TINI ;salta se resultado igual a zero
... ;resultado diferente de zero

5) BIC Zera os bits do destino


BIC.B

Sintaxe BIC src, dst


BIC.B src,dst

Operação NOT src AND dst dst

Descrição Realiza a operação lógica AND entre o operando fonte invertido e o


operando destino. O operando fonte não é afetado e o resultado é
armazenado no destino.

Bits de status Não afetados

Exemplo1 Zera os seis bits mais significativos da palavra LEO.


BIC #0FC00, LEO

Exemplo2 Zera os bits 0 e 1 da porta P1.


P1
P1OUT .equ 021h
P1_0 .equ 01h
P1_1 .equ 02h
BIC.B #P1_0+P1_1, &P1OUT ;zera
zera os 2 LSB’s de P1

CEFET-MG 105
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

6) BIS Seta os bits do destino


BIS.B

Sintaxe BIS src, dst


BIS.B src, dst

Operação src OR dst dst

Descrição Realiza a operação lógica OR entre os operandos


operandos fonte e destino. O
operando fonte não é afetado e o resultado da operação é
armazenado no operando destino.

Bits de status Não afetados

Exemplo1 Seta os seis bits menos significativos da word TOM.


BIS #003Fh, TOM

Exemplo2 Seta os 2 LSB’s da porta P1.


P1OUT .equ 021h
P0 .equ 01h
P1 .equ 02h
BIS.B #P0+P1, &P1OUT

7) BIT Testa bits no destino


BIT.B

Sintaxe BIT src, dst

Operação src AND dst

Descrição Realiza a operação lógica AND entre a fonte e o destino. O resultado


re
afeta somente os bits de status. Os operandos fonte e destino não
são afetados.

Bits de status N: Setado se o MSB do resultado estiver setado, resetado em caso


contrário.
Z: Setado se resultado zero, resetado caso contrário.
C: Setado
ado se resultado não zero, resetado caso contrário
V: Resetado.

Exemplo1 Se o bit 9 de R8 estiver setado, salte para o label TOM.


BIT #0200h, R8 ;Bit 9 está setado?
JNZ TOM ;sim, vá para TOM
... ;não, continua.

Exemplo2 Se o bit 3 de R8
R8 estiver setado, salta para o label TOM.
BIT.B #8, R8
JC TOM

CEFET-MG 106
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

8) *BR, Branch Salta para o destino.

Sintaxe BR dst

Operação dst PC

Emulação MOV dst, PC

Descrição Realiza um alto incondicional numa faixa de endereços de 64k.


Todos os modos de endereçamento podem ser usados. Esta é uma
instrução de 16 bits.

Bits de status Não são afetados.

Exemplos BR #EXEC
EXEC ;salta para o label exec.
BR EXEC ;salta para o endereço contido em EXEC
BR &EXEC ;salta p/ o endereço contido no endereço
ndereço absoluto
;EXEC
BR R5 ;salta para o endereço contido em R5.
BR @R5 ;salta p/ o endereço contido na word
;apontada por R5.
BR @R5+ ;Idem anterior e incrementa R5 após.
BR X(R5) ;salta p/ o endereço contido no endereço
;apontado por R5 + X.

9) CALL Chamada de sub-rotina


sub

Sintaxe CALL dst

Operação SP - 2 SP
PC @SP
dst PC

Descrição Realiza a chamada de uma sub-rotina


sub rotina numa faixa de endereços de
64k. Todos os modos de endereçamento
endereçamento podem ser usados. O
endereço de retorno é armazenado na pilha. CALL é instrução de 16
bits.

Bits de status Não são afetados.

Exemplos CALL #EXEC ;chama o label EXEC


CALL EXEC ;chama o endereço contido em
;EXEC.
CALL &EXEC ;chama o endereço contido no
;endereço absoluto EXEC.
CALL R5 ;chama o endereço contido em R5.
CALL @R5 ;chama o endereço contido na word
;apontada por R5.
CALL @R5+ ;idem anterior com pós incremento.
CALL X(R5) ;chama o endereço contido no
;endereço apontado por R5 + X.

CEFET-MG 107
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

10) *CLR Zera destino


*CLR.B
Sintaxe CLR dst
CLR.B dst

Operação 0 dst

Emulação MOV #0, dst


MOV.B #0, dst

Descrição O operando destino é zerado.

Bits de status Não são afetados.

Exemplos CLR TONI ;a palavra TONI é zerada


CLR R5 ;zera R5
CLR.B TONI ;o byte TONI é zerado

11) *CLRC Zera o bit de carry

Sintaxe CLRC

Operação 0 C

Emulação BIC #1, SR

Descrição Zera o bit de carry. Esta


Est é uma instrução de 16 bits.
Bits de status N: Não afetado
Z: Não afetado
C: Zerado
V: Não afetado

Exemplo Um contador decimal de 16 bits apontado por R13 é somado a um


contador de 32 bits apontado por R12.
CLRC
DADD @R13, 0(R12) ;adiciona a parte baixa.
DADC 2(R12) ;adiciona o carry a parte alta.

12) *CLRN Zera o bit negativo

Sintaxe CLRN

Operação 0 N

Emulação BIC #4, SR

Descrição O bit N do registro de status é zerado. Esta é uma instrução de 16


bits.

Bits de status N: Zerado


Z: Não afetado
C: Não afetado
V: Não afetado
Exemplo CLRN

CEFET-MG 108
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

13) *CLRZ Zera o bit de status Z

Sintaxe CLRZ

Operação 0 Z

Emulação BIC #2, SR

Descrição O bit de zero do registro de status é zerado. Esta é uma instrução de


16 bits.

Bits de status N: Não afetado


Z: Zerado
C: Não afetado
V: Não afetado

Exemplo CLRZ

14) CMP Compara fonte e destino


CMP.B

Sintaxe CMP src, dst


CMP.B src, dst

Operação dst - src

Descrição O operando fonte é subtraído do operando destino.


destino. Isto é feito
somando o operando destino com o segundo complemento (1º
complemento + 1) do operando fonte. Os dois operandos não são
afetados e o resultado não é armazenado. Somente os bits de status
são afetados.

Bits de status N: Setado


tado se resultado negativo, resetado se positivo.
Z: Setado se resultado zero, resetado em caso contrário.
C: Setado se não houver ‘vem um’ para o MSB, resetado caso
contrário.
V: Setado se houver um overflow aritmético, resetado caso
contrário.
Exemplo1 Os registro R5 e R6 são comparados. Se forem iguais, o programa
continua no rótulo IGUAL.
CMP R5, R6 ;R5 = R6 ?
JEQ IGUAL ;se sim, salte para IGUAL.

Exemplo2 Dois blocos de RAM são comparados. Se não são iguais, vai para
pa o
rotulo ERRO.
ORG 0200h
BLOCO1 DB 00,01,02
ORG 0210h
BLOCO2 DB 00,01,02

MOV #3, R5 ;número de palavras a serem comp.


L$1 CMP.B BLOCO1-1(R5), BLOCO2-1(R5) ;são iguais?
JNZ ERRO ;se não vá para ERRO
DEC R5 ;todas as palavras foram comp.
JNZ L$1 ;se não volte para nova comp.
ERRO ...

CEFET-MG 109
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

15) *DADC Soma BCD o carry ao destino


*DADC.B
Sintaxe DADC dst
DADC.B dst

Operação dst + C dst (decimal)

Emulação DADD #0, dst


DADD.B #0, dst

Descrição O bit de carry é somado (BCD ou decimal) com o destino.

Bits de status N: Setado se o MSB é 1 resetado em caso contrário.


contrário
Z: Setado se o destino for 0, resetado em caso contrário.
C: Setado se o destino incrementa de 9999 para 0000,
Resetado em caso contrário.
Setado se o destino incrementa de 99 para 00, resetado
em caso contrário.
V: Indefinido.

Exemplo1 Quatro dígitos decimais contidos em R5 são adicionados a oito


dígitos
tos decimais apontados por R8.
CLRC
DADD R5, 0(R8) ;soma os LSD’s
DADC 2(R8) ;soma o carry ao MSD.

Exemplo2 Dois dígitos decimais contidos em R5 são somados a quatro dígitos


decimais apontados por R8.
CLRC
DADD.B R5, 0(R8)
DADC.B 1(R8)

16) DADD Soma fonte, carry e destino (BCD)


DADD.B
Sintaxe DADD src, dst
DADD.B src, dst

Operação src + dst + C dst (decimal)

Descrição O operando fonte e destino são tratados como números BCD


positivos. O operando fonte e o carry bit são somados BCD ao
operando destino. O operando fonte não é afetado. O conteúdo prévio
do destino é perdido, para o mesmo conter o resultado da operação.
O resultado é indefinido para números não BCD.

Bits de status N: Setado se o MSB


M é 1, resetado se 0.
Z: Setado se resultado zero, resetado em caso contrário.
C: Setado se resultado maior que 9999
Setado se resultado maior que 99
V: Indefinido

CEFET-MG 110
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Exemplo1 Um número de oito dígitos BCD contido em R5 e R6 é somado a


outro
o numero de oito dígitos BCD contido em R7R e R8 8. R6 e R8
contêm os MSD’s.
CLRC
DADD R5, R7 ;adiciona os LSD’s
DADD R6, R8 ;adiciona os MSD’s com carry.
JC OVERFLOW ;se carry, vá para rotina de erro.

Exemplo2 Incrementa um contador de dois


dois dígitos decimal (CNT).
CLRC
DADD.B #1, CNT

17) *DEC Decrementa o destino


*DEC.B

Sintaxe DEC dst


DEC.B dst

Operação dst - 1 dst

Emulação SUB #1, dst


SUB.B #1, dst

Descrição O operando destino é decrementado de 1. O conteúdo


conteúdo original é
perdido.

Bits de status N: Setado se resultado é negativo, resetado caso contrário


Z: Setado se resultado é zero, resetado em caso contrário
C: Resetado se destino vai de 0000h para FFFFh, setado
caso contrário.
V: Setado
ado se ocorrer um overflow aritmético, resetado em
caso contrário.
Seta se o valor inicial do destino for 8000h (word) ou
80h (byte), reseta em caso contrário.

Exemplo Move um bloco de 255 bytes de memória com endereço inicial EDE,
para
a outro bloco de memória com endereço inicial TONI.
MOV #EDE, R6
MOV #TONI, R5
MOV #255, R4
L$1 MOV.B @R6+, 0(R5)
INC R5
DEC R4
JNZ L$1

18) *DECD Decremento duplo do destino


*DECD.B

Sintaxe DECD dst


DECD.B dst

Operação dst - 2 dst

Emulação SUB #2, dst


SUB.B #2, dst

CEFET-MG 111
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Descrição O operando destino é decrementado de 2. O conteúdo original é


perdido.

Bits de status N: Setado se resultado é negativo, resetado se positivo


Z: Setado se resultado
resultado é zero, resetado caso contrário
C: Resetado se destino vai de 0000h para FFFFh, setado em caso
contrário.
V: Setado se ocorrer um overflow aritmético, resetado caso
contrário.
Seta se o valor inicial do destino for 8001h ou 8000h em
operações de word, e 80h ou 81h em operações de byte, reseta
caso contrário.

Exemplo DECD R10 ;decrementa R10 de duas unidades.

19) *DINT Desabilita (geral) interrupções.

Sintaxe DINT

Operação 0 GIE

Emulação BIC #8, SR

Descrição Todas as interrupções são desabilitadas. Realiza a operação lógica


AND entre a constante 08h e o registro de status. O resultado é
armazenado em SR.

Bits de status Os bits de status não são afetados

Bits de modo Somente o bit GIE é resetado


reseta

Exemplo O bit geral de interrupção é zerado para permitir a carga do contador


de 32 bits sem interrupções.
DINT ;desabilita todas as interrupções
NOP
MOV COUNTHI, R5 ;faz a carga do contador
MOV COUNTLO, R6
EINT ;habilita todas
s as interrupções.

20) *EINT Habilita (geral) interrupções

Sintaxe EINT

Operação 1 GIE

Emulação BIS #8, SR

Descrição Todas as interrupções são habilitadas. Realiza a operação lógica OR


entre a constante 08h e o registro de status. O resultado
resultado é
armazenado em SR.

Bits de status Não afetados

Bits de modo Somente o bit GIE é setado


Exemplo Idem anterior.

CEFET-MG 112
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

21) *INC Incrementa destino


*INC.B

Sintaxe INC dst


INC.B dst

Operação dst + 1 dst

Emulação ADD #1, dst

Descrição Soma 1 ao operando destino. O conteúdo original é perdido.

Bits de status N: Setado se resultado é negativo, resetado se positivo


Z: Setado se resultado é zero, resetado em caso contrário
C: Setado se destino vai de FFFFh para 0000h (word), ou
FFh para 00h (byte), resetado em caso contrário.
V: Setado se ocorrer um overflow aritmético, resetado
caso contrário. Seta se o valor inicial do destino for
7FFFh (Word), e 7Fh (byte), reseta em caso contrário.

Exemplo O byte STATUS é incrementado. Quando ele for igual a 11, vai para
OVFL.
INC.B STATUS
CMP.B #11, STATUS
JEQ OVFL

22) *INCD Incremento duplo no destino


*INCD.B

Sintaxe INCD dst


INCD.B dst

Operação dst + 2 dst

Emulação ADD #2, dst


ADD.B #2, dst

Descrição Soma 2 ao operando destino. O conteúdo original é perdido.

Bits de status N: Setado se resultado é negativo, resetado se positivo


Z: Setado se resultado é zero, resetado em caso contrário
C: Setado se destino vai de FFFFh para 0000h (Word), ou
FFh para 00h (byte), resetado em caso contrário.
V: Setado se ocorrer um overflow aritmético, resetado em
caso contrário. Seta se o valor inicial do destino for 7FFEh
ou 7FFFh (word),
(word), e 7Eh ou 7Fh (byte), reseta em caso
contrário.

Exemplo1 O dado no topo da pilha é removido sem usar registro.


PUSH R5
INCD SP ;não usar INCD.B, pois SP é word alinhado

Exemplo2 O byte no topo da pilha é incrementado por 2.


INCD.B 0(SP)

CEFET-MG 113
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

23) *INV Inverte o destino


*INV.B

Sintaxe INV dst


INV.B dst

Operação NOT dst dst

Emulação XOR #0FFFFh, dst


XOR.B #0FFh, dst

Descrição Inverte o operando de destino. O conteúdo original é perdido.

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado é zero, resetado em caso contrário
C: Resetado se resultado é zero, setado em caso contrário
V: Setado se conteúdo inicial do destino é negativo,
Resetado
setado em caso contrário.

Exemplo Encontra o segundo complemento de R5.


MOV #00AEH, R5
INV R5
INC R5

24) JC ou JHS Jump se o bit carry estiver setado ou Jump se maior ou igual

Sintaxe JC rótulo ou JHS rótulo

Operação Se C = 1: PC + 2 x offset PC
Se C = 0: executa a instrução seguinte

Descrição O bit C do registro de status é testado. Se estiver setado, o


número sinalizado de 10 bits (offset) contido nos LSB’s da
instrução, é somado ao PC. Se estiver
estiver resetado, a próxima
instrução após o jump será executada. JC é usado para
comparação de números não sinalizados.

Bits de status Não afetados.

Exemplo R5 é comparado com 15. Se for maior ou igual salta.


CMP #15, R5
JHS SALTA ;salta se R5 >= 15
... ;continua se R5 < 15

25) JEQ ou JZ Jump se igual ou jump se zero.

Sintaxe JEQ rótulo ou JZ rótulo

Operação Se Z = 1: PC + 2 x offset PC
Se Z = 0: executa a instrução seguinte

Descrição O bit Z do registro de status é testado. Se estiver setado, o


número sinalizado de 10 bits (offset) contido nos LSB’s da
instrução é somado ao PC. Se Z estiver resetado a instrução
seguinte ao JUMP é executada.

CEFET-MG 114
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Bits de status Não afetados.

Exemplo alta para


Salta o endereço LEO se R6 é igual ao conteúdo da
tabela.
CLR R5
CMP R6, tabela(R5)
JEQ LEO

26) JGE Jump maior ou igual

Sintaxe JGE rótulo

Operação Se (N XOR V) = 0 então salte p/ o rótulo: PC + 2xoffset PC


Se (N XOR V) = 1 então execute a próxima instrução.

Descrição Os bits N e V do registro de status são testados. Se os bits N e V são


iguais (set ou reset), os 10 bits sinalizados contidos nos LSB’s da
instrução são somados ao PC e o salto é realizado. Se apenas
ap um dos
bits é setado, a instrução seguinte ao jump é executada. Esta
instrução é usada para comparação de números inteiros sinalizados.

Bits de status Não afetados.

Exemplo Quando o conteúdo de R6 é maior ou igual ao conteúdo da memória


apontada
pontada por R7, o programa continua no rotulo EDE
CMP @R7,R6 ;R6 >= (R7) ?, números sinalizados.
JGE EDE ;se sim, vá para EDE
..... ;se não, continue.

27) JL Jump se menor (less)

Sintaxe JL rótulo

Operação Se (N XOR V) = 1 então salte p/ o rótulo: PC + 2xoffset PC


Se (N XOR V) = 0 então execute a próxima instrução.

Descrição Os bits N e V do registro de status são testados. Se apenas um dos


bits é setado, os 10 bits sinalizados contidos nos LSB’s da instrução
são somados ao PC e o salto é realizado. Se os bits N e V são iguais
(set ou reset), a instrução seguinte ao jump é executada. Esta
instrução é usada para comparação de números inteiros sinalizados.

Bits de status Não afetados.

Exemplo Quando o conteúdo de R6 é menor que o conteúdo da memória


apontada por R7, o programa salta para EDE.
CMP @R7, R6 ;R6 < (R7) ?, números sinalizados.
JL EDE ;se sim, vá p/ EDE
..... ;se não, continue.

28) JMP Jump incondicional

Sintaxe JMP rótulo

Operação PC + 2 x offset PC

CEFET-MG 115
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Descrição O número sinalizado de 10 bits contidos nos LSB’s da instrução é


somado ao PC.

Bits de status Não afetados.

Sugestão Esta instrução de uma word, substitui a instrução BRANCH na faixa


de –511
511 a +512 words relativos
relativo ao corrente PC.

29) JN Jump se negativo

Sintaxe JN rótulo

Operação Se N = 1, então salta p/ o rótulo: PC + 2 x offset PC


Se N = 0, execute a próxima instrução.

Descrição O bit N do registro de status é testado. Se estiver setado, o número


sinalizado de 10 bits contido nos LSB’s da instrução é adicionado ao
PC. Se N estiver resetado, então executa a próxima instrução após o
jump.

Bits de status Não afetados.

Exemplo O resultado de um processamento em R5 é subtraído de COUNT. Se


o resultado for negativo, COUNT é zerado e o programa continua a
execução em outro caminho.
SUB R5, COUNT;COUNT – R5 COUNT
JN L$1 ;se negativo COUNT=0 em PC=L$1
..... ;se positivo, continue com COUNT>=0
L$1 CLR COUNT
.....

30) JNC, JLO Jump se não carry ou jump se menor (lower)

Sintaxe JNC rótulo ou JLO rótulo

Operação Se C = 0, então salta p/ rótulo: PC + 2 x offset PC


Se C = 1, execute a próxima instrução.

Descrição O bit C do registro de status é testado. Se ele estiver resetado, o


número sinalizado de 10 bits contido nos LSB’s da instrução é
somado ao PC. Se C estiver setado então a próxima instrução após o
jump é executada. Esta instrução é usada para comparar números
sem sinal (0 a 65.535)

Bits de status Não afetados

Exemplo O resultado de um processamento em R6 é somado a BUFFER. Se


ocorrer ‘vai um’ uma rotina de erro é usada no endereço ERRO.
ADD R6, BUFFER
JNC CONT ;se não carry vá p/ CONT
ERRO ...... ;inicio da rotina de erro
......
CONT ...... ;Continua com o fluxo normal

CEFET-MG 116
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

31) JNE, JNZ Jump se não igual ou jump se não zero

Sintaxe JNE rótulo ou JNZ rótulo

Operação Se Z = 0, então salta p/ o rótulo: PC + 2 x offset PC


Se Z = 1, então executa a próxima
próx instrução

Descrição O bit Z do registro de status é testado. Se ele estiver resetado, o


número sinalizado de 10 bits contido nos LSB’s da instrução é
somado ao PC. Se Z estiver setado, então executa a próxima
instrução após o jump.

Bits de status Não afetados.

Exemplo Salta para TONI se R7 e R8 tiverem conteúdos diferentes.


CMP R7, R8 ;compara R7 com R8
JNE TONI ;salta para TONI se diferente
..... ;continua se igual.

32) MOV Move fonte para destino


MOV.B

Sintaxe MOV src, dst


MOV.B src, dst

Operação src dst

Descrição O conteúdo do operando fonte é movido para o operando destino. O


operando fonte não é afetado. O conteúdo prévio de operando destino
é perdido.

Bits de status Não afetado

Exemplo Os conteúdos da tabela endereçada por EDE são copiados para a


tabela endereçada por TOM. O tamanho das tabelas deve ser de 20h
localizações.
MOV #EDE, R10 ;prepara o ponteiro
MOV #TOM, R11 ;prepara o segundo ponteiro
MOV #20, R9 ;prepara o contador
refaz MOV @R10+, 0(R11)
ADD #2, R11 ;atualiza ponteiro
DEC R9 ;atualiza contador
JNZ refaz ;se contador dif. 0 continue cópia.
.... ;se contador = 0, termina cópia.

33) *NOP Não operação

Sintaxe NOP

Operação Nenhuma

Emulação MOV #0, #0

Descrição A instrução é usada para eliminação de instrução no programa ou


para definição de tempos de espera.

CEFET-MG 117
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Bits de status Não afetados


Nota Outras instruções podem emular a não operação usando diferentes
números de ciclos
cicl de clock e tamanhos de códigos:
MOV 0(R4), 0(R4) ;6 ciclos, 3 words
MOV @R4, 0(R4) ;5 ciclos, 2 words
BIC #0, EDE(R4) ;4 ciclos, 2 words
JMP $+2 ;2 ciclos, 1 word
BIC #0, R5 ;1 ciclo , 1 word

34) *POP Retira word da pilha para o destino


*POP.B

Sintaxe POP dst ou POP.B dst

Operação @SP dst


SP + 2 SP

Emulação MOV @SP+, dst


MOV.B @SP+, dst

Descrição O conteúdo da localização de memória apontada pelo Ponteiro


Po de
pilha (SP) é movido para o destino. Após o ponteiro de pilha é
incrementado por 2.

Bits de status Não afetados.

Exemplo POP R7 ;restaura R7


POP SR ;restaura o registro de status

Nota O ponteiro de pilha é sempre incrementado por 2 independente do


sufixo .B

35) PUSH Coloca a word na pilha


PUSH.B

Sintaxe PUSH src ou PUSH.B src

Operação SP – 2 SP
src @SP

Descrição O registro SP é decrementado por 2, e então o operando destino é


movido para a RAM word endereçada por SP.

Bits de status Não afetados

Exemplo PUSH SR ;salva SR na pilha


PUSH R7 ;salva R7 na pilha

Nota O ponteiro de pilha é sempre decrementado por 2 independente do


sufixo .B

36) *RET Retorno de sub-rotina


sub

Sintaxe RET

Operação @SP PC
SP + 2 PC

CEFET-MG 118
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Emulação MOV @SP+, PC

Descrição O endereço de retorno salvo na pilha pela instrução CALL, é movido


para o PC. O programa continua no endereço seguinte ao da
instrução CALL.

Bits de status Não afetado.

37) RETI Retorno de interrupção

Sintaxe RETI

Operação @SP SR
SP + 2 SP
@SP PC
SP + 2 SP

Descrição O registro de status e o PC são restaurados da pilha. O registro SP é


incrementado por 4. Os conteúdos restaurados da pilha foram salvos
no momento da interrupção.

Bits de status Todos


dos restaurados da pilha

Bits de modo Todos restaurados da pilha

38) *RLA Rotação aritmética a esquerda


*RLA.B

Sintaxe RLA dst ou RLA.B dst

Operação C  MSB  MSB – 1 .... LSB +1  LSB  0

Emulação ADD dst, dst


ADD.B dst, dst

Descrição O operando destino é deslocado a esquerda de uma posição, como


mostrado na Figura B.1.. O MSB é deslocado para o carry bit e o LSB
é preenchido com 0. A instrução RLA funciona como uma
multiplicação por 2 sinalizada. Um overflow ocorrerá se o destino >=
multiplicação
4000h ou dst < C000h antes da operação. O resultado mudará de
sinal.

Figura B.1 - RLA


Um overflow ocorrerá se dst >= 40h ou dst < C0h antes da operação.
O resultado mudará de sinal.

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Carregado do MSB
V: Setado se ocorrer um overfow, resetado caso contrário

CEFET-MG 119
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Exemplo Multiplica
plica R7 por 4
RLA R7
RLA R7

Nota O assembler não reconhece a instrução RLA @R5+, que deve ser
substituída por ADD @R5+, -2(R5).

39) *RLC Rotação circular a esquerda através do carry


*RLC.B

Sintaxe RLC dst ou RLC.B dst

Operação C  MSB  MSB-1 .... LSB+1  LSB  C

Emulação ADDC dst, dst

Descrição O operando destino é deslocado de uma posição a esquerda como


mostrado na Figura B.2.. O bit de carry é deslocado para o LSB e o
MSB é deslocado para o bit de carry.

Figura B.2 - RLC

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Carregado do MSB
V: Setado se ocorrer um overfow, resetado caso contrário
Setado se 03FFFh < dstinicial
dst < 0C000h ou se 03Fh < dstinicial
dst
< 0C0h, resetado em caso contrário.

Exemplo O bit de entrada P1.1


P1 é colocado no LSB de R5
BIT.B #2, &P1IN ;informação carry
RLC.B R5 ;carry = P1IN.1 LSB R5
;o byte alto de R5 é resetado.

Nota O assembler não reconhece a instrução RLC @R5+, que deve ser
substituída por ADDC @R5+, -2(R5)

40) RRA Rotação aritmética a direita


RRA.B

Sintaxe RRA dst ou RRA.B dst

Operação O operando destino é deslocado de uma posição a direita, como


mostrado na Figura B.3.. O MSB permanece inalterado e é copiado
para MSB – 1, o LSB + 1 é deslocado para LSB e o LSB é deslocado
para o carry.
carry

Figura B.3 - RRA

CEFET-MG 120
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Carregado do LSB
V: Resetado

Exemplo O conteúdo de R5 é multiplicado por 0,75.


PUSH R5 ;armazena temporariamente R5 na pilha
RRA R5 ;R5 x 0,5
ADD @SP+, R5 ;R5 x 0,5 + R5 = 1,5 x R5 = R5
RRA R5 ;(1,5 x R5) x 0,5 = 0,75 x R5 = R5

41) RRC Rotação circular a direita através do carry


RRC.B

Sintaxe RRC dst ou RRC.B dst

Operação C MSB MSB – 1 .... LSB + 1 LSB C

Descrição O operando destino é deslocado de um bit a direita como mostrado


na Figura B.4.
B. . O bit de carry é deslocado para o MSB, e o LSB
L é
deslocado para o bit de carry.

Figura B.4 - RRC


Bits de status N: Setado se resultado negativo, resetado se positivo
Z: Setado se resultado zero, resetado em caso contrário
C: Carregado do LSB
V: Setado se valor
valor inicial do destino for positivo e valor inicial do
carry for 1, resetado em caso contrário.

Exemplo R5 é deslocado de 1 bit à direita. O MSB é carregado com 1.


SETC ;prepara o carry para MSB
RRC R5 ;R5 / 2 + 8000h = R5

42) *SBC Subtrai o ‘borrow’ do destino


*SBC.B

Sintaxe SBC dst ou SBC.B dst

Operação dst + 0FFFFh + C dst


dst + 0FFh + C dst

Emulação SUBC #0, dst


SUBC.B #0, dst

Descrição O bit de carry menos 1 é somado ao destino. O conteúdo prévio do


destino
no é perdido.

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Resetado se dst foi decrementado de 0000h p/ 0FFFFh
ou de 00h para 0FFh, setado em caso contrário
V: Setado se inicialmente C = 0 e dst = 08000h
Setado se inicialmente C = 0 e dst = 080h

CEFET-MG 121
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Exemplo Um contador de 16 bits apontado por R13 é subtraído de outro


contador de 32 bits apontado por R12.
SUB @R13, 0(R12) ;subtrai os LSD’s
SBC 2(R12) ;subtrai o carry do MSD

Nota O borrow é tratado como um não carry: Borrow carry bit


Sim 0
Não

43) *SETC Seta o bit de carry

Sintaxe SETC

Operação 1 C

Emulação BIS #1, SR

Descrição O bit de carry é setado

Bits de status N: Não afetado


Z: Não afetado
C: Setado
V: Não afetado

Exemplo Emula uma subtração decimal. Subtrai R5 de R6 decimalmente.


Suponha que R5 = 3987 e R6 = 4137.
ADD #6666h, R5;Move o conteúdo de R5 de 0-9 9 p/ 6-F
6
;R5 = 3987 + 6666 = 9FEDh
INV R5 ;R5 = não R5 = 6012h
SETC ;prepara o carry = 1
DADD R5, R6 ;emula a subtração pela soma de:
;(10000 – R5 – 1)
; R6 = R6 + R5 + 1
;R6=4137 + 6012 + 1=10150 = 0150

44) *SETN Seta o bit negativo

Sintaxe SETN

Operação 1 N

Emulação BIS #4, SR

Descrição O bit N do registro de status é setado

Bits de status N: Setado


Z: Não afetado
C: Não afetado
V: Não afetado

CEFET-MG 122
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

45) *SETZ Seta o bit de zero

Sintaxe SETZ

Operação 1 Z

Emulação BIS #2, SR


Descrição O bit de zero do registro de status é setado.
setado

Bits de status N: Não afetado


Z: Setado
C: Não afetado
V: Não afetado

46) SUB Subtrai fonte do destino


dest
SUB.B

Sintaxe SUB src, dst ou SUB.B src, dst

Operação dst + (não src + 1) dst ou


dst – src dst

Descrição O operando fonte é subtraído do operando destino, pela adição


do primeiro complemento do operando fonte com a constante 1.
O operando
erando fonte não é afetado. O conteúdo prévio do operando
destino é perdido.

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Setado se há um carry do MSB do resultado,
esultado, resetado
caso contrário.
Setado se não borrow, resetado se borrow
V: Setado se ocorrer um overflow aritmético, resetado em
caso contrário.

Exemplo Veja exemplo na instrução SBC

Nota O borrow é tratado como um não carry: Borro


Borrow Carry
Sim 0
Não 1

47) SUBC, SBB Subtrai a fonte e o borrow (not carry) do destino


SUBC.B, SBB.B

Sintaxe SUBC src, dst ou SBB src, dst


SUBC.B src, dst ou SBB.B src, dst

Operação dstt + não src + C dst ou


dst – src – 1 + C dst

Descrição O operando fonte é subtraído do operando destino, pela adição do


primeiro complemento do operando fonte e o bit de carry. O
operando fonte não é afetado. O prévio conteúdo do operando
oper destino
é perdido.

CEFET-MG 123
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Setado se há um carry do MSB do resultado, resetado
caso contrário.
Setado
etado se não borrow, resetado se borrow
V: Setado se ocorrer um overflow aritmético, resetado em
caso contrário.

Exemplo Um numero de 16 bits apontado por R13 é subtraído de outro


numero de 16 bits em R10 e R11 (MSD)
SUB.B @R13+, R10 ;subtrai
ubtrai os LSD’s sem o carry
SUBC.B @R13, R11 ;subtrai os MSD’s com carry

Nota O borrow é tratado como um não carry: Borrow Carry


Sim 0
Não 1

48) SWPB Troca bytes (swap bytes)

Sintaxe SWPB dst

Operação Bits 15 a 8  bits 7 a 0

Descrição Os bytes alto e baixo do operando destino são trocados como mostra
a Figura B.5.
B.

Figura B.5 - SWPB

Bits de status N: Não afetado


Z: Não afetado
C: Não afetado
V: Não afetado

Exemplo MOV #040BFh, R7 ;0100 0000 1011 1111 R7


SWPB R7 ;1011 1111 0100 0000 R7

CEFET-MG 124
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

49) SXT Estende sinal

Sintaxe SXT dst

Operação Bit 7 bit 8 a 15

Descrição O sinal do byte


byte baixo é estendido para o byte alto como mostrado na
Figura B.6.
B.

Figura B.6 - SXT

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado
resultado zero, resetado em caso contrário
C: Setado se resultado não é zero, resetado caso contrário
V: Resetado

Exemplo MOV.B &TCDAT, R7 ;TCDAT = 085h: ...... 1000 0101


SXT R7 ;R7 = 0FF85h:1111 1111 1000 0101
ADD R7, R6 ;soma numero de 16 bits.

50) *TST Testa destino


*TST.B

Sintaxe TST dst ou TST.B dst

Operação dst + 0FFFFh + 1 ou dst + 0FFh + 1

Emulação CMP #0,dst ou CMP.B #0,dst

Descrição O operando destino é comparado com zero. Os bits de status são


atualizados
dos conforme o resultado. O operando destino não é afetado.

Bits de status N: Setado se destino é negativo, resetado se positivo


Z: Setado se destino é zero, resetado em caso contrário
C: Setado
V: Resetado

Exemplo R7 é testado. Se
Se ele é negativo, continua em R7NEG; se é positivo
mas não zero continua em R7POS e se zero continua em R7ZERO.
TST R7 ;testa R7
JN R7NEG ;salta se negativo
JZ R7ZERO ;salta se zero
R7POS ..... ;R7 é positivo mas não zero
R7NEG ..... ;R7 é negativo
R7ZERO ..... ;R7 é zero

CEFET-MG 125
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

51) XOR Ou exclusivo da fonte com o destino


XOR.B

Sintaxe XOR src,dst ou XOR.B src,dst

Operação src XOR dst dst

Descrição Realiza a operação lógica ou exclusivo entre o operando fonte e o


operando destino. O operando fonte não é alterado e o resultado é
armazenado no destino.

Bits de status N: Setado se MSB estiver setado, resetado caso contrário


Z: Setado se resultado for zero, caso contrário resetado
C: Setado se resultado
resulta ≠ 0, do contrário resetado
V: Setado se ambos os operandos forem negativos.

Exemplo Os bits setados em R6 invertem os correspondentes bits da word


TONI.
XOR R6, TONI

CEFET-MG 126
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

REFERÊNCIAS BIBLIOGRÁFICAS

1 SCHETTINO, John Kennedy S. Sistemas Microprocessados


Microprocessados II. Belo
Horizonte: CEFET--MG, 2005, 138p.

2 s. MSP430x1xx
Texas Instruments. MSP430x1xx Family: User´s Guide 2006 414p.

3 Texas Instrumentss. MSP430F15x, 16x, 161x Data


ata sheet 2011 77p.
77

CEFET-MG 127

Você também pode gostar