You are on page 1of 133

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

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 de programa a partir de um fluxograma

Prática 06 34
✓ Instruções de desvio

Prática 07 38
✓ Estudo de Sub-rotinas

Prática 08 42
✓ Exercícios de programação

Prática 09 44
✓ Dispositivo de saída

Prática 10 49
✓ Dispositivo de entrada

Prática 11 53
✓ Interrupção

Prática 12 56
✓ Teclado

Prática 13 65
✓ Display de LCD

Prática 14 70
✓ Integração de programas
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 15 76
✓ Semáforo

Prática 16 80
✓ Motor de passo

Prática 17 87
✓ Controle digital de velocidade de motor cc

Prática 18 93
✓ Controle de portão de garagem

Prática 19 97
✓ Dimmer digital

Prática 20 102
✓ Voltímetro dc

Apêndice A – Tabela ASCII 106

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

Referências Bibliográficas 133

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

Caríssimos alunos,

Como se pode observar na capa desta apostila, existem várias 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 esta apostila seja a melhor possível, portanto gostaríamos que você
prestasse muita atenção em tudo que a partir deste momento vamos oferecer e nos
ajude nesta missão. Talvez assim consigamos atingir nossos objetivos.
Esta apostila tem como público 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 horas aula) com vistas a fornecer roteiros de aulas práticas para o
aprendizado das estruturas internas da família de microcontroladores MSP430
fabricado pela Texas 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é oito se destinam ao aprendizado da
programação Assembly, uso do conjunto de instruções do microcontrolador, estruturas
de repetição e sub-rotina, sendo usado o ambiente de programação em modo
simulação. Da prática nove em diante são 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, sendo então necessário o hardware do MSP430,
ou seja, o kit do microcontrolador. Ressalta-se também que a partir desta prática a
codificação é realizada na linguagem C e da pratica doze em diante inicia-se o uso da
técnica de modularização de códigos. Nesta 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,

Rosângela Fátima da Silva e Marcos A. S. 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 de


desenvolvimento (IDE) da IAR Systems
OBJETIVO

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


(IAR Embedded Workbench – IAR EW)
✓ Construção de programas 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 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. A IAR Systems é a
responsável pelo desenvolvimento do software 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.

A edição consiste na digitação, de todos os mnemônicos pertencentes ao


programa, utilizando um editor de texto tipo ASCII. Neste estágio o programa está 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 serão relatados pelo programa montador. O
usuário deverá então corrigi-los na edição e novamente fazer a montagem. Este
procedimento deverá ser repetido até que não haja mais erros.
A linkedição faz a ligação das referências (sub-rotinas e variáveis) entre vários
códigos objetos. Isto ocorre quando construímos programas 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,
bastando para isto apenas o computador. Porém no modo emulação, é necessário
além do computador, o hardware do microcontrolador, pois neste caso o programa
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

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 e dispositivos externos.
Cada etapa acima 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.

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, IAR
Systems, IAR Embedded Workbench kickstart, IAR Embedded Workbench,
conforme se pode observar na Figura 2, apresentada a seguir, ou clique no ícone
correspondente na área de trabalho.

Figura 2 - Janela de trabalho do Windows.

Quando clicar sobre a opção IAR Embedded Workbench, 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.

Caso esteja iniciando a tarefa de desenvolvimento do programa, naturalmente


deve-se escolher a opção File no menu principal (lado superior esquerdo da tela) 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.

Esta opção abre uma nova janela, que permite criar uma nova á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 estaremos
escrevendo 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 utilização 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 6).

Figura 6 – Janela para criar um novo projeto.

Será então apresentada uma nova janela que permite escolher o tipo de projeto.
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, o próximo passo é salvá-lo.
Quando se salva um arquivo, naturalmente deve-se que escolher uma pasta. Vá a
Documentos, lá existe uma pasta para a sua turma. Caso não exista, faça a gentileza
de criá-la. Dentro desta pasta crie a sua pasta, de preferência 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, 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, 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 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,R6 ;MEMÓRIA −> REGISTRO

Uma vez digitado o programa é necessário 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 é hora de verificar se o código digitado está correto e transformá-lo em
código de máquina utilizando os processos de montagem e linkedição. Entretanto, para
que tenhamos sucesso é necessário selecionar para qual componente da família
MSP430 estamos escrevendo o programa. Selecione no menu principal a opção
Project>Options (Alt F7) (Figura 11).
Na caixa category (Figura 12) selecione a aba General Options e verifique se o
MSP selecionado é o 430F1611 na caixa de opção Device. Caso 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 click na apção MSP430F1611.

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

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.

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

Figura 14 - Janela do Workspace, do editor de texto e mensagens do linkeditor.

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

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


ao processo de montagem do programa, aba Messages. Neste caso não foram
encontrados erros de sintaxe (Total number of errors: 0) e nem avisos de alerta (Total
number of warnings: 0). As warnnigs ao contrário dos erros sintaxe não impedem 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. Se você der um duplo clique sobre a
mensagem, 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 programa 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
caso ele existisse de fato. Para carregar o programa no ambiente de simulação, vá ao
menu principal, selecione a opção Project e clique sobre Download and Debug, ou
pressione as teclas CTRL + D, ou então clique sobre o ícone , disponível na barra de
ferramentas do Embedded 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 original.
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

Uma nova barra de 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 e passo a passo
com possibilidade de reinício, parada e etc. Os botões da barra de ferramenta de
depuração estão apresentados na Figura 17.
É possível acrescentar novas janelas neste ambiente. Vá ao menu principal,
clique sobre o botão View e observe a lista de opções. Selecione 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 em nossas 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 de 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
barra de ferramentas (Figura 17) e verificar a simulação do mesmo.

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

Reset - Reinicia o programa.

Break - Pára a execução do 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.

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


sub-rotina, entra na sub-rotina.

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

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


executado sem a visualização do depurador.

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


o cursor.

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


término do programa.

Toggle Breakpoint - Cria/apaga um ponto de parada (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, 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 da barra de ferramentas de depuração.

Dica:
✓ Se você não observar diferenças 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.
criado um arquivo projeto. Os passos Salvar arquivo.
para 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 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 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ção Go ( ).
Após a execução do programa 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 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 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 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 a maioria das instruções de transferência de oito
bits existentes no conjunto de instruções do MSP430. E também aprendeu a elaborar
seus programas usando o ambiente de programação IAR EW. Vamos agora aproveitar
o projeto elaborado na aula anterior e estudar mais atentamente as instruções de carga
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
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 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 DE 8 BITS


Estas instruções movem o conteúdo do operando fonte para o operando destino.
Sintaxe: instrução fonte, destino, exemplo: MOV R4, R15.
Todos os registros do MSP são de dezesseis bits (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.

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 de uso geral R15
Tabela 1 - Registros da CPU.

Atenção:
✓ O MSP possui 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 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 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.

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

2.2 - ATIVIDADES

2.2.1. Execute passo a passo 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,&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.

Dica:
✓ Para executar o programa passo a passo, entre no modo 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á 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. Abra uma nova pasta (Aula_02) e construa um novo projeto para testar as
seguintes instruções:

MOV.B #0AAH,R4 ;IMEDIATO −> REGISTRO


MOV.B #0BBH,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 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

2.2.3. Construa 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), R6 e MOV.B @R4, R6

• O que foi armazenado nos registros R4 e R5, dados ou 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 de carga e


transferência de 16 bits
OBJETIVO

✓ Estudar as instruçõ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 de 8 bits. Isto
significa que você já conhece as instruções de carga e transferência de 16 bits, uma
vez que a única diferença é o número de bits transferidos. Agora, temos 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 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, portanto eles são utilizados em operações de 16
bits. Esses registros (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 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 0x1100.
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 mais claro, pois a instrução MOV você conhece e SP
representa o registro Ponteiro da Pilha. A instrução acima inicializa o SP com o
endereço par após o final da memória RAM. Esse registro é automaticamente
incrementado ou decrementado, em situações específicas que serão vistas no decorrer
deste curso.
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

3.2. ATIVIDADES
3.2.1. Abra uma nova pasta (Aula_03) e construa um novo projeto para testar as
seguintes instruções:
;Número da instrução
MOV.W #0x1234,R7 ;1
MOV.W #0x5678,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 colunas da Tabela 3 após ter executado as


referidas instruções:

INSTRUÇÕES/ 1 2 3 4 5 6 7 8
REG. e PILHA
PC
SP
R7
R8
R9
(09FFH)
(09FEH)
(09FDH)
(09FCH)
Tabela 3 - Conteúdo corrente de registros.

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

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


PUSH?

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

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

3.2.2. Construa um novo projeto para testar as seguintes instruções:


; Número da instrução
MOV.W #0xAAAA, R10 ;1
MOV.W #0xBBBB, 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
(09FFH)
(09FEH)
(09FDH)
(09FCH)
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 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 ;5 - MEMÓRIA −> REGISTRO
MOV #0x202, 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 PILHA
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 de números binários e hexadecimal

4.1. INTRODUÇÃO
A CPU contém a Unidade Lógica e Aritmética. Essa, como o próprio 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 posições de memória como operandos das
operações aritméticas (soma e subtração) e lógicas (and, or, xor, etc).
A maioria das operações lógicas e aritméticas afetam os flags. Por isto é
importante consultar o conjunto de instruções para saber como e quando os flags são
afetados. Os flags são bits que sinalizam o resultado das 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 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, 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), será setado se o
resultado for diferente de zero e resetado em caso contrário.
✓ Z – Zero (bit 1) ➔ será setado caso o resultado de uma operação seja
zero e resetado em caso contrário.
✓ N – Negative (bit 2) ➔ será setado se o resultado de uma operação for
negativo e resetado se positivo.
✓ 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
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 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

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

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


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

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 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.

4. Repita os itens 2 e 3 para os valores 49H e 67H.

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)

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

• 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:

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 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 em que ela foi escrita. Porém a capacidade de tomada de
decisão oferecida 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, 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.


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

Como se pode observar, o fluxograma independe da linguagem 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.
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.
;*********************************************************************************************************
#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 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.

• Armazene os valores 00, 01, 02, ..., 0F nos endereços 200H a 20FH

• Execute o programa 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, totalmente, acione a tecla F5 ou o ícone
e em seguida clique sobre o ícone para parar. Consulte a Figura 17.

• Reinicie 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 no editor a instrução


MOV.B #10H,R6 por
MOV.B #01H,R6.
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 do modo de depuração e desfaça a troca, substituindo


MOV.B #01H,R6 por
MOV.B #10H,R6.

• Troque a instrução
JNZ volta por
JZ volta
Armazene o valor AA nos endereços 200H 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 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, 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 de


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

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 decisões. As instruções que
usamos, neste caso são os jumps condicionais: JZ, JNZ, JC, JNC, JN, JGE e JL.
Jumps relativos são aqueles que desviam o programa para um endereço
calculado a partir da posição atual do PC (Program Counter). Além da instrução JMP,
todos os jumps condicionais dão saltos relativos ao apontador de programa. Estes
saltos relativos são ditos curtos, pois a extensão do salto está limitada a faixa de -511 a
+512 words.
A instrução BR (Branch) desvia o programa para qualquer uma das 64k posições
de memória endereçáveis e por isto é dito salto incondicional 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 e escreve como resposta em um terceiro bloco: 00 se iguais,
01 se menor e 02 se maior é apresentado na
Figura 22.

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

Compara

APT1 = end. Inic. bloco 1


APT2 = end. Inic. bloco 2
APT3 = end. Inic. bloco 3
Cont = 10

S
(APT1) = (APT2) (APT3) = 0

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

(APT3) = 2

APT1 ++
APT2 ++
APT3 ++
Cont --

N Cont = 0

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

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

;*********************************************************************************************************
; Descrição:
;*********************************************************************************************************
#include "msp430.h" ; #define controlled include file
NAME main ; module name
PUBLIC main ; make the main label visible outside this 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


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(R4),0(R5)
JZ igual
JNC menor
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
menor
MOV.B #01,0(R6)
JMP cont
END

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

6.2. ATIVIDADES
6.2.1. Teste do programa proposto.

• Abra um novo projeto no IAR EW, crie um arquivo e digite no editor de texto o
programa de comparação de dados.

• Execute o programa e verifique seu funcionamento.

• Reinicie o programa e execute-o passo a passo até a instrução “JZ igual” e


justifique os valores 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?

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 dados comparado.

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

Prática 7 - Estudo de sub-rotina


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 capaz de executá-la. Torna-se necessário implementar um grupo de
instruções, que denominamos rotina, para realizá-la. 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
diversas vezes. O que nos obriga a copiar a rotina de divisão diversas vezes dentro 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 todas as
vezes que for necessário, observe a Figura 23.

Figura 23 – Sub-rotina.

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


principal é responsável por chamar a sub-rotina através da instrução CALL. Essa
instrução carrega no PC o endereço inicial da sub-rotina, fazendo mudar a sequencia
de execução do programa. E guarda na pilha o endereço de volta, o que garante 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

retorno à sequência interrompida. Essa operação é denominada chamada de sub-


rotina.
A sub-rotina é executada até a sua última instrução, que é obrigatoriamente a
instrução de retorno de sub-rotina - RET. Esta instrução retira da pilha o endereço de
volta ao programa, armazenado-o no PC.

7.2. ATIVIDADES

7.2.1. Analise e verifique se o fluxograma apresentado na Figura 24 e o programa


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

PRINCIPAL DIVISÃO

DIVIDENDO 15
SALVAR CONTEXTO
DIVISOR 3

DIVISÃO QUOC 0

S
DIVIDENDO = 0?

S
DIVISOR = 0?

DIVISOR > S
DIVIDENDO

DIVIDENDO DIVIDENDO - DIVISOR QUOC -1

S
DIVIDENDO < 0?

QUOC QUOC + 1 RESTAURAR CONTEXTO

RETORNA

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


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

Programa da divisão relativo 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: Executa da divisão entre dois números não sinalizados
;Entrada: dividendo – R4
; divisor – R5
;Saída: R6 - quociente = -1 se divisor = 0 ou se divisor >dividendo ou
; R6 = resultado da divisão
;*********************************************************************************************************
DIVISAO
PUSH R4 ; dividendo
PUSH R5 ; divisor
MOV.W #00,R6
TST R4 ; verificar de dividendo =0
JZ fim
TST R5 ; verificar de divisor =0
JZ menos_1
CMP.W R5,R4 ; verificar se divisor > dividendo
JNC fim
volta SUB.W R5,R4 ; efetuar a divisão
JNC fim
INC.W R6
JMP volta
menos_1
MOV.W #0FFFFH,R6
fim POP R5 ; restaurar contexto
POP R4
RET
END

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

• Modifique o programa anterior de forma que a sub-rotina além de devolver o


resultado em R6, devolva o resto da divisão em R7. Teste o programa.

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


módulo principal e uma sub-rotina 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:

ORG 200H
string1 DB “CEFET-MG/$”
ORG 210H
string2 DB “ELT$”
ORG 220H
stringc DS 16

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

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

OBJETIVO

✓ Elaborar fluxogramas e os respectivos programas em Assembly.

8.1. INTRODUÇÃO

A única maneira de aprender é praticando. Naturalmente, cometeremos enganos,


mas podemos minimizá-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 por um


módulo principal e uma sub-rotina 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 da string está definido em R5.

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


uma sub-rotina que desloque circularmente uma string. A sub-rotina recebe em
R4 o endereço inicial, em R5 o tamanho da string e circula os seus caracteres
de uma posição da direita para a esquerda, conforme Figura 25.
Endereço (h) 0200 0201 0202 0203 0204 0205 0206 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.

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

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


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

Endereço(h) 0300 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 de memória sendo alterados enquanto
programa está executando, execute o programa selecionando no menu
principal a opção DEBUG>AUTOSTEP... . Na 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 deve receber através de R4 o endereço 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 43
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 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. 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 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 44
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 +Vdd

4. Registro de Entrada

BIT = 0 ➔ pino da porta tem aproximadamente 0V


BIT = 1 ➔ pino da porta tem aproximadamente +Vdd

CONFIGURANDO UM PROJETO PARA EMULAÇÃO

O primeiro passo é criar um novo projeto, fazendo tudo como antes. O segundo é
configurá-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
utilizado (MSP430F1611).

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

Observe na Figura 28 que foram selecionados a categoria (Category) Debugger


e o driver (Driver) FET 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 45
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

HARDWARE ACIONADO
A Figura 29 mostra o diagrama dos LEDs presentes no kit 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
100k

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

FLUXOGRAMAS

A Figura 30 apresenta os fluxogramas do programa principal e da sub-rotina


PISCA_LED no qual um led pisca na frequência estabelecida pela rotina de
temporização.
Pisca LED

Main liga LED

Tempo pisca
Configura IO

desliga LED
Pisca LED

Tempo pisca

Retorna

Figura 30 – Fluxogramas para o acionamento de led.

PROGRAMA EM ASSEMBLY
;*********************************************************************************************************
; Descrição: Este programa aciona LED
;*********************************************************************************************************
#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 of segment
RSEG CODE ; place program in 'CODE' segment
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

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


main: NOP ; main program
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
BIS.B #0xFF,P1DIR ; programa todos os bits da porta 1 como saída
repete
CALL #PISCA_LED
JMP repete

;*********************************************************************************************************
;Subrotina: 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
pisca
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 o tempo de atraso em 100 ms
CALL #TEMPO_PISCA
RET
;*********************************************************************************************************
;Subrotina: TEMPO_PISCA
;Descrição: Intervalo 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 47
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.

#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
x--;
}
}

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Desliga o watchdog timer
P1DIR |= 0x01; // bit 0 =1 para configurar saída

for (;;) //Loop infinito


{
delay (100); //define o atraso de 100 ms para piscar em 5Hz
P1OUT ^= 0x01; // inverte P1.0 usando exclusive-OR
}
}

9.2. ATIVIDADES

9.2.1. Teste do programa proposto

• Execute o programa e verifique se o led piscou.

• Ajuste o parâmetro de entrada para que o led pisque na frequência de 1Hz,


considerando a frequência do oscilador de 750 kHz.

9.2.2. Faça um novo programa PISCA-LED para que o led permaneça aceso o
dobro do tempo de apagado.

9.2.3. Ligue quatro LEDs respectivamente nas portas P1.0 a P1.3. A partir desta
montagem faça o fluxograma e o programa que garanta o piscamento dos LEDs
de forma sequencial. O tempo de duração do acendimento de cada LED é de
500 ms.

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

Prática 10 - Dispositivo de entrada


OBJETIVO

✓ Monitorar uma chave através da técnica espera 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 saída. Naturalmente, o bit no qual estava ligado o led. A programação foi
efetuada através do registro de direção, P1DIR. Em seguida, foi possível enviar o sinal
para o led através do registro de saída P1OUT.
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 P1DIR. E o sinal da chave
também será obtido pelo registro P1OUT?
Além da preocupação com os registros envolvidos nas leitura de chaves também
trataremos do problema do repique de chaves. Quando ligamos ou desligamos uma
chave 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 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

MSP430F1611
+5V

L0
P1.4
330R
74HC04
100k

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

O diagrama de cada chave presente no kit é apresentado na figura 31. Observe


que no terminal CH0 sempre existe um sinal bem definido, terra ou +3,3V.

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

FLUXOGRAMAS

A Figura 32 mostra os fluxogramas envolvidos na leitura da chave. Note que no


fluxograma MONITORA_CHAVE a CPU permanece lendo a chave até que ela seja
ligada. Essa técnica é chamada Espera Ocupada.

Main Monitora chave

Configura IO N
Chave = 1

Liga LED
monitora chave

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

PROGRAMA EM ASSEMBLY
;*********************************************************************************************************
; Descrição: Este programa monitora uma chave através da técnica de espera ocupada
;*********************************************************************************************************
#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 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. como entrada
BIC.B #0XF0, 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 50
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)
{}
P1OUT|=0x10;

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

Embora o programa tenha funcionado corretamente ele mascarou 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 e faz o incremento de um contador
para cada transição de chave.

Espera chave

Main
Chave = 1 N

Configura IO S
Contador = 0 Contador ++

Espera chave Chave = 0 N

Retorna

Figura 33 – Fluxogramas para captura do efeito 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

10.2. ATIVIDADES

10.2.1. Crie um novo projeto para codificar os algoritmos da Figura 33.

10.2.2. Com o programa criado, carregue no 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 lógico alto).

10.2.3. Pare a execução do programa e observe na variável utilizada como contador o


valor obtido.

10.2.4. Resete o programa e repita os procedimentos 10.2.2 e 10.2.3 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 52
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
OBJETIVO

✓ Monitorar uma chave através da técnica de 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 chave 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és dessa técnica. Seria possível você escutar música, baixar um
texto pela internet e visualizar 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 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:

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

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

3. Registro de Flag de Interrupção

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


BIT = 1 ➔ existe interrupção pendente

FLUXOGRAMAS

A Figura 34 apresenta os 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 sub-rotina de tratamento
da interrupção. Nesta aplicação, o programa principal fará o LED conectado em P1.4
piscar continuamente na frequencia de 5 Hz. Toda vez que a chave for acionada (ir de
zero para um) o LED conectado em P1.5 deverá mudar de estado.

Pisca_LED Trata interrupção


Principal

Liga LED
Inverte LED
Configura IO
Tempo
Habilita interrupção
Desliga flag
Desliga LED

Pisca_LED Tempo Retorna

Retorna

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

Conecte a chave CH0 e os LEDs L0 e L1 ao microcontrolador, conforme a figura.


+3,3V

CH0
P1.0

10k

+5V

MSP430F1611 L0
P1.4
330R
74HC04
100k

+5V

L1
P1.5
330R
74HC04
100k

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 ASSEMBLY
;*********************************************************************************************************
; Descrição: Este programa monitora uma chave através da técnica de interrupção enquanto um led
;pisca(P1.4). Caso a chave seja acionada um segundo led deverá mudar de estado (P1.5).
;*********************************************************************************************************
#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
ORG 0FFE8h ; carregar o endereço da RTI (TRATA_
DC16 TRATA_INTERRUPCAO ; INTERRUPCAO) no vetor de interrupção.
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 mais significativos
; da porta 1 como saída e os 4 menos
;significativos como entrada
BIC.B #0x01,P1IES ; estabelecer borda de subida no
; bit 0 da porta 1
BIS.B #0x01,P1IE ; habilitar interrupção do bit 0 da
; da porta 1
EINT ; habilitar 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, P1OUT ;inverte o estado do led
BIC.B #0x01,P1IFG ; reseta flag de interrupção
RETI
END

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

PROGRAMA EM “C”
#include "io430.h"
//Função de tratamento de interrupção da porta P1.0
#pragma vector = PORT1_VECTOR //Define o endereço da rti da porta 1
__interrupt void PORT1 (void)
{
P1OUT ^= 0X20; //Inverte o estado de P1.5
P1IFG &= ~0x01; //desliga o flag de interrupção de P1.0
}

void main( void )


{
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
P1DIR = 0XF0; //Define P1.7,6,5,4 como saída e P1.3,2,1,0 entrada.
P1IES &= 0XFE; //Define interrupção pela borda de subida.
P1IE |= 0X01; //Habilita interrupção da porta P1.0.
asm ("EINT"); //Habilita interrupção geral.
for(;;)
{
PISCA_LED();
}
}

11.2. ATIVIDADES

11.2.1. Altere o programa nas seguintes funções:


✓ Rotina de tratamento de interrupção (RTI) – insira um contador do 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 do contador presente na RTI para os quatro leds do kit didático, utilizando
a parte alta da porta P1, conforme figura abaixo.

P1.0 CH0

P1.4 L0
MSP430F1611 P1.5 L1

P1.6 L2

P1.7 L3

Dicas:
✓ Todo contador deve ser inicializado, caso 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.

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

Prática 12 - Teclado
OBJETIVO

✓ Introdução a modularização,
✓ Implementação de uma função básica de tratamento de um teclado.

12.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.
Alguns sistemas dedicados utilizam as chaves push-bottom e ou on-off como
entrada de dados. Entretanto, a medida que o grau de complexidade do sistema
aumenta é 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 existente no kit didático é constituído por uma matriz 4x3 que possibilita
a identificação de até doze teclas (Figura 35).

P2.0

P2.1

P2.2
C2 C1 C0

MSP430F1611
L0
1 2 3
P3.0
1k2

L1
4 5 6
P3.1
1k2

L2
7 8 9
P3.2
1k2

L3
A 0 E
P3.3
1k2

47k 47k 47k

Figura 35 – Hardware do teclado.

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

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


do kit didático.
O primeiro passo para a programação do teclado é garantir a configuração dos
IOs envolvidos no hardware do teclado (Figura 36).
Configura teclado

Configura IO

Retorna

Figura 36 – Configuração do IOs 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 LINHAS = 16 S Í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

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

Figura 37 – Fluxograma da sub-rotina de tratamento do teclado.

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


detecção e captura de tecla. A idéia mostrada neste fluxograma consiste em criar na
memoria 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 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 a tecla apertada, o indice vai sendo incrementado acompanhando a
varredura e no final retorna o conteudo da tabela apontada pelo indice.

12.2. ATIVIDADES
12.2.1. Monte um novo projeto que monitore o teclado presente no kit didático
codificando-o na linguagem 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 fluxograma da Figura 37. Para criar um projeto em C basta
selecionar na janela da Figura 38 a opção C e selecionar a subopção main.

Figura 38 – Criando um projeto utilizando a linguagem C.

Ao selecionar o projeto utilizando a linguagem C será aberta a janela da Figura 39.

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

Figura 39 – Arquivo padrão.

Assim como na linguagem Assembly o ambiente de programação IAR cria


automaticamente um arquivo cujo nome é main.c. Ele é constituído de um conjunto de
instruções que serão necessárias ao seu projeto.
Na janela Workspace (à esquerda na Figura 39) é 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.
Vamos utilizar este recurso separando o programa principal que irá chamar a
função teclado em dois arquivos distintos. Uma vez que o próprio ambiente já cria o
arquivo principal (main.c), vamos criar um segundo arquivo que irá conter a função
teclado. Clique no ícone New ou selecione no menu principal a opção File>New>File
(atalho ctrl N). Será aberto um segundo arquivo denominado Untiteled (Figura 40),
selecione a opção Save e nomeie o arquivo como Teclado.c

Figura 40 – Novo código fonte.

Embora o arquivo esteja salvo ele ainda não pertence ao projeto. Sua inclusão é
bem simples. Dê um clique sobre o arquivo, em seguida clique sobre o nome do projeto
(Teclado) na janela Workspace e o mesmo ficará destacado. Com o botão direito do

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

mouse selecione a opção Add>>Add “Teclado.c” e este novo código fonte será
inserido no arquivo de projeto (Figura 41).

Figura 41 – Inserindo no projeto um novo código fonte.

Vamos montar as estruturas básicas das funções do módulo teclado. A função de


configuração do teclado não retorna parâmetro apenas faz a configuração dos IOs.

void configuraTeclado (void)


{

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

unsigned char teclado(void)


{

...
return (tab_tec[i]);
}
Porque estamos preocupados com esta formatação? Observe que agora com a
modularização as funções do teclado serão chamadas pelo programa principal,
entretanto elas estão no arquivo Teclado.C. Desta forma será necessário informar ao
programa principal que estas funções estão em outro arquivo senão ocorrerá erro de
linkedição. Para garantir seu o funcionamento correto basta inserir as seguintes linhas
no início do arquivo main.c:
extern void configureTeclado (void);
extern unsigned char teclado (void);
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

Copie o nome das funções que serão chamadas pelo main.c, insira no início de
cada função a diretiva extern e termine cada comando com ponte e vírgula (;) (Figura
42).

Figura 42 – Inserindo protótipos das funções.

Juntamente com fluxograma da Figura 37 é 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] =” \00””321654987E0A”;

Vamos utilizar outro conceito importante que é o reaproveitamento de código. Nas


práticas anteriores utilizamos rotinas de temporização para gerar um retardo no
piscamento do LED e para filtrar o problema da trepidação da chave. Observando o
fluxograma do teclado nos deparamos com o mesmo problema (Tempo_repique).
Entretanto, nas práticas anteriores estávamos programando em Assembly e agora
estamos codificando em C. Mas temos uma boa notícia, na modularização é possível a
coexistência de códigos Assembly e C em um mesmo projeto. Este recurso economiza
tempo de desenvolvimento, pois podemos reutilizar códigos de programas já prontos.
Assim como criamos um novo arquivo para inserção do código fonte do teclado,
vamos fazer o mesmo procedimento para criar o código fonte da temporização. Clique
novamente no ícone New ou selecione no menu principal a opção File>New>File
(atalho ctrl N). Será aberto um novo arquivo denominado Untiteled, selecione a opção
Save e nomeie o arquivo como Tempo.s43. CUIDADO AGORA A EXTENSÃO É
“S43”. Observe novamente que embora tenha sido criado o arquivo ele ainda não
pertence ao projeto. Vamos repetir o mesmo procedimento de inclusão utilizado para o
arquivo do teclado. Dê um clique sobre o novo arquivo, em seguida clique sobre o
nome do projeto (Teclado) na janela Workspace e o mesmo ficará destacado. Com o

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

botão direito do mouse selecione a opção Add>Add “Tempo.s43” e este novo código
fonte será inserido no arquivo de projeto (Figura 43).

Figura 43 – Inserindo um arquivo Assembly no projeto.

O código do programa a seguir é uma cópia da sub-rotina Tempo Pisca da prática


9. Copie este programa para o arquivo Tempo.s43.
Observe que algumas diretivas (comandos para o linkeditor) foram inseridas de tal
forma que seja possível realizar a conexão entre uma sub-rotina Assembly e um
programa codificado em C.
NAME TEMPO
PUBLIC TEMPO_REPIQUE

RSEG CODE
;************************************************************************************************
;Sub-rotina: TEMPO_REPIQUE
;Descrição: Intervalo de tempo gasto pela CPU. T=3k/750kHz.
;Para T=3ms, então k = 750
;Entrada:
;Saída: -
;************************************************************************************************
K EQU 750

TEMPO_REPIQUE ; ciclos de clock


PUSH R5 ;3
MOV #K,R5 ;2
volta
DEC R5 ;1
JNZ volta ;2
POP R5 ;2
RET ;3
;************************************************************************************************
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

END

Cada diretiva tem uma formatação e uma função específica:


✓ Na diretiva NAME coloque o nome do arquivo Assembly (TEMPO).
✓ Na diretiva PUBLIC coloque o nome da sub-rotina que será chamada pelo
programa codificado em C (TEMPO_REPIQUE).
✓ Já a diretiva RSEG é seguida da palavra CODE para indicar o trecho digitado a
seguir trata-se de um código de programa (CODE).
✓ Não se esqueça da diretiva END ao término da sub-rotina, cujo papel é indicar
ao montador Assembly que não existe mais código para ser traduzido para
linguagem de máquina do processador.

Já no programa em C que irá chamar a sub-rotina Assembly será utilizado o


mesmo procedimento que já aplicamos na chamada de uma função C que está
localizada fora do arquivo corrente. Desta forma, no início do arquivo Teclado.c deve
ser feita a seguinte declaração:
extern void TEMPO_REPIQUE();
12.2.2. Codifique as funções do módulo teclado

12.2.3. Codifique o programa principal de tal forma que ele escreva na porta 5 o codigo
da tecla apertada. Caso não tenha tecla apertada espere, conforme fluxograma que
segue.

Main

Configura teclado

Teclado

N
Tem tecla

P5OUT ← tecla

fim

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 13 - Display de crital líquido (LCD)


OBJETIVO

✓ Implemetar as funções básicas de tratamento de um Display de Cristal


Líquido (LCD).

13.1. INTRODUÇÃO

Assim como as chaves push-bottom e on-off para entrada de dados utilizamos


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

HARDWARE ACIONADO

O display presente no kit didático (Figura 44) é um módulo microcontrolado,


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

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

Através do diagrama da Figura 44 pode-se observar que o LCD está utilizando


oito bits para receber e enviar dados ao MCU por meio dos pinos D0 a D7 que estão
conectados à porta 5 do microcontrolador. Esses dados são controlados pelos sinais
RS, R/W e E que estão conectados aos pinos P3.7 e P3.6. O sinal R/W está aterrado,
permitindo apenas operações de escrita.
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

R/W = 0 ➔ operação de escrita no LCD


R/W = 1 ➔ operação de leitura da memória interna do LCD
Observe que no nosso kit didático o pino R/W está aterrado.
RS = 0 ➔ comando (palavras de programação ou endereço de memória)
RS = 1 ➔ dado (caractere a ser apresentado no LCD)
O pino E corresponde ao sinal de habilitação das operações do LCD ativo em nível
lógico 1.
O endereço de memória de cada posição presente no LCD é apresentado na
Figura 45:

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 45 – Endereçamento do LCD para o display de duas linhas.

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

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

Retorna

Figura 46 – Programação do LCD.


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

As caixas de processamento de 1 a 4 presentes no fluxograma da Figura 46


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

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
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 1 D 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 a sequencia sinais


apresentada na Figura 47, garantindo que as temporizações sejam atendidas. Para
escrever 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 49. Os fluxogramas para as funções envia comando
e envia dado que geram respectivamente os sinais apresentados na Figura 47 são
mostrados na Figura 48 e Figura 49 respectivamente.

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

RS

D0 ~ D7 Comando Dado

Envia Envia
preparação comando preparação dado
2 ms 2 ms 2 ms 2 ms tempo

Figura 47 – Temporização do módulo LCD

Envia comando Envia dado

RS = 0 RS = 1
E=0 E=0

Tempo 2 ms Tempo 2 ms

E=1 E=1

Tempo 2 ms Tempo 2 ms

E=0 E=0

Retorna Retorna

Figura 48 – Envio de Comando Figura 49 - Envio de Dado

Assim como no teclado, o display já esta conectado nas portas P3 e P5 do MSP.


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

Configura IO

Retorna

Figura 50 – Configuração dos IOs conectados ao LCD

13.2. ATIVIDADES

13.2.1. Implemente as funções de programação e controle do LCD. Observe o


diagrama de conexão (Figura 44) do LCD e MSP para utilizar corretamente os IOs que
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

já estão definidos no kit didático. Para isto crie um novo arquivo com o nome LCD.
Todas as funções do LCD devem ser escritas neste arquivo. O arquivo main chamará
as funções do LCD.

13.2.2. Crie no módulo LCD a função void envia byte (unsigned char) (Figura 51) que
recebe um caractere ASCII e faça o seu envio para o display.
Envia byte

P5 ← dado

Envia dado

Retorna
Figura 51 – Algoritmo da função envia byte.

Resumindo, o módulo de software LCD deverá ter cinco funções:


1. void configura LCD (void)
2. void programa LCD (void)
3. void envia comando (void)
4. void envia dado (void)
5. void envia byte (unsigned char)

13.2.3. Para garantir a modularização, o projeto terá dois arquivos (módulos de


software), o main e o LCD. O programa principal (main) programará o LCD e chamará
a função envia byte 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.4. Incremente a funcionalidade do módulo LCD criando a função envia string. Faça
o algoritmo e a respectiva codificação. O protótipo desta função é:
void envia string (const char *apt, char)
Onde o primeiro parametro passado (const char *apt) é um parametro tipo ponteiro
para a string. Para criar uma string na memória flash utilize o modificador de variável
const. Esta variável deverá ser global para ser vista dentro de outras funções. Já o
segundo parâmetro tipo char é o tamanho da string. Por exemplo, para criar a string
CEFET-MG:
const char mensagem1[8] = “CEFET-MG”;
E para chamar a função envia string, deve-se passar os parametros:
envia string (mensagem1, 8);

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

Prática 14 - Integração de programas


OBJETIVO

✓ Arquivo de protótipo e
✓ Integração de programas.

14.1. INTRODUÇÃO

A modularização proporciona uma maior clareza do código e a facilidade no


desenvolvimento e manutenção do sistema. Já aplicamos estes conceitos tanto no
desenvolvimento do controle de teclado como do LCD. Observe que temos duas
funcionalidades distintas, constituídas módulos de programa, mas que trabalham
isoladamente. Na maioria dos sistemas microprocessados temos a coexistência destas
funcionalidades (teclado e display). Nosso desafio nessa prática é fazer a ligação lógica
destas funcionalidades que estão descritas na Figura 52.
Main
Teclado_LCD

Configura LCD

Programa LCD

Configura teclado

Teclado

N
Tem tecla

S
Envia byte
(tecla)

Figura 52- 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 byte e no
módulo teclado: configura Teclado e Teclado. Este algoritmo retrata exatamente como
ocorre a integração de módulos. Não estamos preocupados nesta etapa de
desenvolvimento como será realizada cada uma das funções, pois elas já foram

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

escritas. Nossa preocupação se restringe na utilização das funcionalidades providas


pelas funções.
Assim como criamos um programa principal tanto na prática de teclado como na de
LCD teremos criar um programa principal, que realizará o que está descrito no
algoritmo da Figura 52. Observe que teremos novamente que indicar no início deste
arquivo que tais funções não pertencem a este módulo de programa e sim a outros
módulos que serão incorporados no arquivo de projeto. Basicamente neste exemplo
seria necessário inserir no início desse programa tais declarações:
extern void configuraTeclado();
extern unsigned char teclado();
extern void configuraLCD();
extern void programaLCD();
extern void envia byte(unsigned 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 os arquivos de
prototipação. Na prática você já faz uso deste recurso, só que provavelmente ainda não
percebeu. Um exemplo típico é o arquivo io430.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.

14.2. ATIVIDADES
14.2.1 Vamos utilizar a técnica de prototipação com o módulo teclado. Abra o projeto
do módulo teclado criado na prática12. Selecione a aba do programa principal (Figura
42). Observe as duas primeiras linhas do programa:
extern void configuraTeclado();
extern unsigned char teclado();
14.2.2 Crie um novo arquivo fonte e salve com o nome teclado.h. Recorte as duas
primeiras linhas do programa principal e cole no arquivo teclado.h. Retire as diretivas
extern presente em cada uma das linhas.
void configuraTeclado();
unsigned char teclado();
14.2.3 Salve o arquivo teclado.h.
14.2.4 Observe que se link editarmos novamente o programa ocorrerá 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”
14.2.5 Faça a prototipação também para o módulo LCD.
14.2.6 Com os protótipos criados, monte o programa do algoritmo TecladoLCD,
apresentado na Figura 52. Observe que o arquivo main será iniciado com as seguintes
linhas:
#include “teclado.h”
#include “lcd.h”
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

INTEGRAÇÃO DE PROGRAMAS EXCLUSIVAMENTE EM ASSEMBLY

O procedimento de 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 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 53) que neste caso é o algoritmo TecladoLCD. Além da
janela asm.43*, outras janelas de texto devem ser criadas, uma para cada módulo.

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


Para criar novas janelas de edição selecione 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 54.

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

Figura 54 - Segunda janela de edição


O próximo passo é salvar e inserir esse novo módulo em seu projeto. Para salvar
selecione no menu principal a opção File> Save As. Observe que na janela Save As
(Figura 55) o Nome do arquivo é 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.

Figura 55 - Janela para salvar


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

Figura 56 - 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.
Para escrever o código fonte do programa principal vamos nos orientar pelo
fluxograma da Figura 52, já mencionado. O algoritmo configura IOs do MSP e testa se
uma tecla foi pressionada. Quando ocorre tal evento a tecla é apresentada no display.
Observe bem o algoritmo, parte dele já foi refinado e implementado por você, tais
como: as subrotinas do LCD e do TECLADO. Como aproveitar esses códigos já
escritos? O procedimento é 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ódulo 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 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.
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

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
;**************************
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 no módulo principal, então é necessário
informar ao linkeditor que ela está externa ao módulo corrente (asm.s43), através da
diretiva EXTERN.
Modulo asm.s43 (principal):

;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 75
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 conceitos de IO e


✓ Codificação em C a partir de um FSM.

15.1. INTRODUÇÃO

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

MÁQUINA DE ESTADO FINITO (FSM)

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


fase. Os estados da FSM retratam o ponto de vista do motorista. A simbologia de
representação dos estados segue o 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.
tAT > 0 tAT > 0

tAT = 55 LIVRE/ tAT = 5 ATENÇÃO/


VD,vm AM,vm

tAT = 60
P=0

tAT = 55
ESPERA/
VM,vd

tAT > 0
Figura 57- FSM do semáforo de uma fase com pedido de passagem.
A Figura 58 mostra um cruzamento onde poderemos tratar situações com apenas
uma única fase, ou seja, tratar apenas o controle entre veículo e pedestre de uma única
rua, conforme descrito na Figura 57 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 Figura 57 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 de tomada de decisão múltipla para determinação do estado corrente.

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

Também será utilizado o tipo enumerado para que possamos representar os estados
da FSM com seus respectivos nomes.

Pb

b b

a c
Pa

Pc
a c

d d Sentido de
Rotação

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

15.2. ATIVIDADES

15.2.1 Com base na Figura 58 faça as conexões dos sinais luminosos aos IOs que
garantam o controle do semáforo da rua A. Observe que a FSM só descreve o
comportamento 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 dos dispositivos de IO é necessário
realizar sua configuração (entrada/saída).
✓ Lembre-se também de filtrar a trepidação presente nas chaves.

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

enum estados {LIVRE,ATENCAO,ESPERA};


enum estados estado;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
while(1)
{
switch (estado)
{
case LIVRE:
break;
case ATENCAO:
break;
case ESPERA:
break;
}
}
}

15.2.2 Com base na Figura 59 implemente o código para esta FSM que faz o
controle de um sinal de duas fases (ex: rua A e B), com pedidos de passagem distintos.
PA ➔ Pedido passagem Rua A
PB ➔ Pedido passagem Rua B
T ➔ Temporização
T T

LIVRE_RA/ T, PA ATENCAO_RA/
PA VDA,vmA AMA,vmA
VMB,vdB VMB,vdB

T
T

ATENÇÃO_RB/ LIVRE_RB/
VMA,vdA A T , PB VMA,vdA PB
AMB,vmB VDB,vmB

T T
Figura 59 - FSM do semáforo de duas fases com pedidos de passagem distintos.

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

15.2.3 Faça uma nova FSM e sua respectiva codificação 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 para que o pedestre possa solicitar passagem
na rua A e C.
• Tempo do estado verde: 30s.
• 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 amarela de todos os semáforos piscando de 1
em 1 segundo.

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

Prática 16 - Motor de Passo


OBJETIVO

✓ Aplicar os conceitos de IO para controle de motor de passo.

16.1. INTRODUÇÃO

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


tradicionais elementos de 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 à 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 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
evitar os problemas comumente encontrados nos sistemas de realimentação, como
instabilidade 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 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.
O motor de passo bipolar com rotor magnético (ímã permanente) está
representado na Figura 60. No momento do arranque, passa corrente nos dois
enrolamentos, o estator gera os pólos magnéticos e o rotor orienta-se de acordo. Caso
em seguida, por exemplo, a corrente A seja invertida (daí a designação bipolar), o
campo magnético irá deslocar-se 90° no sentido horário arrastando consigo o rotor. A
sequência de ativação para uma volta completa do rotor no sentido horário é: AB - A B
- AB - A B - AB, ou seja, quatro passos de 90° cada um. Também é possível cortar a
corrente de um dos enrolamentos, antes de inverter a polaridade na fase
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

correspondente (meio passo). Nesse caso a sequência seria: AB - B - A B - A - AB -


B - A B - A – AB. Nessa operação a meio passo, o ângulo de passo é menor, mas o
torque é irregular e menor em média já que durante a metade do tempo apenas uma
fase está sendo utilizada (Força = N° espiras x corrente).

Figura 60 - Motor de passo bipolar.


Costuma-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 polos no rotor (Figura 61).
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 61 - Rotor.
Os motores de passo unipolares 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 possa ser invertido sem a necessidade de inverter o sentido da corrente
(Figura 62).

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

Figura 62 - Motor unipolar.


Como em geral essas bobinas são alojadas na mesma carcaça utilizada 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 e, portanto, um
campo magnético mais fraco. Assim sendo os motores unipolares desenvolvem torque
inferior 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 versus 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 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 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 63 mostra duas curvas, a curva inferior refere-se ao torque de arranque, ou seja,
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

com o motor parado e a curva superior refere-se ao torque desenvolvido com o motor
girando.

Figura 63 - Torque x frequência.


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

Figura 64 - 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. A
Figura 65 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 do motor de passo e a Figura 66 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.

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

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

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.

Fase 1 Fase 2 +12


V

+12V
Fase do
1N 4007 motor

22 R

8k2

Tip
122

Fase Fase 4
3

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

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

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

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 passo

FASES 1 2 3 4
1 0 0 0
sentido 0 1 0 0
anti-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.

16.2. ATIVIDADES
16.2.1 Conecte o kit MSP430 ao motor de passo conforme o diagrama da Figura 67.
Fase 1 P1.3

Fase 2 P1.2
Motor
Fase 3 P1.1 Kit
de
Fase 4 P1.0 MSP430
passo
GND GND

Figura 67 - Diagrama de conexão do motor de passo e o kit didático.


16.2.2 Escreva um programa conforme os fluxogramas da Figura 68 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 ininterruptamente;
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

• Acionamento a passo inteiro torque pleno (tabela 13-a).

Dicas:
➢ A velocidade de 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).

main Configura IO Passo

Configura IO Configura IO i++

Motor = tabela[ i ] S
Passo I = 4?

N I=0
Retorna
Tempo (x)

Motor = tabela[ i ]

Retorna

Figura 68 – 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.
Neste caso, a função passo primeiramente deve testar 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 (540°) toda
vês que for em nível lógico alto.

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

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étricos é composto basicamente


de dois enrolamentos campo e armadura e um comutador. O enrolamento de campo
instalado no estator é responsável pela geração do campo magnético. Pode também
ser produzido por ímã permanente. O enrolamento de armadura instalado no rotor
necessita de escova e anéis coletores (comutador), para permitir a passagem da
corrente elétrica. 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, enrolamento de armadura) produzirá um campo magnético
que ao interagir com o outro campo magnético produzido pelo enrolamento de campo
produzirá uma força fazendo o rotor girar na tentativa de alinhar os dois campos
magnéticos. Ao girar os anéis coletores comutarão de enrolamento na armadura,
mantendo sempre esta força próxima do seu nível máximo.
Generalidades sobre motores cc.
Dado o modelo aproximado do motor cc (Figura 69),
La Ra
Ia

Ic

Rc

Lc E
Vc Va

CL N

Figura 69 - Modelo aproximado do motor cc.


onde:
Rc é a resistê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
Vc a tensã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.
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

Equações:
C = Kt ∅Ia onde: Kt é uma constante do motor
 é o fluxo indutor de campo e
Ia é a corrente de armadura
• O conjugado motor é proporcional ao fluxo indutor e a corrente de armadura.
• Para se inverter o conjugado motor é necessário inverter o fluxo indutor de campo
ou a corrente de armadura.
𝑉𝑎 − 𝑅𝑎𝐼𝑎
𝑁=
𝐾𝑡∅
• A velocidade é proporcional à tensão de alimentação da armadura 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 de modo a exercer o controle de sua velocidade:
1. Variar o fluxo de campo ()
2. Variar a resistência associada à armadura (Ra)
3. Variar a tensão de armadura (Va)
Utilizando o primeiro método tem-se a desvantagem de perder torque a uma
dada corrente Ia, pois 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 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.
O terceiro 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 em Va, pode-se desenvolver o mesmo
conjugado em todas as velocidades.
A Figura 70 mostra as configurações possíveis para motores cc.

Excitação independente Ima permanente

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


Figura 70 - Tipos de motores cc.

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

Painel do motor cc
O painel do motor cc (Figura 71) foi concebido com motor cc de ima permanente
para realização de alguns ensaios. Entre eles podemos citar 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.
Na entrada Vf do painel, pode-se aplicar um sinal cujo valor médio pode variar
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 - Painel do motor cc.


Para tornar possível a mudança do sentido de rotação foi implementado um
circuito (Figura 72) que desloca o nível dc aplicado ao motor fazendo com que tensões
Vf entre 0 e 1,65 V produza rotação no sentido anti-horário e tensões Vf entre 1,65 e
3,3V no sentido horário. O circuito é constituído de um amplificador operacional, cuja
entrada inversora tem o ganho igual a 5 e a entrada não inversora tem ganho 6. A
entrada inversora provoca um deslocamento do nível dc 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 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).

X
Va

BD139
BD140

Figura 72 - Driver do motor cc.


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

Va Va = 6.Vf – 5.X
(V)
+9,9 +
Vf 6 Va
_

0 0,5 1,0 1,65 2,5 3,3 Vf


(V) 5

- 9,9
X = 1,98V

a b
Figura 73 – a) Curva de transferência Va x Vf e b) Diagrama de controle.

17.2. ATIVIDADES
17.2.1 Conecte a saída de PWM TA1 (P1.2) do painel microcontrolador MSP430 à
entrada Vf do painel do motor cc conforme diagrama da Figura 74.

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.

17.2.2 Desenvolva um 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. Utilize a técnica de PWM (modulação por
largura de pulso) por meio do timer A para acionamento o motor. A frequência de PWM
deve ser de 1kHz e a rampa de 10 segundos deve ser realizada em 50 passos.

Orientações:
1. Configure I0: Porta P1.2 como saída e função especial. Defina 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 do módulo de clock tem um cristal de 4 MHz (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)

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

3. Configure o timer A. Defina o conteúdo de cada registro veja orientações:


o Registro TACCR0 =
o Registro TACCTL0 =
o Registro TACCR1 =
o Registro TACCTL1 =
o Registro TACTL =
o Frequência de PWM = 1 kHz
o Configuração dos registros do modulo CCR0
➢ TACCR0 define o período do sinal de PWM conforme a equação:
F
TACCR0 = F CLK onde FCLK é a frequência de clock do timer A e FPWM é a
PWM
frequência de PWM.
➢ Habilite a interrupção produzida por 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 cujo endereço é FFECh.
Desta forma ocorrerá uma interrupção a cada 1 ms (Figura 75).
o Configuração dos registros do modulo CCR1
➢ O ciclo de trabalho do sinal de PWM é definido pelo registro TACCR1 da
𝑇𝐴𝐶𝐶𝑅1
seguinte forma: 𝐶𝑇 = 𝑇𝐴𝐶𝐶𝑅0. 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á parado, já com um CT ≈ 0% produzirá a máxima rotação no
sentido 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 75, no registro TACCTL1
o Configuração do 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.

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


se fazer atualização CT para acelerar o motor a cada 200 ms, pois, 10s/50 =
200ms. Então faça a atualização do registro TACCR1 após 200 interrupções.
Desta forma em 10 segundos devem ocorrer 200 atualizações.
TAR
FFFF

CCR0
CCR1
0
T (ms)
CCR0
int

TA out

1 ms
Figura 75 - Temporização do timer A.
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

Utilize o fluxograma da Figura 76 para elaborar o software:

Main Configura Trata int


Aciona motor cc

Configura Configura IO Cont int - -

Con int = 200


Configura clock Retorna
Cont passos = 50

Habilita interrupção
Configura timerA

N Cont int =0 Retorna


S
Atualiza CT
Cont int = 200
Cont passos - -

N
Cont passos =0

fim
Figura 76 – Fluxogramas para gerar PWM.

17.2.3 Altere o programa anterior para que o motor após a partida se mantenha em
velocidade máxima por 10 segundos e em seguida pare também em rampa de 10
segundos.

17.2.4 Faça fluxograma e programa para que o motor parta no sentido horário em
rampa de 10s somente após apertar a tecla "3".

17.2.5 Idem exercício anterior, porém acrescente a tecla “2” para parar, também em
rampa de 10 segundos. Neste caso após parar pode-se partir novamente.

17.2.6 Idem exercício anterior, acrescentado a tecla "1" para partir no sentido anti-
horário, ficando então assim:
Tecla “1” – parte no sentido anti-horário
Tecla “2” – parte no sentido horário
Tecla “3” – pára

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 18 - Controle de portão de garagem


OBJETIVO

✓ Aplicar os conceitos de IO e
✓ 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 78 e 79) 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 indicaçã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 sem o uso do controle remoto. A saída
OUT do kit terá um pulso alto de 200 ms caso o botão I do controle remoto seja
apertado (Figura 77).
O portão para funcionar precisa ser alimentado com +5Vcc. 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 78) e no circuito do motor e controle remoto (Figura 79).
Botão do controle remoto Botão do controle remoto

OUT

200 ms 200 ms
Figura 77 – Sinal de saída do módulo receptor do controle remoto.
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

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

Figura 79 – Circuito do motor e controle remoto.

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

18.2. ATIVIDADES
18.2.1 Conecte o kit do MSP ao kit do portão conforme diagrama de ligações da
Figura 80.

+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 80 – Diagrama de ligações.


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 o portão deve fechar.
2. Quando o sensor fim de curso F for acionado o motor deve parar.
3. Se receber pulso do controle remoto, o portão deve abrir.
4. Quando o sensor fim de curso A for acionado o motor deve parar.
5. Se receber pulso do controle remoto, o portã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 81 – Diagrama de estados 1 para controle do portão.

18.2.3 Rode o programa e teste seu funcionamento.


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

18.2.4 Modifique o programa para controle do portão conforme diagrama de estados


2 mostrado na Figura 82. Agora o controle remoto (CR) poderá parar o portão no
meio do curso, ou seja, se o portão estiver fechando e receber o comando do CR
ele para. 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 =1 OUT=0
OUT=0 OU 0 11
F=

Fecha Abre
10 01

0
A= =1
OUT U T
=1 Travado/A O
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 2 para controle do portão.

18.2.5 Rode o programa e teste seu funcionamento.

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

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 resulta na variação da potência. O dimmer pode ser aplicado a vários
tipos de cargas, como por exemplo, lâmpada incandescente, forno elétrico, motor
universal, porém, quando aplicado a uma lâmpada incandescente tem como objetivo
variar sua intensidade luminosa. Este tipo de dimmer não pode ser aplicado a alguns
tipos de carga, como por exemplo, lâmpada de descarga (fluorescente, vapor de
mercúrio, vapor de sódio, mista, etc), lâmpada LED. Tradicionalmente o dimmer é um
equipamento analógico onde 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 é 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 82. Na porção superior da figura é apresentado um circuito detector de
cruzamento 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 83). Já na porção inferior da figura 83 mostra o
driver para o dimmer. O driver dispara o tiristor toda vez que a entrada ‘IN’ for para
nível lógico alto. Ambos os circuitos são isolados da rede elétrica por meio de opto-
acoplador (CI_1 e CI_2), o que garante proteção e robustez ao circuito.

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


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

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 83 – Formas de onda: na rede, saída do detector de zero, interrupção, 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 (Figura 84):
• Timer A no modo contínuo (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 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 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 é 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 captura do timer e uma
interrupção será gerada. A rotina de tratamento da interrupção (RTI) deverá somar ao
valor capturado (TACCR0) o número correspondente ao ângulo de disparo desejado e
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

escrever este resultado no registro de compara do bloco 1


(TACCR1=TACCR0+ângulo). Como o registro TACCR0 tem também a função de
definir o desligamento do sinal de disparo do tiristor, deve-se então escrever neste
registro o momento do desligamento da seguinte forma: TACCR0 = TACCR1 + duração
do pulso.
Dado que a frequência 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 μs = 5,4 x 10 -3 grau. Isto
significa que cada unidade do timer corresponde a 5,4 x 10 -3 grau elétrico. Por
exemplo, para fazer um disparo a 45° com pulso de 1ms de largura, o valor da captura
(TACCR0) que corresponde a 0° deve ser somado a 45/5,4 x 10 -3 = 8333 e escrito em
TACCR1. Por sua vez, o valor de TACCR0 que define a descida do pulso de disparo,
deve conter a soma de TACCR1 + 1ms/0,25us, ou seja TACCR0 = TACCR1 + 4000.

TAR

FFFFh
TACCR0
Valor adicionado
TACCR1 a TACCR0
Valor adicionado
a TACCR1
TACCR0

TACCR0
Valor adicionado
a TACCR0
TACCR1
Valor
adicionado
a TACCR1
TACCR0

0
t (ms)
Ângulo de Duração Ângulo de Duração
Interrupção disparo do pulso disparo do pulso
de captura
de CCR0
0 0° 0° t (ms)

OUT1

0 t (ms)
Output Mode 3 – PWM Set/Reset
Figura 84 – TAR e valor dos registros TACCR0, TACCR1; int. de captura e saída OUT1.

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

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

Microcontrolador MSP430F1611 Dimmer


13
8
XIN P1.1/TA0 DCZ
CCI0A
X1 14
32768 Hz 9 P1.2/TA1 OUT1
IN
XOUT

52
XT2OUT
+5V +5V
X2
4 MHz 53
XT2OUT GND GND

Figura 85 – Diagrama de ligação para dimmer 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 I0: Porta P1.1 como entrada, função especial e P1.2 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 85). O
oscilador XT2CLK do módulo de clock tem um cristal de 4 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 =
➢ Modo captura
➢ Síncrona
➢ Captura pela borda de subida
➢ Interrupção habilitada
o Registro TACCTL1 =
➢ 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.
4. Utilize os fluxogramas da
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

5. Figura 86 para a elaboração do software:

Main Configura Trata_int


dimmer

Configura IO Escreve angulo


Configura

Configura
Habilita Escreve duração
clock
interrupção

Configura
Define ângulo Desliga flag
timer A
Define duração

Retorna Retorna
fim

Figura 86 – Fluxogramas do dimmer.

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


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

19.2.4 Faça fluxograma e programa para que a tecla as teclas 3(↑) e 2(↓) funcionem
para alterar o ângulo de disparo em passos de 1° a cada 30 ms. Inicialmente a
lâmpada deve ficar apagada.

CEFET-MG 101
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 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. Tem 12 entradas multiplexadas, sendo 8
entradas externas (A0 a A7) e 4 internas (VeREF+, 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 interno tipo RC com frequência
de aproximadamente 5 MHz (ADC12OSC) ou um dos três sinais do 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ção 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. Para obter o resultado 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 ADC12MEN15). O ADC12 após terminar uma conversão,
automaticamente escreve o resultado em umas das memórias de 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 A0, A1, A2 e A3 que são função especial das portas P6.0, P6.1,
P6.2 e P6.3 respectivamente. Nestas quatro entradas foram inseridas quatro
amplificadores operacionais com ganho 1 nas entradas A0 e A1 e ½ nas entradas A2 e
A3, além de um 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, que por sua vez limita a máxima tensão de saída a
aproximadamente 2,8V. 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 impedância de entrada e
baixa impedância de saída.

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

Figura 87 – Amplificador de entrada do CAD

20.2 ATIVIDADES

20.2.1 Conecte a entrada AD0 do kit microcontrolador MSP430F1611 ao potenciômetro


conforme diagrama da Figura 85.

470Ω
+5V
Display LCD
Conv. A/D

AD0 MSP430F1611
470Ω

V LFXT1
GND

32.768Hz

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


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

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
Orientações:
1. Configure I0: Porta P6.0 como entrada e função especial. Defina os registros:
o Registro P6DIR =
o Registro P6SEL =
2. Configure o ADC12. Defina o conteúdo de cada registro.
o Registro ADC12CTL0 =
➢ Calcule o tempo de amostragem (Ta) mínimo 9ζ
➢ Calcule o Ta necessário para garantir a taxa de 30 aps
➢ 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 =
➢ Defina a memória para receber o resultado.
➢ Disparo do ADC12 por software
➢ Temporizador da amostragem utilizado
➢ Sinal de clock dividido por 8
➢ Fonte de clock ACLK
➢ Modo de 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 desliga flag

hab. interrupção retorna

hab. e dispara AD

fim

Figura 90 – Fluxogramas do CAD.


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

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.

Dicas:
✓ Para enviar dados ao display, o dado antes deve ser convertido para BCD
(decimal codificado em binário) e posteriormente para ASCII.
✓ Faça o equacionamento matemático da tensão de entrada: 𝑁𝐴𝐷𝐶 = (2 𝑉−1)𝑉−𝑉 −𝑉
𝑛
𝑖𝑛 𝑅−
𝑅+ 𝑅−

✓ 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 a segunda divisão que fornecerá como
resultado a primeira 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 inviabiliza
sua visualização. Utilize uma taxa de 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ó então realize os cálculos e a
∑16
1 𝑁𝐴𝐷𝐶
escrita no display. Sugestão de cálculo de média: 𝑚é𝑑𝑖𝑎 = 16

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

Apêndice A – Tabela ASCII (American Standard Code for Information


Interchange)

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

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

Apêndice B – O conjunto 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 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 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[.W] Adiciona o bit de carry ao destino


*ADC.B adiciona o bit de carry ao destino

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 de 0FFFF para 0000,
resetado em caso contrário.
Setado se dst foi 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 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 de 16 bits apontado por R12.
ADD.B @R13, 0(R12) ;adiciona LSD
ADC.B 1(R12) ;adiciona o carry ao MSD

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

2) ADD[.W] Adiciona a fonte ao destino


ADD.B Adiciona a fonte ao destino

Sintaxe ADD src, dst


ADD.B src, dst

Operação src + dst → dst

Descrição O 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 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 um carry


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

3) ADDC[.W] Adiciona a fonte e o carry ao destino


ADDC.B

Sintaxe ADDC src, dst


ADDC.B ser,dst

Operação src + dst + C → dst

Descrição O operando 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 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 109
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

4) AND[.W] 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 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[.W] 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 P0.


P0OUT .equ 011h ;definição do endereço da porta.
P0_0 .equ 01h
P0_1 .equ 02h
BIC.B #P0_0+P0_1, &P0OUT ;zera os 2 LSB’s de P0

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

6) BIS[.W] 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 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 P0.


P0OUT .equ 011h
P0 .equ 01h
P1 .equ 02h
BIS.B #P0+P1, &P0OUT

7) BIT[.W] 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 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 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 estiver setado, salta para o label TOM.
BIT.B #8, R8
JC TOM

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

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

Sintaxe CALL dst

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

Descrição Realiza a chamada de uma sub-rotina numa faixa de endereços


de 64k. Todos os modos de 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 112
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS
DEEB - Coordenação de Eletrônica
Disciplina: Laboratório de Sistemas Microprocessados

10) *CLR[.W] 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 é 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 113
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[.W] 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. 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 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.

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

Exemplo2 Dois blocos de RAM são comparados. Se não são iguais, vai para
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

15) *DADC[.W] 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.


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

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

16) DADD[.W] 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 é 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

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


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

Exemplo2 Incrementa um contador de dois dígitos decimal (CNT).


CLRC
DADD.B #1, CNT

17) *DEC[.W] 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 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 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.

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

Exemplo Move um bloco de 255 bytes de memória com endereço inicial


EDE, para 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[.W] 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

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 é 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

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

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 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 é
armazenado em SR.

Bits de status Não afetados

Bits de modo Somente o bit GIE é setado

Exemplo Idem anterior.

21) *INC[.W] 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

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

22) *INCD[.W] 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), 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)

23) *INV[.W] 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 em caso contrário.

Exemplo Encontra o segundo complemento de R5.


MOV #00AEH, R5
INV R5
INC R5

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

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 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.

Bits de status Não afetados.

Exemplo Salta para o endereço LEO se R6 é igual ao conteúdo da


tabela.
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 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.

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

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


memória apontada 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

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 a +512 words relativos ao corrente PC.

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

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 122
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 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[.W] 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
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.

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

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.

Bits de status Não afetados


Nota Outras instruções podem emular a não operação usando
diferentes números de ciclos 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[.W] 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 Pinteiro de


pilha (SP) é movida 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

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

35) PUSH[.W] 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

Sintaxe RET

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

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 restaurados da pilha

Bits de modo Todos restaurados da pilha

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

38) *RLA[.W] 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 ou 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 >= 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

Exemplo Multiplica 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[.W] 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 < 0C000h ou se 03Fh <
dstinicial < 0C0h, resetado em caso contrário.

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

Exemplo O bit de entrada P0.1 é colocado no LSB de R5


BIT.B #2, &P0IN ;informação → carry
RLC.B R5 ;carry = P0in.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[.W] 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.

Figura B.3 - RRA


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[.W] 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. O bit de carry é deslocado para o MSB,
e o LSB é 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 inicial do destino for positivo e valor
inicial do carry for 1, resetado em caso contrário.

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

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[.W] 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 é 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
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 1

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

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

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 p/ 6-F
;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

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

Bits de status N: Não afetado


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

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

46) SUB[.W] Subtrai fonte do destino


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 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, 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: Borrow Carry


Sim 0
Não 1

47) SUBC, SBB[.W]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 dst + 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
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, 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 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 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

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

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.

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

49) SXT Estende sinal

Sintaxe SXT dst

Operação Bit 7 → bit 8 a 15

Descrição O sinal do byte baixo é estendido para o byte alto como


mostrado na Figura B.6.

Figura B.6 - SXT

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


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

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

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[.W] 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 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 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

51) XOR[.W] 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  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 132
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 II. Belo


Horizonte: CEFET-MG, 2005, 138p.

2 Texas Instrumentos. MSP430x1xx Family: User´s Guide 2006 414p.

3 Texas Instrumentos. MSP430F15x, 16x, 161x Data sheet 2011 77p.

CEFET-MG 133

You might also like