Você está na página 1de 254

1

333
O UNIVERSO
HCS08QG8
Teoria, Linguagem Assembly, atividades de
laboratrio e projetos
Ana T. Y. Watanabe
2
Introduo ao livro e disciplina
A disciplina de Sistemas Digitais Microprocessados (SDM) tem o intuito de levar o
acadmico explorao do universo dos microcontroladores e da programao em Assembly.
Este livro vem auxiliar nessa misso.
Planejado cuidadosamente para dar um completo material de aprendizado queles
que nunca viram a programao como forma de melhorar o mundo em que vivemos, esse livro
traz um modelo didtico constitudo de inmeros exemplos e exerccios de aplicao da teoria
digital. Ele encaixa a linguagem de programao Assembly ao uso do microcontrolador
HCS08QG8, capacitando o leitor com meios sintticos e lgicos, para solucionar problemas reais.
Ao final do curso, o aluno deve ser capaz de, utilizando a linguagem Assembly,
resolver problemas atravs dos recursos do microcontrolador HCS08QG8 tal como converso A/D,
problemas de temporizao e PWM, interrupo, transmisso SCI, entre outros. Alm de integrar
tais conhecimentos, para resolver situaes mais complexas, exigidas no meio industrial e no
desenvolvimento de pesquisa e tecnologia.
Alm disso, a disciplina investe em um projeto que visa o estudante se dar conta dos
inmeros problemas existentes ao seu redor e, com a autonomia que ele criar ao longo do curso,
usar a teoria de microcontroladores para resolv-los.
O livro vem em auxlio a uma disciplina que dependia de outros dois, um para dar
conta das instrues da linguagem Assembly, outro que explicava o funcionamento geral dos
microcontroladores da famlia HCS08 e, alm desses, o Data Sheet (na lngua inglesa) do
HCS08QG. O intuito torn-lo a principal referncia da disciplina, favorecendo a organizao e o
aprendizado dos estudantes, acostumando-os facilmente com as instrues Assembly e recursos
de microcontroladores.
O livro est dividido em duas partes. Na primeira, h o estudo do microcontrolador e
seus perifricos e da linguagem Assembly. Na segunda, esto reunidas atividades de laboratrio,
exemplos e exerccios de aplicao mais elaborados.
O desafio de elaborar esse material to especfico ser recompensado a medida que
iluminar os passos dos que cursarem essa disciplina, formar engenheiros eletricistas que sintam a
poderosa ferramenta dos microcontroladores como um auxlio pleno em seus projetos.
3
Crditos
Este livro nasceu de uma necessidade de atender os acadmicos de SDM que no
dispunham de um material nico para atender as exigncias da disciplina em 2011. O Acadmico
Arthur Garcia Bartsch aceitou o desafio de escrevermos o livro baseado em livros de autores, data
sheets e experincias de forma a apresentar um livro para a disciplina de SDM que possua todas
as especificaes de hardware e software do microcontrolador utilizado em sala de aula de forma
didtica. Agradeo imensamente a dedicao e o empenho do acadmico, sem o qual este
material no seria realizado.
Agradeo tambm aos professores Antonio Heronaldo de Souza, Fabricio Noveletto e
Fabio de La Rocha, e acadmicos que contriburam com suas experincias e dedicao
disciplina.
4
SUMRIO
PARTE A ESTUDO DO HCS08 E DA LINGUAGEM ASSEMBLY.......................................................8
CAPTULO 1: NOO GERAL DOS MICROCONTROLADORES.........................................................9
1.1 MICROPROCESSADORES.............................................................................................................10
1.2 O QUE SO MICROCONTROLADORES?.......................................................................................10
1.3 DIFERENAS ENTRE MICROCOMPUTADORES E MICROCONTROLADORES.................................10
1.4 TIPOS DE ARQUITETURA DE MICROCONTROLADORES...............................................................11
1.5 RESUMO DO CAPTULO..............................................................................................................12
1.6 EXERCCIOS.................................................................................................................................13
CAPTULO 2: HCS08QG8 ARQUITETURA, PORTAS, FUNES...................................................14
2.1 EVOLUO DA FAMLIA HCS08...................................................................................................15
2.2 O QUE H NO MC9S08QG8?......................................................................................................15
2.3 CARACTERSTICAS INTERNAS DA CPU........................................................................................16
2.3.1 Acumulador A..................................................................................................................17
2.3.2 Contador de Programa PC (Program Counter)...................................................................17
2.3.3 Registrador de ndice H:X.................................................................................................17
2.3.4 Apontador de Pilha SP (Stack-Pointer)..............................................................................17
2.3.5 Registrador de Sinalizadores CCR (Condition Code Register).............................................18
2.4 MAPA DE MEMRIA DO MC9S08QG8.......................................................................................20
2.5 PINAGEM, CONEXES E CARACTERSTICAS GERAIS DO MC9S08QG8........................................21
2.6 RESUMO DO CAPTULO..............................................................................................................23
2.7 EXERCCIOS.................................................................................................................................24
CAPTULO 3: A LINGUAGEM DE PROGRAMAO ASSEMBLY.....................................................26
3.1 INTRODUO LINGUAGEM ASSEMBLY...................................................................................27
3.2 MODOS DE ENDEREAMENTO...................................................................................................28
3.2.1 Endereamento Implcito (INH).........................................................................................29
3.2.2 Endereamento Imediato (IMM).......................................................................................29
3.2.3 Endereamento Direto (DIR).............................................................................................30
3.2.4 Endereamento Estendido (EXT).......................................................................................30
3.2.5 Endereamento Relativo (REL)..........................................................................................31
3.2.6 Endereamento Memria para Memria (DIR/DIR)..........................................................31
3.2.7 Endereamento Indexado (IX)...........................................................................................31
3.3 INSTRUES EM ASSEMBLY.......................................................................................................31
3.3.1 Instrues de Movimentao de bits e Dados...................................................................32
3.3.1.1 Instrues de Movimentao de bits...................................................................................37
3.3.1.2 Outras Instrues de Movimentao de Dados...................................................................38
3.3.2 Instrues de Operaes Lgicas e Aritmticas.................................................................39
3.3.3 Instrues de Operaes de Teste e Desvio.......................................................................53
3.3.3.1 Instrues de Salto de Endereo Absoluto...........................................................................67
3.3.4 Instrues de Controle do Processador.............................................................................68
3.4 DIRETIVAS DO COMPILADOR ASSEMBLY....................................................................................71
3.5 SUB-ROTINAS..............................................................................................................................74
3.6 CO DE GUARDA - WATCHDOG OU COP....................................................................................74
3.7 REGISTRADORES DE OPES DO SISTEMA.................................................................................75
5
3.7.1 Registrador SOPT1 ........................................................................................................75
3.7.1 Registrador SOPT2...........................................................................................................76
3.8 PROGRAMANDO EM ASSEMBLY................................................................................................76
3.9 EXEMPLOS..................................................................................................................................77
3.10 RESUMO DO CAPTULO............................................................................................................80
3.11 EXERCCIOS...............................................................................................................................81
CAPTULO 4: ENTRADAS E SADAS DIGITAIS...............................................................................83
4.1 PERIFRICOS DO MICROCONTROLADOR....................................................................................84
4.2 PORTAS DE ENTRADA E SADA....................................................................................................84
4.3 CONFIGURAO DAS PORTAS DE ENTRADA E SADA.................................................................85
4.3.1 Registradores PTAD e PTBD ...........................................................................................85
4.3.2 Registradores PTADD e PTBDD..........................................................................................86
4.3.3 Registradores PTAPE e PTBPE...........................................................................................86
4.3.4 Registradores PTASE e PTBSE ........................................................................................88
4.3.5 Registradores PTADS e PTBDS .......................................................................................88
4.4 PROGRAMANDO PORTAS EM ASSEMBLY...................................................................................89
4.5 EXEMPLOS..................................................................................................................................89
4.6 RESUMO DO CAPTULO..............................................................................................................91
4.7 EXERCCIOS.................................................................................................................................92
CAPTULO 5: CONVERSOR E COMPARADOR ANALGICO DIGITAL.............................................94
5.1 CONVERSOR ANALGICO-DIGITAL.............................................................................................95
5.2 ENTRADAS E SADAS ANALGICAS.............................................................................................95
5.2.1 Registrador APCTL1..........................................................................................................96
5.3 CONFIGURAO DO CONVERSOR AD........................................................................................96
5.3.1 Registrador ADCCFG.........................................................................................................96
5.4 CONTROLE DO CONVERSOR AD.................................................................................................97
5.4.1 Registrador ADCSC1 ......................................................................................................98
5.4.2 Registrador ADCSC2..........................................................................................................99
5.5 SADA DA CONVERSO ANALGICA E REFERNCIA DE COMPARAO...................................100
5.5.1 Registradores ADCRH e ADCRL........................................................................................100
5.5.2 Registradores ADCCVH e ADCCVL ................................................................................101
5.6 COMPARADOR ANALGICO (ACMP)........................................................................................102
5.6.1 Registrador ACMPSC...................................................................................................... 103
5.7 EXEMPLOS............................................................................................................................... 104
5.8 RESUMO DO CAPTULO........................................................................................................... 107
5.9 EXERCCIOS............................................................................................................................. 108
CAPTULO 6: INTERRUPO.................................................................................................... 110
6.1 CONCEITO DE INTERRUPO.................................................................................................. 111
6.2 CONDIES, ROTINAS DE TRATAMENTO E VETORES DE INTERRUPO................................ 111
6.3 INTERRUPO EXTERNA (IRQ)................................................................................................. 113
6.3.1 IRQSC ............................................................................................................................ 114
6.4 INTERRUPO EM TEMPO REAL (RTI)..................................................................................... 115
6.4.1 SRTISC........................................................................................................................... 115
6.5 OUTROS TIPOS DE INTERRUPO........................................................................................... 116
6.5.1 Interrupo por Software (SWI)..................................................................................... 116
6.6 EXEMPLOS ............................................................................................................................ 117
6.7 RESUMO DO CAPTULO........................................................................................................... 118
6.8 EXERCCIOS.............................................................................................................................. 119
6
CAPTULO 7: SISTEMAS DE RELGIO, TEMPORIZADORES E PWM........................................... 121
7.1 SISTEMA DE RELGIO ............................................................................................................. 122
7.2 SISTEMA ICS (INTERNAL CLOCK SOURCE)................................................................................ 122
7.2.1 Distribuio dos Sinais de Clock..................................................................................... 123
7.3 MODOS DE OPERAO DO ICS................................................................................................ 125
7.4 REGISTRADORES DO MODO ICS.............................................................................................. 126
7.4.1 Registrador ICS1 ............................................................................................................ 126
7.4.2 Registrador ICS2............................................................................................................. 127
7.4.3 Registrador ICSSC .......................................................................................................... 128
7.4.4 Registrador ICSTRM .................................................................................................... 128
7.5 TEMPORIZADOR DE 8 BITS MDULO TIMER (MTIM).............................................................. 129
7.5.1 Registrador MTIMSC...................................................................................................... 129
7.5.2 Registrador MTIMCLK.................................................................................................... 130
7.5.3 Registrador MTIMCNT................................................................................................... 131
7.5.4 Registrador MTIMMOD.................................................................................................. 131
7.6 TEMPORIZADOR DE 16 BITS (TPM).......................................................................................... 132
7.6.1 Registrador TPMCNTH e TPMCNTL ................................................................................ 133
7.6.2 Registrador TPMMODH e TPMMODL ............................................................................ 133
7.6.3 Registradores TPMC0VH, TPMC0VL, TPMC1VH e TPMC1VL ........................................... 133
7.6.4 Modo de captura do TPM.............................................................................................. 134
7.6.5 Modo de Comparao.................................................................................................... 134
7.6.6 Modo Modulao por Largura de Pulso (PWM).............................................................. 135
7.6.7 Registrador TPMC0SC e TPMC1SC .............................................................................. 137
7.6.8 Registrador TPMSC........................................................................................................ 138
7.7 EXEMPLOS............................................................................................................................... 139
7.8 RESUMO DO CAPTULO........................................................................................................... 145
7.9 EXERCCIOS.............................................................................................................................. 146
CAPTULO 8: INTERFACE DE COMUNICAO SERIAL (SCI)....................................................... 148
8.1 INTERFACE SERIAL ASSNCRONA............................................................................................. 149
8.2 TRANSMISSOR SCI................................................................................................................... 149
8.3 RECEPTOR SCI.......................................................................................................................... 150
8.4 GERADOR DE BAUD RATE........................................................................................................ 152
8.5 INTERRUPES DA SCI............................................................................................................. 152
8.6 REGISTRADORES DA SCI........................................................................................................... 152
8.6.1 SCID............................................................................................................................... 153
8.6.2 SCIBDH e SCIBDL............................................................................................................ 153
8.6.3 SCIC2 ............................................................................................................................ 154
8.6.4 SCIS1............................................................................................................................. 155
8.6.5 SCIC3............................................................................................................................. 156
8.6.7 SCIS2............................................................................................................................. 157
8.6.7 SCIC1............................................................................................................................. 158
8.7 EXEMPLOS............................................................................................................................... 159
8.8 RESUMO DO CAPTULO........................................................................................................... 161
8.9 EXERCCIOS.............................................................................................................................. 162
PARTE B ATIVIDADES DE LABORATRIO, EXERCCIOS AVANADOS E PROJETOS
DESENVOLVIDOS.................................................................................................................... 163
CAPTULO 9: ATIVIDADES DE LABORATRIO........................................................................... 164
9.1 EXPERINCIA 01 ENTRADAS E SADAS DIGITAIS.................................................................... 165
7
9.2 EXPERINCIA 02 CONVERSOR AD ........................................................................................ 166
9.3 EXPERINCIA 03 INTERRUPO EXTERNA E INTERRUPO DE TEMPO REAL ..................... 167
9.4 EXPERINCIA 04 PWM ......................................................................................................... 168
CAPTULO 10: EXERCCIOS AVANADOS................................................................................. 169
10.1 SISTEMA DE IRRIGAO........................................................................................................ 170
10.2 CONTROLE DE UMA JANELA................................................................................................. 171
10.3 ELEVADOR............................................................................................................................. 172
10.4 FABRICA DE PEAS................................................................................................................ 173
10.5 EMPILHADEIRA...................................................................................................................... 174
10.6 COMUNICADOR HOSPITALAR............................................................................................... 176
10.7 MQUINA DE LAVAR-ROUPAS.............................................................................................. 177
10.8 MQUINA COMPUTADORIZADA........................................................................................... 179
CAPTULO 11: PROJETOS ..................................................................................................... 180
11.1 DOCUMENTAO DA PLACA DE PROJETO............................................................................ 181
11.1.1 instalao do driver..................................................................................................... 181
11.1.1.1 WINDOWS 7.................................................................................................................... 181
11.1.2 Utilizao do kit........................................................................................................... 183
11.1.2.1 preparao do cdigo..................................................................................................... 183
11.1.2.2 Gravando o cdigo no microcontrolador........................................................................ 183
11.2 AUXILIO PARA O HARDWARE DO PROJETO........................................................................... 185
11.3 FORMATAO DO PROJETO ESCRITO................................................................................... 187
11.4 PROJETO EXEMPLO................................................................................................................ 188
CAPTULO 12: BIBLIOTECAS EM C PARA PROJETOS .............................................................. 201
12.1 BIBLIOTECA PARA ENTRADAS E SADAS DIGITAIS.................................................................. 202
12.2 BIBLIOTECA PARA CONVERSOR AD........................................................................................ 207
12.3 BIBLIOTECA PARA RTI............................................................................................................ 208
12.4 BIBLIOTECA PARA LCD........................................................................................................... 209
CAPTULO 13: MATERIAIS DE APOIO....................................................................................... 219
13.1 RESUMO DAS INSTRUES.................................................................................................... 220
13.2 TABELA DE VETORES.............................................................................................................. 235
13.3 RESUMO DOS REGISTRADORES DO HCS08QG8..................................................................... 236
13.3.1 Registradores do Sistema............................................................................................. 236
13.3.2 Entradas Digitais.......................................................................................................... 237
13.3.3 Entradas Analgicas, Conversor e Comparador AD....................................................... 239
13.3.4 Interrupes................................................................................................................ 243
13.3.5 Temporizador de 8 Bits MTIM................................................................................... 244
13.3.6 Temporizador de 16 Bits TPM.................................................................................... 245
13.3.7 Conexo Serial Assncrona SCI................................................................................... 248
NDICE DAS INSTRUES DO CAPTULO 3............................................................................... 252
TABELA ASCII.......................................................................................................................... 253
REFERNCIAS BIBLIOGRFICAS............................................................................................... 254
a a
8
PARTE A
ESTUDO DO HCS08 E DA
LINGUAGEM ASSEMBLY
9
Captulo 1: Noo Geral de
Microcontroladores
Voc sabe o que um microcontrolador? E um sistema embarcado? A diferena entre
um microcontrolador e um microprocessador? Essas perguntas sero respondidas nesse captulo,
onde, alm disso, voc poder estudar um pouco a respeito da arquitetura de construo dos
microcontroladores.
1.1 Microprocessadores...........................................10
1.2 O que so microcontroladores?.........................10
1.3 Diferenas entre microcomputadores e
microcontroladores................................................. 10
1.4 Tipos de arquitetura de microcontroladores.....11
1.5 Resumo do Captulo...........................................12
1.6 Exerccios............................................................13
4
Que outros faam elogios a voc, no a sua prpria boca; outras pessoas, no os
seus prprios lbios. Provrbios 27:2
10
1.1 Microprocessadores
A evoluo da microeletrnica levou o homem criao de dispositivos cada vez
menores e mais repletos de funes. Funes essas que se tornaram programveis, ou seja,
capazes de entender cdigos carregados de conjuntos de instrues. Os dispositivos que decifram
esses cdigos so denominados microprocessadores (MPU).
Um microprocessador incorpora num nico circuito integrado (CI) as funes de uma
Unidade Central de Processamento (UCP ou CPU). So dispositivos programveis que recebem
dados digitais, capazes de decodificar instrues, process-las e fornecer resultados com sada,
ativando registradores ou outros mecanismos. Alm disso, pode se ler e escrever em memrias,
realizar operaes lgicas e aritmticas.
1.2 O que so microcontroladores?
Os microcontroladores so equipamentos que usam um microprocessador (MPU)
para aplicaes diversas na engenharia. Na realidade, microcontroladores (MCU) so circuitos
digitais programveis compostos de um microprocessador, memrias e perifricos de entrada e
sada, acoplados em um nico chip.
Para executar corretamente as instrues fornecidas, esses equipamentos se utilizam
de um Acumulador (A), de outro Acumulador, este indexado (H:X), um contador de instruo (PC)
e o apontador de pilha de armazenamento (SP), alm de inmeros Registradores, capazes de
conduzir o funcionamento do microcontrolador.
Os microcontroladores so usados para resolver problemas cujas aplicaes so
especficas. Alm disso, visam aplicaes de baixo consumo e servem para trabalhar com dados
analgicos e de controle. Naturalmente, deve-se levar em conta alguns fatores, para escolha do
microcontrolador mais adequado a aplicao desejada, como, funcionalidade do conjunto de
instrues, modos de endereamento, arquitetura, velocidade de execuo, capacidade
aritmtica e lgica, disponibilidade de memria, consumo de energia, presena dos perifricos
desejados e, mesmo, o tamanho do dispositivo.
1.3 Diferenas entre microcomputadores e microcontroladores
Alm de microcontroladores, existem outros sistemas que funcionam atravs do uso
de microprocessadores. Desses, os mais encontrados so os microcomputadores.
No microcomputador, a Unidade Central de Processamento (UCP), as memrias
(volteis e no volteis) e interfaces de seus perifricos (como teclado e mouse) no esto
presentes num nico chip.
Os microcomputadores realizam diversas funes ao mesmo tempo, muitas das quais
provm da interao com usurios, como, editar textos, executar jogos, gerar interfaces grficas,
alm de outras funes, que se diferenciam daquelas normalmente realizadas por
microcontroladores.
Os microcontroladores podem ser usados para controlar os mais diversos
equipamentos, desde controle de LEDs a motores eltricos, porque contam com equipamentos
perifricos capazes de gerar converses Analgicos Digitais (A/D) e Modulao de Largura de
Pulso (PWM), por exemplo. Algo que microcomputadores, normalmente, no fazem.
11
Sistemas Embutidos (Embarcados) so sistemas microprocessados no qual o
microcontrolador completamente encapsulado ou dedicado ao dispositivo ou sistema que ele
controla. Um sistema embarcado realiza tarefas pr-definidas, que possui requisitos bem
especficos. Desta forma, os microcontroladores se encaixam nesse conceito.
1.4 Tipos de arquitetura de microcontroladores
A arquitetura de um microcontrolador define elementos relevantes para o seu
funcionamento. Conhec-la, auxilia no correto uso das instrues, na escolha da linguagem de
programao e no uso da memria, principalmente.
Atravs de estudos em Princeton, foi desenvolvida por John von Neumann, a
arquitetura tradicional de microprocessadores que recebeu o seu nome. Ainda hoje largamente
utilizada nos mais diversos equipamentos, especialmente entre microcontroladores de empresas
pioneiras no mercado, como a Freescale. Os primeiros computadores se baseavam nessa
arquitetura na sua constituio.
Esse modelo von Neumann caracterizado por usar barramentos nicos para
memria e instrues, no contato entre a CPU e componentes externos a ela. Por isso, permite a
criao de instrues que acessem diretamente a memria, alm de flexibilidade na escrita e
leitura de dados em Registradores e variveis. Na arquitetura von Neumann, a escrita e a leitura
so realizadas pela posio de memria, e no pelo tipo desta, pois, h um nico caminho da
memria CPU.
Assim, essa proposta obriga o processamento sequencial de dados, uma vez que h
um nico barramento, por vezes sendo mais lento se comparado arquitetura Harvard. Essa
outra arquitetura baseada na von Neumann, uma evoluo desse conceito de construo de
microprocessadores. Originou-se de um projeto liderado por Aiken, na universidade de Harvard.
Ela difere da Von Neumann porque implementa em separado os espaos para
programar e armazenar dados, gerando assim um paralelismo no processamento. No mais
sequencial como a von Neumann. Por isso, ela mais rpida, e capaz de executar dados em
pipeline, ou seja, permite a busca de uma ou mais instrues, alm da prxima a ser executada. As
instrues so colocadas em uma fila de memria dentro da CPU, na qual, esperam o momento
de sua execuo.
Com a evoluo tecnolgica, essas arquiteturas receberam diversas incluses, mas a
essncia de suas proposies permanece inalterada. Essncias essas que se definem em dois
modelos bsicos de conjunto de instrues. So eles Complex Instruction Set Computer (CISC) e
Reduced Instruction Set Computer (RISC).
O modelo CISC carregado por um elevado nmero de instrues, mais de cem nas
mquinas atuais. Algumas dessas instrues possuem uma elevada complexidade. Mas mesmo as
simples, necessitam de mltiplos ciclos de relgio para serem executadas.
J a modelagem RISC possui um nmero bem restrito e especficos de instrues,
muitas das quais podem ser combinadas para gerar as instrues mais complexas do modelo CISC.
Alm disso, cada instruo desse conjunto executada em um nico ciclo de relgio, condizendo
com a proposta de alta velocidade de processamento desse modelo.
O conjunto CISC est associado arquitetura von Neumann, enquanto a arquitetura
Harvard se liga ao modelo RISC.
Contudo, esses modelos esto cada vez mais similares, visto que o conjunto RISC j
possui um nmero de instrues equivalentes aos primeiros modelos CISC, mas, com o aumento
da tecnologia de semicondutores, j possvel ao modelo CISC executar mais de uma instruo
por pulso de clock, alcanando velocidades semelhantes a equipamentos desenvolvidos em RISC.
12
1.5 Resumo do Captulo
Microprocessadores so dispositivos programveis capazes de decodificar instrues, e
process-las, ou seja, ativar Registradores ou outros mecanismos que executem essas
instrues. Alm de ler e escrever informaes em memrias, realiza operaes lgicas e
matemticas entre diversas outras funes, tudo em um nico chip.
Microcontroladores so dispositivos programveis que possuem um microprocessador,
memrias e perifricos de entrada e sada, acoplados em um nico chip. um sistema
embutido, ou seja, o microcontrolador completamente encapsulado ou dedicado ao
dispositivo que ele controla.
Microcomputadores so dispositivos de uso pessoal ou profissional que tambm possui
um microprocessador, mas normalmente no utilizado para controlar equipamentos,
mas, para realizar muitas aplicaes simultneas com o uso do microprocessador.
H dois tipos de arquitetura para microprocessadores de forma geral, a Von Neumann
(sequencial) e a Harvard (em pipeline). Elas so associadas a sistemas CISC (conjunto
complexo de instrues) e RISC (conjunto de instrues reduzido), respectivamente.
13
1.6 Exerccios
1- Explique a diferena que existe entre os dispositivos microcontroladores, microcomputadores e
microprocessadores. D exemplos de aplicao de cada um deles.
2- Explique tambm a diferena entre as arquiteturas von Neumann e Harvard.
3- Considere a seguinte afirmao: A arquitetura Harvard melhor que a von Neumann por ser
mais rpida. O argumento utilizado vlido?
4- Considere que seja necessrio um equipamento que controle o estado da luminosidade em um
auditrio. Esse ambiente recebe palestras, apresentaes artsticas (como dana e teatro) e
shows, alm de outros eventos, que necessitem de luminosidades especficas. Qual tipo de
sistema processador de informaes mais adequado a esse ambiente. Argumente.
14

Captulo 2: HCS08QG8
Arquitetura, portas, funes
Como a arquitetura interna do HCS08QG8? Quais elementos constituem sua CPU?
Como est distribuda a memria do microcontrolador? Essas so algumas que ao longo desse
captulo sero respondidas. Alm disso, ser vista a pinagem do chip e as conexes da placa do kit
de desenvolvimento DEMO9S08QG8.
2.1 Evoluo da Famlia HCS08................................15
2.2 O que h no MC9S08QG8?................................15
2.3 Caractersticas internas da CPU.........................16
2.3.1 Acumulador A.................................................17
2.3.2 Contador de Programa PC (Program
Counter).................................................................. 17
2.3.3 Registrador de ndice H:X................................17
2.3.4 Apontador de Pilha SP (Stack-Pointer)............17
2.3.5 Registrador de Sinalizadores CCR (Condition
Code Register).................................................. ...... 18
2.4 Mapa de memria do MC9S08QG8...................20
2.5 Pinagem, conexes e caractersticas gerais do
MC9S08QG8 ............................................................21
2.6 Resumo do Captulo...........................................23
2.7 Exerccios ...........................................................24
Comer mel demais no bom, nem honroso buscar a prpria honra.
Provrbios 25:27
15
2.1 Evoluo da Famlia HCS08
A famlia HCS08 uma evoluo do microcontrolador HC908Q. Entre os aspectos a
considerar a respeito dessa evoluo se encontram:
Cdigo objeto compatvel com as famlias HC05 e HC08;
Extenso da memria disponvel;
Alta velocidade de relgio (clock). O HCS08QG8 possui clock de 8MHz.
Cinco modos de operao, sendo trs modos STOP, um WAIT e o modo RUN.
Diversos dispositivos utilizam em seu ncleo um microcontrolador HCS08, dada sua
larga aplicabilidade, que d suporte aos mais diversos perifricos e possui uma arquitetura que
facilita o acesso memria e rpida execuo de instrues.
2.2 O que h no MC9S08QG8?
O microcontrolador HCS08QG8 desenvolvido pela Motorola (Freescale), sendo uma
evoluo da famlia HC08, pertencendo a famlia QG, da serie HCS08. A codificao do
microcontrolador MC9S08QG08 possui o seguinte significado: MC = status no mercado: Fully
Quallified, 9 = Memria Flash, S08 = ncleo , QG = Famlia e 8 = 8kByte de memria.
Esse sistema microcontrolado baseado na arquitetura Von Neumann e possui um
conjunto de instrues CISC (Complex Instruction Set Computer), dando seguimento ao modelo
tradicional da Freescale.
O HCS08QG8 tem um barramento comum compartilhado entre memria e perifricos
(barramento de dados), um barramento de endereos e um barramento de controle. O
barramento de endereos tem uma largura de 16 bits, permitindo endereamento at 65536
bytes. O barramento de dados possui uma largura de 8 bits.
Alm disso, conta com uma estrutura interna repleta de dispositivos que distribuem
suas funes. Essa estrutura acopla no chip os seguintes mdulos:
Unidade Central de Processamento (UCP): Responsvel pela execuo das instrues nos
programas;
Memria interna: O microcontrolador possui trs tipos de memria, Flash (onde se armazena
o programa), ROM (que contm a BIOS de ativao interna) e RAM (usada para armazenar
valores e variveis ao longo da execuo do programa);
Portas de Entrada e Sada (E/S ou I/O): A partir dessas estruturas, o microcontrolador pode se
relacionar com o meio externo. Elas que fornecem os dados vindos do ambiente para serem
processados pelo microcontrolador e retornam o valor obtido ao meio. Algumas portas podem
ser configuradas para receberem tanto sinais digitais quanto analgicos;
Oscilador interno: Gera os pulsos de relgio (clock) do microcontrolador. Fundamental para o
processamento das instrues;
Temporizadores: O HCS08QG8 possui dois temporizadores (timers) independentes entre si.
Um de 8 bits (MTIM) e outro de 16 bits (TPM), que podem ser programados a partir do relgio
(oscilador interno) ou de uma fonte externa. O TPM capaz de gerar sinal PWM. Alm dos
temporizadores, ainda a um sistema de interrupo de tempo real (RTI) independente;
Conversores Analgico-Digital (A/D): H um conversor de ADC que pode operar no modo 8
bits ou 10 bits. So capazes de fazer a leitura de nveis de tenso e associ-los a valores digitais
(binrios). Os nveis de tenso so naturalmente sinais analgicos, que podem vir de um
sensor;
Co de Guarda (Watchdog): Tambm chamado de COP (Computer Operating Properly ou
16
Computador Operando Corretamente) pela Motorola (Freescale), usa um temporizador para
observar a normalidade do comportamento da UCP. De forma que, caso o programa entre em
ciclo errado, e no retorne mais ao programa principal antes de um tempo pr-programado ,
ele fora um reincio (reset).
Mdulos de Espera e Parada: Possuem a funo de deixar o programa em modos de Espera
(Wait) ou em algum dos trs modos de Parada (Stop1, Stop2 ou Stop3). Nesses modos, o
microcontrolador no capaz de executar algumas funes para poupar energia.
Registradores: Guardam valores de 8 bits, possibilitando, atravs deles, o funcionamento
desejado de cada funo do microcontrolador.
Mdulo Low Voltage Detector (LVI): Este mdulo possibilita gerar interrupo quando os
nveis de tenso de alimentao ficam abaixo do pr-determinado.
Unidade Lgica Aritmtica (ULA): Dispositivo capaz de realizar operaes matemticas
(somas, subtraes), comparativas (verificao de igualdade ou desigualdade) e lgicas
(verdadeiro ou falso). Principal unidade depois da CPU.
Ambiente de integrao: Meio que integra as mais diversas unidades internas do
microcontrolador, atravs de seus barramentos.
2.3 Caractersticas internas da CPU
A CPU a mais importante unidade interna do microcontrolador, pois a responsvel
por processar os dados do programa e execut-lo.
O microcontrolador possui cinco registradores especiais dentro do ambiente da CPU,
so eles o Acumulador A, o Contador de Programa PC (Program Counter), o registrador indexado
H:X, o apontador de pilha SP (Stack Pointer) e o registrador de sinalizadores CCR (Condition Code
Register).
Figura 2.1 Diagrama de Blocos da CPU e sua Interao com a ULA e a RAM
17
2.3.1 Acumulador A
Registrador de 8 bits. Armazena dados temporrios para operaes aritmticas e
movimentao de dados e comparaes. Como est conectado diretamente na sada da ULA, a
utilizao do Acumulador aumenta a velocidade de execuo dos clculos, em comparao aos
quando estes so feitos em uma posio da memria RAM, por exemplo.
O Acumulador possui instrues exclusivas, como LDA (Load Accumulator) e STA
(Store Accumulator). Alm disso, muitas outras instrues so usadas em referncia a este
registrador (Acumulador A) dada a praticidade de seu uso.
2.3.2 Contador de Programa PC (Program Counter)
Esse contador binrio indica a posio do endereo da prxima instruo a ser
executada pelo programa. O PC varia sua contagem de acordo com o tamanho do espao ocupado
por cada instruo e do local da memria por ela designado para a instruo seguinte. Graas a
ele o microcontrolador no se perde ao longo da execuo do programa.
Ele no pode ser alterado diretamente pelo programador, assim, no existe nenhuma
instruo de escrita nesse Registrador. Contudo, existem instrues de salto e de desvio, que
indiretamente, alteram o valor contado pelo PC, criando a possibilidade do programa no ser
unicamente sequencial.
O Contador de Programa (PC) possui 16 bits, portanto existem 2 registradores de 8
bits associados PCL e PCH (Program Counter Low e Program Counter High) permitindo
endereamento de at 64kBytes posies de memria.
O registrador PCL armazena os valores baixos (menos significativos) e o registrador
PCH os valores altos (mais significativos) de memria.
Quando ocorre reset, o PC inicializado com o valor 0xFFFE. Esta posio e a seguinte
possuem o vetor do reset, ou seja, o endereo da primeira instruo a ser executada pela CPU.
Assim, no momento em que o dispositivo microcontrolado comea suas atividades, o PC aponta
para essa posio 0xFFFE e o valor contido neste endereo e do seguinte formam o endereo da
instruo a partir do qual o programa comear a ser executado.
2.3.3 Registrador de ndice H:X
Esse elemento da CPU um registrador de 16 bits que na realidade so dois
registradores distintos (H e X) de 8 bits.
Assim, o Registrador X armazena os valores baixos (menos significativos) e o
Registrador H os valores altos (mais significativos).
Alm disso, esse Registrador de ndice indexado possui a funo de ponteiro, ou seja,
quando um valor guardado nesse Registrador, possvel utilizar instrues em H:X que realizem
modificaes ou leitura nesta posio de memria.
2.3.4 Apontador de Pilha SP (Stack-Pointer)
Esse elemento um registrador de 16 bits capaz de armazenar endereos e valores na
memria RAM e depois recuper-los. Trata-se de um registrador chamado Stack Pointer (SP) que
aponta para o topo da pilha. A pilha uma estrutura de dados do tipo LIFO (Last In First Out) ou
seja, o ltimo dado colocado na pilha ser o primeiro a ser retirado. usado para guardar
18
endereos de retorno de subrotinas, de interrupes e variveis. A pilha cresce do endereo alto
ao baixo, ou seja, a cada dado a ser colocado, o SP decrementado da posio de memria e a
cada retirada, o SP incrementado (o incio do SP o endereo $FF, a medida que acrescentado
algum dado na pilha, o topo dela vai decrescendo sua posio na memria para $FE, $FD e assim
sucessivamente). O SP sempre aponta para uma posio de memria disponvel.
Esse mecanismo muito importante para o correto funcionamento de sub-rotinas e
interrupes que sero vistas mais adiante.
2.3.5 Registrador de Sinalizadores CCR (Condition Code Register)
Esse registrador de 8 bits possui valores que so utilizados pelas instrues para
direcionar a atividade do microcontrolador. Esses valores so chamados sinalizadores ou flags
(bandeiras). Servem para indicar o microcontrolador de uma determinada condio alcanada
pelas instrues do programa. Cada sinalizador possui uma funo especfica. Ser estudado cada
um individualmente, observe primeiro o diagrama de bits desse registrador:
Tabela do Registrador CCR BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
bits de Leitura e Escrita V 1 1 H I N Z C
Valores Inicializados pelo reset x 1 1 x 1 x x x
C Sinalizador de transporte/emprstimo (carry/borrow):
A letra C abreviao de Carry (transporte).
Este flag tem um comportamento especfico para alguns tipos de operaes
realizadas, indicando ao microcontrolador as consequncias de tal operao.
* Operao de teste de bit: O flag C recebe o valor do bit testado pela instruo.
* Operao de deslocamento ou rotao (D/R) de bits: O flag C se comporta como bit
extra nesse tipo de operao, ou seja, no caso D/R esquerda, recebe o valor do bit7 e no caso de
D/R a direita, recebe o valor do bit0.
* Operaes aritmticas (soma/subtrao): Para somas, o flag C setado sempre que
ultrapassar 255, funcionado como transporte (carry). J em subtraes, esse flag setado se o
resultado da operao for um nmero menor que zero, assim, o flag funciona como emprstimo
(borrow).
Z Sinalizador de Zero:
A letra Z abreviao de Zero (zero).
Este bit do CCR indica se o valor resultante de uma operao (seja esta lgica,
aritmtica ou de movimentao de dados) zero (Z = 1). Caso o valor seja diferente de zero, o
flag continua apagado (Z=0).
Atravs deste sinalizador, pode-se entender que as operaes de comparao, entre
outras, quando executadas com zero, so mais rpidas do que quando usadas com qualquer outro
valor. Como j existe um indicador interno CPU para o valor zero, no preciso buscar na
memria ou fazer operaes aritmticas/lgicas extras para determinar se o resultado obtido na
operao zero, mas esses processamentos a parte so necessrios para qualquer outro valor.
Por isso mesmo, as operaes de comparao, normalmente utilizam-se dos dois
sinalizadores anteriores para comparar valores. Elas fazem a subtrao dos dois operandos a
serem comparados, e verificam os flags C e Z. Caso o Z esteja aceso, os valores comparados so
iguais. Caso os dois flags estejam apagados, significa que o primeiro valor maior que o segundo,
caso o flag C esteja aceso, o segundo valor maior do que o primeiro.
19
N Sinalizador de negativo
A letra N abreviao Negative (negativo).
Este indicador N normalmente s utilizado para operaes sinalizadas, contudo
algumas aplicaes no-sinalizadas podem se utilizar dele tomando-se o devido cuidado de
interpretao.
Este flag setado se o bit7 (ou seja, o bit mais significativo) do valor resultante em
uma operao estiver setado. Esse bit em operaes sinalizadas o bit de sinal, assim, esse flag
indica se valor resultante negativo.
I Sinalizador de Interrupo
A letra I a abreviao de Interruption (interrupo).
Este bit serve para mascarar interrupes, ou seja, evitar o ativamento indevido de
interrupes ao longo da execuo do programa. preciso utilizar-se de instrues especficas
para set-lo (SEI) ou zer-lo (CLI). Assim, quando este bit est setado, as interrupes esto
desabilitadas, independentemente da interrupo especfica estar habilitada em seu prprio
registrador. Logo:
I Mascarar interrupes
0 Interrupo habilitada
1 Interrupo desabilitada
H Indicador de Meio-transporte
A letra H a abreviao de Half-Carry (meio-transporte).
O flag H indica a existncia de transporte entre os bits 3 e 4, em operaes de adio,
no Acumulador. Ele comumente utilizado em operaes envolvendo valores em cdigo BCD
(Binary Code Decimal ou, Cdigo Decimal Binrio).
V Sinalizador de Estouro:
A letra V vem de oVerflow (estouro).
Caso haja um estouro em uma soma de operandos no formato de complemento de 2,
este flag ser setado, indicando sua ocorrncia. De forma a informar a CPU que a operao
executada obteve um resultado fora do intervalo [-128; +127].
20
2.4 Mapa de memria do MC9S08QG8
Faixa de
Endereo
Mdulo da
memria
0x0000
:
0x005F
Registradores de
pgina direta
0x0060
:
0x025F
RAM
(512 bytes)
0x0260
:
0x17FF
Vago
(5 536 bytes)
0x1800
:
0x184F
Registradores de
pgina alta
0x1850
:
0xDFFF
Vago
(51 120 bytes)
0xE000
:
0xFFAF
FLASH
(8 112 bytes)
0xFFB0
:
0xFFBF
Registradores no-
volteis
0xFFC0
:
0xFFFF
rea de Vetores
de Interrupo
A memria do microcontrolador est dividida em algumas categorias:
1- Registradores de pgina direta (0x0000 0x005F): Endereos que contm registradores usados
comumente ao longo do programa, que normalmente sofrem alteraes no decorrer da
execuo. Por isso, esto localizados em valores de endereos baixos, onde qualquer instruo em
Assembly tem acesso.
2- Memria RAM (Ramdom Acess Memory - 0x0060 0x25F): Esse tipo de memria utilizado
para alocar constantes e variveis. Esta memria voltil, ou seja, se no estiver energizado,
perde as informaes, que so alterados ao longo do programa. Ela rpida e garante acesso
aleatrio s informaes (ou seja, acesso no-sequencial, no preciso percorrer todas as
posies de memria para acessar determinado valor). Observe que a RAM desse
microcontrolador est localizada a partir do endereo 0x0060, e o Apontador da Pilha esto
localizados no endereo 0x00FF, para baixo. Assim, a pilha se utiliza da memria RAM em seus
processos.
3- Registradores de pgina alta(0x1800 0x184F): So registradores que no tem seus valores
alterados to frequentemente ao longo do programa, por isso esto alocados em endereos altos
(0x1800). Normalmente, s so acessados nas configuraes iniciais dos programas.
4- Memria FLASH (0xE000 0xFFAF): Nessa memria, armazenado o programa embarcado no
microcontrolador. Como este tipo de memria no-voltil, os dados do programa no se
21
perdem quando a fonte desligada, assim possvel manter os dados do programa, mesmo
quando este no est funcionando.
5- Registradores no-volteis( 0xFFB0 0xFFBF): Contm informaes necessrias para o correto
funcionamento do microcontrolador, seus dados no podem ser acessados tampouco alterados
pelo programador.
6- rea de vetores de interrupo(0xFFC0 0xFFFF): ltima regio da memria, contm os
endereos visitados quando surge determinado tipo de interrupo. Sero melhor estudados
posteriormente.
2.5 Pinagem, conexes e caractersticas gerais do MC9S08QG8
Muitos pinos do microcontrolador possuem pinos com funes multiplexadas (ou seja,
h vrias funes na mesma porta, mas ele utiliza apenas uma por vez, conforme habilitado pelo
software), conforme descritos na Figura 2.2.
Figura 2.2 Conexes da Placa DEMO9S08QG8
Pino 1: Este pino est relacionado com a porta PTA5, reset externo do microcontrolador, clock
externo para o Temporizador TPM (TCLK) e pedido de Interrupo Externa (IRQ). Quando
programada para porta digital, exclusivamente uma entrada (no pode ser programado como
sada) e na placa est conectado a um boto, para gerar interrupo externa.
Pino 2: Este pino contm o background do chip Mode Select (MS), sada do comparador
analgico, e a porta PTA4, que funciona exclusivamente como sada. Est conectado
externamente ao Background da placa, ou seja, se estiver em nivel 0, a CPU entra em modo de
depurao, caso contrrio, a CPU opera normalmente.
22
Pino 3: Contm o VCC do chip, aqui deve ser conectada uma tenso de 3,3V.
Pino 4: o pino de referncia do circuito (terra), o pino VSS deve ser ligado a uma tenso de 0V.
Pino 5: Este pino relativo entrada de Cristal ou oscilador (EXTAL), ao barramento de clock
serial SCL da conexo serial IC e porta PTB7. Externamente, est conectado na placa do kit com
o LED2.
Pino 6: Este pino anlogo ao pino 5, pois possui a entrada de Cristal ou oscilador (XTAL), ao
barramento de dados da conexo serial IC (SDA) e porta PTB6. Externamente, est conectado
na placa do kit com o LED1.
Pino 7: Este pino est relacionado ao canal 1 de PWM (TPMCH1) e porta PTB5, alm disso,
possui o seletor SS, da conexo serial SPI.
Pino 8: Est relacionado a porta PTB4 e a seletiva Master In, Slave Out (MISO) da conexo serial
SPI.
Pino 9: Referente porta PTB3 , seletiva Master Out, Slave In (MOSI), da conexo serial SPI,
alm do canal 7 (ADP7) do conversor analgico e do dispositivo 7 da interrupo por teclado
(KBI7).
Pino 10: Possui a entrada de clock da conexo serial SPI (SPSCK), alm do canal 6 do conversor
analgico (ADP6), do dispositivo 6 da interrupo por teclado (KBI6). Referente porta PTB2.
Pino 11: Este pino est relacionado a porta PTB1, est ligado, na placa, Transmisso de dados,
na conexo serial SCI (TXD). Tambm est relacionado ao canal 5 do conversor analgico (ADP5),
ao dispositivo 5 de interrupo por teclado (KBI7).
Pino 12: Este pino est ligado, na placa, Recepo de dados, na conexo serial SCI (RXD). Est
relacionado ao canal 4 do conversor analgico e o dispositivo 4 da interrupo por teclado (KBI4).
Pino 13: Contm a porta PTA3, o canal 3 do conversor analgico (ADP3), o dispositivo 3 do
interruptor de teclado (KBI3), e outro mdulo SCL. Est conectado externamente no boto SW2
da placa.
Pino 14: Este pino est relacionado porta PTA2, ao canal 2 do conversor analgico (ADP2), o
dispositivo 2 do interruptor de teclado (KBI2), e outro mdulo SDA. Est conectado externamente
no boto SW1 da placa.
Pino 15: Este pino est relacionado a porta PTA1, do canal 1 do conversor analgico (ADP1), do
dispositivo 1 da interrupo de teclado (KBI1) e da entrada inversora do comparador analgico
(ACMP-). Est ligado externamente ao Sensor de Luz RZ1 da placa.
Pino 16: Este pino est relacionado porta PTA0, ao canal 0 de converso analgica, ao
interruptor de teclado 0 (KBI0), entrada no-inversora do comparador analgico (ACMP+) e ao
canal 0 do PWM (TPMCH0). Externamente, est vinculado ao potencimetro (RV1) da placa.
23
2.6 Resumo do Captulo
O microcontrolador HCS08 uma evoluo compatvel das famlias HC05 e HC08.
Possui arquitetura interna Von Neumann, com um conjunto de instrues CISC. Portanto, possui
trs barramentos (dados, endereos e controle).
Possui como componentes internos principais:
Unidade Central de Processamento (UCP ou CPU);
Memria interna;
Portas de Entrada e Sada (E/S ou I/O);
Oscilador interno;
Temporizadores;
Conversores Analgico-Digital (A/D);
Co de Guarda (Watchdog);
Mdulos de Espera (Wait) e Parada (STOP);
Registradores;
Mdulo LVI;
Unidade Lgica Aritmtica (ULA);
Ambiente de integrao.
Alm disso, a CPU possui cinco Registradores Internos: o Acumulador A, o Contador de
Programa (PC), o Registrador de ndice H:X, o Apontador de Pilha SP e o Registrador de
sinalizadores CCR.
O CCR possui seis sinalizadores ou flags, so eles:
Indicador de Emprstimo (Carry) C;
Indicador de Zero Z;
Indicador de Negativo N;
Indicador de mscara de Interrupo I;
Indicador de meio-emprstimo (Half carry) H;
Indicador de estouro (oVerflow) V.
A memria possui seis espaos implementados (Registradores de pgina direta, RAM,
Registradores de pgina alta, FLASH, registradores no-volteis e a rea de vetores). O
microcontrolador possui dezesseis pinos e a placa possui conexes com potencimetro (pino 16),
com sensor de luz (pino 15), com dois botes (pinos 13 e 14), com interruptor externo (pino 1),
com background (pino 2), com dois LED's (pinos 5 e 6), com entrada serial SCI (pinos 11 e 12).
Observao Importante
Tome cuidado ao utilizar determinados recursos do microcontrolador. Especialmente em relao
tenso e corrente geradas pelos perifricos ligados aos pinos. Lembre-se que o nvel lgico 1
equivale a 3,3 V. Alm disso, cuide para que suas conexes estejam de acordo com aquilo que
foi programado.
24
2.7 Exerccios
1- Quais elementos constituem a arquitetura geral do microcontrolador?
2- Descreva cada Registrador da CPU do microcontrolador.
3- Considere um programa que em dado momento executa uma operao de comparao entre
os nmeros dados abaixo. Sabendo que a comparao feita atravs da anlise:
valor1 valor2 em relao a (<, > ou =) 0
Diga quais flags do CCR sero acesos nas seguintes comparaes:
OBS.: O valor aps # indica nmero decimal, aps #$ indica nmero hexadecimal.
a) valor1 = #8 e valor2 = #9
b) valor1 = #9 e valor2 = #$09
c) valor1 = #10 e valor2 = #$10
d) valor1 = #255 e valor2 = #256
e) valor1 = #-128 e valor2 = #-127
f) valor1 = #-128 e valor2 = #127
g) valor1 = #256 e valor2 = #256
h) valor1 = #$FF e valor2 = #255
i) valor1 = #$89 e valor2 = #135
4- Considere a leitura do CCR em determinado momento ao longo da execuo do programa.
Observando que essa leitura resulta no valor hexadecimal igual a #$6C, diga qual afirmao
verdadeira. Justifique as falsas.
(a) A ltima operao executada resultou em um valor negativo.
(b) H possibilidade de a ltima operao ter sido: #$00FF + $#1000.
(c) possvel que o programa seja interrompido a qualquer momento por qualquer interrupo.
(d) impossvel que a ltima operao tenha sido de comparao.
(e) Obrigatoriamente o primeiro algarismo seria 6, pois os bits 5 e 6 esto sempre em nvel 1.
5- Escreva sobre os Registradores de pgina alta e de pgina baixa.
6- Assinale a alternativa falsa:
(a) No possvel alocar uma varivel no endereo 0x180A.
(b) O tamanho mximo para as instrues do programa (memria FLASH) de 8kBytes.
(c) Registradores de pgina direta so mais difceis de serem acessados por causa de seu
endereo baixo.
(d) Aos vetores de interrupo separada a ltima parte dos endereos de memria.
(e) Cabem exatamente 4096 bits de memria RAM no microcontrolador HCS08QG8.
7- Por que existem espaos vagos na memria do microcontrolador.
8- Considerando que o SP inicia no endereo $FF, uma operao pede para depositar na pilha o
seguinte endereo: 0xE00A. Em seguida, outra operao deseja depositar na pilha o valor do
Acumulador A, que 91. Na sequncia, coloca-se na pilha o valor 17. Em seguida empilha-se o
seguinte endereo 0xE01A. Diga qual a posio de memria apontada pela pilha depois dessas
operaes e qual o valor da posio 0x00FE da memria RAM do microcontrolador.
25
9- Considere que o microcontrolador necessitar operar com duas converses analgicas, com um
transmissor e um receptor de SCI, com dois canais de PWM, duas entradas digitais e trs sadas
digitais. Faa uma relao de possveis escolhas para os pinos a fim de atender a esses requisitos.
10- Considerando os requisitos fornecidos abaixo de projeto para programa no kit MC9S08QG8,
faa a relao de possveis escolhas para os pinos do microcontrolador do kit, a fim de atender a
esses requisitos. (Considere que s ser possvel obter nveis analgicos de tenso pelo
potencimetro, nveis de entradas digitais pelos botes, e as sadas pelos LED's):
a) Uma converso analgica, um canal de PWM, seis botes de interrupo por teclado, duas
sadas digitais.
b) Dois canais de PWM, dois botes de entradas de entrada.
c) Um boto para interrupo externa, um boto de interrupo por teclado, duas sadas e duas
entradas digitais.
d) Um canal de interrupo externa, duas entradas digitais, um canal de PWM, dois LED's, um
sensor de luz e um pino de recepo SCI.

26
Captulo 3: A linguagem de
programao Assembly
Neste captulo, sero abordados as Instrues Assembly do microcontrolador
HCS08QG8. Alm das Instrues, tpicos referentes aos modos de endereamento, as
diretivas do programa, sub-rotinas, a relao da linguagem com os elementos da CPU, os
cdigos de operao (opcodes), e iniciao programao em Assembly, incluindo a
configurao de registradores (SOPT1 e SOPT2).
Assim, de grande importncia ter bem em mente os conceitos aqui
apresentados, pois sero fundamentais ao longo de todo o curso, que visa justamente a
programao em Assembly.
3.1 Introduo Linguagem Assembly.....................27
3.2 Modos de Endereamento.................................28
3.2.1 Endereamento Implcito (INH).......................29
3.2.2 Endereamento Imediato (IMM)....................29
3.2.3 Endereamento Direto (DIR)...........................30
3.2.4 Endereamento Estendido (EXT).....................30
3.2.5 Endereamento Relativo (REL)........................31
3.2.6 Endereamento Memria para Memria
(DIR/DIR)..................................................................31
3.2.7 Endereamento Indexado (IX).........................31
3.3 Instrues em Assembly.....................................31
3.3.1 Instrues de Movimentao de bits e
Dados.......................................................................32
3.3.1.1 Instrues de Movimentao de bits..........37
3.3.1.2 Outras Instrues de Movimentao de
Dados.......................................................................38
3.3.2 Instrues de Operaes Lgicas e
Aritmticas...............................................................39
3.3.3 Instrues de Operaes de Teste e Desvio....53
3.3.3.1 Instrues de Salto de Endereo Absoluto...67
3.3.4 Instrues de Controle do Processador..........68
3.4 Diretivas do Compilador Assembly.....................71
3.5 Sub-Rotinas........................................................74
3.6 Co de Guarda - Watchdog ou COP...................74
3.7 Registradores de Opes do Sistema.................75
3.7.1 Registrador SOPT1...........................................75
3.7.1 Registrador SOPT2...........................................76
3.8 Programando em Assembly................................76
3.9 Exemplos............................................................77
3.10 Resumo do Captulo.........................................80
3.11 Exerccios..........................................................81
A palavra proferida no tempo certo como frutas de ouro incrustadas numa
escultura de prata." Provrbios 25:11
27
3.1 Introduo Linguagem Assembly
A CPU necessita de comandos para que ela possa realizar suas funes, portanto os
programas usam cdigos para fornecer as instrues. Estes cdigos so chamados de cdigos de
operao ou opcodes. Um opcode (representao binria, tambm denominadas de Linguagem de
Mquina) entendido pela CPU, mas no tem sentido para humanos. Por isso foram criados
instrues mnemnicas (linguagem Assembly) correspondentes ao opcodes.
A palavra Assembly, em ingls, significa montagem, reunio. Assim, a Linguagem
Assembly tambm denominada de Linguagem de Montagem, cuja notao formada por
smbolos mnemnicos que interagem diretamente com a mquina, transmitindo as informaes
em nveis lgicos para o dispositivo. Compiladores traduzem as linguagens de alto nvel para a
linguagem Assembly, e um aplicativo chamado Montador Assembler ou simplesmente Assembler
converte a Linguagem Assembly em cdigo de operao ou opcodes.
O nmero de instrues, a forma como so abreviadas, sua funcionalidade entre
outros aspectos da linguagem Assembly dependem da arquitetura do microcontrolador a ser
estudada. Contudo, a medida que se conhece o lado operacional do Assembly, pode-se trabalhar
em qualquer microcontrolador de forma anloga. Alm disso, linguagens de alto nvel dependem
do Assembly de cada microcontrolador, assim conhecendo o Assembly, possvel garantir a
otimizao do programa em uma linguagem mais elevada.
Portanto, o estudo da linguagem Assembly ainda se faz muito necessrio por parte de
engenheiros eletricistas e programadores de sistemas embarcados. At porque, o Assembly uma
linguagem que permite um contato direto do programador com a mquina, dando a este a
possibilidade de trabalhar diretamente com os flags, as posies de memria e com os
registradores internos da CPU, possibitando otimizao e maior velocidade.
Neste curso, estudar-se- o Assembly do microcontrolador HCS08QG8, que
compatvel com outros dispositivos da Freescale. Antes, entretanto, de iniciar seu estudo, cabe
algumas colocaes.
Primeiro, o conhecimento da linguagem fundamental para a construo de bons
programas para que alm de eficientes sejam eficazes, ou seja, alm de serem bem escritos sem
erros de compilao, funcionem conforme projetados. Mas, como em qualquer rea
computacional, a lgica de programao essencial para o sucesso, ela obtida da prtica, da
resoluo de exerccios e da aplicao em laboratrio. Outro ponto muito importante aprender
a configurar corretamente os registradores. No adianta ter a lgica, mas ser incapaz de utiliz-la
em uma aplicao. Com estas consideraes podemos seguir adiante em nosso estudo.
A linguagem Assembly composta de instrues mnemnicas e das pseudo-instrues
que so as diretivas. As instrues so caracterizadas por possuir um opcode correspondente com
ou sem operandos de acordo com o modo de endereamento da respectiva instruo da CPU. As
diretivas so declaraes que fornecem instrues para o Montador Assembler e no para a CPU,
como selecionar a base de representao numrica dos nmeros sem prefixo, definir valores
constantes na memria, alocar posies de memria, etc.
As instrues mnemnicas que formam o arquivo fonte de um programa devem estar
escritas com uma sintaxe correta para que o Assembler consiga gerar os opcodes corretamente.
Cada linha de cdigo pode conter os seguintes elementos:
Rtulos (labels): nomes dados aos endereos iniciais do programa, subrotinas, instrues de
desvios ou subrotinas de tratamento de interrupes. So precedidas de dois pontos(:). Ex.:
Inicio: ;
Instrues mnemnicas: abreviaes simblicas dos opcodes. Portanto, h um opcode que
um valor hexadecimal para cada instruo;
28
Operandos: o que segue uma instruo mnemnica caso haja necessidade de um
complemento da instruo. Os operandos esto ligados diretamente aos modos de
endereamento que ser dado posteriormente;
Comentrios: o Assembler permite um texto explicativo aos mnemnicos ao colocar um
ponto-vrgula antes do texto, o qual no considerado ao gerar os opcodes.
A seguir exemplos de linhas de cdigo vlidas:
Rtulo Mnemnico Operando Comentrios
; O ponto vrgula (;) torna a linha comentada
INICIO: LDA #10 ;carrega o decimal 10 no Acumulador
STA $20 ;armazena o contedo de A na posio $20
JSR ATRASO ;salta para a sub-rotina atraso
BSET 1,PTAD ;seta o bit 1 do Registrador PTAD
FIM: BRA FIM ;desvia incondicionalmente para FIM

As instrues podem ser classificadas de diversas maneiras para facilitar o estudo
dessa linguagem. Uma dessas formas, classific-las em:
Instrues de movimentao de bits e de dados;
Instrues de operaes lgicas e aritmticas;
Instrues de teste e desvio; e
Instrues de controle do processador.
Alm disso, existem sete principais modos de endereamento de opcode (cada
instruo pode possuir mais de um modo de endereamento) na arquitetura do HCS08QG8.
3.2 Modos de endereamento
Antes de verificar os modos de endereamento, preciso entender melhor o conceito
de operando.
Operando o objeto de complemento ou de atuao das instrues Assembly. Assim
sendo, a instruo pode agir sobre o operando, pode agir a partir do operando ou pode utilizar o
operando em sua ao sobre outro elemento do microcontrolador. Alm disso, uma Instruo
pode no ter operando, ter um nico, ou ainda, ter mais de um operando. Os operandos podem
ser bits, posies de memria, Acumulador, Registrador H:X, um valor numrico (decimal,
hexadecimal ou binrio) ou um Registrador especfico. Estes operandos podem possuir 8 ou 16
bits. Portanto, o tamanho do operando determina o modo de endereamento da instruo. O
modo de endereamento de uma instruo pode ser entendido como o caminho pelo qual a CPU
recebe as informaes para executar a instruo.
Uma mesma instruo pode possuir mais de uma forma de operandos, ou seja, ter
mais de um modo de endereamento.
Perceba que o conjunto de opcodes + Operando forma uma operao.
Observaes Importantes
- Sempre se coloca um caractere de tabulao antes das instrues para melhor organizao do
programa;
- No se utiliza nomes de vriaveis ou rtulos iniciados em nmeros (ex: 1LOOP);
- No se utiliza acentos em nenhum caractere;
- O rtulo deve ser escrito no canto mais a esquerda possvel.
29
Os modos de endereamento variam com a arquitetura e o modelo do
microcontrolador. A arquitetura Von Neumann, com seu conjunto CISC, no HCS08QG8
providencia sete principais modos de endereamento. So eles:
Implcito;
Imediato;
Direto;
Estendido;
Relativo;
Memria para memria;
Indexado.
Para facilitar a compreenso dos exemplos, a tabela a seguir informa o significado dos
smbolos numricos da linguagem Assembly.
Smbolo Significado Exemplo Concluso
# Valor decimal #10 Corresponde ao decimal 10
#% Valor binrio #%10 Corresponde ao binrio 10, ou seja, o decimal 2
#$ Valor Hexadecimal #$10 Corresponde ao hexadecimal 10, ou seja, ao decimal
16
$ Endereo $60 Endereo da posio de memria 60 (hexadecimal)
3.2.1 Endereamento Implcito (INH)
No modo implcito no h operando explcito associado ao opcode da instruo. J
declarado implicitamente no prprio mnemnico da instruo.
O opcode destas instrues so sempre de 8 bits (como o da maior parte das
instrues do conjunto CISC, contudo, estas no tem o complemento de um operando
permanecendo com 8 bits no cdigo do programa), assim o PC avana apenas um endereo de
memria( 1 byte), aps uso de uma instruo com este modo de endereamento.
Na sequncia, exemplos de instrues com esse endereamento, seus opcodes e seu
uso:

Mnemnico Opcode (HEX) Funo da Instruo
INCA 4C Acrescenta uma unidade no Acumulador
CLI 9A Apaga o bit I do Registrador CCR
CLRX 5F Gera o valor #S00 no Registrador X
DAA 72 Ajusta a base numrica do Acumulador para 10
3.2.2 Endereamento Imediato (IMM)
As instrues do modo imediato apresentam aps o opcode um operando de um byte
(8 bits) ou de uma word (16 bits) cujo contedo um valor numrico (decimal, binrio ou
hexadecimal).
Seguem alguns exemplos de instrues que utilizam esse modo de endereamento:
Mnemnico + Valor Opcode (HEX) Funo da Instruo
LDA #5 A6 05 Carrega o decimal #5 no Acumulador
LDHX #$8F90 45 8F90 Carrega o hexadecimal #$8F90 em H:X
30
Mnemnico + Valor Opcode (HEX) Funo da Instruo
AIX #%00001010 AF 0A Soma o binrio #%00001010 com o valor de X
SUB #$80 A0 80 Subtrai o hexadecimal #$80 do Acumulador
ORA #$AA AA AA Faz a operao OR entre #$AA com o contedo de A
3.2.3 Endereamento Direto (DIR)
As instrues de modo direto apresentam aps o opcode um operando de um byte (8
bits) cujo contedo um endereo de 8 bits.
Portanto, usado para instrues que tenham o acesso aos endereos da chamada
pgina direta, ou seja, aos endereos de posio de memria at endereo $FF.
Mnemnico + Operando Opcode (HEX) Funo da Instruo
LDA $60 B6 60 Carrega o contedo da posio $60 no Acumulador
EOR $80 B8 80 Faz a operao XOR entre $80 e o Acumulador
INC $9A 3C 9A Acrescenta uma unidade na posio $9A
NEG $FF 30 FF Faz o complemento de 2 na posio $FF
BSET 3, $8C 16 8C Seta o bit 3 do Registrador do endereo $8C

3.2.4 Endereamento Estendido (EXT)
As instrues de modo estendido apresentam aps o opcode um operando de uma
word (16 bits) cujo contedo um endereo de 16 bits.
Portanto, como utilizado 16 bits para especificar o endereo de memria, pode-se
acessar qualquer uma das 64k posies de memria. Desta forma, elas possuem acesso
endereos de pgina alta (a partir do $100 a $FFFF).
Observaes Importantes
Um cuidado que deve-se tomar com instrues desse tipo que, justamente, elas no possuem
acesso endereos de pgina alta (a partir do $100). Assim, elas so incapazes de, por exemplo,
escreverem em registradores ou memrias localizados nessa parte da memria. So muito comuns erros
nesse requisito.
Observao Importante
Muitas instrues esto aptas a realizar operaes tanto no modo de endereamento
imediato quanto no modo direto. A diferena entre o modo utilizado simples. O primeiro
trabalha com operandos como sendo valores numricos (decimais, binrios ou hexadecimais)
enquanto o segundo trata dos operandos como sendo endereos de memria de pgina direta.
Observe tambm que quando no colocado o identificador de operando valor ou posio
(# ou $), o Assembler trata o operando como posio de memria, veja no exemplo a seguir:
LDA #80; Carrega o decimal 80 no Acumulador
LDA $80; Carrega o contedo da posio 80 no Acumulador
LDA 80; Carrega o contedo da posio 80 no Acumulador
31
Mnemnico + Operando Opcode (HEX) Funo da Instruo
LDA SOPT1 C6 1802 Carrega o contedo do Registrador SOPT1 (que est
na posio $1802 da memria) no Acumulador
JMP $E025 CC E025 Faz um "salto"para a posio $E025
3.2.5 Endereamento Relativo (REL)
As instrues de modo relativo so especificamente de desvio para um endereo e
desvio de subrotina. adicionado ao PC (Program Counter) o contedo do operando que um
valor de 8 bits com sinal. Portanto, fornecido um desvio de 127 bytes para frente ou 128 bytes
para trs do endereo atual do programa, da o modo receber o nome de endereamento
relativo.
Mnemnico + Operando Opcode (HEX) Funo da Instruo
BRA $E006 20 06 Desvia o programa para a posio E006, mas de
forma relativa. Considerando que a instruo BRA
$E006 esteja na posio $E000, o opcode de desvio
relativo ser 06 (seis posies a frente).
3.2.6 Endereamento memria para Memria (DIR/DIR)
Este modo de endereamento permite realizar cpia de um valor de uma posio de memria de
pgina direta (8bits) para outra de pgina direta.
Mnemnico + Operando Opcode (HEX) Funo da Instruo
MOV $60, $80 4E 60 80 Faz uma cpia do contedo da posio 60 e
armazena na posio $80.
3.2.7 Endereamento Indexado (IX)
Este modo de endereamento permite realizar eficientemente gerao de cdigos de
pesquisa a tabelas e outras estruturas de dados. A indexao obtida atravs contedo da
posio de memria indicado pelo par de Registradores H:X.
Mnemnico + Operando Opcode (HEX) Funo da Instruo
LDA ,X F6 Carrega o contedo da posio cujo valor est
armazenado em H:X no Acumulador
STA ,X F7 Armazena o contedo do Acumulador na posio
cujo valor est armazenado em H:X
3.3 Instrues em Assembly
As instrues Assembly do MC9CS08QG8 podem ser classificadas em quatro tipos:
Instrues de movimentao de bits e de dados;
Instrues de operaes lgicas e aritmticas;
Instrues de teste e desvio;
Instrues de controle do processador.
As instrues no decorrer desse captulo sero mencionadas e exemplificas por ordem
de relevncia, assim, para as instrues mais usadas ser dado um enfoque mais aprofundado. O
leitor pode verificar cada instruo testando-a em laboratrio. A autonomia no estudo das
instrues fundamental para a construo do conhecimento da sintaxe e da variao de
32
possibilidades para um mesmo comando.
Os exemplos de programas estaro simplificados junto s instrues. Entretanto,
sero bem desenvolvidos nos captulos seguintes.
Para os operandos, ao longo das instrues ser utilizada a seguinte simbologia:
ii constante (valor imediato) de 8 bits
jjkk constante (valor imediato) de 16 bits
dd endereo direto de 1 byte
hhll endereo estendido de 1 word
ff constante com sinal de 8 bits
eeff constante sinalizada de 16 bits
rr constante com sinal de 8 bits, para instrues com modo de endereamento relativo.

3.3.1 Instrues de movimentao de bits e dados
Essas instrues servem para realizar a carga ou transferncia de informaes para
regies da memria e da CPU do microcontrolador, como o Acumulador e a pilha. So as mais
utilizadas, inclusive para programar registradores de pgina alta e inicializar variveis.
LDA LoaD Accumulator
IMM, DIR, EXT, IX, IX1, IX2, SP1, SP2
Instruo responsvel por carregar valores imediatos ou diretos no Acumulador .
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A6 B6 C6 F6 E6 D6 9EE6 9ED6
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Sempre apagado, V permanece em zero
N setado se o bit 7 do Acumulador estiver em 1, ao final da instruo
Z setado se o resultado da operao no Acumulador for 0
Opcode Comando Explicao A V H I N Z C
A60A LDA #10 Carrega o valor decimal 10 no Acumulador #10 0 ? ? 0 0 ?
A62F LDA #$2F Carrega o valor hexadecimal 2F no Acumulador #47 0 ? ? 0 0 ?
B670 LDA $70
ou LDA 70
Carrega o contedo da posio $70 no
Acumulador, considere $70 = #$FF
#255 0 ? ? 1 0 ?
C61802 LDA SOPT1 Carrega o contedo do Registrador SOPT1 no
Acumulador (SOPT1 = #$D2)
#210 0 ? ? 1 0 ?
F6 LDA X
ou
LDA ,X
Carrega o contedo da posio de memria
apontada por H:X no Acumulador
Considere H:X = #$60 e $60 = 0
#0 0 ? ? 0 1 ?
33
STA STore Accumulator
DIR, EXT, IX, IX1, IX2, SP1, SP2
Instruo responsvel por armazenar o contedo do Acumulador em uma posio de memria.
Modo de Endereamento DIR EXT IX IX1 IX2 SP1 SP2
Opcode B7 C7 F7 E7 D7 9EE7 9ED7
Operando dd hhll -- ff eeff ff eeff
Ciclos de BusClk 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Sempre apagado, V permanece em zero
N setado se o bit 7 da posio da memria resultar em 1
Z setado se o resultado da operao na posio da memria for 0
Opcode Comando Explicao A V H I N Z C
B780 STA 80 Armazena A (#$2F) na posio $80 #47 0 ? ? 1 0 ?
C7012F STA $012F Armazena A (#$00) na posio $012F #0 0 ? ? 0 1 ?
C71808 STA SRTISC Armazena A (#$0D) no Registrador SRTISC #13 0 ? ? 0 0 ?
F7 STA ,X Armazena A (#$80) na posio apontada por H:X #128 0 ? ? 1 0 ?
LDX LoaD X
IMM, DIR, EXT, IX, IX1, IX2, SP1, SP2
Instruo responsvel por carregar imediatos ou diretos valores em X.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode AE BE CE FE EE DE 9EEE 9EDE
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Sempre apagado, V permanece em zero
N setado se o bit 7 da posio da memria resultar em 1
Z setado se o resultado da operao na posio da memria for 0
Opcode Comando Explicao X V H I N Z C
AE60 LDX #60 Carrega X com o valor decimal 60 #60 0 ? ? 0 0 ?
BE60 LDX 60 Carrega X com o contedo da posio $60,
considere $60 = #$50
#80 0 ? ? 0 0 ?
FE LDX X Carrega X com o contedo da posio de
memria armazenado em H:X, considere que
H:X = 80 e que $80 = #$80
#128 0 ? ? 1 0 ?
34
STX STore X
DIR, EXT, IX, IX1, IX2, SP1, SP2
Instruo responsvel por armazenar os valores de X em uma posio da memria.
Modo de Endereamento DIR EXT IX IX1 IX2 SP1 SP2
Opcode BF CF FF EF DF 9EEF 9EDF
Operando dd hhll -- ff eeff ff eeff
Ciclos de BusClk 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Sempre apagado, V permanece em zero
N setado se o bit 7 de X estiver em 1, ao final da instruo
Z setado se o resultado da operao em X for 0
Opcode Comando Explicao X V H I N Z C
BF80 STX $80 Armazena o contedo de X (#$3C)na posio
80 da memria RAM
#60 0 ? ? 0 0 ?
FF STX ,X Armazena o contedo do Registrador X (#$50)
na posio apontada por H:X, se H:X = $80,
ento a posio $80 recebe o valor #80
#80 0 ? ? 0 0 ?
EF14 STX 20, X Armazena o contedo de X (#$80) na posio
de memria resultante da soma H:X +
20(decimal), se H:X = $80, ento a posio
final $80 + $14 = $94 recebe o valor de #128
#128 0 ? ? 1 0 ?
35
LDHX LoaD H:X
IMM, DIR, EXT, IX, IX1, IX2, SP1
Instruo responsvel por carregar um valor em H:X.
Caso esse valor seja superior a 8 bits, o valor armazenado de forma que o registrador H receba a parte
mais alta e o registrador X a parte mais baixa.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1
Opcode 45 55 32 9EAE 9ECE 9EBE 9EFE
Operando jjkk dd hhll -- ff eeff ff
Ciclos de BusClk 3 4 5 5 5 6 5
Sinalizadores Alterados O que gera a alterao
V Sempre apagado, V permanece em zero
N setado se o bit 7 do H:X estiver em 1, ao final da instruo
Z setado se o resultado da operao no H:X for 0
Opcode Comando Explicao H:X V H I N Z C
458770 LDHX #$8770 Carrega em H:X o valor #$8770. Como
esse valor maior que 8 bits, a parte mais
significativa (#$87) carregada em H e a
menos significativa (#$70) em X.
87:70
0 ? ? 1 0 ?
320150 LDHX $150 Carrega em H o contedo da posio da
memria $150 (#$01), e em X o contedo
da posio da memria $151 (#$FF).
01:FF
0 ? ? 0 0 ?
5546 LDHX TPMC0VH Carrega em H o contedo do Registrador
TPMC0VH - $46( #$00), e em X o
contedo do Registrador TPMC0VL -
$47(#$5F).
00:5F
0 ? ? 0 0 ?
STHX STore H:X
DIR, EXT, SP1
Instruo responsvel por armazenar o contedo de H:X em uma posio de memria. Fazendo com que
o contedo de H seja armazenado no endereo do operando e o contedo de X na posio seguinte.
Modo de Endereamento DIR EXT SP1
Opcode 35 96 9EFF
Operando dd hhll ff
Ciclos de BusClk 4 5 5
Sinalizadores Alterados O que gera a alterao
V Sempre apagado, V permanece em zero
N setado se o bit 7 da posio da memria resultar em 1
Z setado se o resultado da operao na posio da memria for 0
Opcode Comando Explicao H:X V H I N Z C
961802 STHX $1802 Armazena o H (#$17) na posio de memria
$1802 e X (#$80) na posio de $1803.
17:80 0 ? ? 0 0 ?
36
Opcode Comando Explicao H:X V H I N Z C
3590 STHX $90 Armazena o valor de H (#$85) na posio de
memria $90 e o valor de X (#$00) na posio $91.
85:00 0 ? ? 1 0 ?

MOV MOVement
IMM/DIR, DIR/DIR, DIR/IX+, IX+/DIR
Instruo responsvel por carregar valores imediatos em posies de memria ou copiar o contedo de
uma posio de memria e carreg-lo em outro.
Modo de Endereamento IMM/DIR DIR/DIR DIR/IX+ IX+/DIR
Opcode 6E 4E 5E 7E
Operando ii, dd dd, dd , dd dd
Ciclos de BusClk 4 5 5 5
Sinalizadores Alterados O que gera a alterao
V Sempre apagado, V permanece em zero
N setado se o bit 7 do resultado do movimento resultar em 1
Z setado se o resultado da movimentao for 0 na posio de chegada
Opcode Comando Explicao X
in
X
fi
V H I N Z C
6EFF60 MOV #$FF, $60 Move o valor hexadecimal imediato #$FF
para a posio $60 da memria
-- 0 ? ? 1 0 ?
4E7094 MOV $70, $94 Copia o contedo da posio $70 da
memria e cola na posio $94. Ambas as
posies terminam com o mesmo valor
armazenado ao final da instruo
-- 0 ? ? - - ?
5E90 MOV $90, X+ Copia o contedo da posio $90 e
armazena na posio apontada por H:X($80).
Ao final, a instruo incrementa o contedo
de H:X em uma unidade (H:X = $81).
80 81 0 ? ? - - ?
7E90 MOV X+, $90 Copia o contedo da posio apontada por
H:X ($80) e armazena na posio $90. Ao
final, a instruo incrementa o contedo de
H:X em uma unidade (H:X = $81).
80 81 0 ? ? - - ?
37
CLR - CLeaR
INH(A, H ou X), DIR, IX, IX1, SP1
Apaga (coloca em nvel 0) todo o contedo de uma posio de memria ou de um componente da CPU.
Modo de Endereamento INH(A) INH(X) INH(H) DIR IX IX1 SP1
Opcode 4F 5F 8C 3F 6F 7F 9E6F
Operando dd ff ff
Ciclos de BusClk 1 1 1 5 4 5 6
Sinalizadores Alterados O que gera a alterao
V Sempre apagado, V permanece em 0
N Sempre apagado, N permanece em 0
Z Sempre setado, Z permanece em 1
Opcode Comando Explicao H, X ou A V H I N Z C
4F CLRA Apaga o contedo do Acumulador A A = 0 0 ? ? 0 1 ?
5F CLRX Apaga o contedo do Registrador X X = 0 0 ? ? 0 1 ?
8C CLRH Apaga o contedo do Registrador H H = 0 0 ? ? 0 1 ?
3F60 CLR $60 Apaga o contedo da posio 60 da memria $60 = 0 0 ? ? 0 1 ?
3.3.1.1 Instrues de Movimentao de bits:
BSET Bit Set
DIR (b0), DIR (b1), DIR (b2), DIR (b3), DIR (b4), DIR (b5), DIR (b6), DIR (b7),
Seta o bit selecionado para uma determinada posio da memria
Modo de Endereamento DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR
(b7)
Opcode 10 12 14 16 18 1A 1C 1E
Operando ddrr ddrr ddrr ddrr ddrr ddrr ddrr ddrr
Ciclos de BusClk 5 5 5 5 5 5 5 5
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
1280 BSET 1, $80 Seta o bit 1 da posio $80 da memria ? ? ? ? ? ?
1A90 BSET 5, VAR Seta o bit 5 de VAR (observe, pelo Opcode, que VAR se
localiza na posio de memria $90)
? ? ? ? ? ?
38
BCLR Bit CLeaR
DIR (b0), DIR (b1), DIR (b2), DIR (b3), DIR (b4), DIR (b5), DIR (b6), DIR (b7)
Apaga o bit selecionado para uma determinada posio da memria.
Modo de Endereamento DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR
(b7)
Opcode 11 13 15 17 19 1B 1D 1F
Operando ddrr ddrr ddrr ddrr ddrr ddrr ddrr ddrr
Ciclos de BusClk 5 5 5 5 5 5 5 5
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
1360 BCLR 1, $60 Apaga o bit 1 da posio $60 da memria ? ? ? ? ? ?
110F BCLR 0, IRQSC Apaga o bit 0 do registrador (de pgina baixa) IRQSC ($0F). ? ? ? ? ? ?
3.3.1.2 Outras instrues de Movimentao de Dados:
Instrues de Transferncia (opcode):
TAP (84) Transference from Accumulator to Processor
TPA (85) Transference from Processor to Accumulator
A instruo TAP copia o contedo do Acumulador e armazena no CCR (registrador de
estado do processador), alterando seus flags, sem alterar o contedo do Acumulador. J a
instruo TPA faz o inverso, copia o contedo do CCR e armazena no Acumulador, sem alterar o
CCR. Ambas possuem modo de endereamento implcito (INH).
Outras instrues de Transferncia:
TAX (97) Transfere o contedo de A para X, sem alterar o contedo de A.
TXA (9F) Transfere o contedo de X para A, sem alterar o contedo de X.
TSX (95) Transfere o contedo do SP + 1 para H:X, sem alterar o contedo de SP.
TXS (94) Transfere o contedo de H:X-1 para SP, sem alterar o contedo de H:X.
Instrues de Armazenamento e Remoo na Pilha (Todas em modo de
endereamento INH):
PSHA (87) Armazena o contedo de A na pilha e decrementa uma posio do SP.
PSHH (8B) Armazena o contedo de H na pilha e decrementa uma posio do SP.
PSHX (89) Armazena o contedo de X na pilha e decrementa uma posio do SP.
PULA (86) Incrementa uma posio SP, retira seu contedo e armazena em A.
PULH (8A) Incrementa uma posio SP, retira seu contedo e armazena em H.
PULX (88) Incrementa uma posio SP, retira seu contedo e armazena em X.
RSP (9C) - SP retorna ao valor inicial, ou seja, SP = $00FF. (INH)
39
3.3.2 Instrues de operaes lgicas e aritmticas
As instrues anteriores eram usadas para movimentar, carregar ou armazenar dados
em posies de memria ou Registradores da CPU. Elas no alteravam os dados. As prximas
instrues sero usadas para operar os dados, ou seja, para mudar o seu valor, no o local onde o
dado est localizado. As operaes realizadas pelas instrues seguintes podem ser lgicas
(booleanas) ou aritmticas.
ADC ADdition with Carry
IMM, DIR, EXT, IX, IX1, IX2, SP1, SP2
Realiza a seguinte adio:
contedo do Acumulador + contedo do operando + valor do flag C do CCR (0 ou 1)
Armazena a resultado no Acumulador.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A9 B9 C9 F9 E9 D9 9EE9 9ED9
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Caso a operao seja feita em complemento de dois, se a resposta
ultrapassar o intervalo [-128;+127], o flag V ser aceso
N setado se o bit 7 do Acumulador estiver em 1, ao final da instruo
Z setado se o resultado da operao no Acumulador for 0
H Ele setado se ocorreu algum transporte do bit 3 para o bit 4 do Acumulador
C Ele setado se o resultado da soma no Acumulador ultrapassar 8 bits, ou
seja, se o valor da resposta for superior a 255.
Opcode Comando Explicao A V H I N Z C
A90C ADC #$0C A instruo far a soma #$0C + #$03(A) + #$01(C) =
#$10. Este valor ser armazenado no Acumulador.
#$03 0 1 ? 0 0 0
A9F1 ADC #$F1 A instruo far a soma #$F1 + #$0E (A) + #$01(C)
= #$0100, valor maior que #$FF. Com isso, o valor
armazenado em A a parte equivalente aos oito
bits inferiores (#$00) e o nono bit armazenado
no flag de transporte C. Os demais flags so
alterados de acordo com o resultado da operao.
#$0E 0 1 ? 0 1 1
B960 ADC $60 Considerando inicialmente $60 = #$7F, a instruo
far a soma #$7F + #$00(A) + 1(C) = #$80. Este
valor ser armazenado no Acumulador.
#$00 0 1 ? 1 0 0
F9 ADC ,X
Considerando inicialmente H = #$0, X = #$90 e
$0090 = #$00, a instruo far a soma #$00 +
#$00(A) + #$00(C) = 0 e armazenar esse valor no
Acumulador. somado o valor da posio de
memria apontada por H:X, que no caso $0090.
#$00
0 0 ? 0 1 0
C91802 ADC SOPT1 Considerando inicialmente SOPT1 = #$D2, a
instruo far a soma #$D2 + #$01(A) + #$01(C) =
#$D4.
#$01 0 0 ? 1 0 0
40
ADD ADDition
IMM, DIR, EXT, IX, IX1, IX2, SP1, SP2
Realiza a seguinte adio:
contedo do Acumulador + contedo do operando.
Armazena a resposta no Acumulador.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode AB BB CB FB EB DB 9EEB 9EDB
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Caso a operao seja feita em complemento de dois, se a resposta
ultrapassar o intervalo [-128;+127], o flag V ser aceso
N setado se o bit 7 do Acumulador estiver em 1, ao final da instruo
Z setado se o resultado da operao no Acumulador for 0
H Ele setado se ocorreu algum transporte do bit 3 para o bit 4 do Acumulador
C Ele setado se o resultado da soma no Acumulador ultrapassar 8 bits, ou
seja, se o valor da resposta for superior a 255.
Opcode Comando Explicao A V H I N Z C
AB0C ADD #$0C Considerando inicialmente A = #$02, a instruo
far a soma #$0C + #$02 = #$0E. Este valor ser
armazenado no Acumulador.
#$02 0 0 ? 0 0 0
ABF1 ADD #$F1 Considerando inicialmente A = #$0F, a instruo
far a soma #$F1 + #$0F = #$0100, valor maior que
#$FF. Com isso, o valor armazenado em A a parte
equivalente aos oito bits inferiores (#$00) e o nono
bit armazenado no flag de transporte C. Os
demais flags so alterados de acordo com o
resultado da operao.
#$0F 0 1 ? 0 1 1
BB60 ADD $60 Considerando inicialmente A = #$0 e $60 = #$7F, a
instruo far a soma #$7F + #$00 = #$7F. Este
valor ser armazenado no Acumulador.
#$00 0 1 ? 1 0 0
FB ADD ,X Considerando inicialmente X = #$90 e $90 = #$00,
a instruo far a soma #$00 + #$00 = 0 e
armazenar esse valor no Acumulador. Observe
que usado na soma o valor da posio de
memria apontada por H:X, que no caso $90.
#$00 0 0 ? 0 1 0
41
AIS Addition Indexed to Stack-pointer
IMM
Soma um operando sinalizado ao endereo apontado pelo SP (Stack Point), e armazena o resultado na
pilha. Observe que a instruo, antes de realizar a operao, h a converso do operando para um valor
hexadecimal sinalizado de 16 bits.
Modo de Endereamento IMM
Opcode A7
Operando ii
Ciclos de BusClk 2
No altera nenhum sinalizador
Opcode Comando Explicao V H I N Z C
A740 AIS #64 Considerando inicialmente SP = $FF, a instruo far a
soma $00FF + #$40 = $013F. Este valor ser
armazenado no apontador da pilha (SP).
? ? ? ? ? ?
AIX Addition Indexed to H:X
IMM
Soma um operando sinalizado ao contedo do valor de H:X, e armazena o resultado em H:X. Observe que
a instruo, antes de realizar a operao, h a converso do operando para um valor hexadecimal
sinalizado de 16 bits.
Modo de Endereamento IMM
Opcode AF
Operando ii
Ciclos de BusClk 2
No altera nenhum sinalizador
Opcode Comando Explicao V H I N Z C
AF20 AIX #32 Considerando inicialmente H:X = #$01FF, a instruo
far a soma #$01FF + #$20 (#$20 = #32) = #$021F.
Este valor ser armazenado em H:X.
? ? ? ? ? ?
AFFF AIX #-1 Considerando inicialmente H:X = #$01FF, a instruo
far a soma #$01FF + #$FF (nmero equivalente em
complemento de dois ao nmero #$-1) = #$01FE. Este
valor ser armazenado em H:X.
? ? ? ? ? ?
42
SBC SuBtraction with Carry
IMM, DIR, EXT, IX, IX1, IX2, SP1, SP2
Realiza a seguinte subtrao:
contedo do Acumulador - contedo do operando - valor do flag C do CCR (0 ou 1)
Armazena a resposta no Acumulador.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A2 B2 C2 F2 E2 D2 9EE2 9ED2
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Caso a operao seja feita em complemento de dois, se a resposta ultrapassar
o intervalo [-128;+127], o flag V ser aceso
N setado se o bit 7 do Acumulador estiver em 1, ao final da instruo
Z setado se o resultado da operao no Acumulador for 0
C Ele setado se o resultado da subtrao no Acumulador for inferior a zero.
Opcode Comando Explicao V H I N Z C
A260 SBC #$60 Considerando inicialmente A = #$61 e C = 1, a instruo
far a subtrao #$61 - #$60 - #$01 = #$00. Este valor ser
armazenado no Acumulador.
0 ? ? 0 1 0
A262 SBC #$62 Considerando inicialmente A = #$61 e C = 1, a instruo
far a subtrao #$61 - #$62 - #$01 = -#$02, que em
complemento de 2 igual a #$FE, Como -2 menor que
zero, o flag de transporte C setado.
0 ? ? 1 0 1
B260 SBC $60 Considerando inicialmente A = #$0, C = 0 e $60 = #$7F, a
instruo far a subtrao #$00 - #$7F - #$00 = -#$7F, que
em complemento de 2 igual a #$81. Este valor ser
armazenado no Acumulador. Como -#$7F, menor que
zero, o flag de transporte C setado.
0 ? ? 1 0 1
F2 SBC ,X Considerando inicialmente A =#$F5, C = 1, H = 0 e X = #$90
e $0090 = #$F4, a instruo far a subtrao #$F5 - #$F4 -
#$01 = 0 e armazenar esse valor no Acumulador. Observe
que usado na subtrao o valor da posio de memria
apontada por H:X, que no caso $0090.
0 ? ? 0 1 0
43
SUB SUBtraction
IMM, DIR, EXT, IX, IX1, IX2, SP1, SP2
Realiza a seguinte subtrao:
contedo do Acumulador - contedo do operando
Armazena a resposta no Acumulador.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A0 B0 C0 F0 E0 D0 9EE0 9ED0
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Caso a operao seja feita em complemento de dois, se a resposta ultrapassar
o intervalo [-128;+127], o flag V ser aceso
N setado se o bit 7 do Acumulador estiver em 1, ao final da instruo
Z setado se o resultado da operao no Acumulador for 0
C Ele setado se o resultado da subtrao no Acumulador for inferior a zero.
Opcode Comando Explicao V H I N Z C
A060 SUB #$60 Considerando inicialmente A = #$61, a instruo far a
subtrao #$61 - #$60 = #$01. Este valor ser armazenado
no Acumulador.
0 ? ? 0 0 0
A062 SUB #$62 Considerando inicialmente A = #$61, a instruo far a
subtrao #$61 - #$62 = -#$01, que em complemento de 2
igual a #$FF, Como -1 menor que zero, o flag de
transporte C setado.
0 ? ? 1 0 1
B060 SUB $60 Considerando inicialmente A = #$0 e $60 = #$7F, a
instruo far a subtrao #$00 - #$7F = -#$7F, que em
complemento de 2 igual a #$81. Este valor ser
armazenado no Acumulador. Como -#$7F, menor que
zero, o flag de transporte C setado.
0 ? ? 1 0 1
F0 SUB ,X Considerando inicialmente A =#$00, e X = #$90 e $90 =
#$00, a instruo far a subtrao #$00 - #$00= 0 e
armazenar esse valor no Acumulador. Observe que
usado na subtrao o valor da posio de memria
apontada por H:X, que no caso $90.
0 ? ? 0 1 0
44
MUL MULtiplication
INH
Realiza a seguinte multiplicao sem sinal:
contedo de X vezes contedo de A
Armazena o resultado na forma de 16 bits, concatenando em X a parte mais alta e em A a parte mais
baixa do resultado.
Modo de Endereamento INH
Opcode 42
Operando --
Ciclos de BusClk 5
Sinalizadores Alterados O que gera a alterao
H Sempre Zero.
C Sempre Zero.
Opcode Comando Explicao V H I N Z C
42 MUL Considerando inicialmente que A = #$15 e que X =
#$40, a instruo far a multiplicao #$15 * #$40 =
#$0540. Ento #$05 ser armazenado em X e #$40
ser armazenado em A.
? 0 ? ? ? 0
DIV DIVision
INH
Realiza a seguinte diviso sem sinal:
contedo de H:A / contedo de X
O quociente da diviso armazenado em A e o resto em H. O divisor X no alterado
Modo de Endereamento INH
Opcode 52
Operando --
Ciclos de BusClk 6
Sinalizadores Alterados O que gera a alterao
Z Setado se o resultado da operao (contedo de H) for igual a zero.
C Setado se haver erro na diviso (caso o quociente seja maior que #$FF ou
acontea uma diviso por zero).
Opcode Comando Explicao V H I N Z C
52 DIV Considerando inicialmente que A = #$50 e que H:X =
#$2040, a instruo far a diviso:
#$2050 / #$40 = #$0081 e resto = #$000A. Ento
#$81 ser armazenado em A e #$0A ser armazenado
em H, resultando em H:X = #$0A40.
? ? ? ? 0 0
45
Opcode Comando Explicao V H I N Z C
52 DIV Considerando inicialmente que A = #$82 e que H:X =
#$2000, a instruo far a diviso:
#$2082/#$00 que no existe, acendendo o flag C.
Os Registradores A e H recebero dados aleatrios ao
final da instruo.
? ? ? ? 0 1
52 DIV Considerando inicialmente que A = #$81 e que H:X =
#$2002, a instruo far a diviso:
#$2081 / #$02 = #$1041 e resto = #$0001.
Como o valor do quociente maior que #$00FF, o flag
C setado, indicando a ocorrncia de um erro. Os
registradores A e H recebero dados aleatrios ao
final da instruo.
? ? ? ? 0 1
INC INCrease
DIR, INH(A), INH(X), IX, IX1, SP1
Incrementa uma unidade no local indicado no operando.
Modo de Endereamento DIR INH(A) INH(X) IX IX1 SP1
Opcode 3C 4C 5C 7C 6C 9E6C
Operando dd -- -- -- ff ff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados O que gera a alterao
V Setado se a operao resultar em um estouro de complemento de 2
N setado se o bit 7 do operando resultar em 1
Z setado se o resultado da operao no operando for 0
Opcode Comando Explicao V H I N Z C
3C80 INC $80 Considerando inicialmente que $80 = #$00, ao final da
instruo $80 = #$01.
0 ? ? 0 0 ?
4C INCA Considerando inicialmente que A= #$00, ao final da instruo
A = #$01.
0 ? ? 0 0 ?
5C INCX Considerando inicialmente que X= #$90 e que $90 = #$02 ao
final da instruo X = #$91 e $90 = #$02.
0 ? ? 0 0 ?
7C INC ,X Considerando inicialmente que X= #$90 e que $90 = #$02 ao
final da instruo X = #$90 e $90 = #$03.
0 ? ? 0 0 ?
46
DEC DECrease
DIR, INH(A), INH(X), IX, IX1, SP1
Decrementa uma unidade no local indicado no operando.
Modo de Endereamento DIR INH(A) INH(X) IX IX1 SP1
Opcode 3A 4A 5A 7A 6A 9E6A
Operando dd -- -- -- ff ff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados O que gera a alterao
V Setado se a operao resultar em um estouro de complemento de 2
N setado se o bit 7 do operando resultar em 1
Z setado se o resultado da operao no operando for 0
Opcode Comando Explicao V H I N Z C
3A80 DEC $80 Considerando inicialmente que $80 = #$00, ao final da
instruo $80 = #$FF.
0 ? ? 1 0 ?
4A DECA Considerando inicialmente que A= #$01, ao final da instruo
A = #$00.
0 ? ? 0 1 ?
5A DECX Considerando inicialmente que X= #$90 e que $90 = #$01 ao
final da instruo X = #$89 e $90 = #$01.
0 ? ? 0 0 ?
7A DEC ,X Considerando inicialmente que X= #$90 e que $90 = #$02 ao
final da instruo X = #$90 e $90 = #$01.
0 ? ? 0 1 ?
DAA Decimal Accumulator Adjust
INH
Efetua o ajuste decimal do Acumulador, para operaes realizadas em BCD, aps adies com ou sem
transporte. Ela corrige o contedo do Acumulador, de forma a restaurar a correta configurao em BCD,
para a resposta da operao.
Modo de Endereamento INH
Opcode 72
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados O que gera a alterao
Z Setado se o resultado da operao for igual a zero.
V Indefinido
N setado se o bit 7 do operando resultar em 1 ao final da operao
C Setado se o resultado for maior que 99 em BCD
47
Opcode Comando Explicao V H I N Z C
72 DAA Considerando inicialmente que A= #$03 e que $90 =
#$79. Foi executada a instruo ADD $90, assim #$03
+ #$79 = #$7C. Mas, com o uso de DAA, o valor no
Acumulador alterado para #$82, resultado da
operao #03+#79. Observe que a base do
Acumulador continua sendo hexadecimal.
-- ? ? 0 0 0
AND AND
IMM, DIR, EXT, IX, IX1, IX2, SP1, SP2
Realiza a operao booleana AND (E ou &) entre o Acumulador e o valor indicado no operando.
muito til no isolamento de bits, criando mscaras.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A4 B4 C4 F4 E4 D4 9EE4 9ED4
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Sempre apagado.
N setado se o bit 7 do Acumulador estiver em 1, ao final da instruo
Z setado se o resultado da operao no Acumulador for 0
H setado se houver transporte entre os bits 3 e 4
Opcode Comando Explicao V H I N Z C
A4F1 AND #$F1 Considerando inicialmente A = #$0F, a instruo far a
operao #$0F & #$F1 = #$0001
0 1 ? 0 0 0
B460 AND $60 Considerando inicialmente A = #$00 e $60 = #$7F, a
instruo far a operao #$7F & #$00 = #$00. Este
valor ser armazenado no Acumulador.
0 1 ? 0 1 0
F4 AND X Considerando inicialmente A =#$FF, X = #$90 e $90 =
#$40, a instruo far a operao #$FF & #$40 = #$40
e armazenar esse valor no Acumulador. Observe que
usado na operao o valor da posio de memria
apontada por H:X, que no caso $90 e no o valor do
registrador X.
0 0 ? 0 0 0
48
ORA OR Accumulator
IMM, DIR, EXT, IX, IX1, IX2, SP1, SP2
Realiza a operao booleana OR (OU ou |) entre o Acumulador e o valor indicado no operando.
muito til para a fuso de bits.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode AA BA CA FA EA DA 9EEA 9EDA
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Sempre apagado.
N setado se o bit 7 do Acumulador estiver em 1, ao final da instruo
Z setado se o resultado da operao no Acumulador for 0
H setado se houver transporte entre os bits 3 e 4
Opcode Comando Explicao V H I N Z C
AAF1 AND #$F1 Considerando inicialmente A = #$0F, a instruo far a
operao #$0F & #$F1 = #$FF
0 1 ? 1 0 0
BA60 AND $60 Considerando inicialmente A = #$00 e $60 = #$7F, a
instruo far a operao #$7F & #$00 = #$7F. Este
valor ser armazenado no Acumulador.
0 1 ? 1 0 0
FA AND X Considerando inicialmente A =#$00, X = #$90 e $90 =
#$00, a instruo far a operao #$00 & #$00 = #$00
e armazenar esse valor no Acumulador. Observe que
usado na operao o valor da posio de memria
apontada por H:X, que no caso $90 e no o valor do
registrador X.
0 0 ? 0 1 0
COM COMplement of 1
INH (A), INH (X), DIR, IX, IX1, SP1
Faz o complemento de 1 (troca zeros por uns e uns por zeros) no operando ou Registrador especificado,
ou seja, faz a operao M = #$FF M, onde M a posio de memria
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 33 43 53 73 63 9E63
Operando dd -- -- -- ff eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados O que gera a alterao
V Sempre apagado.
C Sempre setado
N setado se o bit 7 do operando estiver em 1, ao final da instruo
Z setado se o resultado da operao no operando for 0
49
Opcode Comando Explicao V H I N Z C
3380 COM $80 Considerando que inicialmente $80 = #$A3, ao final da
operao $80 = #$5C.
0 ? ? 0 0 1
43 COMA Considerando inicialmente A = #$00, ao final da
instruo A = #$FF.
0 ? ? 1 0 1
53 COMX Considerando inicialmente H:X = #$0060 e $60 = #$00,
ao final da instruo H:X = #$009F e $60 = #$00.
0 ? ? 1 0 1
73 COM ,X Considerando inicialmente H:X = #$0060 e $60 = #$FF,
ao final da instruo H:X = #$0060 e $60 = #$00.
0 ? ? 0 1 1
NEG NEGation
INH (A), INH (X), DIR, IX, IX1, SP1
Faz o complemento de 2 (troca zeros por uns e uns por zeros e soma #$01 ao valor obtido) no operando
ou Registrador especificado. (Faz a operao M = (#$FF - M) + #$01).
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 30 40 50 70 60 9E60
Operando dd -- -- -- ff Eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados O que gera a alterao
V Setado se a operao resultou num estouro de limites do formato
complemento de 2, ou seja, se o operando era IGUAL ao valor #$80 ao incio
da operao.
C setado caso o operando era diferente de zero ao inicio da operao.
N setado se o bit 7 do operando estiver em 1, ao final da instruo.
Z setado se o resultado da operao no operando for 0.
Opcode Comando Explicao V H I N Z C
3080 NEG $80 Considerando que inicialmente $80 = #$A0, ao final da
operao $80 = #$60.
0 ? ? 0 0 1
40 NEGA Considerando inicialmente A = #$00, ao final da
instruo A = #$00.
0 ? ? 0 1 0
50 NEGX Considerando inicialmente H:X = #$0060 e $60 = #$80,
ao final da instruo H:X = #$00A0 e $60 = #$80.
0 ? ? 1 0 1
70 NEG ,X ou
NEG X
Considerando inicialmente H:X = #$0060 e $60 = #$80,
ao final da instruo H:X = #$0060 e $60 = #$FF (80).
Perceba que o flag V ficou setado ao final da
operao.
1 ? ? 1 0 1
50
NSA Nibble Switch Accumulator
INH
Efetua a troca dos nibbles do Acumulador, ou seja, troca os dgitos hexadecimais e armazena no prprio
Acumulador.
Modo de Endereamento INH
Opcode 62
Operando --
Ciclos de BusClk 1
No altera nenhum sinalizador
Opcode Comando Explicao V H I N Z C
62 NSA Considerando inicialmente que A= #$4A, ao final da
operao, A = #$A4
? ? ? ? ? ?
62 NSA Considerando inicialmente que A= #$03, ao final da
operao, A = #$30
? ? ? ? ? ?
ASL Arithmetic Shift Left
LSL Logical Shift Left
INH (A), INH (X), DIR, IX, IX1, SP1
Realiza o deslocamento esquerda dos bits do contedo do operando, equivalente multiplicao
inteira por dois. As duas instrues (ASL e LSL) fazem exatamente isso.
O ltimo bit deslocado para o flag C e o menos significativo preenchido com 0.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 38 48 58 78 68 9E68
Operando dd -- -- -- ff eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados O que gera a alterao
V Setado se a operao XOR (ou exclusivo) entre os flags N e C resulta em 1,
indicando que o sinal foi alterado.
C setado caso o bit 7 do operando, antes da operao, estava setado.
N setado se o bit 7 do operando estiver em 1, ao final da instruo.
Z setado se o resultado da operao no operando for 0.
Opcode Comando Explicao V H I N Z C
3880 ASL $80
ou LSL $80
Considerando inicialmente $80 = #$A2,
Ao final da instruo, $80 = #$44.
1 ? ? 0 0 1
48 LSLA
ou ASLA
Considerando inicialmente A = #$FF,
ao final da instruo A = #$FE
0 ? ? 1 0 1
58 LSLX
ou ASLX
Considerando inicialmente H:X = #$0080 e que $80 =
#$80, ao final da instruo, H:X = #$0000 e $80 = #$80
1 ? ? 0 1 1
78 LSL X
ou ASL ,X
ou ASL X
Considerando inicialmente H:X = #$0080 e que $80 =
#$80, ao final da instruo, H:X = #$0080 e $80 = #$00
1 ? ? 0 1 1
51
ASR Arithmetic Shift Right
INH (A), INH (X), DIR, IX, IX1, SP1
Realiza o deslocamento direita dos bits do contedo do operando, equivalente diviso inteira por
dois (sinalizada).
O bit0 deslocado para o flag C e o mais significativo preenchido com o valor anterior execuo da
instruo.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 37 47 57 77 67 9E67
Operando dd -- -- -- ff eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados O que gera a alterao
V Setado se a operao XOR (ou exclusivo) entre os flags N e C resulta em 1,
indicando que o sinal foi alterado.
C setado se inicialmente o bit 0 do operando estava setado.
N setado se o bit 7 do operando estiver em 1, ao final da instruo.
Z setado se o resultado da operao no operando for 0.
Opcode Comando Explicao V H I N Z C
3780 ASR $80 Considerando inicialmente $80 = #$10,
Ao final da instruo, $80 = #$00.
1 ? ? 0 1 1
47 ASRA Considerando inicialmente A = #$0F,
ao final da instruo A = #$07
1 ? ? 0 0 1
57 ASRX Considerando inicialmente H:X = #$0080 e que $80 =
#$80, ao final da instruo, H:X = #$0040 e $80 = #$80
0 ? ? 0 0 0
77 ASR ,X Considerando inicialmente H:X = #$0080 e que $80 =
#$80, ao final da instruo, H:X = #$0080 e $80 = #$40
0 ? ? 0 0 0
LSR Logic Shift Right
INH (A), INH (X), DIR, IX, IX1, SP1
Realiza o deslocamento lgico direita dos bits do contedo do operando, equivalente diviso
natural por dois (no-sinalizada).
O bit0 deslocado para o flag C e o mais significativo preenchido com zero.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 34 44 54 74 64 9E64
Operando dd -- -- -- ff Eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados O que gera a alterao
V setado se, inicialmente, o bit 0 estava setado .
C setado se, inicialmente, o bit 0 estava setado.
N Sempre Apagado.
Z setado se o resultado da operao no operando for 0.
52
Opcode Comando Explicao V H I N Z C
3480 LSR $80 Considerando inicialmente $80 = #$01,
Ao final da instruo, $80 = #$00.
1 ? ? 0 1 1
44 LSRA Considerando inicialmente A = #$0F,
ao final da instruo A = #$07
1 ? ? 0 0 1
54 LSRX Considerando inicialmente H:X = #$0080 e que $80 =
#$80, ao final da instruo, H:X = #$0040 e $80 = #$80
0 ? ? 0 0 0
74 LSR X Considerando inicialmente H:X = #$0080 e que $80 =
#$80, ao final da instruo, H:X = #$0080 e $80 = #$40
1 ? ? 0 0 1
ROL ROtation Left
INH (A), INH (X), DIR, IX, IX1, SP1
Realiza a rotao esquerda dos bits do contedo do operando. Assim, os bits so deslocados
esquerda, o bit menos significativo recebe o valor inicial do sinalizador C e o sinalizador C recebe o valor
inicial do bit mais significativo.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 39 49 59 79 69 9E69
Operando dd -- -- -- ff eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados O que gera a alterao
V Setado se a operao XOR (ou exclusivo) entre os flags N e C resulta em 1,
indicando que o sinal foi alterado.
C setado caso o bit 7 do operando, antes da operao, estava setado.
N setado se o bit 7 do operando estiver em 1, ao final da instruo
Z setado se o resultado da operao no operando for 0
Opcode Comando Explicao V H I N Z C
3980 ROL $80 Considerando inicialmente $80 = #$A2 e que C = #$01,
Ao final da instruo, $80 = #$45.
1 ? ? 0 0 1
49 ROLA Considerando inicialmente A = #$FF e C = #$01,
ao final da instruo A = #$FF
0 ? ? 1 0 1
59 ROLX Considerando inicialmente H:X = #$0080 e que $80 =
#$80 e que C = #$01, ao final da instruo, H:X =
#$0001 e $80 = #$80
1 ? ? 0 0 1
79 ROL X Considerando inicialmente H:X = #$0080 e que $80 =
#$80 e que C = #$01, ao final da instruo, H:X =
#$0080 e $80 = #$01
1 ? ? 0 0 1
53
ROR ROtation Right
INH (A), INH (X), DIR, IX, IX1, SP1
Realiza a rotao direita dos bits do contedo do operando. Assim, os bits so deslocados direita, o
bit mais significativo recebe o valor inicial do sinalizador C e o sinalizador C recebe o valor inicial do bit
menos significativo.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 36 46 56 76 66 9E66
Operando dd -- -- -- ff Eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados O que gera a alterao
V Setado se a operao XOR (ou exclusivo) entre os flags N e C resulta em 1,
indicando que o sinal foi alterado.
C setado caso o bit 7 do operando, antes da operao, estava setado.
N setado se o bit 7 do operando estiver em 1, ao final da instruo
Z setado se o resultado da operao no operando for 0
Opcode Comando Explicao V H I N Z C
3680 ROR $80 Considerando inicialmente $80 = #$A2 e que C = #$01,
Ao final da instruo, $80 = #$D1.
0 ? ? 1 0 1
46 RORA Considerando inicialmente A = #$FF e C = #$01,
ao final da instruo A = #$FF
0 ? ? 1 0 1
56 RORX Considerando inicialmente H:X = #$0080 e que $80 =
#$80 e que C = #$01, ao final da instruo, H:X =
#$00C0 e $80 = #$80
0 ? ? 1 0 1
76 ROR X Considerando inicialmente H:X = #$0080 e que $80 =
#$80 e que C = #$00, ao final da instruo, H:X =
#$0080 e $80 = #$40
1 ? ? 0 0 1
3.3.3 Instrues de operaes de teste e desvio
J foram vistas instrues de carregamento de dados, de manipulao de dados e de
operao sobre os dados. Agora sero estudadas as operaes de teste e desvio. Estas analisam o
dado e lhe conferem um julgamento (verdadeiro ou falso) em comparao a outro dado
(operaes de teste).
Com isso, existem operaes de desvio que realizam alguma ao a partir desse
julgamento. Com esse conjunto de instrues possvel gerar estruturas condicionais (anlogas
instruo if, na linguagem C) e estruturas cclicas (anlogas s instruo for ou while, na linguagem
C), alm de chamadas de subrotina (anlogas chamada de funes, na linguagem C).
Estas operaes so indispensveis lgica de programao tanto para soluo de
problemas simples quanto de problemas complexos.
54
CMP - CoMPare
IMM, DIR, EXT, IX, IX1, IX2, SP1, SP2
Compara os valores do Acumulador com o operando, a partir da subtrao entre o contedo do operando
e o contedo do Acumulador (sem alter-los). Essa operao serve para valores sinalizados ou no.
Operao = A - M
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A1 B1 C1 F1 E1 D1 9EE1 9ED1
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Setado se a operao resultar num estouro de limites no formato de
complemento de dois.
N setado se o resultado da operao for maior que 0 (A > M)
Z setado se o resultado da operao for 0 (valores iguais)
C setado se o resultado da operao for menor que 0 (A < M)
Opcode Comando Explicao V H I N Z C
A190 CMP #$90 Considerando que inicialmente A = #$00, a instruo
compara A com #$90, fazendo #$00 - #$90 = -#$90,
assim o flag C aceso, indicando que o contedo da
posio $90 maior que o do Acumulador.
0 ? ? 0 0 1
B170 CMP $70 Considerando que inicialmente A = #$30 e $70 = #$10,
instruo compara A com #$10, contedo da posio
$70, fazendo #$30 - #$10 = #$20, assim o flag N
aceso, indicando que o contedo da posio $70
menor que o do Acumulador.
0 ? ? 1 0 0
F1 CMP ,X Considerando que inicialmente A = #$30, H:X = #$0060
e $60 = #$30, instruo compara A com #$30, que o
contedo da posio de memria apontada por H:X
(posio $60), fazendo #$30 - #$30 = #$00, assim o flag
Z aceso, indicando que o contedo da posio
apontada por H:Z igual ao contedo do Acumulador.
0 ? ? 0 1 0
55
CPX ComPare X
IMM, DIR, EXT, IX, IX1, IX2, SP1, SP2
Compara os valores do Registrador X com o operando, a partir da subtrao entre o contedo do
operando e o contedo do Acumulador (sem alter-los). Essa operao serve para valores
sinalizados ou no.
Operao = X - M
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A3 B3 C3 F3 E3 D3 9EE3 9ED3
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados O que gera a alterao
V Setado se a operao resultar num estouro de limites no formato de
complemento de dois.
N setado se o resultado da operao for maior que 0 (X >M)
Z setado se o resultado da operao for 0 (valores iguais)
C setado se o resultado da operao for menor que 0 (X <M)
Opcode Comando Explicao V H I N Z C
A390 CPX #$90 Considerando que inicialmente H:X = #$00, a
instruo compara X com #$90, fazendo #$00 -
#$90 = -#$90, assim o flag C aceso, indicando que
o valor imediato #$90 maior que o do que o
contedo Registrador X.
0 ? ? 0 0 1
B370 CPX $70 Considerando que inicialmente H:X = #$1030 e $70
= #$10, instruo compara X com #$10, contedo
da posio $70, fazendo #$30 - #$10 = #$20, assim
o flag N aceso, indicando que o contedo da
posio $70 menor que o do Registrador X.
0 ? ? 1 0 0
F3 CPX ,X
ou
CPX X
Considerando que inicialmente H:X = #$0060 e $60
= #$30, instruo compara X com #$30, que o
contedo da posio de memria apontada por H:X
(posio $60), fazendo #$60 - #$30 = #$30, assim o
flag N aceso, indicando que o contedo da
posio apontada por H:X menor que o contedo
do Registrador X.
0 ? ? 1 0 0
56
CPHX - ComPare H:X
IMM, DIR, EXT, SP1
Compara o contedo do Registrador H:X com o contedo de 16 bits do operando. Caso a
operao envolva uma posio de memria de 8 bits, a instruo automaticamente selecionar a
posio seguinte, completando 16 bits ao operando (a posio indicada a parte mais
significativa e a seguinte a menos significativa).
Modo de Endereamento IMM DIR EXT SP1
Opcode 3E 75 65 9EF3
Operando jjkk dd hhll ff
Ciclos de BusClk 4 5 5 5
Sinalizadores Alterados O que gera a alterao
V Setado se a operao resultar num estouro de limites no formato de
complemento de dois.
N setado se o resultado da operao for maior que 0 (H:X >M)
Z setado se o resultado da operao for 0 (valores iguais)
C setado se o resultado da operao for menor que 0 (H:X <M)
Opcode Comando Explicao V H I N Z C
3E9000 CPHX
#$9000
Considerando que inicialmente H:X = #$0000, a
instruo compara H:X com #$9000, fazendo #$0000
- #$9000 = -#$9000, assim o flag C aceso,
indicando que o contedo da posio $90 maior
que o do par H:X.
0 ? ? 0 0 1
7575 CPHX $75 Considerando que inicialmente H:X = #$1030, $75 =
#$10 e $76 = #$31, instruo compara H:X com
#$1031, contedo da posio $75 na parte mais
significativa e da posio $76 na parte menos
significativa, fazendo #$1030 - #$1031 = -#$0001,
assim o flag C aceso, indicando que o contedo
das posies $70:$71 maior que o do par H:X.
0 ? ? 0 0 1
650150 CPHX $150 Considerando que inicialmente H:X = #$0A60, $150
= #$0A e $151 = 60, instruo compara H:X com
#$0A60, da posio $150 na parte mais significativa
e da posio $151 na parte menos significativa,
fazendo #$0A60 - #$0A60 = #$0000, assim o flag Z
aceso, indicando que o contedo do par H:X igual
ao contedo de $150:$151.
0 ? ? 0 1 0
57
TST - TeST
INH (A), INH (X), DIR, IX, IX1, SP1
Testa o contedo do operando, modificando os bits Z e N do CCR de acordo com o valor
comparado.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 3D 4D 5D 7D 6D 9E6D
Operando dd -- -- -- ff ff
Ciclos de BusClk 4 1 1 3 4 5
Sinalizadores Alterados O que gera a alterao
V Sempre apagado.
N setado se o bit 7 do operando estiver em 1.
Z setado se o contedo do operando for 0
Opcode Comando Explicao V H I N Z C
4D TSTA Considerando que antes da instruo A = #$87, a
instruo ir setar o bit N, pois o bit mais
significativo do Acumulador est setado, e, apagar o
bit Z, pois, o contedo Acumulador difere de zero.
? ? ? 1 0 ?
7D TST ,X Considerando que antes da instruo H:X = #$0180
e que $180 = #$00, a instruo ir setar o bit Z, pois
o contedo da posio de memria apontado por
H:X ($180) zero e apagar o flag N, pelo fato do bit
mais significativo da mesma posio estar apagado.
? ? ? 0 1 ?
BRA BRanch Always
REL
Efetua o desvio do fluxo do programa. O operando da instruo um endereo relativo de 8 bits
em formato de complemento de 2. Por isso, ele permite o desvio de valores at 127 posies
adiante e 128 posies para trs.
Modo de Endereamento REL
Opcode 20
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
2004 BRA $E008 Desvia o programa para a posio E008, mas de
forma relativa. Considerando que a instruo
BRA $E008 esteja na posio E004, o opcode de
desvio relativo ser 04 (quatro posies a frente).
? ? ? ? ? ?
20F8 BRA $E018 Desvia o programa para a posio E018, mas de
forma relativa. Considerando que a instruo
BRA $E018 esteja na posio E020, o opcode de
desvio relativo ser 08 (oito posies para trs).
? ? ? ? ? ?
Observao Importante
Estas duas Instrues de desvio a seguir no precisam de instrues de comparao antes delas.
58
BRN BRanch Never
REL
Nunca desvia (equivale instruo NOP, com trs ciclos)
Modo de Endereamento REL
Opcode 21
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
21FC BRN $E015 No desvia para a posio $E015. Se voc considerar
que a instruo est na posio $E019, o opcode da
instruo ser FC (em complemento de dois),
indicando o no-desvio do programa em -4 posies.
? ? ? ? ? ?
BEQ Branch Equal (se Z = 1)
REL
Desvia se o bit Z (Zero) igual a 1, ou seja o resultado da ltima operao foi igual a zero.
Modo de Endereamento REL
Opcode 27
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
270A BEQ INICIO verificado o valor do flag Z, se for igual a 1, vai
para o endereo indicado pelo rtulo INICIO.
? ? ? ? ? ?
BNE Branch Not Equal (Se Z = 0)
REL
Desvia se o bit Z( |Zero) igual a 0, ou seja o resultado da ultima operao foi diferente de zero.
Modo de Endereamento REL
Opcode 26
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
2608 BNE FIM O desvio ir ocorrer se a ltima operao resultar em
um valor diferente de zero, ou seja, o Z = 0. (Observe
que o fim est 08 posies a frente dessa instruo.)
? ? ? ? ? ?
Observao Importante
As duas instrues a seguir podem ser utilizadas aps uma instruo de comparao,
mas caso a igualdade seja em relao zero e em comparao com o acumulador, no preciso
de uma instruo de comparao antes dessas instrues.
59
BPL Branch if Plus (Se N = 0)
REL
Desvia se bit N (Negative) igual a 0, ou seja, o resultado da ltima operao positivo.
Modo de Endereamento REL
Opcode 2A
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BMI Branch if Minus (Se N = 1)
REL
Desvia se bit N (Negative) igual a 1, ou seja, o resultado da ltima operao negativo.
Modo de Endereamento REL
Opcode 2B
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BCC Branch Carry Clear (Se C = 0)
REL
Desvia se o bit C (Carry) igual a 0.
Modo de Endereamento REL
Opcode 24
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BCS Branch Carry Set (Se C = 1)
REL
Desvia se o bit C (Carry) igual a 1. (Idntica a instruo BLO)
Modo de Endereamento REL
Opcode 25
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
60
BHCC Branch Half-Carry Clear (Se H = 0)
REL
Desvia se o bit H (Half-Carry) igual a 0.
Modo de Endereamento REL
Opcode 28
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BHCS Branch Half-Carry Set (Se H = 1)
REL
Desvia se o bit H (Half-Carry) igual a 1.
Modo de Endereamento REL
Opcode 29
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BMC Branch Mask-interruption Clear (Se I = 0)
REL
Desvia se o bit I (mscara de Interrupes) igual a 0 (ou seja, interrupes habilitados).
Modo de Endereamento REL
Opcode 2C
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BMS Branch Mask-interruption Set (Se I = 1)
REL
Desvia se o bit I (mscara de Interrupes) igual a 1 (ou seja, interrupes desabilitados).
Modo de Endereamento REL
Opcode 2D
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
61
BHI Branch High (Se Z e C igual 0)
REL
Desvia se bit Z (Zero) igual a 0 e bit C (Carry) igual a 0 , ou seja , se maior que o valor da
comparao.
Modo de Endereamento REL
Opcode 22
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BHS Branch High or Same (Se C igual 0)
REL
Desvia se o bit C (Carry) igual a 0 , ou seja, se maior ou igual a que o valor da comparao.
Modo de Endereamento REL
Opcode 24
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BLO Branch Lower (Se C igual a 1)
REL
Desvia se o bit C (Carry) igual a 1, ou seja , menor que o valor da comparao.
Modo de Endereamento REL
Opcode 25
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BLS Branch Lower or Same (Se Z ou C igual 1)
REL
Desvia se bit Z (Zero) igual a 1 ou bit C (Carry) igual a 1 , ou seja , se menor ou igual que o valor
da comparao.
Modo de Endereamento REL
Opcode 23
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
Observao Importante
As prximas instrues devem ser usadas em operaes sem sinal. Isso aps as
instrues CMP, CPHX, CPX, SBC e SUB.
62
BGT Branch Greater Than (Se Z = 1 ou N = V)
REL
Desvia se o bit Z (Zero) igual a 1 ou bit N (Negative) igual a V (oVerflow), ou seja, se maior.
Modo de Endereamento REL
Opcode 92
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BGE Branch Greater or Equal (Se N=V)
REL
Desvia se o bit N (Negative) igual a V (oVerflow), ou seja, se maior ou igual.
Modo de Endereamento REL
Opcode 90
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BLT Branch Less Than (Se N V)
REL
Desvia se o bit N (Negative) diferente a V (oVerflow), ou seja, se menor.
Modo de Endereamento REL
Opcode 91
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
Observao Importante
As prximas instrues devem ser usadas em operaes sinalizadas (complemento de
dois). Isso aps as instrues CMP, CPHX, CPX, SBC e SUB
63
BIL Branch Irq Low
REL
Desvia para a posio indicada se o pino IRQ estiver em nvel 0.
Modo de Endereamento REL
Opcode 2E
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BIH Branch Irq High
REL
Desvia para a posio indicada se o pino IRQ estiver em nvel 1.
Modo de Endereamento REL
Opcode 2F
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BRSET BRanch if bit SET
DIR (b0), DIR (b1), DIR (b2), DIR (b3), DIR (b4), DIR (b5), DIR (b6), DIR (b7).
Desvia se o bit indicado, da posio de memria descrita no operando, estiver setado.
Modo de Endereamento DIR
(b0)
DIR
(b1)
DIR
(b2)
DIR
(b3)
DIR
(b4)
DIR
(b5)
DIR
(b6)
DIR
(b7)
Opcode 00 02 04 06 08 0A 0C 0E
Operando ddrr ddrr ddrr ddrr ddrr ddrr ddrr ddrr
Ciclos de BusClk 5 5 5 5 5 5 5 5
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
020FF2 BRSET 1, IRQSC, MAIN Desvia para MAIN se o bit 1 do Registrador
IRQSC estiver setado.
? ? ? ? ? ?
0A90FA BRSET 5, VAR, LOCAL Desvia para LOCAL se o bit 5 de VAR (posio
$90 da memria) estiver setado.
? ? ? ? ? ?
Observao Importante
As prximas duas instrues envolvem o estado pino IRQ (s podem ser usadas se PTA5
estiver configurado para essa funo)
Observao Importante
As ltimas instrues de desvio relativo so as seguintes e se referem a bits de posies de
pginas baixas da memria.
64
BRCLR BRanch if bit CLeaR
DIR (b0), DIR (b1), DIR (b2), DIR (b3), DIR (b4), DIR (b5), DIR (b6), DIR (b7).
Desvia se o bit indicado, da posio de memria descrita no operando, estiver apagado.
Modo de Endereamento DIR
(b0)
DIR
(b1)
DIR
(b2)
DIR
(b3)
DIR
(b4)
DIR
(b5)
DIR
(b6)
DIR
(b7)
Opcode 01 03 05 07 09 0B 0D 0F
Operando ddrr ddrr ddrr ddrr ddrr ddrr ddrr ddrr
Ciclos de BusClk 5 5 5 5 5 5 5 5
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
0580F3 BRCLR 2, $80, MAIN Desvia para MAIN (se o programa respeitar o
limite de memria em 8 bits) se o bit 2 da
posio $80 da memria estiver apagado.
? ? ? ? ? ?
019004 BRCLR 0, VAR, LOOP Desvia para LOOP (se o programa respeitar o
limite de memria em 8 bits) se o bit 0 de VAR
(posio $90 da memria) estiver apagado.
? ? ? ? ? ?
BSR Branch Sub-Routine
REL
Desvia para a sub-rotina indicada. A instruo armazena na pilha os valores do PC, para o retorno
correto do fluxo do programa. A instruo RTS complementa essa instruo, fazendo o processo
inverso.
PC = (PC) +2; Empilha (PCL); SP = (SP) 1; Empilha (PCH); SP = (SP) 1; PC = (PC) + rel
Modo de Endereamento REL
Opcode AD
Operando rr
Ciclos de BusClk 5
Sinalizadores Alterados Nenhum
DBNZ Decrease and Branch if Not Zero
DIR, IX, IX1, SP1
Decrementa o contedo da posio indicada no operando e desvia para posio apontada no
operando, caso o valor seja diferente de zero.
anloga ao conjunto de instrues:
DEC dd, CMP #0, BNE rr
Modo de Endereamento DIR IX IX1 SP1
Opcode 3B 7B 6B 9E6B
Operando ddr
r
rr ffrr ffrr
Ciclos de BusClk 7 6 7 8
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
3B80F2 DBNZ $80, LAB Decrementa o contedo da posio $80 e desvia
para LAB, se o resultado for diferente de zero.
? ? ? ? ? ?
7B0C DBNZ X, RET Decrementa o contedo da posio de memria
apontada por H:X e desvia para RET caso o resultado
seja diferente de zero.
? ? ? ? ? ?
65
DBNZA Decrease and Branch if Not Zero in Accumulator
INH
Decrementa o contedo de A e desvia para posio apontada no operando, caso o valor seja
diferente de zero.
anloga ao conjunto de instrues: DECA, BNE rr
Modo de Endereamento IMM
Opcode 4B
Operando rr
Ciclos de BusClk 4
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
4BF1 DBNZA MAIN Decrementa o contedo de A e desvia para MAIN se
este for diferente de zero.
? ? ? ? ? ?
DBNZX Decrease and Branch if Not Zero in X
INH
Decrementa o contedo de X e desvia para posio apontada no operando, caso o valor seja
diferente de zero.
anloga ao conjunto de instrues: DECX, BNE rr
Modo de Endereamento INH
Opcode 5B
Operando rr
Ciclos de BusClk 4
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
4BF1 DBNZA MAIN Decrementa o contedo de X e desvia para MAIN se
este for diferente de zero.
? ? ? ? ? ?
CBEQ Compare and Branch if EQual
DIR, IX+, IX1+, SP1
Compara o contedo do Acumulador com o contedo da posio de memria do operando e desvia para
a posio indicada, se forem iguais. Esse instruo , na pratica, a unio das instrues CMP e BEQ, mas
no altera sinalizadores e executada mais rapidamente que as duas.
Modo de Endereamento DIR IX+ IX1+ SP1
Opcode 31 71 61 9E61
Operando ddrr ee ffrr ffrr
Ciclos de BusClk 5 5 5 6
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
316001 CBEQ $60,
POSICAO
Considerando que antes da instruo A = #$70 e que
$60 = #$70, a instruo far a comparao de A com o
valor #$70, contedo do operando. Como A igual
ao valor do contedo do $60, o programa desviar
para a label POSICAO. Observe que o opcode indica o
local da posio da label relativa posio.
? ? ? ? ? ?
66
CBEQA Compare and Branch if EQual Accumulator
IMM
Compara A com o valor imediato indicado e desvia se igual.
Modo de Endereamento IMM
Opcode 41
Operando iirr
Ciclos de BusClk 4
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
415004 CBEQA #$50,
PROX
Considerando que antes da instruo A = #$50, a
instruo far a comparao de A com o valor #$50
do operando. Como A igual a esse valor, a instruo
executar o desvio para o local no programa indicado
pela label PROX. Se a posio do PC for E004 e a do
local indicado por PROX for E008, o desvio ser um
valor relativo igual posio final menos a apontada
pelo PC, ou seja, E008 E004 = 04, e esse valor
indicado no opcode.
? ? ? ? ? ?
CBEQX Compare and Branch if EQual X
IMM
Compara X com o valor imediato indicado e desvia se igual.
Modo de Endereamento IMM
Opcode 51
Operando iirr
Ciclos de BusClk 4
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
5150F4 CBEQX #$00,
PROX
Considerando que antes da instruo H:X = #$0000, a
instruo far a comparao de A com o valor #$00 do
operando. Como X igual a esse valor, a instruo
executar o desvio de A para o local no programa
indicado pela label PROX. Se a posio do PC for E008
e a do local indicado por PROX for E014, o desvio ser
um valor relativo igual posio final menos a a
apontada pelo PC, ou seja, E008 E0014 = F4
(complemento de 2), e esse valor indicado no
opcode.
? ? ? ? ? ?
67
3.3.3.1 Instrues de Salto de Endereo Absoluto
JMP JuMP
DIR, EXT, IX, IX1, IX2
Faz o salto do programa para determinada posio de memria. Observe que essa instruo
semelhante a BRA, s que, ao invs de fazer um desvio relativo, ela faz um desvio absoluto para
a posio de memria indicada.
PC = endereo de destino
Modo de Endereamento DIR EXT IX IX1 IX2
Opcode BC CC FC EC DC
Operando dd eeff -- ff eeff
Ciclos de BusClk 3 4 3 3 4
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
CCE00A JMP $E00A Desvia o fluxo de execuo do programa (PC) para
instruo indicada na posio $E00A.
? ? ? ? ? ?
CCE00A JMP LABBLE Considerando que a label LABBLE esteja na posio
$E00A, a instruo desvia o fluxo de execuo do
programa (PC) para a instruo indicada na posio
$E00A
? ? ? ? ? ?
DCE000 JMP E000 ,X Considerando que, antes da instruo, H:X = #$0060 e
que $60 = #$0A, a instruo desvia o fluxo de
execuo do programa (PC) para a instruo indicada
na posio $0A, contedo da posio apontada por
H:X, adicionada de #$E000, assim, a instruo
seguinte a ser executada a que est indicada em
E00A
? ? ? ? ? ?
JSR Jump Sub-Routine
DIR, EXT, IX, IX1, IX2
Faz o salto do programa para determinada sub-rotina. Observe que essa instruo semelhante
a BSR, s que, ao invs de fazer um desvio relativo, ela faz um desvio absoluto para a posio de
memria indicada. Assim como BSR, a instruo armazena na pilha os valores do PC, para o
retorno correto do fluxo do programa. A instruo RTS realiza o processo inverso.
PC = (PC) + n (n = 1,2, ou 3); Empilha (PCL); SP = (SP) 1; Empilha (PCH); SP = (SP) 1; PC =
endereo
Modo de Endereamento DIR EXT IX IX1 IX2
Opcode BD CD FD ED DD
Operando dd eeff -- ff eeff
Ciclos de BusClk 5 6 5 5 6
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
CDE00A JSR LABBLE Considerando que a label LABBLE esteja na posio
$E00A, a instruo desvia o fluxo de execuo do
programa (PC) para a instruo indicada na posio
$E00A e armazena na pilha os valores da posio
atual para o retorno adequado.
? ? ? ? ? ?
68
RTS ReTurn Sub-routine
INH
Provoca o retorno do fluxo do programa ao ponto seguinte ao de onde ocorreu a chamada de
sub-rotina. Para isso, o endereo de retorno retirado da pilha (primeiro a parte alta (PCH -
MSB) depois a parte baixa (PCL - LSB)), em seguida esse retorno carregado no PC de forma que
o programa retorna ao ponto seguinte chamada da sub-rotina. Essa instruo realiza o
processo inverso das instrues BSR e JSR.
SP = SP + 1; retira a PCH da pilha; SP = SP + 1; retira PCL da pilha
Modo de Endereamento INH
Opcode 81
Operando --
Ciclos de BusClk 6
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
81 RTS Retorna da sub-rotina atual. ? ? ? ? ? ?
RTI ReTurn Interruption
INH
Provoca o retorno do fluxo do programa ao ponto seguinte de onde ocorreu a interrupo. Para
isso, o endereo de retorno retirado da pilha (PCH) depois a parte baixa (PCL)), em seguida esse
retorno carregado no PC de forma que o programa retorna ao ponto seguinte chamada da
interrupo. Observe que antes de recuperar o PCH e o PCL, a instruo recupera da pilha os
valores salvos do CCR, A, X, nessa ordem, que tambm foram salvos na pilha.
SP = SP + 1; retira CCR da pilha, SP = SP +1; retira A da pilha, SP = SP +1; retira X da pilha;
SP = SP + 1; retira PCH da pilha; SP = SP + 1; retira PCL da pilha
Modo de Endereamento INH
Opcode 80
Operando --
Ciclos de BusClk 9
Sinalizadores Alterados Todos, que recuperam o seu estado antes da interrupo
Opcode Comando Explicao V H I N Z C
80 RTS Retorna da sub-rotina atual. ? ? ? ? ? ?
3.3.4 Instrues de controle do processador
Essas so ltimas instrues do conjunto. So utilizadas para controlar algumas
caractersticas do funcionamento da CPU do microcontrolador, forando estados ao CCR ou
executando a mudana de estado do programa.
Observao Importante
imprescindvel o uso dessa instruo na rotina de tratamento de interrupo, mas no se
confunda essa instruo com a sigla RTI de Real Time Interruption (Rotina de Tratamento de
Interrupo)
69
SEC SEt Carry
INH
Seta o sinalizador C do CCR.
Modo de Endereamento INH
Opcode 99
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados O que gera a Alterao
C Sempre Setado
Opcode Comando Explicao V H I N Z C
99 SEC Seta o flag C ? ? ? ? ? 1
CLC CLear Carry
INH
Apaga o sinalizador C do CCR.
Modo de Endereamento INH
Opcode 98
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados O que gera a Alterao
C Sempre Apagado
Opcode Comando Explicao V H I N Z C
98 CLC Apaga o flag C ? ? ? ? ? 0
SEI SEt Interruption-mask
INH
Seta o sinalizador I do CCR. (Desabilita todas as interrupes)
Modo de Endereamento INH
Opcode 9B
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados O que gera a Alterao
I Sempre Setado
Opcode Comando Explicao V H I N Z C
9B SEI Desabilita as interrupes, a partir desse momento,
no programa.
? ? 1 ? ? ?
70
CLI CLear Interruption-mask
INH
Seta o sinalizador I do CCR. (Habilita todas as interrupes)
Modo de Endereamento INH
Opcode 9A
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados O que gera a Alterao
I Sempre Apagado. (Habilita todas as interrupes)
Opcode Comando Explicao V H I N Z C
9A CLI Habilita as interrupes, a partir desse momento, no
programa.
? ? 0 ? ? ?
NOP No OPeration
INH
No realiza nenhuma operao, apenas gasta um ciclo de relgio do programa.
Modo de Endereamento INH
Opcode 9D
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados Nenhum
Opcode Comando Explicao V H I N Z C
9D NOP Gasta um ciclo do BusClk ? ? ? ? ? ?
SWI SoftWare Interruption
INH
Gera uma interrupo por software. Como qualquer outra interrupo, ela salva os contedos de
PC+1, A, X e do CCR na pilha. Alm disso, seta o sinalizador I, inibindo as demais interrupes.
Desvia, depois disso, o programa para o endereo apontado pelo vetor $FFFC, sendo esta a
interrupo de mais alta prioridade. Inclusive, ela no mascarada (desabilitada) pelo
sinalizador I do CCR.
Modo de Endereamento INH
Opcode 83
Operando --
Ciclos de BusClk 11
Sinalizadores Alterados O que gera a Alterao
I Sempre Setado
Opcode Comando Explicao V H I N Z C
83 SWI Provoca uma interrupo por software ? ? 1 ? ? ?
71
STOP STOP
INH
Coloca a CPU em algum dos modos de parada (STOP3, STOP2 ou STOP1) dependendo da
configurao dos Registrador SPMSC2. Essa funo no pode ser executada, caso no esteja
habilitada. Essa configurao feita no Registrador SOPT1.
Modo de Endereamento INH
Opcode 8E
Operando --
Ciclos de BusClk >=2
Sinalizadores Alterados O que gera a Alterao
I Sempre Apagado. (Habilita todas as interrupes)
Opcode Comando Explicao V H I N Z C
8E STOP Coloca a CPU em algum dos modos de parada. ? ? 0 ? ? ?
WAIT WAIT
INH
Coloca a CPU no modo de espera (WAIT mode).
Modo de Endereamento INH
Opcode 8F
Operando --
Ciclos de BusClk >=2
Sinalizadores Alterados O que gera a Alterao
I Sempre Apagado. (Habilita todas as interrupes)
Opcode Comando Explicao V H I N Z C
8F WAIT Coloca a CPU no modo de espera de interrupo. ? ? 0 ? ? ?
3.4 Diretivas do compilador Assembly
As diretivas do compilador so pseudocdigos que orientam o montador Assembler
do compilador no encaixe das instrues na memria do microcontrolador. Elas no possuem
opcodes, no so instrues, por isso, muito cuidado ao execut-las.
Segue a lista das diretivas. Os exemplos aqui servem apenas para exemplificar a
sintaxe, na lista de exemplos de programas eles estaro comentados e aplicados.
Nome da diretiva: BASE BASE
Descrio: Define uma base numrica para as constantes do programa.
Um detalhe importante, que mesmo utilizando BASE 16, necessrio
utilizar a simbologia #$ para nmeros terminados com D, para que o
montador no interprete como um nmero decimal.
Sintaxe: BASE [n]
[n] = 2, 8, 10 ou 16 (Bases numricas)
Exemplo: BASE 16
72
Nome da diretiva: DC Define Constant
Descrio: Define uma constante na memria.
A quantidade de memria alocada depende do tamanho da constante.
Sintaxe: [nome]: DC .[tamanho] [expresso]
DC.B ou FCB indica a alocao de 1 byte
DC.W ou FDB indica a alocao de 2 bytes
DC.L ou FQB indica a alocao de 4 bytes
Exemplos: STRING: DC.B string de teste
SOL: DC.B $0A ;no use #$ apenas $

Nome da diretiva: DCB Define Constant Block
Descrio: Solicita ao montador que ele preencha um bloco da memria com os valores
constantes designados pela instruo
Sintaxe: [nome]: DCB .[tamanho] [contagem], [valor]
DCB.B indica a alocao de 1 byte vezes o valor da contagem
DCB.W indica a alocao de 2 bytes vezes o valor da contagem
DCB.L indica a alocao de 4 bytes vezes o valor da contagem
Exemplos: DCB.W 10, $17 ; indica um bloco de 10*2 bytes preenchido com #$17
Nome da diretiva: DS Define Space
Descrio: Reserva a memria para variveis. O contedo da memria no inicializado
e a quantidade de memria alocada igual ao tamanho vezes a contagem.
Sintaxe: [nome]: DS .[tamanho] [contagem]
DS.B ou RMB indica a alocao de 1 byte
DS.W ou RMD indica a alocao de 2 bytes
DS.L ou RMQ indica a alocao de 4 bytes
Exemplos: VAR: DS.B 2; define VAR com 2 bytes de memria.
Nome da diretiva: IF/ELSE/ENDIF
Descrio: Diretivas que criam uma estrutura condicional ao programa. Assim, ser
compilado o bloco de instrues escrito aps IF, se a proposta for verdadeira.
Caso contrrio, ser compilado o o bloco de instrues escrito aps ELSE. A
diretiva ENDIF encerra a estrutura condicional, as instrues que a
sucederem sero compiladas normalmente.
Sintaxe: IF [condio de igual da (definida pela diretiva EQU)]
[Comandos Assembly]
ELSE
[Comandos Assembly]
ENDIF
Exemplos: IGUAL: EQU $40
IF IGUAL = 40
CLRA
ELSE
INCX
ENDIF

INCA
73
Nome da diretiva: EQU - EQUality
Descrio: Gera uma igualdade entre uma nomeao e um valor
Sintaxe: [nome]: EQU [expresso]
Exemplos: VAL: EQU $70
ZERO: EQU 0
Como renomear
em Assembly
(cdigo de
programa):
MOTOR: EQU 1
LED: EQU 2
:
:
BSET MOTOR, PTBD ;PTB1 associado a um motor
BSET LED, PTBD ;PTB2 associado a um LED
Nome da diretiva: INCLUDE INCLUDE
Descrio: Inclui o arquivo indicado na expresso no texto do programa. O arquivo
externo inserido no ponto em que a diretiva estiver localizada.
Sintaxe: INCLUDE 'nome_arquivo'
Exemplos: INCLUDE 'MC9S08QG8.inc'
Nome da diretiva: MACRO/ENDM
Descrio: Gera uma macro instruo (conjunto de instrues), que inicia com o
comando MACRO e se encerr com o comando ENDM. Para a macro
instruo ser usada, ser chamada pelo nome, como se fosse uma instruo
comum.
Sintaxe: [nome]: MACRO

ENDM
Exemplos: DES_COP: MACRO
LDA SOPT1
AND #127
STA SOPT1
ENDM
Nome da diretiva: ORG - ORiGin
Descrio: Especifica o endereo da montagem das instrues, ou seja, o compilador ir
implementar o cdigo no microcontrolador nos endereos de memria
seguintes aos designados por essa diretiva.
Sintaxe: ORG [endereo]
Exemplos: ORG $E000
Nome da diretiva: SECTION SECTION
Descrio: Declara uma seo de cdigo realocvel na memria, ou seja, cria um
conjunto de smbolos que poder ser realocado por outro software ao longo
da link-edio (processo de criao do programa).
Existem trs tipos de seo:
-Seo de cdigo: contm ao menos uma instruo Assembly;
74
-Seo de constantes: contm somente diretivas DC ou DCB;
-Seo de dados: contm pelo menos uma diretiva DS. Observe que uma
seo vazia, sem declaraes, tambm considerada uma seo de dados.
O especificador SHORT permite declarar uma seo que utiliza o modo de
endereamento direto.
Sintaxe: [nome]: SECTION {SHORT}
Exemplos: DADOS: SECTION SHORT
VAR1: DS.B 1
VAR2: DS.B 2
3.5 Sub-rotinas
So um conjunto de instrues localizado fora do escopo do programa principal.
Funcionam como as funes na linguagem C, ou seja, podem ser chamadas para realizarem
determinada operao, servem para deixar o cdigo mais organizado e evitar desperdcios de
memria. Alm disso, normalmente, so usadas quando necessrio realizar repetidas vezes a
mesma operao.
As sub-rotinas so mais vantajosas para a memria FLASH que a diretiva MACRO, que
tambm cria sries de instrues. Isso, porque as sub-rotinas tm seu cdigo gerado uma nica
vez, enquanto a macro-instruo compilada cada vez que chamada.
H duas instrues que fazem a chamada de sub-rotina, as instrues BSR (chamada
relativa) e JSR (chamada absoluta). A primeira tem um opcode de 2 bytes (pois possui um modo
de endereamento relativo) quando executada, mas realiza uma chamada a um espao limitado
do programa. J a outra possui um opcode de 3 bytes (pois faz a chamada de um valor de
endereo absoluto), contudo, pode ser usada para atingir qualquer endereo dentro da memria
do microcontrolador.
Confira os exemplos de sub-rotinas na seo exemplos desse captulo.
3.6 Co de Guarda - Watchdog ou COP
O COP um temporizador interno do microcontrolador e pode ser utilizado para gerar
um reset na CPU, caso acontea um funcionamento inadequado no sistema.
Ele funciona da seguinte maneira: primeiramente selecionada a fonte de clock do
COP (Registrador SOPT2) e, em seguida, escolhe-se o nmero de ciclos para acontecer o reset
(Registrador SOPT1).
Quando est ativo, o programador deve incluir funes que gerem um reset na
contagem do COP. Caso esse reincio de contagem no acontea, o COP ir provocar um reset na
CPU, pois entende que o programa est trabalhando de forma anmala. Para realizar esse reset
no contador do COP, preciso realizar a escrita de um valor qualquer no registrador SRS.
O COP temporariamente desativado quando a CPU est no modo de depurao.
Alm disso, para programadores iniciantes, recomendvel a desativao do Watchdog do
microcontrolador, no incio de cada programa.
75
3.7 Registradores de Opes do sistema
Agora que conhecemos as instrues da linguagem Assembly, elas sero utilizadas
para programar Registradores do microcontrolador.
------------------------------------------
3.7.1 Registrador SOPT1 - System OPTions register 1
------------------------------------------
O primeiro deles, o registrador SOPT1 sempre configurado nos programas Assembly,
por isso o primeiro a ser alvo de estudo deste livro.
Endereo: 0x1802 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: COPE COPT STOPE ---- ---- ---- BKGPE RSTPE
Leitura(R)/Escrita(W): R/W R/W R/W ---- R R R/W R/W
Aps o reset: 1 1 0 1 0 0 1 0
Configurao usual: 0 1 0 1 0 0 1 0
BIT0 - RSTEPE - reset Enable Pin Enable
Habilita a funo reset do pino 0 do microcontrolador.
0 - pino na funo de Entrada/Sada ou outra.
1 - pino operando na funo de reset externo do programa.
BIT1 - BKGPE - BacKGroud Pin Enable
Habilita a funo backgroung do pino 1 do microcontrolador.
0 - funo de depurao do pino desabilitada.
1 - funo de depurao do pino habilitada.
BIT5 - STOPE - STOP Enable
Habilita a instruo STOP do microcontrolador.
0 - modo STOP desabilitado, a instruo STOP no ser reconhecida pelo compilador.
1 - modo STOP habilitado.
BIT6 - COPT - COP Timeout
Seleo de contagem do timeout (tempo para ele comear a funcionar aps o reset)
do COP.
0 - Acontecer um reset aps 8 192 clocks de barramento.
1 - Acontecer um reset aps 262 144 clocks de barramento.
Observao Importante
Os registradores que controlam as opes do sistema (SOPT1 e SOPT2) s podem ser
programados uma nica vez depois do reset do programa.
76
BIT7 - COPE - COP Enable
Habilita o Watchdog (COP) do microcontrolador.
0 - COP desativado.
1 - COP ativado.
------------------------------------------
3.7.2 Registrador SOPT2 - System OPTions register 2
------------------------------------------
Endereo: 0x1803 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: COPCLKS ---- ---- ---- ---- ---- IICPS ACIC
Leitura(R)/Escrita(W): R/W ---- ---- ---- ---- ---- R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 0 0 0 0 0 0 0 0
BIT0 - ACIC - Analog Comparator Imput Capture enable
Pino responsvel por conectar a sada do comparador entrada de captura do TPM.
0 - Sada do Comparador Analgico desvinculada do TPM.
1 - Sada do Comparador Analgico vinculada ao canal 0 do TPM.
BIT1 - IIC Pin Select
Seleciona quais pinos sero das conexes SDA e SCL do modo de conexo serial IC.
0 - sinal do SDA no pino da PTA2 e da SCL no pino da PTA3.
1 - sinal do SDA no pino da PTB6 e da SCL no pino da PTB7.
BIT7 - COP clock Select
Seleciona a fonte de clock do COP.
0 - Fonte vinda do oscilador interno de 1kHz.
1 - Fonte vinda do clock interno do barramento (F
BUS
).
3.8 Programando em Assembly
Com o conhecimento das instrues Assembly, possvel gerar um lista ordenada de
comandos, que por definio, nomeada programa.
O programa basicamente se constitui de duas partes, a parte de configuraes e a
parte de lgica. A primeira para serve para determinar quais perifricos e processamentos
internos estaro ativos no microcontrolador. A segunda, serve para determinar como estes
perifricos se comportaro com o meio.
Evidentemente, essa estruturao feita quando est-se programando o chip.
possvel construir programas que no tenham significado fsico (ou seja, o hardware interagir com
o meio).
Observe que a linguagem Assembly diferente das linguagens de alto nvel, como o C.
77
No microcontrolador, o programa realiza interaes com o usurio atravs de nveis lgicos (ou
analgicos) nas interfaces pr-programadas do microcontrolador.
Outro tpico importante que, ao final de cada programa, preciso indicar o local em
que ele iniciar a execuo do programa aps o reset do microcontrolador. Para isso, usa-se a
diretiva ORG, na posio $FFFE, que o endereo do vetor reset (isso ser visto com mais
detalhes no captulo 5). O vetor possui sempre uma constante alocada (atravs da diretiva DC.W),
cuja constante a posio de incio do programa. Usualmente, o rtulo que marca o incio do
programa chamado INICIO, assim, basta trabalhar com a constante INICIO, at porque, nem
sempre, o incio do programa coincide com o incio da memria FLASH, por isso, seria perigoso
alocar sempre a constante $E000.
3.9 Exemplos
3.9.1 Exemplo 1 Contagem:
- Criar um programa em Assembly que faa a contagem at o valor 20.
Soluo:
Para fazer uma contagem, a ideia principal incrementar unitariamente um valor e
fazer a comparao com o valor a ser atingido, caso seja menor, deve-se repetir a operao.
Observe essa sequncia lgica na forma de instrues Assembly:
Endereo Opcode Rtulo Instrues/Diretivas Explicao
ORG $E000 ;direciona o montador ao local
onde o programa ser criado
$E000 4F INICIO: CLRA ;limpa o Acumulador
$E001 4C LOOP: INCA ;incrementa o Acumulador
$E002 A114 CMP #20 ;compara com vinte
$E004 25FB BLO LOOP ;desvia se for menor para o
LOOP, fazendo um novo ciclo
at que o valor no Acumulador
alcance 20
$E006 20F8 BRA INICIO ;retorna para o incio, para
reiniciar a contagem
ORG $FFFE ;direciona a posio da
memria para a rea de vetores
(no caso o reset)
$FFFE RESET: DC.W INICIO ;inicia a compilao do
programa no local rotulado
INICIO
3.9.2 Exemplo 2 Programao de Variveis:
- Criar um programa que chame uma sub-rotina para incrementar at dez o Acumulador. E faa
isso para armazenar esse valor nas variveis VAR1, VAR2 e VAR3.
Soluo:
A lgica de incrementa semelhante anterior, contudo, teremos de aprender dois
conceitos ainda no explorados, em relao a sintaxe do Assembly: declarar variveis e utilizar
sub-rotinas.
A criao das variveis feita na memria RAM (voltil), ou seja, entre as posies
$0060 e $025F do mapa de memria do microcontrolador. Para acessar essa faixa da memria
necessrio utilizar a diretiva ORG e para declarar uma varivel preciso utilizar a diretiva DS e
explicitar o nmero de bytes ocupado pela varivel. Alm de cri-las e declar-las, necessrio
fazer a inicializao. Essa inicializao deve acontecer na memria FLASH, pois uma parte
integrante do programa, e ocorre com a instruo CLR (iniciar com zero) Isso se deve ao fato de
78
que as variveis possam estar carregadas com algum tipo de lixo lgico, ou seja, com valores
aleatrios de usos anteriores do microcontrolador.
A sub-rotina deve, tambm, ser criada em um local parte do programa, o PC no
pode "chegar" na sub-rotina sequencialmente. A chamada de sub-rotina pode ser feita por duas
instrues, JSR (chamada absoluta) e BSR (chamada relativa). Como o programa pequeno (no
possui mais do que 127 posies na memria FLASH), optaremos pela instruo BSR, visto que a
JSR ocupa 1 byte a mais na memria. Lembre-se que toda sub-rotina deve encerrar-se com a
instruo RTS.
END Opcode VARIVEL DIRETIVA Explicao
ORG $0060 ;direciona o montador ao local
onde as variveis sero
criadas (memria RAM)
$0060 VAR1: DS.B 1 ;declarao de VAR1, VAR2 e
VAR3
$0061 VAR2: DS.B 1
$0062 VAR3: DS.B 1
Rtulo Instrues/Diretivas
ORG $E000 ;direciona o montador ao local
onde o programa ser criado
(memria FLASH)
$E000 3F60 INICIO: CLR VAR1 ;inicializao das variveis
$E002 3F61 CLR VAR2 ; VAR1 = VAR2 = VAR3 = 0
$E004 3F62 CLR VAR3
$E006 AD08 BSR INCREM ;chamada da subrotina
$E008 B760 STA VAR1 ;carrega VAR1, VAR2 e VAR3 com
;o valor do Acumulador
$E00A B761 STA VAR2
$E00C B762 STA VAR3
$E00E 20F0 BRA INICIO ;desvia para o inicio,
impedindo a ida sequencial do
programa para a sub-rotina
$E010 4F INCREM: CLRA ;apaga o Acumulador
$E011 4C LOOP: INCA ;incrementa o Acumulador
$E012 A10A CMP #10 ;compara com dez
$E014 25FB BLO LOOP ;desvia se for menor
$E016 81 RTS ;retorna da subrotina
ORG $FFFE ;direciona a posio da
memria para a rea de vetores
(no caso o reset)
$FFFE RESET: DC.W INICIO ;inicia a compilao do
programa no local rotulado
INICIO
79
3.9.3 Exemplo 3 Desativar o COP:
- Criar um programa em Assembly que desative o COP.
Soluo:
Nesse programa, pela primeira vez, configuraremos o Registrador, o SOPT1, para
desativarmos o COP, prtica que se tornar comum nos prximos exerccios.
Para fazer isso, basta perceber que se o BIT7 desse Registrador estiver apagado, o COP
ser desativado, independente dos valores dos demais bits. Dessa forma, poderamos pensar em
usar um BCLR 7, SOPT1, para zerarmos, mas esse Registrador de pgina alta, e essa instruo
no poder ser utilizada.
Por isso, ser preciso fazer uma pequena lgica booleana. Voc no precisa saber
como devem ser preenchidos os demais bits, basta que apague-se o BIT7. Assim, a operao AND
seria adequada visto que, Y & 0 = 0 e Y & 1 = Y. Precisamos de 0 no bit mais significativo e 1 nos
demais bits, para termos o nmero adequado a nossa lgica, observe:
Bits BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Valor inicial SOPT1 1 X X X X X X X
Valor para operao AND 0 1 1 1 1 1 1 1
Valor desejado SOPT1 0 X X X X X X X
Veja que o nmero binrio 0111 1111, equivalente ao hexadecimal 7F e ao decimal
127. O programa Assembly ficar assim:
END Opcode Rtulo Instrues/Diretivas Explicao
ORG $E000 ;direciona o montador ao local
onde o programa ser criado
$E000 C61802 INICIO: LDA SOPT1 ;logica de desativar o COP
$E003 A47F AND #$7F
$E005 C71802 STA SOPT1
$E008 20FE FIM: BRA FIM ;ciclo infinito que
estaciona
;o programa em FIM
ORG $FFFE ;direciona a posio da
memria para a rea de
vetores (no caso o reset)
$FFFE RESET: DC.W INICIO ;inicia a compilao do
programa no local rotulado
INICIO
80
3.10 Resumo do Captulo
A Linguagem Assembly composta de instrues hexadecimais que so codificadas
em mnemnicos, para facilitar sua identificao. Assim, est associado um opcode hexadecimal
a cada instruo.
Alm das instrues, existem outros elementos de programao. H ento Rtulos
(labels), Diretivas, os Operandos das instrues e os Comentrios de um programa.
As instrues so endereadas de sete modos diferentes, so eles: Implcito, Imediato,
Direto, Extendido, Relativo, Memria para memria e Indexado. Alm disso, elas so classificadas
da seguinte forma:
Instrues de movimentao de bits e de dados;
Instrues de operaes lgicas e aritmticas;
Instrues de teste e desvio; e
Instrues de controle do processador.
Um bom programa se utiliza de sub-rotinas para organizar melhor seu espao, alm de
utilizar os demais recursos disponveis. Alm disso, para os programas desenvolvidos nessa
disciplina necessrio desativar o COP, ou seja, o sistema de segurana do dispositivo. Abaixo
segue o esqueleto da programao, ou seja, um programa pr-formatado com as partes
fundamentais de direcionamento da memria.

; Inclui a biblioteca onde existem as definicoes do microcontrolador
INCLUDE 'MC9S08QG8.inc'
; Inicio da area de variaveis
ORG $0060
;
; Inicio do codigo
ORG $e000
; *********************** O PROGRAMA INICIA AQUI ***************************
INICIO:
;**************************************************************
;* Vetor de interrupcoes *
;**************************************************************
ORG $FFFE
reset: DC.W INICIO
81
3.11 Exerccios
1- Escreva um programa em Assembly que armazena $34 no Acumulador e, a seguir, envia para a
posio $0080 da memria.
2- Limpe a posio $0090 da memria.
3- Escreva um programa que limpa a memria entre os endereos $0080 e $0100.
4- Coloque $FF na rea de memria compreendida entre $0080 e $0100.
7- Escrever um programa que calcule $23 + $12 $56.
8- Escrever um programa que execute a multiplicao dos decimais 12 e 15.
9- Escreva um programa que calcule 15 /5.
10- Escreva um programa que l o contedo do Acumulador previamente carregado. A seguir,
testa se o bit menos significativo igual a 1. Em caso positivo, aciona um LED na porta de sada
A ($0000), caso contrrio, aciona 2 LEDs na porta de sada A ($0000).
11- Os bits 3, 4 e 5 da porta de sada A ($0000) so usados para comandar as trs lmpadas de
um semforo. Escreva um programa que execute a tarefa. Crie um delay para cada lmpada.
12- Escreva um programa que usa a porta de sada como um contador decrescente que, iniciando
em $FF, pra ao atingir o estado $00.
13- Escreva um programa que usa a porta de sada como um contador decrescente que, iniciando
em $FF, pra ao atingir o estado $AA.
14- Escreva um dado na posio $0080 e obtenha o complemento de 1. A seguir, coloque o
resultado na porta de sada B ($0001).
15- Desloque o contedo do Acumulador para a esquerda em 1 bit. Envie o resultado para a
porta de sada B ($0001).
16- Entre com um dado no Acumulador e desloque para a esquerda o seu contedo em 3 bits.
Envie o resultado para a porta de sada B ($0001).
17- Escreva dois dados D1 e D2, colocando-os em posies consecutivas de memria. Escolha, a
seguir, o maior deles e envie para a porta de sada B ($0001).
18- Calcule a soma de uma srie de nmeros. O comprimento da srie deve ser previamente
armazenado na posio $0080. O incio da srie deve ser armazenado na posio $0081. Envie o
resultado para a porta de sada B ($0001).
19- Considerando o programa a seguir com os valores iniciais, determine os valores dos
registradores e memria ao longo do programa at o programa atingir o rtulo FIM.
82
. INICIO: LDX #$A0
..................LOOP: JSR SUB1
.............................. INCA
.............................. STA X
...................... FIM: BRA FIM
......................SUB1: PSHA
............................. ADD #$08
............................... STA $80
..... MOV $80,X+
............................... PULA
............................... JSR SUB2
................................ RTS
......................SUB2: PSHA
................................ ADD #$F0
.......... STA $80
........ MOV $80,X+
........ PULA
.............................. RTS
Valores iniciais:
HX= 0000 A = 00
$80=00
$A0 $A4=00
SP=FF PC=E000

Valores Registradores/memria/ pilha:
A=
HX=
SP=
PC=
$80=
$A0= $A1= $A2 =
$A3 = $A4 =
$FF= $FE= $FD=
$FC= $FB=
20- Considerando o cdigo Assembly a seguir com os valores iniciais, determine os valores dos
registradores e memria ao longo do programa at o programa atingir o rtulo FIM.
. . MAIN: LDHX #$0090
.............................. MOV #%00000001,$80
............................... JSR SL
................................JSR SR
.............................. PSHX
........................... BRA FIM
....SL: MOV $80,X+
............................. LSL $80
.............................. CPX #$92
............................... BLO SL
............................... RTS
..........................SR: MOV $80,X+
.............................. LSR $80
............................... CPX #$94
................................ BLO SR
.................................RTS
..........................FIM: CLRA
Valores iniciais:
HX= 0000 A = 00
$80=5 SP=FF PC=E000
Valores Registradores/memria/ pilha:
A=
HX=
SP=
PC=
$80= $90= $91=
$92 = $93 = $94 =
$FF= $FE= $FD=
$FC= $FB=
83
Captulo 4: Entradas e Sadas
Digitais
A partir de agora, o livro abordar os perifricos do microcontrolador HCS08QG8.
Nesse captulo, sero estudadas as portas de entrada e sada digitais, pull-up e os diversos
registradores envolvendo as entradas e sadas digitais.
4.1 Perifricos do microcontrolador........................84
4.2 Portas de Entrada e Sada..................................84
4.3 Configurao das portas de entrada e sada......85
4.3.1 Registradores PTAD e PTBD............................85
4.3.2 Registradores PTADD e PTBDD.......................86
4.3.3 Registradores PTAPE e PTBPE.........................86
4.3.4 Registradores PTASE e PTBSE..........................88
4.3.5 Registradores PTADS e PTBDS.........................88
4.4 Programando Portas em Assembly....................89
4.5 Exemplos............................................................89
4.6 Resumo do Captulo...........................................91
4.7 Exerccios...........................................................92
A boa reputao vale mais que grandes riquezas; desfrutar de boa estima
vale mais que prata e ouro. Provrbios 22:1
84
4.1 Perifricos do microcontrolador
Os perifricos so mdulos internos do microcontrolador que se comunicam com o
meio externo a ele. Atravs dos perifricos, o microcontrolador capaz retirar as informaes do
meio, como sinais de liga desliga ou ainda grandezas fsicas como temperatura, luminosidade ou
presso para depois de process-las, e cumprir sua finalidade ativando ou desativando as sadas,
enviando sinais para o computador ou ainda controlando a potncia de uma carga.
4.2 Portas de Entrada e Sada Digital
O primeiro grupo perifrico a ser estudado ser a comunicao de portas de entrada
e sada de sinais digitais.
Esse grupo faz com que o microcontrolador receba ou gere nveis lgicos de tenso, de
ou para um meio. Com isso, possvel, por exemplo, ligar equipamentos, acender LED's, disparar
alarmes, entre outros, atravs da leitura de sensores, botes, etc.
Seu princpio de funcionamento simples. Atravs das portas de entrada, o chip
recebe dados, e, atravs das portas de sada, ele gera dados.
Esse grupo ocupa todos os pinos do microcontrolador, exceo dos pinos de
alimentao e de referncia. Verifique o esquema de pinos do captulo 2 para perceber isso.
Existem 12 pinos que so de entrada e sada, um de entrada exclusiva e outro de sada exclusiva,
totalizando 14 dentre 16.
Alm disso, esse grupo est dividido em dois tipos de portas: portas A e portas B. O
princpio de funcionamento dos Registradores de cada tipo idntico. O grupo A constitudo de
seis portas, sendo quatro delas (PTA0, PTA1, PTA2 e PTA3) de entrada e sada, uma sendo sada
exclusiva (PTA4) e uma sendo entrada exclusiva (PTA5). J o grupo B constitudo de oito portas,
todas de entrada e sada (PTB0, PTB1, PTB2, PTB3, PTB4, PTB5, PTB6, e PTB7).
A Figura 4.1 mostra um diagrama bsico da estrutura de uma porta do HCS08QG8:
Figura 4.1 Diagrama bsico de uma porta do HCS08QG8 (fonte: Datasheet HCS08QG08)
Observao Importante
Lembrem-se que os nveis lgicos no correspondem necessariamente ao valor de tenso
indicada, nvel 1 no indica 1 Volt (mas sim, 3,3 Volt, no caso deste microcontrolador).
85
4.3 Configurao das portas de entrada e sada
Todos os perifricos do microcontrolador devem ser configurados, para que o chip
"entenda" o que determinado pino est projetado a executar. Essa configurao feita atravs de
da escrita em Registradores. Embora, todos os Registradores possuam um valor default (padro)
ao ser realizado um power on reset (ao ligar o chip ou reset), uma boa tcnica configurar todos
os perifricos utilizados.
Conforme descrito no item 4.2, esse perifrico pode ser configurado por dois grupos
de cinco Registradores (um para as portas do tipo A e outro para as portas do tipo B). A seguir,
tem-se o detalhamento de cada um deles:
------------------------------------------
4.3.1 Registradores PTAD e PTBD - PorT A (B) Data
------------------------------------------
Esses Registradores so responsveis por armazenar os valores dos nveis lgicos das
portas de todas os pinos configurados como portas (A ou B). Assim, para conhecer o valor que
est vindo do meio externo a uma porta de entrada preciso ler esses Registradores e, para
enviar um nvel digital para o meio externo, atravs de uma porta, preciso escrever nesses
Registradores.
Endereo: 0x0000 - Pgina Direta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ---- ---- PTAD5 PTAD4 PTAD3 PTAD2 PTAD1 PTAD0
Leitura(R)/Escrita(W): R R R W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0002 - Pgina Direta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: PTBD7 PTBD6 PTBD5 PTBD4 PTBD3 PTBD2 PTBD1 PTBD0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - PTXDn - PorT X Data n
Contedo do nvel lgico do pino configurado como porta de entrada ou sada.
0 - Porta est recebendo ou enviando nvel lgico 0.
1 - Porta est recebendo ou enviando nvel lgico 1.
Observao Importante
A porta PTA4 s funciona como sada lgica ( um bit de escrita), enquanto a porta PTA5 s
funciona na funo de entrada digital ( um bit de leitura)!
86
------------------------------------------
4.3.2 Registradores PTADD e PTBDD - PorT A (B) Data Direction
------------------------------------------
Esses Registradores so capazes de configurar os pinos como porta de entrada ou
porta de sada.
Endereo: 0x0001 - Pgina Direta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ---- ---- PTADD5 PTADD4 PTADD3 PTADD2 PTADD1 PTADD0
Leitura(R)/Escrita(W) R R R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0003 - Pgina Direta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: PTBDD7 PTBDD6 PTBDD5 PTBDD4 PTBDD3 PTBDD2 PTBDD1 PTBDD0
Lei.(R)/Esc.(W) R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - PTXDDn - PorT X Data Direction n
Configurao do pino como porta de entrada ou sada.
0 - Porta configurada como entrada.
1 - Porta configurada como sada.
Lembre-se que aps o power on reset (ao ligar o chip ou reset), por default (padro) o
microcontrolador vem com todos os seus pinos configurados como entradas digitais.
------------------------------------------
4.3.3 Registradores PTAPE e PTBPE - PorT A (B) pull-up Enable
------------------------------------------
Esses Registradores configuram o pull-up das portas. Pull uma expresso da
eletrnica digital que indica promover a manuteno de um determinado nvel de tenso, para
evitar flutuaes em uma dada entrada do circuito. Portanto, para o chip no receber informaes
que ele no saiba distinguir em qual nvel lgico est, h a necessidade de criar uma estrutura
pull-up (mantm nvel 1) ou pull-down (mantm nvel 0).
Este microcontrolador disponibiliza para as portas de entrada digital apenas pull-up
interno, no disponibilizando pull-down. Se for necessrio, o usurio pode criar um pull-up ou
Observao Importante
Embora, os BITS 4 e 5 do registrador PTADD sejam de leitura e escrita, configurar esses bits no
surte nenhum efeito, visto que essas portas j sejam exclusivamente entrada (PTA5) e sada
(PTA4).
87
pull-down externo, em um projeto. O pull-up normalmente feito com um resistor, conectado
conforme o esquema da figura 4.2.
Figura 4.2 Pull-up externo
Endereo: 0x1840 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: -- -- PTAPE5 PTAPE4 PTAPE3 PTAPE2 PTAPE1 PTAPE0
Lei.(R)/Esc.(W): R R R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x1844 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: PTBPE7 PTBPE6 PTBPE5 PTBPE4 PTBPE3 PTBPE2 PTBPE1 PTBPE0
Lei.(R)/Esc.(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - PTXPEn - PorT X D Pull-up Enable n
Habilita ou desabilita o pull-up interno (apenas em pinos configurados como entrada)
0 - pull-up desabilitado.
1 - pull-up habilitado.
Observao Importante
No h efeito nenhum caso escolher nvel 1 na porta PTA4 (exclusivamente saida).
88
------------------------------------------
4.3.4 Registradores PTASE e PTBSE - PorT A (B) Slew-rate Enable
------------------------------------------
Os registradores PTASE e PTBSE habilitam o controle de Slew-rate das sadas do
microcontrolador. Slew Rate (velocidade de varrimento) definido como a velocidade de resposta
da sada de um amplificador a uma variao de tenso na entrada, este valor na teoria deveria ser
infinito, ou seja, o valor da sada deveria acompanhar a entrada instantaneamente. Essa entrada
no a entrada digital do microcontrolador, mas sim, o sinal enviado pelo mesmo para a sua
sada.
Logo, conclui-se que quanto maior for o valor deste parmetro melhor ser a resposta
da sada do amplificador, ou seja, se um pino est ativo nesse registrador, ele ir aumentar o Slew
Rate, diminuindo assim a taxa de emisso eletromagntica (EMI). Esse recurso deve ser usado
quando necessita-se de uma sada com chaveamento rpido.
Endereo: 0x1841 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ---- ---- PTASE5 PTASE4 PTASE3 PTASE2 PTASE1 PTASE0
Leitura(R)/Escrita(W): R R R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x1845 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: PTBSE7 PTBSE6 PTBSE5 PTBSE4 PTBSE3 PTBSE2 PTBSE1 PTBSE0
Lei.(R)/Esc.(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - PTXSDn - PorT X Slew-rate Enable n
Habilita ou desabilita o slew-rate interno (apenas em pinos configurados como sada)
0 - slew-rate desabilitado.
1 - slew-rate habilitado.
------------------------------------------
4.3.5 Registradores PTADS e PTBDS - PorT A (B) Drive Strength select
------------------------------------------
Registradores que servem para aumentar a corrente de sada das portas do
microcontrolador, controlando a potncia do nvel lgico. Esse recurso importante para quando
o microcontrolador necessita controlar uma carga que usa maior quantidade de corrente em seu
funcionamento. Observe que sem esse recurso a corrente de sada de 2mA, com ele, a corrente
Observao Importante
No h efeito nenhum caso escolher nvel 1 na porta PTA4 (exclusivamente entrada).
89
atinge at 10mA. Caso seja necessria uma corrente superior, o dispositivo de proteo de
amplificadores operacionais acionado, impedindo o funcionamento do microcontrolador,
exigindo-se, assim, o uso de um reforador de corrente.
Endereo: 0x1842 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ---- ---- PTADS5 PTADS4 PTADS3 PTADS2 PTADS1 PTADS0
Leitura(R)/Escrita(W): R R R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x1846 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: PTBDS7 PTBDS6 PTBDS5 PTBDS4 PTBDS3 PTBDS2 PTBDS1 PTBDS0
Lei.(R)/Esc.(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - PTXDDn - PorT X Drive Strenght selection n
Configurao da corrente de sada da porta.
0 - Corrente em modo normal (at 2mA).
1 - Corrente em modo ampliado (at 10mA).
4.4 Programando Portas em Assembly
A programao do microcontrolador consiste em duas etapas. A primeira a
configurao dos Registradores e a segunda na lgica de controle do processo ao qual o
microcontrolador ser submetido. A configurao dos Registradores das portas, por exemplo,
define quais portas sero entradas e quais sero sadas lgicas. Assim, possvel criar uma lgica
que receba uma informao na entrada, processe essa informao e d um resultado digital na
sada, controlando um dispositivo ou processo.
4.5 Exemplos
4.5.1 Exemplo 1:
Criar um programa em Assembly que acenda o LED1 da placa, enquanto o boto SW1 estiver
pressionado.
Observao Importante
A configurao dos registradores normalmente acontece na primeira parte do programa. No
deixe de observar o fato do registrador ser de pgina alta ou de pgina direta ao configur-los.
90
Soluo:
Lembre que na placa, o LED1 est relacionado porta PTB6 e que o SW1 est
relacionado porta PTA2.
Rtulo Instrues Explicao
ORG $E000 ;direciona o montador para o endereo onde o
programa ser criado
;configuraes
INICIO: LDA SOPT1 ;logica de desativar o COP
AND #$7F
STA SOPT1
BSET 6, PTBD ;inicializa porta antes de defini-la como sada
conforme recomendao do fabricante.
BSET 6, PTBDD ;configura PTB6 como sada LED1
BCLR 2, PTADD ;configura PTA2 como entrada SW1
LDA PTAPE ;configura o pull-up da entrada SW1
ORA #$04
STA PTAPE
APAGA: BSET 6, PTBD ; apaga o LED1
MAIN: LDA PTAD ;L a chave SW1
AND #$04 ; Verifica se est pressionada
CMP #$04
BEQ APAGA ;seno, apaga LED1
ACENDE: BCLR 6, PTBD ; se sim, acende o LED1
BRA MAIN ; Volta a ler a chave SW1
ORG $FFFE
; origem do vetor de reset
RESET: DC.W INICIO ;inicia o programa no local rotulado INICIO
91
4.6 Resumo do Captulo
O microcontrolador se comunica com o ambiente externo atravs de portas. Nesse
captulo, foram vistas portas que funcionam como entradas e sadas digitais.
H dois tipos de portas:
PTA H seis tipos (PTA0, PTA1, PTA2, PTA3, PTA4, PTA5), sendo as quatro primeiras
programveis como entrada ou sada, a quinta (PTA4) unicamente como sada e a sexta
(PTA5) unicamente como entrada.
PTB H oito tipos (PTB0-PTB7), sendo que todas podem ser programadas como
entradas ou sadas.
Os seguintes Registradores foram vistos tambm:
PTxD usado para receber a informao de uma entrada ou enviar uma informao a
uma sada.
PTxDD usado para configurar uma porta como entrada ou sada.
PTxPE utilizado para configurar o pull-up das entradas digitais.
PTxSE Serve para configurar a slew-rate da sadas digitais.
PTxDS Serve para configurar a corrente de sada das sadas digitais.
Para a programao em Assembly, recomenda-se que haja duas partes, uma para a
configurao dos Registradores e outra para a lgica do programa.
92
4.7 Exerccios
1- Escreva um programa em Assembly para configurar as portas PTA0 e PTA1 como entradas e
PTB0 e PTB1 como sadas. O programa tambm deve configurar o pull-up e a corrente de sada
(em 10mA). No se esquea de desativar o COP.
2- Escreva um programa em Assembly para controlar dois LED's. A entrada PTB0 conectada a um
boto (no esquea de configurar o pull-up), quando ele pressionado envia nvel 0 e acende um
LED conectado a PTB1. Quando ele pressionado de novo ele envia nvel 0 novamente e apaga o
mesmo LED. O mesmo sistema funciona para o boto conectado a PTB4 em relao ao LED
conectado em PTB5. No se esquea de desativar o COP.
3- O microcontrolador vai controlar um motor DC de tenso nominal 3,3V (conectado PTB0). A
corrente que esse motor exige para funcionar de 10mA. O motor deve ser acionado sempre que
o boto conectado PTA0 for pressionado. Alm disso, h um LED amarelo, conectado PTB1,
que deve ser ligado (com nvel lgico 1), sempre que o motor for acionado. Escreva o programa
em Assembly para essa situao. No se esquea de configurar o pull-up e desativar o COP.
4- O microcontrolador usado para controlar um sistema de fabricao de peas, que possui trs
processos. H trs sensores (conectados PTA0, PTA1 e PTA2) que indicam ao microcontrolador
em qual fase as peas esto. Cada vez que um desses sensores ativado, o microcontrolador
precisa ativar rapidamente acionadores (conectados PTB0, PTB1 e PTB2, e so respectivos aos
sensores) para a mudana de fase do processo, ou seja, necessitam de alta slew-rate. O
microcontrolador deve acionar LED's (ligados PTB4, PTB5 e PTB6) para indicar em qual fase est
a fabricao. H tambm um ltimo LED ligado PTB7, que deve ser acionado quando o processo
finalizar para iniciar um novo ciclo. Crie um programa em Assembly que capacite o
microcontrolador para controlar esse sistema.
Dados: os sensores indicam presena enviando nvel baixo; os LED's acendem quando enviado
nvel alto aos mesmos; os acionadores so ativados com nvel baixo. No esquecer de configurar o
COP e o pull-up onde for necessrio.
Sensor 0
Sensor 1
Sensor 2
(Entradas)
PTA0
PTA1
PTA2
(Sadas)
PTB0
PTB1
PTB2
PTB4
PTB5
PTB6
PTB7
MICROCONTROLADOR
HCS08QG8
Acionador 0
Acionador 1
Acionador 2
LED 0
LED 1
LED 2
LED 3
93
5- Elaborar um programa em Assembly para automatizar um sistema de irrigao, de acordo com
as caractersticas definidas abaixo:
A bomba B1 ficar ligada enquanto o nvel de gua do reservatrio for maior que o nvel
baixo do mesmo (nvel lgico 0 em PTB0).
Se o nvel de gua do reservatrio for menor que o nvel baixo, a bomba B1 dever ser
desligada e a bomba B2 dever ser ligada, ficando neste estado at que o nvel de gua do
reservatrio seja igual ao nvel alto do mesmo (nvel lgico 0 em PTB1) ou o nvel de gua
do poo seja menor que o seu nvel mnimo (nvel lgico 0 em PTA1).
As bombas so acionadas com nvel lgico 1 e o programa fica num loop verificando nvel
de gua do reservatrio e do poo.
94
Captulo 5: Conversor e
Comparador Analgico Digital
Neste captulo, ser estudada a interao do chip com sinais externos analgicos, ou
seja, com nveis de tenso variveis. Assim, ser estudado o conversor AD do HCS08QG8, os
Registradores envolvidos nesse processo e suas aplicaes. Observe que na placa do kit de
desenvolvimento (DEMO 9S08QG8), a variao dos nveis de tenso analgicos realizada com
um potencimetro RV1 e um sensor de luminosidade RZ1. Alm disso, neste captulo sero
estudados os processos de comparao analgica associados ao Conversor e ao Comparador
Analgico.
5.1 Conversor Analgico-Digital..............................95
5.2 Entradas e Sadas analgicas.............................95
5.2.1 Registrador APCTL1........................................96
5.3 Configurao do Conversor AD.........................96
5.3.1 Registrador ADCCFG.......................................96
5.4 Controle do Conversor AD.................................97
5.4.1 Registrador ADCSC1 ....................................98
5.4.2 Registrador ADCSC2........................................99
5.5 Sada da converso analgica e referncia de
comparao...........................................................100
5.5.1 Registradores ADCRH e ADCRL.....................100
5.5.2 Registradores ADCCVH e ADCCVL.................101
5.6 Comparador Analgico (ACMP).......................102
5.6.1 Registrador ACMPSC.....................................103
5.7 Exemplos..........................................................104
5.8 Resumo do Captulo.........................................107
5.9 Exerccios.........................................................108
Os planos do diligente tendem abundncia, mas a pressa excessiva,
pobreza. Provrbios 21:5
95
5.1 Conversor Analgico-Digital
O microcontrolador possui um conversor denominado ADC (Analogic-Digital
Converter), que composto de um conversor de resoluo de 8 ou 10 bits, distribudo em oito
pinos multiplexadas. Alm disso, ele utiliza a tcnica de aproximaes sucessivas, atravs
amplificadores operacionais. A Figura 5.1 mostra o diagrama de blocos do conversor.
Figura 5.1 Diagrama de Blocos do Conversor AD (Fonte: datasheet HCS08QG8)
O conversor comea a funcionar logo aps a seleo do canal de converso
(Registrador ADCSC1), automaticamente. Alm disso, ele permite que a converso seja nica ou
contnua, permite a mudana do tempo de amostragem (tempo de anlise do sinal analgico) e
permite optar por uma converso de resoluo em 8 ou 10 bits. Tambm possvel tomar um valor
de converso de referncia e ainda selecionar a Interrupo de Tempo Real (RTI, que ser vista
mais adiante) como uma fonte de acionamento do conversor AD.
5.2 Entradas analgicas
Para haver a converso analgico-digital necessria a entrada de algum sinal
analgico no microcontrolador, assim, o chip possui um Registrador capaz de tornar os pinos
multiplexados do Registrador em entradas analgicas. Observe que se uma porta est
96
programada como entrada analgica, ela no poder funcionar como entrada digital, mesmo que
seja escrito 0 nos Registradores PTADD e PTBDD. Isto devido ao nivel de prioridade da funo
analgica ser maior do que ao digital. O Registrador que gerencia as entradas analgicas o
APCTL1 (Analogic Pin ConTroL register 1).
------------------------------------------
5.2.1 Registrador APCTL1 - Analogic Pin ConTroL register 1
------------------------------------------
Endereo: 0x0017 - Pgina Direta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ADPC7 ADPC6 ADPC5 ADPC4 ADPC3 ADPC2 ADPC1 ADPC0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - ADPCn - AD Pin Control n
Configurao do pino como porta de entrada analgica ou porta digital.
0 - Porta configurada em modo digital.
1 - Porta configurada como entrada analgica.
Observe que aps o reset, por default (padro) o microcontrolador vem com todos os
seus pinos configurados como entradas digitais e no analgicas.
A tabela a seguir indica a equivalncia entre as portas e os canais de converso
analgico.
Canal do ADC: ADPC0 ADPC1 ADPC2 ADPC3 ADPC4 ADPC5 ADPC6 ADPC7
Porta: PTA0 PTA1 PTA2 PTA3 PTB0 PTB1 PTB2 PTB3
5.3 Configurao do Conversor AD
O Registrador ADCCFG (ADC ConFiGuration) o responsvel por configurar os
processos de converso do conversor, como: nvel de consumo, velocidade de converso, divisor
de clock, tempo de amostragem, nmero de bits e fonte de clock.
------------------------------------------
5.3.1 Registrador ADCCFG - ADC ConFiGuration
------------------------------------------
Endereo: 0x0016 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ADLPC ADIV ADLSMP MODE ADICLK
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 1 0 0 1 1 0 0 0
97
BIT1 e BIT0- ADICLK- AD Input CLK select
Responsvel por selecionar a fonte de clock do conversor
00 - a fonte selecionada Busclk/1
01 - a fonte selecionada Busclk/2
10 - no disponivel
11 - clock interno ADACK
BIT3 e BIT 2 - MODE
Responsvel por selecionar o nmero de bits de resoluo do ADC
00 - resoluo do resultado de converso: 8 bits
10 - resoluo do resultado de converso: 10 bits
BIT4 - ADLSMP - AD Long SamPle time configuration
Responsvel por selecionar o tempo de amostragem do nvel de tenso analgico.
0 - tempo de amostragem normal (4 ciclos do clock do ADC que foi selecionado)
1 - tempo de amostragem estendido (24 ciclos do clock do ADC que foi selecionado)
BIT6 e BIT5 - ADIV - clock DIVide Select
Seleciona o divisor de clock do conversor
00 - Divide a fonte de clock selecionada por 1
01 - Divide a fonte de clock selecionada por 2
10 - Divide a fonte de clock selecionada por 4
11 - Divide a fonte de clock selecionada por 8
BIT7 - ADLPC - AD Low Power Configuration
Configura a relao velocidade de converso/consumo do conversor.
0 - alta velocidade de converso (consumo elevado)
1 - baixa consumo de converso (velocidade reduzida)
5.4 Controle do Conversor AD
Os Registradores ADCSC1 e ADCSC2 so responsveis por controlar os processos de
converso do conversor. Isso a partir da seleo do canal de converso, da contiguidade da
converso e da habilitao da interrupo de converso. Alm disso, esses Registradores
verificam status, ou seja, possuem flags indicadores do estado da converso analgica.
Os recursos bsicos de converso so habilitados pelo Registrador ADCSC1, como
tempo de amostragem, consumo e canais de converso, enquanto outros, mais avanados, como
nvel de referncia para a converso e seleo de gatilho de incio da converso, so habilitados
pelo ADCSC2.
98
------------------------------------------
5.4.1 Registrador ADCSC1 - ADC Status and Control 1
------------------------------------------
Esse Registrador responsvel por controlar o conversor analgico-digital do micro-
controlador e verificar o status de sua operao.
Endereo: 0x0010 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: COCO AIEN ADCO ADCH
Leitura(R)/Escrita(W): R R/W R/W R/W
Aps o reset: 0 0 0 1 1 1 1 1
Configurao usual: 0 0 1 0 0 0 0 0
BIT4, BIT3, BI2, BIT1 e BIT0- ADCH - AD CHannel select
Responsvel por selecionar o canal de converso conversor ou a tenso de referncia
do conversor. A tabela a seguir mostra a equivalncia de seleo entre o valor de escrita e o canal
de converso:
Valor Significado Valor Significado
00000 Canal AD0 11010 Sensor de Temperatura Interno
00001 Canal AD1 11011 Referncia Interna (bandgap)
00010 Canal AD2 11101 V
REFH
00011 Canal AD3 11110 V
REFl
00100 Canal AD4 11111 Modo de converso desativado
00101 Canal AD5
00110 Canal AD6
00111 Canal AD7
BIT5- ADCO - AD COntinuos conversion enable
Responsvel por habilitar o processo de converso contnua.
0 - Converso nica.
1 - Converso contnua.
BIT6 - AIEN - AD Interruption ENable
Responsvel por habilitar a interrupo do conversor analgico.
0 - Interrupo desabilitada.
1 - Interrupo habilitada, a interrupo acontece quando o BIT7 setado e o
Sinalizador I do CCR est apagado (Vetor 19 - $FFD8).
BIT7- COCO - COnversion COmplete flag
Sinalizador responsvel por indicar o trmino da converso, sendo setado quando isso
acontecer. Para apagar esse bit, necessrio ler o Registrador ADCRL. Esse flag, no modo de
comparao, do Registrador ADCSC2, setado caso a comparao de resultado seja verdadeiro
em relao ao selecionado.
99
0 - Realizando a Converso (ou resultado de comparao no condizente).
1 - Converso completa (ou resultado de comparao condizente).
------------------------------------------
5.4.2 Registrador ADCSC2 - ADC Status and Control 2
------------------------------------------
Esse Registrador utilizado para habilitar alguns recursos adicionais de converso.
Primeiramente, o bit 4 e bit 5 esto ligados comparao que esse Registrador capaz de fazer.
Ela diferente da realizada pelo ACMP e funciona da seguinte maneira: quando ativada, ela s
torna vlido o resultado da converso se este for verdadeiro em relao ao valor de referncia
(em bits) do Registrador ADCCVH (ou ADCCVL). Assim, h uma seleo durante a converso, pois
o sinalizador da converso s setado, caso a converso apresente um valor vlido.
Outro recurso de converso apresentado por esse Registrador a fonte de gatilho da
converso. Assim, possvel realizar uma converso sem a necessidade de ativ-la em ADCSC1.
H uma entrada nesse registrador, denominada ADHWT, ela ligada sada da RTI, tornando
possvel uma converso a cada trmino de ciclo dessa interrupo. Isso til em casos de
operao em modos de baixo consumo de energia (como WAIT e STOP), pois a RTI uma
ferramenta de ativao do microcontrolador, desses modos para o modo RUN (normal).
Por fim, h um flag ADACT, que diz se h alguma converso em andamento no
sistema.
Endereo: 0x0011 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ADACT ADTRG ACFE ACFGT 0 0 0 0
Leitura(R)/Escrita(W): R R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 0 0 0 0 0 0 0 0
BIT0,BIT1
Os bits 0 e 1 devem ser mantidos em 0 para o funcionamento do registrador, apesar
de os mesmos no executarem nenhuma funo particular.
BIT2,BIT3
No utilizados. No possvel escrever neles.
BIT4 - ACFGT - Analogic Compare Function Greater Than enable
Configura o sinalizador da converso em funo da comparao desse Registrador.
0 - O sinalizador de converso setado caso o resultado da converso seja um valor
menor que o da referncia de comparao (o BIT7 COCO do ADCSC1 setado, se assim for o
resultado da comparao).
1 - O sinalizador de converso setado caso o resultado da converso seja um valor
igual ou maior que o da referncia de comparao (o BIT7 COCO do ADCSC1 setado, se assim for
o resultado da comparao).
100
BIT5 - ACFE - Analogic Compare Function Enable
Responsvel por ativar a funo de comparao de valores:
0 - Comparao desabilitada.
1 - Comparao habilitada.
BIT6 - ADTRG - AD conversion TRiGger Select
Responsvel por escolher a fonte do gatilho de converso:
0 - Gatilho via software (escrita no Registrador ADCSC1).
1 - Gatilho via hardware (entrada em ADHWT, ou seja, proveniente da sada da RTI).
BIT7- ADACT - AD conversion ACTive
Sinalizador que indica o andamento da converso:
0 - Sem converso em andamento.
1 - Converso em andamento.
5.5 Sada da converso analgica e referncia de comparao
O conversor analgico converte o nvel de tenso a um equivalente digital e, aps o
BIT7 do Registrador ADCSC1 ser setado, armazenado esse valor nos Registradores ADCRH (caso
a converso seja de 10 bits, armazena a parte alta do valor obtido) e ADCRL (caso a converso
seja de 8 bits, armazena todo o valor obtido, e, caso a converso seja de 10 bits, armazena a parte
baixa do valor resultante).
A leitura desse Registrador apaga o sinalizador COCO do Registrador ADCSC1,
possibilitando assim a realizao de uma nova converso. Para ler no formato de 10 bits,
necessrio o uso do Registrador indexado H:X. No caso do modo de comparao, esses
Registradores s armazenam seus valores caso a sentena da comparao seja verdadeira.
Para a comparao, o valor de referncia armazenado nos Registradores ADCCVH
(caso a converso seja de 10 bits, armazena a parte alta do valor) e ADCCVL (caso a converso
seja de 8 bits, armazena todo o valor , e, caso a converso seja de 10 bits, armazena a parte baixa
do valor ).
------------------------------------------
5.5.1 Registradores ADCRH e ADCRL - ADC Result High e ADC Result Low
------------------------------------------
ADCRH Endereo: 0x0012 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 0 0 0 0 0 ADR9 ADR8
Leitura(R)/Escrita(W): R R R R R R R R
Aps o reset: 0 0 0 0 0 0 0 0
ADCRL Endereo: 0x0013 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ADR7 ADR6 ADR5 ADR4 ADR3 ADR2 ADR1 ADR0
Leitura(R)/Escrita(W): R R R R R R R R
Aps o reset: 0 0 0 0 0 0 0 0
101
BITn - ADRn - AD Result n
Valor de converso no bit indicado.
0 - O nvel lgico convertido da tenso nesse bit 0.
1 - O nvel lgico convertido da tenso nesse bit 1.
------------------------------------------
5.5.2 Registradores ADCCVH e ADCCVL - ADC Compare Value High e
Low
------------------------------------------
Esse Registrador responsvel por armazenar o valor a ser comparado com o
resultado da converso analgica. A leitura desses Registradores apaga o sinalizador COCO, do
Registrador ADCSC1.
Endereo: 0x0014 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 0 0 0 0 0 ADCV9 ADCV8
Leitura(R)/Escrita(W): R R R R R R R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0015 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ADCV7 ADCV6 ADCV5 ADCV4 ADCV3 ADCV2 ADCV1 ADCV0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - ADRn - AD Result n
Valor a ser comparado no bit indicado:
0 - O nvel lgico nesse bit 0.
1 - O nvel lgico nesse bit 1.
Observao Importante
Para interromper uma converso em andamento, necessrio escrever alguma informao nos
registradores ADCSC1, ADCSC2 ou ADCCFG, alterando sua configurao ao incio da converso. A
escrita em ADCCRH (ou ADCCRL) no interrompe a converso.
102
5.6 Comparador Analgico (ACMP)
O comparador analgico capaz de comparar duas tenses analgicas externas ou
comparar uma tenso externa com um valor interno fixo. Todas as funes do comparador esto
associadas a um nico registrador (ACMPSC), o que torna o trabalho desse perifrico simples.
O comparador possui um amplificador operacional em sua constituio, e,
consequentemente, duas entradas, a inversora (ACMP-, associada a porta PTA0) e a no-
inversora (ACMP+, associada a porta PTA1). A entrada no-inversora pode ser associado a um
nvel externo de tenso ou a um nvel interno de referncia, de valor prximo a 1,2Volts. J a
entrada inversora, deve ser associada a seu pino e buscar um valor externo de tenso.
O resultado da comparao pode ser indicado de duas formas. A primeira atravs da
sada externa do comparador (ACMP0, associada a porta PTA4) e a segunda atravs da leitura do
BIT ACO do Registrador ACMPSC (Analog CoMParator status and Control). Para ambas as
indicaes, se o nvel lgico estiver em 0, significa que a tenso presente na entrada inversora
maior que a presente na entrada no-inversora, caso esteja em 1, a tenso presente na entrada
inversora menor que a presente na entrada no-inversora. A Figura 5.2 apresenta o Diagrama
de Blocos do Comparador Analgico.
Figura 5.2 Diagrama de Blocos do Comparador Analgico (Fonte: datasheet HCS08QG8
adaptado)
Observao Importante
O resultado da comparao dado da seguinte forma:
V
acmp-
> V
acmp+
Nvel 0 em ACO e ACMPO
V
acmp-
<
Vacmp+
Nvel 1 em ACO e ACMPO
103
------------------------------------------
5.6.1 Registrador ACMPSC - Analog CoMParator Status and Control
------------------------------------------
Esse Registrador responsvel por controlar o comparador analgico do
microcontrolador e verificar o status de sua operao.
Endereo: 0x001A - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ACME ACBGS ACF ACIE ACO ACOPE ACMOD
Leitura(R)/Escrita(W): R/W R/W R/W R/W R R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 1 0 0 0 0 0 X 0
BIT1 e BIT0 - ACMOD - Analogic Comparator MODe
Seleciona o modo de operao do comparador analgico.
X0 - O BIT5 ser setado na borda de descida do BIT3 do comparador.
01 - O BIT5 ser setado na borda de subida do BIT3 do comparador.
11 - O BIT5 ser setado na borda de subida ou descida do BIT3 do comparador.
BIT2 - ACOPE - AC Output Pin Enable
Responsvel por habilitar a sada do comparador analgico.
0 - Sada externa desabilitada (assim, PTA4 pode ser utilizada para outras funes).
1 - Sada externa habilitada.
BIT3 - ACO - AC Output
Responsvel por armazenar o valor da sada do comparador analgico.
0 - Tenso na entrada inversora maior que na entrada no-inversora.
1 - Tenso na entrada inversora menor que na entrada no-inversora.
BIT4 - ACIE - AC Interrupt Enable
Responsvel por habilitar a interrupo do comparador analgico.
0 - Interrupo desabilitada.
1 - Interrupo habilitada (Vetor 20 - $FFD6). A interrupo acontece quando o BIT5
setado, indicando o trmino da comparao.
BIT5 - ACF - AC flag
Sinalizador que indica o trmino da comparao, de acordo com aquilo que foi
selecionado nos bits BIT0 e BT1 (ACMOD). Pode ser apagado ao setar esse bit com alguma
instruo de escrita, observe que no h um par "ACK" nesse Registrador e esse sinalizador de
leitura e escrita.
0 - Nenhum evento de comparao ocorreu.
1 - Ocorreu algum evento de comparao.
BIT6 - ACBGS - AC BandGap Select
104
Responsvel por selecionar o valor da referncia na entrada no-inversora.
0 - Tenso na entrada no-inversora proveniente do pino associado a PTA1.
1 - Tenso na entrada no-inversora do comparador proveniente de uma referncia
interna de aproximadamente 1,2 V .
BIT7 - ACME - AC Module Enable
Responsvel por habilitar o mdulo de comparador analgico.
0 - Mdulo desabilitado.
1 - Mdulo habilitado, assim, a porta PTA0 no se comporta como entrada digital.
5.7 Exemplos
5.7.1 Exemplo 1 Conversor AD:
Criar um programa que realiza a converso de um sinal de Temperatura. Considere que
3,3V equivale a 55 C e que a resoluo do transdutor de 0,06V/C. Caso a temperatura
seja inferior a 25, o microcontrolador deve ativar PTB0. Caso seja superior a 35, ele deve
ativar PTB1. Use o ADC com resoluo de 10bits.
Soluo:
Observe que:
Como a resoluo do transdutor de 0,06 V/C, temos que 0,06V equivale a 1C.
Assim, podemos calcular a temperatura equivalente para 25 e 35. Observe:
Agora, precisamos calcular a equivalncia dessas tenses analgicas com o nmero de
bits digitais disponveis. Como a resoluo de 10 bits, temos que 3,3V equivalem a
1023 bits, logo:
Com esses valores de equivalncia devidamente calculados, podemos fazer o
programa.
Usaremos, por convenincia e disponibilidade, o canal ADC0 (PTA0) para converso AD.
Bx
1
1.5V
=
1023bits
3,3V
Bx
1
=465bits
Bx
2
2.1V
=
1023bits
3,3V
Bx
2
=651bits
Vx
1
25 C
=0.06V / CVx
1
=1.5V
Vx
2
35 C
=0.06V / C Vx
2
=2.1V
3,3V
55 C
=0.06V / C
105
Rtulo Instrues Explicao
ORG $E000 ;direciona o montador para o endereo onde o
programa ser criado.
INICIO:
LDA SOPT1 ; Desativao do COP
AND #127
STA SOPT1
MOV #$00, PTBD ;inicializao das sadas (desligado)
; Configurao das E/S digitais
MOV #$03, PTBDD ;PTB0 e PTB1 so sadas digitais
BSET 0, APCTL1 ;escolhe PTA0 como entrada analgica
MOV #$88, ADCCFG ;Converso em 10 bits, tempo de amostragem
normal e baixo consumo
MOV #$0, ADCSC2 ;sem comparao analgica
MOV #$20, ADCSC1 ;converso contnua, canal 0 de converso
ativo
MAIN: ;inicio da lgica do programa
COCO: BRCLR 7,ADCSC1,COCO ;aguarda o trmino da converso
LDHX ADCRH ;Carrega o valor da converso no Registrador
HX, ao ler ADCL apaga o bit COCO
CPHX #465 ;compara com o valor 465(25C)
BLO TMP_BAIXA ;caso seja menor que 25C, desvia para
TMP_BAIXA
CPHX #651 ;se no,verifica se maior que 35C
BHI TMP_ALTA ;caso seja maior que 35C, desvia para
TMP_ALTA
BRA MAIN ;se chegou at aqui porque a temperatura
est entre 25C e 35C, assim o programa
retorna para MAIN para fazer uma nova
verificao da temperatura
TMP_ALTA: MOV #01, PTBD ;ativa a PTB0, pois a temperatura menor que
25C
BRA MAIN ;retorna para MAIN para realizar uma nova
verificao da temperatura
TMP_BAIXA: MOV #02, PTBD ;ativa a PTB1, pois a temperatura maior que
35C
BRA MAIN ;retorna para MAIN para realizar uma nova
verificao da temperatura
ORG $FFFE ;rea do vetor reset
RESET: DC.W INICIO ;inicia o programa em INICIO
106
5.7.2 Exemplo 2 Comparador Analgico
Um potencimetro est conectado na porta PTA0 (entrada ACMP- que est conectada
ao potencimetro RV1 da placa) e outro na PTA1 (entrada ACMP+ que est conectada ao sensor de
luz RZ1 da placa).
Um LED, conectado a PTB6, deve acender se a tenso na entrada ACMP+ for maior que
a tenso na entrada ACMP-. Programar o comparador analgico para executar essa funo.
Solu o:
Segue o programa.
Rtulo Instrues Explicao
ORG $E000 ;direciona o montador para o endereo
onde o programa ser criado.
INICIO:
LDA SOPT1 ; Desativao do COP
AND #127
STA SOPT1
BSET 6, PTBD ;apaga o LED
BSET 6, PTBDD ;configura PTB6 como sada digital
;configura o ACMP
MOV #$83, ACMPSC ;habilita o comparador e opera o mesmo
para capturar sinal tanto na borda de
subida, quando na borda de descida do
sinal
ACF: BRCLR 5, ACMPSC, ACF
;espera acontecer uma comparao, o
programa no avana enquanto no acontecer
a comparao
BRCLR 3, ACMPSC, AP ;desvia para AP se a sada do comparador
estiver apagada
BRSET 3, ACMPSC, AC ;desvia para AC se a sada do comparador
estiver setada
AP: BSET 6, PTBD ;apaga o LED se ACMP+ menor que ACMP-
BRA RET_ACF
AC: BCLR 6, PTBD ;acende o LED se ACMP+ maior que ACMP-
BRA RET_ACF
RET_ACF: BSET 5, ACMPSC ;apaga o flag ACF para aguardar nova
comparao
BRA ACF
ORG $FFFE ;rea do vetor reset
RESET: DC.W INICIO ;inicia o programa em INICIO
Observao Importante
Observe que o comparador muito til quando se trabalha com sensores pticos. Isso porque,
nesse caso, preciso colher uma informao digital de um sinal analgico diferencial.
107
5.8 Resumo do Captulo
H dois dispositivos no HCS08 que trabalham com entradas analgicas, o Conversor
AD e o Comparador AD.
Dados do Conversor AD:
Duas resolues de converso (8 ou 10 bits);
Ordem de programao dos Registradores: APCTL1 (configura entradas analgicas);
ADCCFG (define os parmetros da converso); ADCSC2 (status e controle da converso,
normalmente, com todos os bits em 0); e, ADCSC1 (status e controle da converso,
regulando consumo, canal de converso a ser usado e nmero de converses)
Dados do Comparador:
Possui duas entradas analgicas (ACMP- / PTA0 e ACMP+ / PTA1) e uma sada digital
(ACMPO / PTA4);
A entrada no-inversora do comparador pode ser associada a uma referncia interna de
1,2 V, liberando PTA1 para outros usos;
Da mesma forma, a sada do comparador pode ser apenas virtual, lendo-se o bit ACO do
registrador ACPMSC;
O Registrador ACPMSC est associado a sua configurao, controle e status.
108
5.9 Exerccios
1- Faa um programa que realize a converso analgica utilizando o canal 4 do conversor AD de
10 bits. Lembre-se que 3,3 V = 1023 bits.
2- Uma mquina eltrica classe F precisa ter sua temperatura controlada para que funcione
corretamente, observe o quadro abaixo. Para isso, faa um programa que utilize o canal 0 do
conversor AD do HCS08QG8, com resoluo de 10 bits e baixo consumo.
Use 20C = 0V e 165C = 3,3V.
Temperatura
(C)
Status de operao Ao
At 40 Operao normal LED verde conectado a PTB1 ligado
De 41 a 140 Sobre-elevao de temperatura LED laranja conectado a PTB2 ligado
Sistema de refrigerao conectado a PTB5
acionado.
De 140 a 165 Limite de temperatura permitido LED vermelho conectado a PTB3 ligado
Sistemas de refrigerao conectados a
PTB5 e a PTB6 acionados.
Buzzer conectado a PTB4 ligado.
3- Elaborar um programa em Assembly para indicar a temperatura de uma piscina.
A resoluo do sensor de temperatura (ligado em PTA0) de 0,06V para cada C.
H um conjunto de 3 LEDs que indicam a temperatura da piscina: quente (uso ofur), morna
(hidroginstica) e fria (desligada).
Se a temperatura da gua da piscina for maior que 23
o
C deve ser indicado temperatura quente.
Se for abaixo, porm acima de 18
o
C deve ser indicado temperatura morna, e abaixo de 18
o
C
temperatura fria. O valor mximo de temperatura que a piscina pode atingir de 35
o
C.
Programar o conversor analgico digital para 10 bits.
4- Um pardal est colocado em uma rodovia para controlar a velocidade e a massa dos veculos
que ali passam. Faa um programa que utilize os canais 3 e 4 do conversor AD de 8 bits, de modo
a cumprir as requisies do quadro abaixo. Considere todos os equipamentos ideais.
Resoluo da velocidade = 0,025V/km/h e 1V equivale a 40km/h.
Resoluo de massa = 0,1V/ton e 1V equivale a 2ton.
109
Velocidade (km/h) Ao Massa (ton) Ao
Abaixo de 40 LED verde conectado a PTA0
acionado
At 2 Nenhuma ao
Entre 40 e 60 LED vermelho conectado a
PTA1 acionado e mquina
ligada a PTB0 acionada.
De 2 a 4 LED laranja conectado a PTB6
ligado e mquina ligada a
PTB1 acionada.
Acima de 60 LED vermelho conectado a
PTA1 acionado, mquina ligada
a PTB0 acionada e buzzer de
alerta (PTB7) ligado
Acima de 4 LED vermelho conectado a
PTB5 ligado e buzzer alerta
(PTB7) ligado.
5- Elaborar um programa em Assembly para efetuar o controle de uma usina hidroeltrica.
A potncia fornecida pela usina feita por 3 geradores e funciona da seguinte forma:
Para um consumo menor ou igual a 50MW somente o gerador 1 deve estar acionado.
Para um consumo maior que 50MW e menor ou igual a 100 MW somente os geradores
1 e 2 dever estar acionados.
Para um consumo maior que 100MW todos os geradores devem estar acionados.
Existe tambm um controle do nvel de gua no reservatrio e funciona da seguinte forma:
1. Para um nvel de gua menor ou igual a que 18m desligar todos os geradores.
2. Para um nvel de gua maior que 18m e menor ou igual a 50m abrir a comporta 1.
3. Para um nvel de gua maior que 50m abrir as comportas 1 e 2.
O transdutor para leitura do consumo tem uma resoluo de 0.03V para cada MW.
O transdutor para leitura do nvel de gua no reservatrio tem uma resoluo de 0.05V para cada
metro.
O conversor AD deve operar no modo 10 bits. A tenso de alimentao do microcontrolador de
3,3V (usar para tenso de referncia do conversor AD).
Lembre-se de inicializar os Registradores, COP, portas de entradas/sadas,e etc...
110


Captulo 6: Interrupo
Nesse captulo sero estudados dois tipos de interrupo: Interrupo Externa (IRQ) e
Interrupo de Tempo Real (RTI), e os Registradores envolvidos nesses processos. Aps esse
conceito melhor formado, ser advertido que h interrupo em outros perifricos e ser
explorado o conceito de interrupo por software (SWI).

6.1 Conceito de Interrupo..................................111
6.2 Condies, Rotinas de Tratamento e Vetores de
Interrupo............................................................111
6.3 Interrupo Externa (IRQ)................................113
6.3.1 IRQSC............................................................113
6.4 Interrupo em Tempo Real (RTI)....................114
6.4.1 SRTISC...........................................................115
6.5 Outros Tipos de Interrupo............................116
6.5.1 Interrupo por Software (SWI)...................116
6.6 Exemplos ......................................................117
6.7 Resumo do Captulo.........................................118
6.8 Exerccios.........................................................119
No ames o sono, para que no empobreas; abre os olhos e te fartars do
teu prprio po. Provrbios 20:13
111
6.1 Conceito de Interrupo
Antes de estudarmos formalmente o conceito de interrupo, vamos avaliar algumas
ideias a respeito do assunto.
Imagine que voc esteja em uma aula, o professor est passando o contedo da
matria normalmente. Em um dado instante, o chefe do departamento, aparece, interrompe a
aula e fornece uma informao a respeito de um evento no departamento, em seguida, vai
embora. A aula continua normalmente aps esse evento.
Algo similar pode ocorrer no microcontrolador atravs de uma interrupo. As
interrupes so ocorrncias inesperadas pelo programa que est em andamento. Elas surgem a
partir de condies paralelas ao programa que no estavam previamente programadas para
acontecerem, como por exemplo, o trmino de uma converso analgica, o trmino de uma
contagem interna, uma transio de nvel lgico no pino de Interrupo Externa (IRQ) e assim
por diante.
Perceba que no exemplo, o programa (aula) corria normalmente. Sem que o
programa esperasse, ele interrompido (o chefe chega na sala). Ele d o recado (tratamento da
rotina de interrupo) e quando a interrupo acaba (o chefe vai embora), o programa continua
normalmente do ponto onde parou (o professor continua sua aula).
6.2 Condies, Rotinas de Tratamento e Vetores de Interrupo
O tratamento de uma interrupo feito por uma rotina de tratamento interrupo,
que muito semelhante s sub-rotinas, j estudadas. Elas no esto na sequncia natural do
programa, mas a parte.
Existem duas condies para que uma interrupo acontea. A primeira que a o bit
de mscara de interrupo esteja apagado. A instruo CLI realiza isso (bit I do CCR = 0). Para
desabilitar as interrupes, pode-se setar este bit com a instruo SEI. A segunda condio para
que uma interrupo acontea que ela esteja habilitada no registrador apropriado. Lembre-se
que existem 23 diferentes tipos de interrupo no HCS08QG8.
Tais condies funcionam de modo semelhante a uma chave geral (bit de mscara de
interrupo) e demais chaves em um determinado circuito (habilitao da interrupo no
registrador prprio). Assim, se a chave geral no estiver fechada, mesmo que as demais estejam,
o circuito no funcionar. Por isso, se voc deseja que o seu programa tenha interrupes utilize a
instruo CLI.
Essas rotinas se localizam em posies da memria FLASH. Para iniciar uma rotina de
tratamento de interrupo, acontecem os seguintes passos:
1. Identificao do evento
Um sinalizador setado, indicando que determinado evento ocorreu
2. Salvamento das informaes correntes
O Registrador salva na pilha a posio do PC, o valor armazenado no Acumulador, o
valor de X, e do CCR.
3. Habilitao da mscara de interrupes
O bit I do CCR setado. Isso ocorre para evitar que outras interrupes aconteam
enquanto o microcontrolador est tratando uma interrupo. Observe que, se aconteceu uma
interrupo enquanto o programa estava em uma rotina de tratamento, essa nova interrupo
ficar como em uma "fila de espera", e ser iniciada aps o trmino da rotina de tratamento em
execuo.
112
4. Mudana do fluxo do programa
O PC recebe o valor do endereo indicado pelo vetor de interrupo, prprio do tipo
de interrupo ocorrido. Existem 18 vetores de interrupo, um para cada tipo, alm do reset. A
tabela 6.1 indica esses vetores e sua relao com cada tipo de interrupo.
Os nmeros dos vetores tambm indicam a prioridade na ocorrncia da interrupo.
Assim, caso duas interrupes ocorram ao mesmo tempo, aquela que possuir o menor valor de
vetor ter prioridade, na escolha de qual interrupo o microcontrolador ir executar.
5. Execuo da rotina de tratamento de interrupo
Aps ter o fluxo do programa desviado, o microcontrolador executa uma rotina para
tratar o evento que interrompeu o programa. Uma atividade dessa rotina , obrigatoriamente,
apagar o sinalizador que indica que essa interrupo aconteceu, da maneira prpria do tipo de
interrupo. Em seguida, essa rotina deve executar a lgica para a sua aplicao.
As rotinas de tratamento de interrupo possuem uma estrutura padro fixa, que ser
apresentada adiante. Um ponto relevante na construo dessas rotinas de tratamento de
interrupo que elas devem ser curtas. No devem possuir mais do que algumas linhas de
instrues. A estrutura bsica a mostrada na figura 6.1.
6. Instruo RTI e retorno sequncia do programa
Ao terminar de executar a rotina de tratamento de interrupo, o programa deve
executar a instruo RTI. Ela ir recuperar os valores depositados na pilha, inclusive o valor do PC
e na sequncia, ir utiliz-lo para retornar a execuo normal do programa.
Figura 6.1: Estrutura da Rotina de Tratamento de interrupo
Valor Endereo Nome do Vetor Sinalizador Bit de Habilitao Mdulo
0 $FFFE Vreset - - reset
1 $FFFC Vswi - - SWI
2 $FFFA Virq IRQSC: IRQF IRQSC: IRQIE IRQ
3 $FFF8 Vlvd SPMSC1:LVDF SPMSC1: LVDIE LVD
Apaga o sinalizador da interrupo
Executa um rpido conjunto de
instrues
Finaliza a rotina com a instruo RTI
113
Valor Endereo Nome do Vetor Sinalizador Bit de Habilitao Mdulo
5 $FFF4 Vtpmch0 TPMC0SC: CH0F TPMC0SC: CH0IE TPM canal 0
6 $FFF2 Vtpmch1 TPMC1SC: CH1F TPMC1SC: CH1IE TPM canal 1
7 $FFF0 Vtpmovf TPMSC: TOF TPMSC: TOIE overflow TPM
12 $FFE6 Vmtim MTIMSC: TOF MTIMSC: TOIE overflow MTIM
13 $FFE4 Vspi SPIS: SPRF
SPIS: MODF
SPIS: SPTEF
SPIC1: SPIE
SPIC1: SPIE
SPIC1: SPTIE
SPI
14 $FFE2 Vscierr SCIS1: OR
SCIS1: NF
SCIS1: FE
SCIS1: PF
SCIC3: ORIE
SCIC3: NFIE
SCIC3: FEIE
SCIC3: PFIE
erro SCI
15 $FFE0 Vscirx SCISC1: IDLE
SCISC1: RDRF
SCIC2: ILIE
SCIC2: RIE
recepo SCI
16 $FFDE Vscitx SCIS1: TDRE
SCIS1: TC
SCIC2: TIE
SCIC2: TCIE
transmisso SCI
17 $FFDC Viic IICS:IICIF IICC:IICIE IC
18 $FFDA Vkeyboard KBISC: KBF KBISC: KBIE KBI
19 $FFD8 Vadc ADCSC1: COCO ADCSC1: AIEN A/D
20 $FFD6 Vacmp ACMPSC: ACF ACMPSC: ACIE ACMP
23 $FFD0 Vrti SRTISC: RTIF SRTISC: RTIE RTI
Tabela 6.1: Vetores de interrupo
6.3 Interrupo Externa (IRQ)
Agora que tivemos uma ideia geral a respeito de interrupes, vamos iniciar o estudo
de um tipo de interrupo, a Interruption Request (IRQ - Interrupo Externa). Esse tipo de
interrupo acontece quando o nvel lgico do pino de pedido de interrupo alterado. O pino
est associado porta PTA5. dito interrupo por pedido externo, pois esse tipo de interrupo
est no est associado a um mdulo interno do microcontrolador. Ele acontece com alteraes
externas. O Registrador responsvel por esse tipo de interrupo o IRQSC.
Observao Importante
O bit I do CCR antes da instruo RTI (durante a execuo da rotina de tratamento da
interrupo) era I = 1, ou seja, as interrupes estavam desabilitadas. Aps a execuo da
instruo RTI, o valor no instante anterior a chamada da interrupo recuperado, ou seja, o bit
I = 0, habilitando novamente as interrupes. Isso um mecanismo de segurana que impede
que mais de uma interrupo ocorra ao mesmo tempo.
114
------------------------------------------
6.3.1 Registrador IRQSC - Interruption Pin ReQuest Status and Control
------------------------------------------
Esse Registrador controla a IRQ do microcontrolador e verifica seu status.
Endereo: 0x00F - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 IRQDD 0 IRQPE IRQF IRQACK IRQIE IRQMOD
Leitura(R)/Escrita(W): R R/W R R/W R W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 0 0 0 1 0 0 1 0
BIT0 - IRQMOD - IRQ detection MODe
Seleciona a borda de disparo de comparao do IRQ.
0 - O gatilho dispara com a transio do sinal de entrada.
1 - O gatilho dispara com a transio e no nvel lgico da entrada.
BIT1 - IRQIE - IRQ Interrupt Enable
Responsvel por ativar a funo de interrupo por IRQ.
0 - Funo desabilitada.
1 - Funo habilitada.
BIT2 - IRQACK - IRQ ACKnowlegde
Bit de reconhecimento de interrupo. Para apagar o sinalizador IRQF, preciso
escrever 1 nesse bit. Observe que se IRQMOD = 0 (interrupo ativada por borda), pode-se
escrever 1 nesse bit j no incio da interrupo. Caso IRQMOD = 1 (interrupo ativada por borda
e nvel lgico), necessrio esperar a mudana do nvel lgico que ativou a interrupo, para
escrever 1 nesse bit.
BIT3 - IRQF - IRQ flag
Sinalizador que indica o evento de interrupo.
0 - No ocorreu interrupo.
1 - ocorreu interrupo.
BIT4 - IRQPE - IRQ Pin Enable
Responsvel por ativar a funo do pino PTA5 para Interrupo Externa
0 - Pino desabilitado.
1 - Pino habilitado.
BIT6 - IRQDD - IRQ pull Device Disable
Controla o pull interno do pino, caso ele esteja habilitado para IRQ.
0 - pull-up habilitado.
1 - pull-up desabilitado.
115
6.4 Interrupo em Tempo Real (Real Time Interrupt RTI)
A Interrupo em tempo real um mecanismo que permite interromper o programa
aps determinado intervalo de tempo. um mdulo com um princpio de funcionamento bem
simples. Esse mdulo pode ter duas fontes de clock. Uma referncia interna de 1kHz e uma
referncia externa, proveniente da configurao do mdulo ICS. Esse mecanismo muito til para
gerar bases de tempo especficas, como aplicaes que necessitam ser repetidas a cada segundo
(se for admitida um aproximao).
------------------------------------------
6.4.1 Registrador SRTISC System Real Time Interruption Status and
Control
------------------------------------------
Esse Registrador responsvel por controlar o funcionamento do sistema de
Interrupo em Tempo Real do microcontrolador e verificar o status de sua operao.
Endereo: 0x1808 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: RTIF RTIACK RTICLCKS RTIE --- RTIS2 RTIS1 RTIS0
Leitura(R)/Escrita(W): R W R/W R/W R R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 0 0 0 1 0 1 1 1
BIT2, BIT1 e BIT0 RTISn RTI Delay Select
Bits de seleo do fator de diviso do clock do mdulo RTI. Essa diviso permite
escolher o intervalo de peridico de tempo dessa interrupo. A tabela 6.2 mostra a configurao
desses bits e a relao desta com o tempo de interrupo.
BIT4 - RTIE RTI Enable
Bit responsvel por habilitar o mdulo RTI.
0 Interrupo desabilitada.
1 Interrupo habilitada. (Vetor $FFD0)
BIT5 - RTICLCKS - RTI Clock Select
Responsvel por escolher a fonte de clock da RTI.
0 Fonte interna de 1kHz.
1 Fonte externa. Se necessitar um relgio de excelente preciso possvel utilizar
um cristal de 32.768Hz como fonte externa. Deve-se ento usar o fator 32.768 para obtermos
uma interrupo a cada 1s.
BIT6 - RTIACK RTI acknowlegdge
Bit responsvel por reconhecer a interrupo. Para apagar o sinalizador, preciso
escrever 1 nesse bit na rotina de tratamento de RTI.
1 - Apaga sinalizador de interrupo.
116
BIT7 - RTIF - RTI flag
Sinalizador que indica o evento de interrupo.
0 - No ocorreu interrupo.
1 H uma interrupo pendente.
RTIS2 RTIS1 RTIS0 Clock Interno (1kHz) Clock externo
0 0 0 No opera RTI No opera RTI
0 0 1 8 ms Freq / 256
0 1 0 32 ms Freq / 1024
0 1 1 64 ms Freq / 2048
1 0 0 128 ms Freq / 4096
1 0 1 256 ms Freq / 8192
1 1 0 512 ms Freq / 16384
1 1 1 1024 ms Freq / 32768
Tabela 6.2 Configurao dos bits 0, 1 e 2 do Registrador SRTISC
6.5 Outros Tipos de Interrupo
Alm dos tipos de interrupo apresentados anteriormente nesse captulo (IRQ e RTI),
quase todos os perifricos apresentam sua interrupo (muitas vezes, mais de um tipo de
interrupo), essas so apresentadas junto a eles. Entretanto, h um tipo especial de interrupo,
que no est associado a perifricos, mas sim, a uma instruo. a interrupo por software
(SWI).
6.5.1 Interrupo por Software (SWI)
A instruo Assembly SWI permite a gerao de uma interrupo via software, ou seja,
existente no cdigo do programa. Esse o tipo de interrupo de mais alta prioridade e
classificado como uma interrupo sncrona (diferentemente das interrupes no previstas,
como as normalmente geradas por perifricos, denominadas assncronas) ou trap (exceo de
software).
Esse modo de interrupo utilizado, entre outras funes, para requisitar ou ativar
um parmetro, em funo de uma condio de entrada ou sada do Registrador (visto que no h
interrupes associadas s portas digitais de entrada ou sada).
Alm disso, outra funo comum para esse recurso a organizao do programa, de
forma semelhante a chamada de sub-rotina, mas, atravs do uso de uma interrupo.
117
6.6 Exemplos
Exemplo 1 IRQ
-Faa um programa em Assembly que ao sofrer uma Interrupo Externa, incremente uma
unidade na varivel VAR.
Soluo:
Rtulo Instrues Explicao
ORG $0060 ;direciona o montador para as variveis
VAR: DS.B 1 ;cria a varivel VAR
ORG $E000 ;direciona o montador para o endereo onde
o programa ser criado
TRATA_IRQ: BSET 2, IRQSC ;apaga o flag de interrupo IRQF
INC VAR ;incrementa varivel VAR
RTI ;sai da rotina de tratamento da IRQ
INICIO: CLR VAR ;inicializa VAR com zero
LDA SOPT1 ; Desativao do COP
AND #127
STA SOPT1
MOV #$12, IRQSC ;habilita a interrupo externa (bit 1) e o
pino do IRQ (PTB5 bit 4)
LOOP: BRA LOOP ;entra num loop infinito aguardando a IRQ
ocorrer
ORG $FFFA ;rea de vetor: IRQ
IRQ: DC.W TRATA_IRQ ;executa a rotina de tratamento da IRQ em
TRATA_IRQ
ORG $FFFE ;rea de vetor reset
RESET: DC.W INICIO ;execuo inicial do programa a partir de
INICIO
Exemplo 2 RTI
-Faa um programa em Assembly que a cada segundo, inverta o valor do bit 3 da posio $70 da
memria.
Soluo:
Rtulo Instrues Explicao
ORG $E000 ;direciona o montador para o endereo
onde o programa ser criado
TRATA_RTI
:
LDA SRTISC ;apaga o flag de interrupo RTIF,
escrevendo 1 em RTIACK
ORA #$40
STA SRTISC
BRCLR 3, $70, SETA ;logica para inverter o bit 3 da posio
$70
LIMPA: BCLR 3, $70 ;limpa o bit 3 de $70
RTI ;sai da rotina de tratamento da RTI
SETA: BSET 3, $70 ;seta o bit 3 de $70
RTI ;sai da rotina de tratamento da RTI
INICIO: LDA SOPT1 ; Desativao do COP
118
Rtulo Instrues Explicao
AND #127
STA SOPT1
BCLR 3, $70 ;inicializa bit 3 de $70
LDA #$17 ;inicia lgica de configurao do
Registrador SRTISC
STA SRTISC ;habilita a interrupo RTI (bit 4),
perdo de 1024 ms e fonte interna de 1
kHz (bits 0, 1 e 2)
LOOP: BRA LOOP ;inicia um loop infinito aguardando a
interrupo
ORG $FFD0 ;rea de vetor: RTI
TRT1: DC.W TRATA_RTI ;executa a rotina de tratamento da RTI em
TRATA_RTI
ORG $FFFE ;rea de vetor reset
RESET: DC.W INICIO ;execuo inicial do programa a partir de
INICIO
6.7 Resumo do Captulo
Uma interrupo um sinal enviado ao processador que muda o contexto do
programa, ou seja, o mesmo sa de sua posio atual e segue a direo de um vetor, da qual se
inicia uma rotina de tratamento.
H duas condies para que uma interrupo acontea:
Bit I do CCR em nvel 0 (atravs da instruo CLI)
Interrupo habilitada em seu Registrador
A Rotina de Tratamento uma estrutura parte do programa, e desenvolvida para
tratar a interrupo.
O acontecimento de uma interrupo no programa segue o seguinte procedimento:
1. Identificao do evento
2. Salvamento das informaes correntes na pilha
3. Habilitao da mscara de interrupes (I = 1, impedindo outras interrupes)
4. Mudana do fluxo do programa
5. Execuo da rotina de tratamento de interrupo
6. Instruo RTI e retorno sequncia do programa
Existem 23 vetores de interrupo no HCS08QG8, ou seja, 23 tipos de interrupo.
A Interrupo Externa (IRQ) acontece quando h mudana na borda ou no nvel lgico
de seu pino associado (PTA5). O Registrador que controla a mesma o IRQSC.
A Interrupo em Tempo Real (RTI) um mecanismo que interrompe o programa em
um intervalo de tempo determinado. controlada pelo Registrador SRTISC.
H outros tipos de interrupo, cada uma associada ao seu respectivo perifricos, e
mesmo, mais de um tipo de interrupo por perifrico. H ainda a Interrupo por software (SWI),
que permite interromper o programa atravs de uma instruo.
119
6.8 Exerccios
1- Faa um programa que utilize a RTI para pisca um LED conectado PTB6 a 512ms.
2- Faa um programa em Assembly que a cada segundo, inverta o valor do bit 3 da posio $70 da
memria.
3- Faa um programa que utilize a RTI para que a cada segundo se acenda um LED conectado s
portas PTA0 (LSB), PTA1, PTA2 e PTA3 (MSB) nessa mesma sequncia. Cada vez que o prximo
LED aceso o anterior deve ser apagado.
4- Faa um programa que a realize a mesma tarefa do exerccio anterior, entretanto, a IRQ deve
estar ativada. Enquanto o pino da IRQ estiver em nvel lgico 1, todos os LEDs devem permanecer
acesos.
5- Faa um programa em Assembly que ao sofrer uma Interrupo Externa, inverta o ltimo bit de
uma varivel VAR0 e decremente uma varivel VAR1 (inicializada em #$20). Quando VAR1 for
igual a #0, o programa deve increment-la a cada IRQ.
6- Um microcontrolador utilizado para programar um Semforo. Observe a tabela:
PTA0 Verde 50s
PTA1 Amarelo 5s
PTA2 Vermelho 35s
Em casos emergenciais, criada uma Interrupo Externa no Semforo (Pino IRQ em 0) que faz
com que a luz amarela pisque a cada segundo e as demais luzes no sejam acesas.
Escreva esse programa!
7- O microcontrolador est sendo utilizado para controlar uma panela (resoluo = 1C/mV e
100C equivalem a 2,2 V). Utilize a interrupo no modo de comparao do conversor AD para
manter um LED aceso cada vez que a temperatura estiver em 100C ou mais. A panela possui um
dispositivo de interrupo do sistema, que funciona via interrupo externa do microcontrolador,
para ser desligada.
8- Elaborar um programa em Assembly para controlar a abertura e fechamento de uma janela,
com base na informao enviada por um sensor de umidade acoplado a mesma. Para valores de
umidade relativa maiores que 80% (condio de chuva) a janela dever ser fechada e para valores
menores ou iguais a 80% a janela dever permanecer aberta. Considere como resoluo que
100% de umidade atinge a tenso de 3,3V. Os sensores localizados nas laterais da janela
determinam o fim de curso da mesma (nvel lgico 0), fazendo com que o motor pare ao acionar
algum dos sensores. O controle de direo do motor segue a tabela abaixo. Utilize a interrupo
do Conversor AD.
PTB0 PTB1 MOTOR
0 0 Parado
0 1 Gira Esquerda
1 0 Gira Direita
1 1 Parado
120
9- Elaborar um programa em Assembly para indicar a temperatura de uma piscina.
A resoluo do sensor de temperatura (ligado em PTA0) de 0,06V para cada C. H um conjunto
de 3 LEDs que indicam a temperatura da piscina: quente (uso ofur), morna (hidroginstica) e fria
(desligada). Se a temperatura da gua da piscina for maior que 23
o
C deve ser indicado
temperatura quente. Se for abaixo, porm acima de 18
o
C deve ser indicado temperatura morna, e
abaixo de 18
o
C temperatura fria. O valor mximo de temperatura que a piscina pode atingir de
35
o
C. Programar o conversor analgico digital para 10 bits.
121
Captulo 7: Sistemas de Relgio,
Temporizadores e PWM
Neste captulo apresentado o sistema de clock e o estudo do funcionamento dos
temporizadores de 8 bits Mdulo Timer (MTIM) e de 16 bits Timer/Pulse-width Modulator (TPM).
7.1 Sistema de Relgio ..........................................122
7.2 Sistema ICS (Internal clock Source).... .............122
7.2.1 Distribuio dos Sinais de clock....................123
7.3 Modos de operao do ICS............................. 125
7.4 Registradores do modo ICS..............................126
7.4.1 Registrador ICS1 ...........................................126
7.4.2 Registrador ICS2............................................127
7.4.3 Registrador ICSSC .........................................128
7.4.4 Registrador ICSTRM - ICS TriM......................128
7.5 Temporizador de 8 bits Mdulo Timer
(MTIM)...................................................................129
7.5.1 Registrador MTIMSC.....................................129
7.5.2 Registrador MTIMCLK...................................130
7.5.3 Registrador MTIMCNT..................................131
7.5.4 Registrador MTIMMOD............................... 131
7.6 Temporizador de 16 bits (TPM).......................132
7.6.1 Registrador TPMCNTH e TPMCNTL...............133
7.6.2 Registrador TPMMODH e TPMMODL ..........133
7.6.3 Registradores TPMC0VH, TPMC0VL, TPMC1VH
e TPMC1VL.............................................................133
7.6.4 Modo de captura do TPM............................134
7.6.5 Modo de Comparao..................................134
7.6.6 Modo Modulao por Largura de Pulso
(PWM)....................................................................135
7.6.7 Registrador TPMC0SC e TPMC1SC ...............137
7.6.8 Registrador TPMSC...................................... 138
7.7 Exemplos......................................................... 139
7.8 Resumo do Captulo.........................................145
7.8 Exerccios.........................................................146
Porque melhor a sabedoria do que joias, e de tudo o que se deseja nada se
pode comparar com ela. Provrbios 8:11
122
7.1 Sistema de Relgio
O sistema de relgio (clocking system) de um microcontrolador responsvel por
gerar o pulsos de clock para as instrues, a CPU e os perifricos funcionarem corretamente, em
sincronia. O sistema de relgio do HCS08QG8 o ICS (Internal clock Source).
7.2 Sistema ICS (Internal Clock Source)
A fonte do sinal de clock do sistema ICS pode ser de uma referncia interna ou
externa. O ICS contm um circuito FLL (Frequency-Locked Loop) que compara a frequncia gerada
por um oscilador digital (DCO) com a frequncia de sinal de referncia RDIV_CLK, multiplicando a
frequncia em 512 vezes o sinal de referncia, conforme a figura 7.1.
Figura 7.1 Diagrama de blocos do ICS (Fonte: Datasheet HCS08QG8)
123
O mdulo ICS gera 5 sadas de clocks:
1) ICSERCLK: Referncia externa de clock;
2) ICSIRCLK: Referncia interna de clock;
3) ICSOUT: sinal de sada do ICS (default);
4) ICSLCLK: clock alternativo para o mdulo de depurao;
5) ICSFFCLK: clock de frequncia fixa baseado em uma das referncias (interna ou externa).

O sinal ICSOUT (default) pode ser selecionado entre trs opes, dependendo dos bits
CLKS (Registrador ICSC1), conforme Tabela 7.1.
Tabela 7.1 Fontes do ICSOUT
CLKS Sinal de sada
00 DCO
01 Referncia interna
10 Referncia externa
11 reservado
O valor default do CLKS 00, sendo portanto, a sada do ICSOUT a do oscilador digital
DCO que aproximadamente igual a 16MHZ. Este valor dividido por BDIV(Registrador ICSC2).
Como o valor default de BDIV 01, ou seja, divide o sinal por 2, teremos ICSOUT = 8MHz.

7.2.1 Distribuio dos Sinais de Clock
Os sinais de clock internos so distribudos no microcontrolador HCS08QG8 conforme
Figura 7.2.
Os perifricos temporizador de 8 bits Mdulo Timer (MTIM) e temporizador de 16 bits
Timer/Pulse-width Modulator (TPM) que veremos nos itens a seguir, podem operar a a partir do
Busclk, do XCLK ou do clock externo TCLK como fonte externa. Nas aplicaes dessa disciplina, a
frequncia de fonte que ser utilizada a do barramento Busclk.
124
Figura 7.2 - Distribuio dos sinais de clock (Fonte: Datasheet HCS08QG8
Adaptado)
125
7.3 Modos de operao do ICS
O sistema de clock ICS possui sete modos de operaes possveis. Isso devido as
diferentes possibilidades de escolha da sada de clock pelos bits CLKS (Registrador ICSC1), da
entrada de referncia de clock do FLL pelo bit IREFS (Registrador ICSC1) e do controle de ativao
do DCO pelo bit LP (Registrador ICSC2). A tabela a seguir resume essas possibilidades de maneira
simplificada, observe posteriormente os Registradores desse sistema, para ter uma base mais
aprofundada dessas combinaes.
Tabela 7.2 Modos de Operao do ICS -- Fonte: Datasheet HCS08QG8
Modo IREFS CLKS LP ICSOUT Descrio
FEI 1 00 0
f
interna
RDIV

FLL
BDIV
FLL Engaged Internal - FEI
Modo padro aps um reset. A frequncia gerada
pela fonte interna. O fator de diviso RDIV deve ser
000 (diviso por 1). O sinal da sada do ICSOUT
igual a 16MHz dividido pelo fator BDIV (diviso por
2). Portanto, aps reset, ICSOUT 8MHz e o BUSCLK
4MHz.
FEE 0 00 0
f
externa
RDIV

FLL
BDIV
FLL Engaged IExernal - FEE
O FLL est ativo por uma referncia extena. O RDIV
deve ser usado para deixar a referncia do clock em
uma faixa de 31,25kHZ e 39,0625 kHz.
FBI 1 01 0
f
interna
BDIV
FLL Bypassed Internal - FBI
O ICSOUT igual ao sinal da referncia interna
(31,125kHz), dividido pelo fator BDIV. O FLL opera
atravs da referncia interna.
FBILP 1 01 1
f
interna
BDIV
FLL Bypassed Internal Low Power - FBILP
Modo para baixo consumo, em que o FLL
desativado.Quando o debug BDM estiver ativo, esse
modo ser redirecionado para o anterior.
FBE 0 10 0
f
externa
BDIV
FLL Bypassed External - FBE
O FLL opera atravs da referncia externa. O RDIV
deve ser usado para deixar a referncia do clock em
uma faixa de 31,25kHZ e 39,0625kHz. A sada do DCO
no utilizada.
FBELP 0 10 1
f
externa
BDIV
FLL Bypassed External Low Power - FBELP
Modo para baixo consumo, em que o FLL
desativado.Quando o debug BDM estiver ativo, esse
modo ser redirecionado para o anterior.
STOP X X X -- Todos os sinais de clock so cancelados em qualquer
modo STOP do microcontrolador, exceo de
ICSIRCLK e ICSERCLK, se estiver habilitados.
126
Para mudar de um modo para o outro, basta alterar os bits dos Registradores ICS1 e
ICS2. Apenas enfatiza-se que preciso ter cuidado com a mudana de referncia e com os fatores
de diviso, para garantir a faixa correta de entrada suportada pelo microcontrolador.
7.4 Registradores do modo ICS
------------------------------------------
7.4.1 Registrador ICS1 - Internal Clock Source 1
------------------------------------------
Endereo: 0x0038 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: CLKS RDIV IREFS IRCLKEN IREFSTEN
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 1 0 0
BIT0 - IREFSTEN - Internal Reference STop ENable
Controla se haver ou no referncia interna no modo STOP
0 - Referncia desabilitada.
1 - Referncia habilitada.
BIT1 - IRCLKEN - Internal Reference Clock ENable
Controla se haver ou no referncia interna de clock para o ICSIRCLK
0 - ICSIRCLK desativado.
1 - ICSIRCLK ativado.
BIT2 - IREFS - Internal REFerence Select
Bit responsvel pela seleo da referncia do FLL.
0 - Referncia externa selecionada.
1 - Referncia interna selecionada.
BIT5, BIT4 e BIT3 - RDIV - Reference DIVider
Seleciona o fator de diviso (FD) do clock da referncia para encaix-la na faixa de
31,25kHz a 39,0625kHz. A tabela abaixo indica os valores dos bits e os FD associados.
000 Divide por 1 100 Divide por 16
001 Divide por 2 101 Divide por 32
010 Divide por 4 110 Divide por 64
011 Divide por 8 111 Divide por 128
BIT7, BIT6 - CLKS - clock Source select
Responsvel por escolher a fonte do sinal de sada do ICS
00 - Sada do FLL.
01 - Referncia interna.
10 - Referncia externa.
11 - Reservado.
127
------------------------------------------
7.4.2 Registrador ICS2 - Internal Clock Source 2
------------------------------------------
Endereo: 0x0039 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: BDIV RANGE HGO LP EREFS ERCLKEN EREFSTEN
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 1 0 0 0 0 0 0
BIT0 - EREFSTEN - EXternal Reference STop ENable
Controla se haver ou no referncia externa no modo STOP.
0 - Referncia desabilitada.
1 - Referncia habilitada.
BIT1 - ERCLKEN - External Reference clock ENable
Controla se haver ou no referncia externa de clock para o ICSIRCLK.
0 - ICSIRCLK desativado.
1 - ICSIRCLK ativado.
BIT2 - EREFS - External REFerence Select
Seleo do oscilador da referncia externa.
0 - Oscilador externo, com sinal na entrada EXTAL.
1 - Oscilador interno, com cristal nas entradas XTAL e EXTAL.
BIT3 - LP - Low Power select
Controla se haver FLL nos modos bypassed.
0 - FLL ativo.
1 - FLL inativo.
BIT4 - HGO - High Gain Oscilator select
Seleo do ganho do oscilador.
0 - Consumo reduzido e baixo ganho.
1 - Consumo elevado e alto ganho.
BIT5 - RANGE - frequency RANGE select
Seleo da frequncia do oscilador externo.
0 - Baixa frequncia (at 40kHz).
1 - Alta frequncia (De 1 a 16MHz).
BIT6, BIT7 - BDIV - Bus frequency DIVider
Seleciona o quanto ser dividido o sinal escolhido em CLKS.
00 - Dividido por 1.
01 - Dividido por 2.
10 - Dividido por 4.
11 - Dividido por 8.
128
------------------------------------------
7.4.3 Registrador ICSSC Internal Clock Source Status and Control
------------------------------------------
Endereo: 0x003B - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 0 0 0 CLKST OSCINIT FTRIM
Leitura(R)/Escrita(W): R R R R R R R/W
Aps o reset: 0 0 0 0 0 0 0 0
BIT0 - FTRIM - ICS Fine TRIM
Ajuste fino de frequncia
0 - A frequncia da referncia interna no modificada.
1 - A frequncia da referncia interna incrementada em 0,2%.
BIT1 - OSCINIT - OCS INITialization
Indicador da operacionalidade do oscilador.
0 - Oscilador sem operao.
1 - Oscilador em operao.
BIT2, BIT3 - CLKST - Bus frequency DIVider
Indicador da fonte atual de clock
00 - Sada do FLL.
01 - Referncia interna.
10 - Referncia externa.
11 - Reservado.
------------------------------------------
7.4.4 Registrador ICSTRM - ICS TRiM
------------------------------------------
Registrador responsvel por ajustar a frequncia de operao da referncia interna.
Esse Registrador no alterado ao ter-se qualquer reset, exceto em caso de POR.
Endereo: 0x003A - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: +25,6% +12,8% +6,4% +3,2% +1,6% +0,8% +0,4% +0,2%
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 1 0 0 0 0 0 0 0
129
7.5 Temporizador de 8 bits Mdulo Timer (MTIM)
O MTIM um contador de 8 bits. Ele inicia sua contagem em 0 e incrementa uma
unidade por pulso de clock at atingir o valor indicado no Registrador MTIMMOD. Quando ele
atinge esse valor, o MTIM zerado novamente e reinicia a contagem. Caso a interrupo do
MTIM esteja habilitada, ele ir ativ-la.
O MTIM pode ser ativado por trs fontes de clock, o Busclk (clock do barramento),
XCLK (sinal de clock fixo) e a referncia externa TCLK.
Esse mdulo conta tambm com um prescaler (pr-divisor) que capaz de dividir a
frequncia de entrada por um fator pr-programvel entre 1 e 256.
O controle desse mdulo ainda disponibiliza um bit para parar e outro para reiniciar a
contagem.
A frequncia das interrupes TOF pode ser calculada da seguinte frmula:

F
TOF
= F
MTIMCLK
_________________________________________

prescaler * (MTIMMOD +1)
Figura 7.3 Diagrama de Blocos TPM (Fonte: Datasheet HCS08QG8)
------------------------------------------
7.5.1 Registrador MTIMSC- MTIM Status and Control
------------------------------------------
Endereo: 0x003C - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: TOF TOIE TRST TSTP 0 0 0 0
Leitura(R)/Escrita(W): R R/W W R/W R R R R
Aps o reset: 0 0 0 1 0 0 0 0
BIT4 - TSTP - mTim counter SToP
Para a contagem do MTIM
0 - Libera a contagem
1 - Impede a continuidade da contagem
130
BIT5 - TRST - mTim counter reset
Quando setado, esse bit reinicia a contagem do microcontrolador. Sempre quando
esse bit lido, ele apresenta o valor lgico 0.
BIT6 - TOIE - mTim Overflow Interrupt Enable
Responsvel por ativar a funo de interrupo do MTIM.
0 - Funo desabilitada.
1 - Funo habilitada.(Vetor 12 - $FFE6)
BIT7 - TOF - mTim Overflow flag
Sinalizador que indica o evento de interrupo. Para reconhecer a interrupo
necessrio escrever 0 nesse bit, na rotina de tratamento de interrupo.
0 - No aconteceu interrupo.
1 - Aconteceu interrupo.
------------------------------------------
7.5.2 Registrador MTIMCLK- MTIM CLocK configuration register
------------------------------------------
Endereo: 0x003D - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 0 CLKS PS
Leitura(R)/Escrita(W): R R R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BIT3, BIT2, BIT1 e BIT0 - PS prescaler
Seleciona o fator de diviso do prescaler.
0000 Divide por 1 0101 Divide por 32
0001 Divide por 2 0110 Divide por 64
0010 Divide por 4 0111 Divide por 128
0011 Divide por 8 1XXX Divide por 256
0100 Divide por 16
BIT5, BIT4 - CLKS - Clock Source select
Responsvel por escolher a fonte do sinal de sada do MTIM
00 - Busclk
01 - XCLK
10 - TCLK, com incremento do MTIM na borda de descida
11 - TCLK, com incremento do MTIM na borda de subida
131
------------------------------------------
7.5.3 Registrador MTIMCNT- MTIM CouNTer
------------------------------------------
Registrador responsvel por armazenar a contagem atual do MTIM.
Endereo: 0x003E - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Contagem do MTIM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
------------------------------------------
7.5.4 Registrador MTIMMOD - MTIM MODulo
------------------------------------------
Registrador responsvel por armazenar o valor a ser atingido pela contagem do
MTIM.
Endereo: 0x003F - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Mdulo da Contagem do MTIM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
132
7.6 Temporizador de 16 bits Timer/Pulse-width Modulator (TPM)
O TPM um contador binrio de 16 bits capaz de executar diversas funes, alm da
contagem propriamente dita. O microcontrolador HCS08QG8 possui um mdulo TPM, com dois
canais, capaz de executar um modo de captura, um modo de comparao e dois modos de PWM.
Observe a figura a seguir que contm o diagrama de blocos do mdulo TPM.
Figura 7.4 - Diagrama de Blocos do TPM (Fonte: Datasheet HCS08QG8)
Os pinos que servem de canais para o mdulo TPM so os correspondentes s portas
PTA0 e PTB5. Os canais so independentes, de modo que, possvel trabalhar com duas funes
do TPM ao mesmo tempo (desde que ambas se utilizem do mesmo valor para o mdulo de
contagem).
Assim como o MTIM, o TPM tambm possui um Registrador que armazena a
contagem (TPMCNT) e um Registrador que armazena o mdulo de contagem (TPMMOD).
Contudo, esses Registradores possuem 16 bits, assim possuem uma parte alta H e uma parte
baixa L. Para acessar esses Registradores, necessrio utilizar as instrues que envolvem o
Registrador indexado HX.
Observao Importante
No esquea que os canais do TPM quando utilizados, a porta PTA0 para o canal 0 do TPM e a porta
PTB5 para o canal 1 do TPM!
PTA0 ----- Canal 0
PTB5 ----- Canal 1
133
------------------------------------------
7.6.1 Registrador TPMCNTH e TPMCNTL - TPM CouNTer High and Low
------------------------------------------
Registrador responsvel por armazenar a contagem atual do TPM. Quando o valor
atingir o armazenado em TPMMOD (H ou L), a contagem zerada.
Endereo: 0x0041 - Pgina Baixa (TPMCNTH)
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0042 - Pgina Baixa (TPMCNTL)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
------------------------------------------
7.6.2 Registrador TPMMODH e TPMMODL - TPM MODulo High and Low
------------------------------------------
Registrador responsvel por armazenar o valor a ser atingido pela contagem do TPM.
O Registrador TPMMODL armazena o valor de contagem em 8 bits, o TPMMODH armazena em 16
bits. Esse o valor de referncia para a frequncia dos modos de operao do contador TPM.
Endereo: 0x0043 - Pgina Baixa (TPMMODH)
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0044 - Pgina Baixa (TPMMODL)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
134
------------------------------------------
7.6.3 Registradores TPMC0VH, TPMC0VL, TPMC1VH e TPMC1VL - TPM
Channel 0 (1) Value High and Low
------------------------------------------
Registrador responsvel por armazenar o valor de captura ou comparao de sinal
nesses respectivos modos. No modo PWM, serve para armazenar o valor de estouro do ciclo ativo
do PWM.
Endereo: 0x0046 - Pgina Baixa (TPMC0VH)
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0047- Pgina Baixa (TPMC0VL)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0049 - Pgina Baixa (TPMC1VH)
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x004A - Pgina Baixa (TPMC1VL)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
7.6.4 Modo de captura do TPM
Esse modo tem por objetivo determinar o perodo do sinal, atravs da captura na
transio do sinal do canal (TPMCHx). No momento da captura o valor da contagem atual do
TPMCNT copiado para o canal do Registrador de captura do canal (TPMCxV). Os sinais podem
ser capturadas pelos sinais pela borda de descida, subida ou por ambas. O sinal deve ser aplicado
135
em um dos pinos equivalentes a um canal do TPM. Quando ocorrer uma captura, o flag do canal
ChxF (Registrador TPMCxSC) setado, e pode gerar uma interrupo se a interrupo estiver
habilitada ChxIE (Registrador TPMCxSC) setada, e todas as interrupes habilitadas pelo flag I
(Registrador CCR). A diferena entre duas capturas consecutivas o perodo do sinal externo
(exceto quando estamos trabalhando com as duas bordas ao mesmo tempo).
7.6.5 Modo de Comparao
O modo de comparao pode ser considerado o oposto do modo de captura. Porque,
agora, o TPMCNT far sua contagem at o valor indicado no TPMCxV e, quando atingi-lo, o
microcontrolador ir setar, apagar ou inverter o estado do pino do canal do TPM associado.
Tambm possvel fazer uma interrupo com o modo de comparao do TPM, pois o
flag ChxF (Registrador TPMCxSC) setado cada vez que o TPMCNT atinge o valor do TPMCxV.
Tambm possvel gerar a interrupo perodica, sem alterar o nvel lgico do pino associado ao
canal do TPM. Para isto, o flag de interrupo ChxIE (Registrador TPMCxSC) deve estar setada, e
todas as interrupes habilitadas pelo flag I (Registrador CCR).
Assim, o modo de comparao do TPM pode fazer do microcontrolador, entre outras
coisas, um gerador de sinal.
7.6.6 Modo Modulao por Largura de Pulso (Pulse-Width Modulation-
PWM)
Modulao todo e qualquer processo de variao de algum elemento de um sinal
(amplitude, frequncia, intensidade, comprimento, entre outros) deformando o mesmo. Isso
feito, entre outras finalidades, para facilitar a transmisso do mesmo.
Um tipo de modulao chamado PWM, derivado de Pulse Width Modulation ou
Modulao por Largura de Pulso, um sinal muito utilizado para aplicaes industriais,
principalmente no controle de motores e fontes chaveadas.
Ela tem como uma grande caracterstica variar a razo cclica da onda. A razo cclica
seria justamente a largura da onda quadrada, fazendo com que uma onda tenha uma diminuio
de um nvel lgico em detrimento do outro. Esta razo cclica ou ciclo de trabalho o mesmo que
duty cycle, que utilizado para descrever a frao de tempo em que um sistema est em um
estado "ativo" ou em trabalho.
Portanto, existem dois ciclos em cada pulso, o ciclo ativo e o ciclo inativo. Cada ciclo
com um nvel lgico diferente. O ciclo ativo o responsvel por efetivar o sinal, assim, existe o
PWM ativo em 1 e PWM ativo em 0, de modo que a frequncia do sinal ser em relao ciclo
ativo. Para exemplificar, pense em um LED que acende com nvel lgico 0. Ento, esse LED dever
ser conectado em um sinal PWM com ciclo ativo em 0, ou seja, ele ter sua luminosidade
proporcionalmente porcentagem do ciclo ativo em zero.
Figura 7.5 Ciclo de Atividade do PWM
Ciclo inativo
Perodo do sinal
Ciclo ativo
136
PWM Modo Normal ou Alinhamento pela Borda
O alinhamento pela borda feito quando a referncia para a porcentagem de ciclo
ativo a borda da onda.
Considerando que o PWM ativo em 0, vejamos o funcionamento do PWM Modo
Alinhamento pela borda: a sada colocada inicialmente em ciclo ativo, o TPMCNT inicia a
contagem. Quando essa contagem chega ao valor de comparao TPMCxV, a sada muda para o
ciclo inativo. A sada permanece nesse estado at que a contagem do TPMCNT atinja o valor do
mdulo TPMMOD, mudando a sada do ciclo inativo para ativo, reiniciando o processo.
Assim, possvel deduzir algumas frmulas relacionadas ao PWM, valendo-se tambm
daquilo que conhecido para o TPM. O quadro abaixo contm essas frmulas:
Objetivo da frmula Frmula
Perodo de incremento do Registrador TPMCNT
T
TPMCNT
=
Prescaler
f
FONTE
Frequncia de interrupo do TPMCNT
f
TOF
=
f
FONTE
Prescaler TPMMOD1
Perodo do sinal PWM T
PWM
=T
TPMCNT
TPMMOD1
Perodo do ciclo ativo do PWM T
CICLO ATIVO
=T
TPMCNT
TPMCxV
fcil perceber que para termos um ciclo ativo de 0%, basta programar o Registrador de
perodo (TPMCxV) com o valor 0. Para termos um ciclo ativo de 100%, basta programar o mesmo
Registrador com um valor acima daquele descrito no TPMMOD (normalmente, usa-se uma
unidade a mais, para facilitar clculos posteriores). Portanto, para calcular os valores dos ciclos
ativos, deve-se utilizar regra de 3 simples (lembre-se que o valor de TPMMOD+1 = 100%).
PWM Modo Central

Nesse modo, a referncia do ciclo ativo o centro do pulso e no a borda. Considerando
que o PWM ativo em 0, vejamos o funcionamento do PWM Modo Alinhamento Central: a sada
colocada inicialmente em ciclo ativo, o TPMCNT inicia a contagem. Quando essa contagem
atingir o valor de comparao (Registrador TPMCxV), a sada colocada no estado inativo. A
contagem do TPMCNT segue at atingir o valor programado no mdulo de contagem, Registrador
TPMMOD, quando ento a direo de contagem do TPMCNT invertida e passa a contar
regressivamente. Ao atingir novamente o valor de comparao (Registrador TPMCxV), a sada
colocada no seu estado ativo e o contador segue a contagem decrescente at zero, quando o ciclo
recomea. Este modo utilizado em aplicaes de acionamentos de motores, onde apresenta
menos rudo. Nessa disciplina, no nos preocuparemos com esse modo de alinhamento do PWM.
137
------------------------------------------
7.6.7 Registrador TPMC0SC e TPMC1SC - TPM Channel 0 (or 1) Status
and Control
------------------------------------------
Registrador responsvel pela seleo do canal e do modo de operao do TPM.
Endereo: 0x0045 - Pgina Baixa (TPMC0SC)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: CH0F CH0IE MS0B MS0A ELS0B ELS0A 0 0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R R
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0048 - Pgina Baixa (TPMC1SC)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: CH1F CH1IE MS1B MS1A ELS1B ELS1A 0 0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R R
Aps o reset: 0 0 0 0 0 0 0 0
BIT5, BIT4, BIT3 e BIT2 - ELSxy e MSxy - Edge/Level Select x y e Mode Select x y (y=A
ou B)
Responsveis pela seleo do modo de operao do canal, conforme a tabela abaixo:
MSxB MSxA ELSxB ELSxA Modo Selecionado
x x 0 0 Canal desativado (o pino no est sendo usado para o
TPM, podendo ser usado, por exemplo, para E/S)
0 0 0 1 Modo de Captura (sinal na borda de subida)
0 0 1 0 Modo de Captura (sinal na borda de descida)
0 0 1 1 Modo de Captura (sinal em ambas as bordas)
0 1 0 0 Modo de comparao (apenas seta o flag CHxF)
0 1 0 1 Modo de comparao (inverte o estado do pino associado
ao canal do TPM)
0 1 1 0 Modo de comparao (limpa o estado do pino associado
ao canal do TPM)
0 1 1 1 Modo de comparao (acende o estado do pino associado
ao canal do TPM)
1 x 1 0 Modo PWM (nvel ativo alto)
1 x x 1 Modo PWM (nvel ativo baixo)
BIT6 - CHxIE - CHannel x Interrupt Enable
Responsvel por ativar a funo de interrupo do canal x do TPM.
0 - Funo desabilitada.
1 - Funo habilitada. (Canal 0: Vetor 5 - $FFF4; Canal 1: Vetor 6 - $FFF2)
BIT7 - CHxF - CHannel x flag
Sinalizador que indica o evento de captura ou comparao acontecido no canal
0 - No aconteceu captura ou comparao.
1 - Aconteceu captura ou comparao. Observe no datasheet a maneira correta para
reconhecer cada tipo de interrupo relacionado a cada modo de operao dos canais do TPM.
138
------------------------------------------
7.6.8 Registrador TPMSC - TPM Status and Control
------------------------------------------
Endereo: 0x0040 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: TOF TOIE CPWMS CLKSB CLKSA PS2 PS1 PS0
Leitura(R)/Escrita(W): R R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 0 0 0 0 1 -- -- --
BIT0, BIT1 e BIT2 - PSn - prescaler Select n
Seleciona o valor de diviso do prescaler. A tabela abaixo indica os valores dos bits e
os fatores de diviso associados.
Bit 2 Bit 1 Bit 0 Fator de Diviso Bit 2 Bit 1 Bit 0 Fator de Diviso
000 Divide por 1 100 Divide por 16
001 Divide por 2 101 Divide por 32
010 Divide por 4 110 Divide por 64
011 Divide por 8 111 Divide por 128
BIT3 e BIT4 - CLKSy - clock Source select y
Responsvel por escolher a fonte do sinal de clock do TPM.
Bit 4 Bit 3 Funo Bit 4 Bit 3 Funo
00 TPM paralisado 10 XCLK
01 Busclk 11 clock externo (TPMCLK)
BIT5 - CPWMS - Center-aligned PWM Select
Controla modo do PWM.
0 - Modo normal.
1 - Modo central.
BIT6 - TOIE - Timer Overflow Interrupt Enable
Responsvel por ativar a funo de interrupo do TPM.
0 - Funo desabilitada.
1 - Funo habilitada (Vetor 7 - $FFF0).
BIT7 - TOF - Timer Overflow flag
Sinalizador de estouro de contagem do TPM.
0 - No houve estouro de contagem.
1 - Houve estouro de contagem.
139
7.7 Exemplos
7.7.1 Exemplo 1 MTIM
- Use a interrupo do MTIM para criar um programa que faa um LED, conectado a PTB7, piscar
a cada 40 microssegundos. Use o Busclk do microcontrolador como fonte. (Observe que esse
perodo indistinguvel ao olho humano, assim, caso voc implemente esse programa, no
poder observar o LED piscar)
Soluo:
Lembre-se que o Busclk possui uma frequncia de 4MHz. O MTIM faz sua contagem
com apenas 8 bits, ou seja, vai de 0 a 255. E, tambm, que o mesmo possui um prescaler que
divide a frequncia de entrada em at 256 vezes.
Deseja-se que o LED pisque a cada 40s, ou seja, T = 40s, logo, f = 25kHz. Ora:
Dessa forma, pode-se utilizar qualquer combinao de prescaler e MTIMMOD+1 cujo produto
seja 160. Escolhe-se, arbitrariamente, prescaler = 4 e MTIMMOD = 39, assim, 4x(39+1) = 160.
Essa escolha implica valores a serem atribudos aos Registradores do MTIM, observe:
MTIMCLK = #$02 (A fonte de frequncia o Busclk e o prescaler igual a 4)
MTIMMOD = #39 (A contagem vai at o decimal 39 ou ao hexadecimal 27)
MTIMSC = #$70 ( A interrupo habilitada e a contagem paralisada ao se programar
o Registrador).
Rtulo Instrues Explicao
INCLUDE 'MC9S08QG8.inc' ;inclui a biblioteca que contm as
definies do microcontrolador
ORG $E000 ;direciona o montador para o endereo
onde o programa ser criado
TRATA_MTIM: ;rotina de tratamento da interrupo
gerada pela contagem do MTIM
BCLR 7, MTIMSC ;apaga o flag TOF, habilitando novas
interrupes
BCLR 7, PTBD ;acende o LED conectado porta PTB7
RTI ;retorna ao ponto de parada do programa
INICIO: ;aps desativar o COP, faz-se a
configurao das portas digitais. A
ltima configurao ser sempre a do AD
LDA SOPT1 ;lgica para desativar o COP
AND #127
STA SOPT1
MOV #$00, PTBD ;limpa as sadas
MOV #$80, PTBDD ;PTB7 configurada como sada digitai
;no h entrada digital, por isso, no
necessrio configurar o pull-up
f
TOF
=
f
FONTE
Prescaler MTIMMOD1
PrescalerTIMMOD1 =160
140
Rtulo Instrues Explicao
MOV #39, MTIMMOD ;carrega o MTIMMOD com o decimal 39, ou
seja, a contagem ser at esse valor
MOV #02, MTIMCLK ;usa o prescaler = 4, alm disso, escolhe
o Busclk como fonte de frequncia para o
MTIM
MOV #$70, MTIMSC ;habilita a interrupo do MTIM e impede
o incio da contagem
CLI ;habilita todas as interrupes
MAIN: ;a lgica do programa efetivamente comea
agora
BCLR 4,MTIMSC ;inicia a contagem do MTIM
LOOP: ;inicia ciclo de contagem e interrupo
BSET 7, PTBD ;apaga LED conectado a PTB7
BRA LOOP
ORG $FFE6 ;rea do vetor de interrupo do MTIM
MTIM: DC.W TRATA_MTIM ;localiza a rotina de tratamento do vetor
ORG $FFFE ;rea do vetor reset
RESET: DC.W INICIO ;inicia o programa em INICIO
7.7.2 Exemplo 2 TPM
- Use a interrupo de um contador do HCS08QG8 para criar um programa que faa um LED,
conectado a PTB7, piscar a cada 2 segundos. Use o Busclk do microcontrolador como fonte.
Soluo:
Lembre-se que o Busclk possui uma frequncia de 4MHz. O MTIM faz sua contagem
com apenas 8 bits, ou seja, vai de 0 a 255. E, tambm, que o mesmo possui um prescaler que
divide a frequncia de entrada em at 256 vezes. A frequncia mnima de operao do mesmo,
dessa forma, de 61Hz, se utilizarmos o Busclk como fonte de frequncia.
Mas, deseja-se que o LED pisque a cada 2s, ou seja, T = 2s, logo, f = 0,5Hz. Assim,
necessrio que utilizemos o contador TPM. Ora:
O TPM disponibiliza um prescaler de at 128. Observa-se que o Valor mximo de
TPMMOD 65535 (#$FFFF, em hexadecimal). O produto desses valores igual a 8388480,
prximo ao valor do produto desejado. Assim, deve-se escolher o prescaler como 128, com isso:
A partir desses pr-requisitos, seleciona-se o valor adequado para cada Registrador do
TPM:
TPMSC = #$4F (Interrupo habilitada, a fonte de clock o Busclk e prescaler = 128)
TPMMODH = #62499
Prescaler TPMMOD1 = 810
6
TPMMOD1 =
810
6
128
TPMMOD=62499
f
TOF
=
f
FONTE
PrescalerTPMMOD1
Prescaler TPMMOD1 = 810
6
141
Veja que no utilizaremos o TPM em nenhum modo especial (Captura, Comparao ou
PWM) nesse momento, dessa forma, logicamente, no necessrio configurar os Registradores
associados a estes.
Observe que o programa desse exemplo muito similar ao programa do exemplo
anterior.
Rtulo Instrues Explicao
INCLUDE 'MC9S08QG8.inc' ;inclui a biblioteca que contm as
definies do microcontrolador
ORG $E000 ;direciona o montador para o endereo
onde o programa ser criado
TRATA_TPM: ;rotina de tratamento da interrupo
gerada pela contagem do MTIM
BCLR 7, TPMSC ;apaga o flag TOF, habilitando novas
interrupes
BCLR 7, PTBD ;acende o LED conectado porta PTB7
RTI ;retorna ao ponto de parada do programa
INICIO: ;aps desativar o COP, faz-se a
configurao das portas digitais.
LDA SOPT1 ;lgica para desativar o COP
AND #127
STA SOPT1
MOV #$00, PTBD ;limpa as sadas
MOV #$80, PTBDD ;PTB7 configurada como sada digitai
;no h entrada digital, por isso, no
necessrio configurar o pull-up
;lgica para insero de valores de 16
bits, utilizando o registrador H:X
LDHX #62499 ;carrega o decimal 62499 em H:X
STHX TPMMOD ;carrega o decimal 62499 em TPMMOD
MOV #$4F, TPMSC ;habilita interrupo, escolhe o Busclk
como fonte de clock e ativa o prescaler
com o valor de 128
CLI ;habilita todas as interrupes
LOOP: ;inicia ciclo de contagem e interrupo
BSET 7, PTBD ;apaga LED conectado a PTB7
BRA LOOP
ORG $FFF0 ;rea do vetor de interrupo do TPM
TPM: DC.W TRATA_TPM ;localiza a rotina de tratamento do vetor
ORG $FFFE ;rea do vetor reset
RESET: DC.W INICIO ;inicia o programa em INICIO
142
7.7.3 Exemplo 3 PWM-1
- - Faa um programa que utilize o canal 1 do PWM - Modo normal do microcontrolador, com
ciclo ativo de 40%, para fazer um LED ligado na porta PTB5 ter sua luminosidade cair para 40%,
caso use a chave em PTA2. (Utilize f
tof
= 50 Hz e o Busclk como fonte de clock).
Soluo:
Observe que a frequncia de 50Hz. Assim:
Utilizando o prescaler com o valor 8, deve ser atribudo o valor decimal 9999 ao
TPMMOD.
Para configurar o ciclo ativo, temos que aplicar a seguinte relao:
Onde x representa o valor a ser armazenado em TPMC1VH. Dessa forma:
Dessa forma, deve-se atribuir o valor decimal 4000 a TPMC1VH, para ter-se 40% do
ciclo ativo, nesse caso. Assim, os seguintes Registradores sero configurados:
TPMSC = #$0B (No h interrupo, o Busclk a fonte do sinal e o fator de diviso 8)
TPMMODH = #9999
TPMC1SC = #$24 (Configurado para o modo PWM em ciclo ativo baixo, para o LED)
TPMC1VH = #4000
Rtulo Instrues Explicao
INCLUDE 'MC9S08QG8.inc' ;inclui a biblioteca que contm as
definies do microcontrolador
ORG $E000 ;direciona o montador para o endereo
onde o programa ser criado
INICIO: ;aps desativar o COP, faz-se a
configurao do PWM
LDA SOPT1 ;lgica para desativar o COP
AND #127
STA SOPT1
;configura entrada digital
BSET 2,PTADD ;PTA2 como entrada digital
;configura pull-up
LDA #$04
STA PTAPE ;pull-up em PTA2
;lgica para insero de valores de 16
bits, utilizando o registrador H:X
10000
x
=
100
40
x=
4010000
100
x=4000
TPMMOD1 100 %
x 40 %
f
TOF
=
f
FONTE
PrescalerTPMMOD1
Prescaler TPMMOD1 =
410
6
50
=80 kHz
143
Rtulo Instrues Explicao
LDHX #9999 ;carrega o decimal 9999 em H:X
STHX TPMMODH ;carrega o decimal 9999 em TPMMODH
LDHX #10000 ;carrega o decimal 10000 em H:X
STHX TPMC1VH ;carrega o decimal TPMMODH+1 em TPMC1VH,
impedindo o incio imediato do PWM
MOV #$28, TPMC1SC ;habilita o PWM em ciclo ativo baixo, no
canal 1, equivalente a PTB5
MOV #$0B, TPMSC ;escolhe o Busclk como fonte de clock e
ativa o prescaler com o valor de 8
LOOP: LDA PTAD
AND #$04 ;verifica se a chave est ligada
BEQ DIMINUI ;caso esteja (PTB2 = 0) diminui
luminosidade
BNE AUMENTA ;caso no esteja (PTB2 = 1)
BRA LOOP
DIMINUI: LDHX #4000 ;carrega o decimal 4000 em H:X
STHX TPMC1VH ;carrega o decimal 4000 em TPMC1VH
BRA LOOP
AUMENTA: LDHX #10000 ;carrega o decimal 10000 em H:X
STHX TPMC1VH ;carrega o decimal TPMMODH+1 em TPMC1VH
BRA LOOP
ORG $FFFE ;rea do vetor reset
RESET: DC.W INICIO ;inicia o programa em INICIO
7.7.4 Exemplo 4 Modo de Comparao
Utilize os canais 0 e 1 do TPM operando no modo de comparao, para fazer um LED
conectado diretamente ao canal 0 (PTA0) para piscar a uma frequncia de 10Hz e outro LED ao
canal 1 conectado atravs da porta PTB7 para piscar a uma frequncia de 5Hz.
Soluo:
Rtulo Instrues Explicao
ORG $E000 ;direciona o montador para o endereo onde o
programa ser criado.
INICIO:
LDA SOPT1 ; Desativao do COP
AND #127
STA SOPT1
BSET 7, PTBDD ;configura PTB7 como sada
BSET 7, PTBD ;apaga o LED de PTB7
;configura TPM
MOV #$54, TPMC0SC ;configura canal 0 do TPM como modo de
comparao com inverso de sada e habilita
a interrupo do canal 0 do TPM
LDHX 3124 ;carrega LDHX com 3124
STHX TPMC0VH ;configura a perodo de comparao com
31250Hz / 3125 = 10Hz
144
Rtulo Instrues Explicao
MOV #$50, TPMC1SC ;configura o canal 1 do TPM apenas para o
modo de comparao e habilita sua
interrupo
LDHX 6249 ;carrega LDHX com 6249
STHX TPMC1VH ;configura a perodo de comparao com
31250Hz / 6250 = 5Hz
MOV #$0F, TPMSC ;BusClk como fonte do TPM e prescaler de 128
;assim, a frequncia de operao do TPM
4MHz/128 que igual a 31250Hz
CLI ;habilita todas as interrupes
LOOP: BRA LOOP ;aguarda interrupes
TRT_TPMC0: BCLR 7,TPMC0SC ;apaga o flag de interrupo
LDHX TPMC0VH ;adiciona o prximo perodo de comparao
AIX #3125
STHX TPMC0VH
RTI
TRT_TPMC1: BCLR 7,TPMC1SC ;apaga o flag de interrupo
LDHX TPMC1VH ;adiciona o prximo perodo de comparao
AIX #6250
STHX TPMC1VH
LDA PTBD ;lgica para inverter LED conectado a PTB7
AND #$80 ;aps carregar PTBD no Acumulador, verifica
o nvel lgico do bit 7, caso esteja
apagado, o programa seta e vice-versa
BEQ INV ;observe que no possvel usar a instruo
COM, pois a mesma inverte todos os bits
BCLR 7, PTBD
RTI
INV: BSET 7, PTBD
RTI
ORG $FFF4 ;rea do vetor de interrupo do canal 0 do
TPM
IN_TPM0: DC.W TRT_TPMC0 ;direciona o programa para a rotina de
tratamento TRT_TPMC0 quando uma interrupo
no TPMC0 detectada
ORG $FFF2 ;rea do vetor de interrupo do canal 1 do
TPM
IN_TPM1: DC.W TRT_TPMC1 ;direciona o programa para a rotina de
tratamento TRT_TPMC1 quando uma interrupo
no TPMC1 detectada
ORG $FFFE ;rea do vetor reset
RESET: DC.W INICIO ;inicia o programa em INICIO
Observao Importante
Tanto o modo de comparao quanto o modo de captura no utilizam o registrador TPMMOD. O modo
de comparao, basicamente, gera uma frequncia de sada, o que til na modulao de sinais. O
modo de captura reconhece uma frequncia de entrada, o que muito til quando se trabalha com
reconhecimento de velocidade de motores, por exemplo. Ambos utilizam o TPMCxV para as
informaes de sada ou entrada de frequncia, respectivamente.
145
7.7.5 Exemplo 5 Modo de Captura
Faa um programa que habilite o modo de captura de sinal na borda de descida do
canal 0 do TPM e armazene a ltima frequncia capturada em uma varivel, a cada interrupo do
modo de captura.
Soluo:
Rtulo Instrues Explicao
ORG $0060 ;direciona o montador para a rea de criao
de variveis
CAPTURA: DC.B 2 ;cria varivel de 2 bytes
ORG $E000 ;direciona o montador para o endereo onde o
programa ser criado.
INICIO:
LDA SOPT1 ; Desativao do COP
AND #127
STA SOPT1
;configura TPM
MOV #$48, TPMC0SC ;configura canal 0 do TPM como modo de
captura de sinal em borda de descida e
habilita a interrupo do canal 0 do TPM
MOV #$0F, TPMSC ;BusClk como fonte do TPM e prescaler de 128
;assim, a frequncia de operao do TPM
4MHz/128 que igual a 31250Hz
LDHX #0 ;limpa o Registrador HX
STHX CAPTURA ;inicializa a varivel de dois bytes CAPTURA
CLI ;habilita todas as interrupes
LOOP: BRA LOOP ;aguarda interrupes
TRT_TPMC0: BCLR 7,TPMC0SC ;apaga o flag de interrupo
LDHX TPMC0VH ;salva o valor do perodo do sinal capturado
STHX CAPTURA ;armazena o valor capturado na varivel
CAPTURA
RTI ;retorna ao fluxo do programa
ORG $FFF4 ;rea do vetor de interrupo do canal 0 do
TPM
IN_TPM0: DC.W TRT_TPMC0 ;direciona o programa para a rotina de
tratamento TRT_TPMC0 quando uma interrupo
no TPMC0 detectada
ORG $FFFE ;rea do vetor reset
RESET: DC.W INICIO ;inicia o programa em INICIO
7.8 Resumo do Captulo
O Microcontrolador conta com dois contadores, o MTIM que possui 8 bits e o TPM
que possui 16 bits. O TPM, alm de funcionar como contador, pode operar em trs modos:
captura, comparao e PWM, relativos frequncia. O TPM possui dois canais para esses modos:
canal 0 associado a PTA0 e canal 1 associado a PTB5.
146
7.9 Exerccios
1- Faa um programa que utilize um contador do HCS08QG8. O programa deve fazer com que um
LED conectado a PTB7 pisque 10 vezes por segundo enquanto PTA3 estiver no nvel lgico 0 e que
o LED fique apagado enquanto PTA3 estiver em nvel lgico 1. Utilize o Busclk como fonte de
frequncia.
2- Faa dois programas para fazer um LED, conectado a PTB6, piscar a cada 100 micro-segundos.
Use o Busclk do microcontrolador como fonte. O primeiro deve programa deve usar a interrupo
do MTIM e o segundo deve utilizar a interrupo do TPM para cumprir essa tarefa.
3- Faa um programa que utilize o canal 1 do PWM do microcontrolador, com ciclo ativo de 30%,
para fazer um LED com luminosidade de 30% quando a chave conectada a PTA2 acionada.
(Utilize f
tof
= 10 Hz e o Busclk como fonte de clock).
4- H LED conectado ao canal 0 e outro ao canal 1 do PWM do microcontrolador. O canal 0 est
com ciclo ativo de 20% e o canal 1 est com ciclo ativo de 80%. O perodo do LED de 150ms
(Utilize um Cristal de 1 MHz externo, conectado a TCLK, como fonte de frequncia). Faa um
programa para simular essa condio.
5- Faa um programa que controle o brilho de um LED, utilizando o canal 0 do PWM e as entradas
digitais do microcontrolador. Veja a tabela abaixo para o controle do brilho:
PTB2 PTB1 PTB0 Brilho
0 0 0 100%
0 0 1 75,00%
0 1 0 50%
0 1 1 25%
1 X X 0%
Utilize o Busclk como fonte e TPMMOD = #7999.
6- Faa um programa que mea a frequncia de um sinal atravs do uso do TPM. Se a frequncia
for inferior a 1 kHz, o microcontrolador dever acionar um LED vermelho, em PTB0. Se a
frequncia estiver entre 1 kHz e 50 kHz, deve ser acionado um LED verde, conectado a PTB1. Por
fim, se a frequncia for superior a 50 kHz, deve ser ativado um LED amarelo, ligado a PTB2.
7- Um elevador de um prdio de 7 andares (alm do trreo) movido por um motor de corrente
contnua, que possui uma lgica de controle de rotao que funciona da forma descrita pela
tabela abaixo. Faa um programa em Assembly para o microcontrolador que vai controlar esse
motor. No se esquea de que necessrio programar botes (acionados em nvel baixo, use o
pull-up) para os andares desejados e use a RTI para controlar o tempo de subida/decida (5
segundos por andar).
Alm disso, a capacidade mxima do elevador de 800kg, caso o medidor aponte uma massa
maior, um LED de alerta conectado PTA4 acionado.
147
Dados:
a) A sensibilidade do sensor de massa : S = 330kg/V.
b) A frequncia f
TOF
igual a 60Hz e a fonte do temporizador um clock externo ligado ao TPM, de
1,0MHz.
c) Os botes dos andares esto ligados s portas PTB.
d) Desconsidere que novos passageiros entrem no elevador alm dos iniciais, alm disso, todos os
passageiros querem ir para o mesmo andar sempre.
Peso Percentual de rotao Peso Percentual de rotao
At 50kg 10% De 300kg a 450kg 45%
De 50kg a 170kg 30% De 450kg a 550kg 30%
De 170kg a 300kg 60% Acima de 600kg 25%
8- Utilize o modo de comparao do TPM para criar um gerador de ondas quadradas com
frequncia programvel. O sistema funciona da seguinte forma: um potencimetro envia um sinal
de tenso entre 0,5 e 3,0V. Esse sinal deve ser interpretado como a frequncia que o usurio
deseja fazer seu gerador de sinais operar. A razo de converso 100kHz/V, sendo que em 0,5V,
temos um frequncia de 5kHz. Use o canal 2 do conversor AD para realizar a converso.
9- Programe o TPM do controlador para atender (criar) s seguintes situaes (dispositivos):
a) Temporizador de 1 minuto.
b) Temporizador com temporizaes fixas de 2, 5 e 10 minutos, na qual o usurio seleciona a
desejada atravs de botes conectados PTA1, PTA2 e PTA3, respectivamente.
d) Temporizador que acione uma campainha por 5 segundos, aps terminar uma temporizao
de 3 minutos. (use a RTI para tempo do acionamento e o TPM para a temporizao, a campainha
est conectada a PTB5).
e) Mantenha um LED aceso por 2 segundos e apagado por 1 segundo.
f) Mantenha um LED aceso por 1 segundo e apagado por 2 segundos.
g) Mantenha um LED piscando numa frequncia de 1Hz, com tempos aceso e apagado iguais.
h) Mantenha dois LED piscando alternadamente em tempos iguais com uma frequncia de 2Hz.
i) Mantenha dois LEDs piscando numa frequncia de 1Hz durante 30 segundos.
j) Mantenha um lmpada de alarme piscando a uma frequncia de 1,5Hz quando a
temperatura de um sistema ultrapassar seu valor mximo de 70C (Dados: conversor operando
no canal 8, com sensor de sensibilidade 25C/V e 0C = 0V, conversor em modo 10 bits).
k) Faa um LED piscar a uma frequncia de 5Hz por 3 segundos e reduza a uma frequncia de 1 Hz
por 10 segundos e eleve a uma frequncia de 10Hz por mais 2 segundos.
148
Captulo 8: Interface de
Comunicao Serial (SCI)
possvel comunicar o microcontrolador com um outro dispositivo, talvez um
microcomputador ou uma impressora? Transmitir ou receber alguma informao e fazer essa
comunicao ativar alguma coisa? Isso possvel atravs do Mdulo que ser visto nesse
captulo, Comunicao Serial SCI.
8.1 Interface Serial Assncrona..............................149
8.2 Transmissor SCI................................................149
8.3 Receptor SCI.....................................................150
8.4 Gerador de Baud Rate.....................................152
8.5 Interrupes da SCI..........................................152
8.6 Registradores da SCI........................................152
8.6.1 SCID...............................................................153
8.6.2 SCIBDH e SCIBDL...........................................153
8.6.3 SCIC2 ...........................................................154
8.6.4 SCIS1.............................................................155
8.6.5 SCIC3.............................................................156
8.6.7 SCIS2.............................................................157
8.6.7 SCIC1.............................................................158
8.7 Exemplos..........................................................159
8.8 Resumo do Captulo.........................................161
8.8 Exerccios.........................................................162
Sobre tudo o que se deve guardar, guarda o corao, porque dele procedem
as fontes da vida. Provrbios 4:23
149
8.1 Interface Serial Assncrona
O microcontroladorHCS08QG8 possui trs tipos de interfaces seriais a IC, a SPI e a
SCI. Essa ltima a mais simples e ainda muito utilizada na indstria. Assim, nessa disciplina, nos
limitaremos ao estudo dessa.
A sigla SCI significa Serial Comunications Interface, ou seja, Interface de Comunicao
Serial. Se distingue da SPI por essa ser sncrona enquanto a SCI assncrona.
O prncipio de funcionamento da SCI bem simples, ele consiste em dois
Registradores de deslocamento. Um deles realiza a converso srie-paralelo (receptor) o outro
faz a converso paralelo-srie (transmissor). Eles possuem uma velocidade que pode ser
determinada por um circuito clock programvel, conhecido por gerador de Baud Rate.
A SCI possui dois pinos, um para a transmisso e outro para a recepo. O pino de
recepo o RxD que est multiplexado com o pino da porta PTB0 enquanto o pino de
transmisso o TxD que est multiplexado com o pino da porta PTB1.
Pino da Porta Pino do SCI
PTB0 Recepo (RxD)
PTB1 Transmisso (TxD)
8.2 Transmissor SCI
O transmissor da SCI constitudo pelo Registrador de deslocamento TSR (Trasmit
Shift Register) e por um circuito de controle, que controla o pino de sada TxD (PTB1), conforme
Diagrama de Blocos da Figura 8.1.
Para realizar uma transmisso, preciso ativar o transmissor setando o bit TE
(Transmitter Enable) no registrador SCIC2 e verificar se o buffer de transmisso est livre, atravs
do bit TDRE (Transmit Data Register Empty) do registrador SCIS1. Se este flag estiver setado,
possvel escrever um novo caracter no registrador de buffer de transmisso (Registrador SCID).
A transmisso automaticamente iniciada quando ocorre o processo de escrita no
Registrador de buffer de transmisso SCID. Primeiramente, o registrador de deslocamento (TSR)
preenchido com o contedo do SCID. Na sequncia, a cada pulso de clock, a partir do bit LSB
(Least Significant Bit Bit menos Significativo) deslocado do TSR ao pino de transmisso (TxD),
gerando um fluxo serial de transmisso de dados.
Quando o SCID carregado no TSR, o bit sinalizador TDRE de buffer livre
automaticamente setado, indicando que mais bit podem ali ser escritos novamente. Alm disso,
quando o deslocamento encerrado, o bit TC (Transmit Completed) do registrador SCIS1
setado, sinalizando trmino da transmisso.
O transmissor SCI capaz de transmitir 8 ou 9 bits de dados (totalizando 10 ou 11 bits,
considerando os bits de START(0) e STOP(1)).
Alm disso, o transmissor possui algumas caractersticas especiais como: circuito
interno que gera a paridade do dado transmitido, transmisso e recepo half-duplex, ou seja, em
um nico fio, inverso de polaridade da sada TxD, envio do caractere BREAK e tambm
possvel operar a SCI durante o modo WAIT.
150
Figura 8.1 Diagrama de Blocos do Transmissor SCI (Fonte: datasheet HCS08QG8)
8.3 Receptor SCI
O receptor SCI constitudo basicamente pelo registrador de deslocamento RSR
(Reception Shift Register) e por um circuito de controle, conforme Figura 8.2.
Para realizar uma recepo, preciso ativar o receptor setando o bit RE (Receiver
Enable) no registrador SCIC2. Ento, os dados juntamente com os bits de START(0) e o STOP(1)
podero ser recebidos atravs do pino RxD (PTB0) . Quando o bit de STOP, que o bit de parada,
recebido no RSR, os dados sero transferidos para o buffer SCID , desde que o bit RDRF
(Receive Data Register Full) do registrador SCIS1 no esteja setado, ou seja, se o buffer de
recepo estiver vazia. Mas, se o bit RDRF j estiver setado indicando que o buffer j est cheio,
o bit OR (overrun) do registrador SCIS1 setado e o dado perdido. Portanto, para garantir que
este flag esteja apagado deve-se ler o registrador SCIS1 antes de ler o caractere no SCID, pois o
buffer de recepo formado por um buffer duplo.
Aps o dado ser transferido para o SCID, ento o bit RDRF ser setado indicando que
h dado para ser lido pelo usurio.
O receptor possui alguns artifcios utilizados para dar maiores garantias a respeito do
correto recebimento do sinal, conhecidos por recursos de deteco de erros. So esses:
151
Sobrescrita de recepo: quando um novo caractere recebido o bit OR (Receiver
Overrun) do registrador SCIS1 setado. Contudo, se o buffer de recepo ainda no
foi lido, esse caractere descartado.
Erro de quadro: Se o bit STOP no detectado corretamente, o bit FE (Framing
Error) do Registrador SCIS1 setado. O FE setado no mesmo instante que o
caractere armazenado no SCID.
Erro de paridade: quando o circuito detector de paridade est ativo e detecta uma
diferena entre a paridade calculada e a paridade recebida, o bit PF (Parity Error)
do registrador SCIS1 setado.
Deteco de Rudo: Considera-se rudo quando em trs amostras de um bit, ao
menos uma delas diferente das demais, quando o circuito de amostragem de
entrada do receptor detecta uma discrepncia nas amostras do sinal recebido, o bit
NF (Noise flag) do registrador SCIS1 setado. Observe que a taxa de amostragem
na recepo feita a uma velocidade 16 vezes maior que a selecionada para
detectar a presena de rudo.
Os sinalizadores de erro so apagados com a leitura do Registrador SCIS1 seguida da
leitura do caractere recebido no Registrador SCID.
Figura 8.2 Diagrama de Blocos do Receptor SCI (Fonte: Datasheet HCS08QG8)
152
8.4 Gerador de Bauld Rate
O gerador de Bauld Rate o circuito responsvel por gerar os pulsos de clock
necessrios aos circuitos de transmisso e recepo da SCI.
Esse circuito um divisor de frequncia de 13 bits, que divide o sinal do Busclk em um
fator programado nos Registradores SCIBDH e SCIBDL, chamado BR que utilizado para calcular a
velocidade de comunicao, conforme a frmula:
Essa velocidade dada em bits por segundo (bps). A seguir, encontra-se a Tabela 8.1
com a configurao do BR para velocidades normalmente utilizadas para um Busclk de 4MHz.
Tabela 8.1 Velocidade (bps) x BR (Fonte: PEREIRA, 2005)
Velocidade desejada (bps) Velocidade Real (bps) BR Erro
1200 1201,92 208 0,16%
2400 2403,85 104 0,16%
4800 4807,69 52 0,16%
9600 9615,38 26 0,16%
19200 19230,77 13 0,16%
38400 41666,67 6 8,51%
57600 62500,00 4 8,51%
115200 125000,00 2 8,51%
230400 250000,00 1 8,51%
mnima 30,52 8191
mxima 250000,00 1
8.5 Interrupes da SCI
A SCI possui trs vetores de interrupo (vetores 14, 15 e 16). Um para erros, outro
para recepo e outro para transmisso, respectivamente. Todos os flags para tais interrupes
esto no Registrador de status SCIS1, assim, nas rotinas de tratamento dessas interrupes
necessrio ler esse Registrador, para poder habilitar novas interrupes.
Os bits que habilitam essas interrupes esto nos registradores de controle SCIC2
(interrupes de transmisso e de recepo) e SCIC3 (interrupo de erros). Observe que h mais
de um bit que habilita interrupes para o mesmo vetor, assim, principalmente no caso de erros,
necessrio detectar qual o bit que invocou a interrupo, reparar o erro e voltar para o fluxo
normal do programa (ou, talvez, continuar a transmisso/recepo).
8.6 Registradores da SCI
De todos os perifricos estudados, a SCI a que contm o maior nmero de
Registradores. Para facilitar seus estudos concentre-se, inicialmente, no Registrador de controle
SCIC2 e no Registrador de status SCIS1, no que se referir a transmisso e recepo (quatro
Velocidade =
BUSCLK
BR16
153
primeiros bits), alm claro, do Registrador da transmisso/recepo SCID e dos Registradores da
Baud Rate SCIBDH e SCIBDL. Com a evoluo de seus conhecimentos, explore o Registrador de
controle de erros SCIC3 e na parte de erros do Registrador de status SCIS1. Por fim, estude os
Registradores SCIC1 e SCIS2. A sequncia a seguir apresentada vem justamente com esse intuito
de facilitar a evoluo de seus estudos.
------------------------------------------
8.6.1 Registrador SCID - SCI Data register
------------------------------------------
Registrador que possibilita ler ou escrever caracteres no buffer da SCI. A leitura do
SCID retorna o ltimo caractere recebido e a escrito no SCID faz com que ele seja transmitido pela
SCI.
Endereo: 0x0027 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Caractere a ser recebido (R)/transmitido (W) pela SCI
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
------------------------------------------
8.6.2 Registradores SCIBDH e SCIBDL - SCI BauD Rate High and Low
------------------------------------------
Registradores responsveis pelo fator BR, que determina a diviso da frequncia de
clock da SCI. Para mais informaes retorne ao tpico Gerador de Bauld Rate.
Normalmente, escreve-se o decimal 26 nesse Registrador.
Endereo: 0x0020 - Pgina Baixa (SCIBDH)
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8
Nome do BIT: 0 0 0 SBR12 SBR11 SBR10 SBR9 SBR8
Leitura(R)/Escrita(W): R R R R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0021 - Pgina Baixa (SCIBDL)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: SBR7 SBR6 SBR5 SBR4 SBR3 SBR2 SBR1 SBR0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
154
------------------------------------------
8.6.3 Registrador SCIC2 - SCI Control 2
------------------------------------------
Registrador que controla as aes da SCI relativas transmisso e recepo de dados,
bem como habilita/desabilita suas respectivas interrupes.
Endereo: 0x0023 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: TIE TCIE RIE ILIE TE RE RWU SBK
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 1 0 1 0 1 1 0 0
BIT0 - SBK - Send BreaK
Realiza o envio do caractere BREAK.
0 - Andamento normal da SCI.
1 - O prximo caractere a ser enviado ser BREAK. A SCI continuar enviando esse
caractere enquanto esse bit estiver setado.
BIT1 - RWU - Receiver WakeUp control
Controla a operao do receptor da SCI para modos de baixo consumo.
0 - Receptor operando normalmente.
1 - Receptor em modo de baixa potncia, no aguardo de um evento ativador
(selecionado pelo bit WAKE do Registrador SCIC1).
BIT2 - RE - Receiver Enable
Habilita o receptor da SCI.
0 - Receptor desabilitado.
1 - Receptor habilitado.
BIT3 - TE- Transmitter Enable
Habilita o transmissor da SCI
0 - Transmissor desabilitado.
1 - Transmissor habilitado.
BIT4 - ILIE - Idle Line Interrupt Enable
Habilita a interrupo pela inatividade de linha de recepo (o par o flag IDLE
SCIS1).
0 - Interrupo desabilitada.
1 - Interrupo habilitada. (Vetor 15 - $FFE0)
155
BIT5 - RIE - Receiver Interrupt Enable
Habilita a interrupo do receptor, assim quando o flag RDRF for setado, gerar uma
interrupo.
0 - Interrupo desabilitada.
1 - Interrupo habilitada. (Vetor 15 - $FFE0)
BIT6 - TCIE - Transmission Complete Interruption Enable
Habilita a interrupo do transmissor para transmisso completa (o par o flag TC
SCIS1).
0 - Interrupo desabilitada.
1 - Interrupo habilitada. (Vetor 16 - $FFDE)
BIT7 - TIE - Transmit Interruption Enable
Habilita a interrupo do transmissor para buffer de transmisso vazio. (o par o flag TDRE
SCIS1).
0 - Interrupo desabilitada.
1 - Interrupo habilitada. (Vetor 16 - $FFDE)
------------------------------------------
8.6.4 Registrador SCIS1 - SCI Status 1
------------------------------------------
Registrador que verifica o status das aes da SCI relativas transmisso e recepo
de dados e erros encontrados durante o processo de recepo. Contm todos os flags de
interrupo, para invert-los, basta ler esse Registrador.
Endereo: 0x0024 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: TDRE TC RDRF IDLE OR NF FE PF
Leitura(R)/Escrita(W): R R R R R R R R
Aps o reset: 1 1 0 0 0 0 0 0
BIT0 - PF - Parity-error flag
Indicador de erro de paridade.
0 - No foi detectado erro de paridade.
1 - Foi detectado erro de paridade.
BIT1 - FE- Framing Error flag
Indicador de erro de quadro.
0 - No foi detectado erro de quadro.
1 - Foi detectado erro de quadro.
BIT2 - NF - Noise flag
Indicador de rudo na recepo.
0 - No foi detectado rudo
1 - Foi detectado rudo.
156
BIT3 - OR- receiver OverRun flag
Indicador de sobrescrita no buffer de recepo.
0 - No foi detectado sobrescrita.
1 - Houve sobrescrita de dado.
BIT4 - IDLE - IDLE line flag
Indicador de inatividade na linha de recepo.
0 - No foi detectada inatividade na linha.
1 Foi detectado que h inatividade na linha.
BIT5 - RDRF - Receiver Data Register Full
Indicador de recepo de um novo caractere.
0 - O buffer de recepo est vazio.
1 - H um novo caractere no buffer disponvel no registrador SCID.
BIT6 - TC - Transmission Complete flag
Sinalizador de transmisso completada.
0 - Transmisso em andamento.
1 - Nenhuma transmisso em andamento.
BIT7 - TDRE - Transmit Data Register Empty
Sinalizador de buffer de transmisso vazio.
0 - H um caractere no buffer de transmisso.
1 - O buffer de transmisso est vazio.
------------------------------------------
8.6.5 Registrador SCIC3 - SCI Control 3
------------------------------------------
Registrador que controla as aes da SCI relativas aos erros de recepo, bem como
quilo que relativos aos pinos e aos bits extras.
Endereo: 0x0026 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: R8 T8 TXDIR TXINV ORIE NFIE FEIE PFIE
Leitura(R)/Escrita(W): R R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: - - - 0 1 1 1 1
BIT0 - PFIE - Parity-error Interrupt Enable
Habilita a interrupo pela deteco de erro de paridade.
0 - Interrupo desabilitada.
1 - Interrupo habilitada. (Vetor 14 - $FFE2)
157
BIT1 - FEIE - Framing Error Interrupt Enable
Habilita a interrupo pela deteco de erro de quadro.
0 - Interrupo desabilitada.
1 - Interrupo habilitada. (Vetor 14 - $FFE2)
BIT2 - NFIE - Noise Interrupt Enable
Habilita a interrupo pela deteco de recepo.
0 - Interrupo desabilitada.
1 - Interrupo habilitada. (Vetor 14 - $FFE2)
BIT3 - ORIE - receiver OverRun Interrupt Enable
Habilita a interrupo pela deteco de sobrescrita no buffer de recepo.
0 - Interrupo desabilitada.
1 - Interrupo habilitada. (Vetor 14 - $FFE2)
BIT4 - TXINV - Transmit data INVersion
Habilita a inverso da polaridade do pino TxD.
0 - Sada no invertida.
1 - Sada invertida.
BIT5 - TXDIR - TX DIRection (in a single-wire mode)
Seleciona a direo do pino TxD quando a SCI est a um fio.
0 - Pino de recepo (entrada).
1 - Pino de transmisso (sada).
BIT6 - T8 - ninth data bit for Transmitter
Nono bit a ser transmitido. Esse bit deve ser alterado antes da escrita no Registrador
SCID. Esse bit s utilizado quando o modo de 9 bits est ativo (bit M = 1).
BIT7 - R8 - ninth data bit for Receiver
Nono bit a ser recebido. Esse bit deve ser lido antes da leitura do Registrador SCID.
Esse bit s utilizado quando o modo de 9 bits est ativo (bit M = 1).
------------------------------------------
8.6.7 Registrador SCIS2 - SCI Status 2
------------------------------------------
Registrador que monitora outras aes da SCI.
Endereo: 0x0025 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 0 0 0 0 BRK13 0 RAF
Leitura(R)/Escrita(W): R R R R R R/W R R
Aps o reset: 0 0 0 0 0 0 0 0
158
BIT0 - RAF - Receiver Active flag
Sinalizador de atividade do receptor da SCI.
0 - O receptor no est recebendo nenhum caractere.
1 - A recepo do caractere est em andamento.
BIT1 - BRK13 - BReaK character lenght
Seleo do tamanho do caractere BREAK.
0 - caractere BREAK com 10 bits (11 se M=1).
1 - caractere BREAK com 11 bits (12 se M=1).
------------------------------------------
8.6.7 Registrador SCIC1 - SCI Control 1
------------------------------------------
Registrador que controla as aes da SCI relativas s capacidades dessa funo dentro
do microcontrolador.
Endereo: 0x0022 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: LOOPS SCISWAI RSRC M WAKE ILT PE PT
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BIT0 - PT - Parity Type
Seleo da paridade.
0 - Paridade par.
1 - Paridade mpar.
BIT1 - PE - Parity Enable
Habilita o gerador de paridade.
0 - Paridade desabilitada.
1 - Paridade habilitada. (Vetor 14 - $FFE2)
BIT2 - ILT - Idle Line Type select
Seleciona a forma da medio do tempo de inatividade da linha.
0 - A contagem inicia-se aps o bit START.
1 - A contagem inicia-se aps o bit STOP.
BIT3 - WAKE - receiver WAKEup mode select
Seleo do modo de ativao do receptor da SCI.
0 - Receptor ativado quando a linha est inativa.
1 - Receptor ativado quando recebe um caractere de endereamento.
BIT4 - M - 9-bit or 8-bit Mode select
Seleo do tamanho da palavra (8 ou 9 bits).
0 - 8 bits de dados (mais o START e o STOP totalizando 10 bits).
1 - 9 bits de dados (mais o START e o STOP totalizando 11 bits).
159
BIT5 - RSRC - Receiver SouRCe select
Seleciona a operao a apenas um fio. Esse bit somente tem efeito se o modo LOOP
estiver ativo.
0 - Modo LOOP normal, os bits RxD e TxD no so utilizados pela SCI.
1 - Modo "A um Fio": a sada da SCI est conectada a sua entrada e ao pino TxD.
BIT6 - SCISWAI - SCI Stops in WAIt mode
Operao da SCI no modo WAIT.
0 - A SCI opera durante o modo WAIT.
1 - A SCI no opera durante o modo WAIT.
BIT7 - LOOPS - LOOP mode Select
Ativao do modo de LOOP.
0 - Modo LOOP desativado.
1 - Modo LOOP ativado: o pino de sada TxD conectado entrada RxD.
8.7 Exemplos
Exemplo 1 SCI Recepo e Transmisso
- Considere que h uma conexo serial SCI entre o microcontrolador e um computador. Faa um
programa que ao receber um caractere 'a' do computador, acenda um LED (nvel lgico 0),
conectado em PTB7 e , ao mesmo tempo, transmita um caractere 'c'. A velocidade de transmisso
deve ser de 9600bps.
Soluo:
Segundo a tabela ASCII, o caractere 'a' equivale ao valor hexadecimal 61 e o caractere
'c' equivale ao hexadecimal 63, com isso, podemos partir para a construo do programa.
Vamos, primeiro, supor uma transmisso ideal. Assim, no iremos configurar os bits de
paridade, nem utilizar os detectores de erros. Alm disso, como no h necessidade, no
utilizaremos o bit extra de comunicao.
Para esse exemplo, configuramos os Registradores que controlam a transmisso e a
recepo de dados. Nesse caso, necessria apenas a configurao do Registrador SCIC2. Alm
disso, as interrupes geradas pela comunicao sero sinalizadas pelo Registrador de flags
SCIC1.
Para o controle da recepo e transmisso, primeiramente, no Registrador SCIC2,
precisamos habilitar a recepo e a transmisso, assim, os bits 2 e 3 devem ser setados. Alm
disso, seria interessante uma interrupo alertando o trmino da recepo e da transmisso, por
isso, os bit 5 e 7 tambm devem ser setados. Para as nossas necessidades, os demais bits podem
ficar desativados. O Registrador de status SCIS1 precisa apenas ser lido para tratar as interrupes
geradas.
A velocidade de transmisso controlada pelo Gerador de Baud Rate, um divisor da
frequncia de fonte. Assim, o valor decimal 26 deve ser escrito no Registrador SCIBD(L), para
termos a velocidade de transmisso desejada de 9600bps(mais uma vez considerando um caso de
comunicao ideal).
Com isso, podemos partir para a elaborao do cdigo.
160
Rtulo Instrues Explicao
INCLUDE
'MC9S08QG8.inc'
;inclui a biblioteca que contm as
;definies do microcontrolador
ORG $0060 ;direciona o montador para o endereo de
memria para rea de variveis
ORG $E000 ;direciona o montador para o endereo
de ;memria onde o programa ser criado.
TRATA_RDRF: ;rotina de tratamento da interrupo de
recepo
LDA SCIS1 ;apaga o flag RDRF ao ler o registrador
LDA SCID ;leitura do caractere recebido
CMP #$61 ;compara o caractere recebido com 'a'
BNEQ SAI1 ;se no igual, no faz nada
LOOP_TDRE: BRCLR 7,SCIS1,LOOP_TDRE ;se igual, aguarda o buffer de
;transmisso vazio
LDA #$63 ;carrega A com valor 'c' (#$63)
STA SCIDL ;escreve o caractere no buffer de
transmisso
BCLR 7, PTBD ;ACENDE LED EM PTB7
SAI: RTI ;sai da rotina de tratamento de
;Interrupo recepo
SAI1: BSET 7, PTBD ;APAGA LED EM PTB7
RTI ;sai da rotina de tratamento de
;Interrupo recepo
INICIO: ;Inicio da lgica do programa principal
LDA SOPT1 ;desativa o COP
AND #127
STA SOPT1
MOV #$FF, PTBD ;desliga o LED
MOV #$80, PTBDD ;PTB7 configurada como sada digital
MOV #26, SCIBDL ;gera uma velocidade de comunicao de
9600 bps
MOV #$2C, SCIC2 ;habilita o receptor, o transmissor e
interrupo de recepo.
CLI ;habilita todas as interrupes
LOOP: BRA LOOP ;aguarda uma interrupo
ORG $FFE0 ;rea do vetor de interrupo do RDRF
RDRF: DC.W TRATA_RDRF ;endereo da rotina de tratamento de
recepo
ORG $FFFE ;rea do vetor reset
RESET: DC.W INICIO ;endereo do inicio do programa em INICIO
161
8.8 Resumo do Captulo
A Conexo SCI uma forma de comunicao entre o microcontrolador e um
computador. Ela se d atravs de um buffer de transmisso e recepo, enviando sinais bit a bit.
Os seguintes Registradores so utilizados para o bom funcionamento da comunicao
serial assncrona (SCI):
SCID buffer de transmisso e recepo;
SCIBDH e SCIBDL responsvel pela velocidade de transmisso (Baud Rate BR);
SCIC2 controla o transmissor e o receptor e suas respectivas interrupes;
SCIS1 verifica o status da comunicao, ele atende interrupo quando lido;
SCIC3, SCIS2 e SCIC1 Registradores pouco usados em um nvel mais bsico.
Observao Importante
No esquea que enquanto est sendo utilizada a SCI, a porta PTB0 utilizada para o receptor e a porta
PTB1 utilizada para o transmissor!
PTB0 ----- RxD
PTB1------TxD
162
8.9 Exerccios
1- Faa um programa que utilize a conexo SCI do HCS08QG8 para transmitir o caractere 'T' a um
sistema conectado ao microcontrolador a velocidade de: 9600bps.
2- Faa um programa que acenda um LED conectado PTA4 quando receber o caractere 'A' e
acenda um LED conectado PTB4 quando receber o caractere 'B', atravs da conexo SCI.
Velocidade de: 4800bps.
3- Faa um programa que transmita o caractere que esteja recebendo atravs de uma conexo
SCI. Velocidade de: 9600bps.
4- Faa um programa que ao receber o caractere 'Enter' (Pulo de linha), envie a palavra "Teste
Iniciado", atravs da conexo SCI e acenda um LED conectado a PTB4 com a concluso do envio.
Velocidade de: 4800bps.
5- Faa um programa que recebe um caractere equivalente aos algarismos bases do sistema
hexadecimal (de 0 a F) e acione LEDs conectados a PTB4 (LSB), PTB5, PTB6 e PTB7 (MSB) para
exibi-los em forma binria. velocidade de: 19200bps.
Por exemplo, envia-se o caractere 'A', assim, os LEDs conectados a PTB7 e a PTB5 so acesos
formando 1010, equivalente binrio ao hexadecimal A.
6- Uma mquina acionada por um computador ao se apertar a tecla 'enter', caractere recebido
via transmisso SCI. Ao ser ligada, a mquina realiza envia um sinal de resposta (caractere 'a'),
informando que foi ligada. Essa mquina, em seguida, comea a processar informaes sobre a
cor dos tecidos que por ela passam, atravs de um sensor luminoso recebendo tenses de acordo
com a tabela a seguir. A tabela tambm possui o cdigo de caracteres das cores que enviado
atravs da comunicao SCI ao mesmo computador de ativao. Faa um programa em Assembly
para um microcontrolador que controle o funcionamento dessa mquina.
Dado: o canal 0 do microcontrolador deve ser utilizado para a converso.
Cor Faixa de Tenso (V) Cdigo de Envio
Rosa 0,000 0,170 'VE0'
Vermelho 0,171 0,250 'VE1'
Laranja 0,251 0,305 'VE3'
Amarelo 0,306 0,499 'AA0'
Branco 0,500 0,700 'AA3'
Verde 0,701 1,800 'AA2'
Azul 1,801 2,300 'VV0'
Violeta 2,301 2,400 'VV1'
Preto 2,401 3,300 'VV2'
163
PARTE B
ATIVIDADES DE LABORATRIO,
EXERCCIOS AVANADOS
E PROJETOS DESENVOLVIDOS
164
Captulo 9: Atividades de
Laboratrio
Neste captulo, esto apresentadas as atividades de laboratrio a serem desenvolvida
no decorrer da disciplina.
9.1 Experincia 01 Entradas e Sadas Digitais............................................................................................ 165
9.2 Experincia 02 Conversor AD.............................................................................................................. 166
9.3 Experincia 03 Interrupo Externa e Interrupo de Tempo Real..................................................... 167
9.4 Experincia 04 PWM........................................................................................................................... 168
asa
Vai ter com a formiga, preguioso, considera os seus caminhos e s sbio.
Provrbios 6:6
165
9.1 Experincia 01 Entradas e Sadas Digitais
Elaborar um programa em Assembly para monitorar a sada de automveis de um
estacionamento, onde teremos dois sensores (S1 e S2) e duas sinalizaes. As sinalizaes
devero ser acionadas de acordo com as combinaes abaixo:
Se S1 est ativa, s o LED1 deve ser aceso;
Se S2 est ativa, s o LED2 deve ser aceso;
Se S1 e S2 estiverem ativas, os dois LEDs LED1 e LED2 devem ser acesos;
Se S1 e S2 estiverem inativas, nenhum LED deve ser aceso.
166
9.2 Experincia 02 Conversor AD
Elaborar um programa em Assembly para ler um sinal de tenso analgico (0 a 3.3V)
proveniente de um potencimetro na placa de testes. O valor lido de tenso dever ser
visualizado atravs da indicao de dois LEDs da seguinte maneira:

Tenso at 0,8V acende o LED1.
Tenso entre 0,8V e 1,65V acende o LED2.
Tenso maior que 1,65V acende(pisca) os dois LEDS.
167
9.3 Experincia 03 Interrupo Externa e Interrupo de Tempo Real
Elaborar um programa em Assembly que simule um cronmetro. Atravs de uma
rotina de timer (executada a cada interrupo de tempo real) o LED LED1 da placa de
demonstrao dever alternar o seu estado a cada 1 segundo (tempo entre cada interrupo do
timer). O boto reset na placa de demonstrao simular o boto de start e stop do
cronmetro. Quando o boto reset pressionado (interrupo externa) pela primeira vez o
cronmetro acionado e o LED comea a piscar. Ao pressionar S1 novamente o LED pra de
piscar e assim sucessivamente.
168
9.4 Experincia 04 PWM
Elaborar um programa em Assembly para modificar o brilho de um LED ligado ao pino
PTB5. O brilho do LED ser controlado pelo acionamento de uma chave (push-button SW1)
localizada na prpria placa de desenvolvimento da Motorola. Enquanto a chave no estiver
pressionada a sada PWM em PTB5 dever operar com ciclo de 100%, ou seja, o LED ficar aceso
com seu brilho mximo. Quando a chave for pressionada a sada PWM em PTB5 dever operar
com ciclo de 25%, fazendo com que o LED acenda com pouco brilho (1/4 do brilho mximo).
169
Captulo 10: Exerccios
Avanados
Neste captulo, voc encontra uma srie de exemplos e exerccios, envolvendo os mais
diversos perifricos do microcontrolador para resoluo de problemas.
10.1 Sistema de Irrigao.......................................170
10.2 CONTROLE DE UMA JANELA...........................171
10.3 Elevador..........................................................172
10.4 Fabrica De Peas............................................173
10.5 Empilhadeira...................................................174
10.6 Comunicador Hospitalar.................................176
10.7 MQUINA DE LAVAR-ROUPAS........................177
10.8 Mquina Computadorizada............................179
No te furtes a fazer o bem a quem de direito, estando na tua mo o poder
de faz-lo. Provrbios 3:27
170
10.1 Sistema de Irrigao
Elaborar um programa em Assembly para automatizar um sistema de irrigao, de
acordo com as caractersticas definidas abaixo:
A bomba B1 ficar ligada enquanto o nvel de gua do reservatrio for maior que o nvel baixo
do mesmo (nvel lgico 0 em PTB0).
Se o nvel de gua do reservatrio for menor que o nvel baixo, a bomba B1 dever ser
desligada e a bomba B2 dever ser ligada, ficando neste estado at que o nvel de gua do
reservatrio seja igual ao nvel alto do mesmo (nvel lgico 0 em PTB1) ou o nvel de gua do
poo seja menor que o seu nvel mnimo (nvel lgico 0 em PTA1).
As bombas so acionadas com nvel lgico 1.
O programa fica num loop verificando nvel de gua do reservatrio e do poo.
171
10.2 Controle De Uma Janela
Elaborar um programa em Assembly para controlar a abertura e fechamento de uma
janela, com base na informao enviada por um sensor de umidade acoplado a mesma. Para
valores de umidade relativa maiores que 80% (condio de chuva) a janela dever ser fechada e
para valores menores ou iguais a 80% a janela dever permanecer aberta. Considere como
resoluo que 100% de umidade atinge a tenso de 3,3V. Os sensores localizados nas laterais da
janela determinam o fim de curso da mesma (nvel lgico 0), fazendo com que o motor pare ao
acionar algum dos sensores. O controle de direo do motor segue a tabela abaixo.
172
10.3 Elevador
Um elevador inteligente (2 pisos) possui um equipamento de segurana para indicar
situaes de perigo como muitas pessoas em seu interior ou peso em excesso.
Uma condio de perigo ocorre sempre que a quantidade de pessoas maior que 10
pessoas ou o peso total das pessoas maior ou igual a 1000kg, e nestes casos uma luz vermelha
acesa.
Um circuito microcontrolador tem uma das entradas digitais (PTA2) ligada num sensor
de luz. Quando uma pessoa passa pelo sensor de luz PTA2=0, caso contrrio, PTA2=1. Um sensor
de carga (PTA1) fornece um valor analgico baseado no peso total no interior do elevador.
Quando o peso total atingir um valor maior ou igual a 1000kg ou a quantidade de pessoas for
maior que 10, uma luz vermelha deve ser ligada (indicando condio perigosa do equipamento)
onde PTB4 = 1 luz acesa, PTB4 =0 luz apagada. O equipamento tem um boto ATIVAR (PTA3) que
indica o momento do elevador partir (ativo em nvel baixo). O elevador somente funciona se as
condies de segurana acima estiverem atendidas.
Quando o boto ATIVAR for pressionado, o circuito deve acionar um ou dois motores
(M1 e M2) para mover o elevador em funo do peso em seu interior. Se o peso for maior ou igual
a 500kg ento deve acionar os dois motores (ativos em nvel alto), caso contrrio apenas M1. Os
motores devem ficar acionados por aproximadamente 10s (tempo de um piso a outro). Deve-se
utilizar o RTI com clock interno para o intervalo do tempo de motor em funcionamento.
O sensor que mede o peso fornece um valor de sada de 3,3V quando o peso do
elevador for de 2000kg e 0V quando o peso for 0kg.Utilizar resoluo de 10 bits. No utilizar
interrupo de ADC.
Quando a chave de emergncia for ativada (ativo em nvel baixo em PTA5) deve-se
parar imediatamente os motores e a luz vermelha deve ficar acesa (PTB4 =1). O equipamento
somente volta a condio normal quando a chave de emergncia estiver em no ativada (nvel
alto).

173
10.4 Fbrica De Peas
Elabore um programa em Assembly para automatizar o processo de fabricao de
peas de alumnio, utilizando microcontrolador HCS08. O processo consiste nas seguintes fases:
a) Mover a lmina para rea de corte no sentido longitudinal;
b) Cortar a Lmina no sentido longitudinal;
c) Mover a Lmina para a rea de corte no sentido transversal;
d) Cortar a Lmina no sentido transversal;
d) Checar as dimenses: Comprimento e largura;
e) Pintar a pea, caso as medidas sejam aprovadas;
f) Rejeitar a pea, caso tenha as dimenses fora do padro;
g) Retorna ao inicio do processo.
Alguns dados complementares:
As peas devem ter 25cm de comprimento e 5 cm de largura;
As quatro primeiras fases duram cerca de 6 segundos cada, ativadas em nvel alto pelos bits
0,1,2 e 3 do PTBD;
A checagem das dimenses se faz pelos canais AD0 (comprimento) e AD3 (largura) atravs dos
transdutores de medida de resoluo de 0,1V/cm e modo de 10bits;
Caso a lata seja rejeitada, emitida um sinal sonoro de 4kHz durante 2 segundos atravs do
pino PTB5 com ciclo ativo em 1 de 75%;
Na fase de pintura o bit PTB4 deve ficar em nvel alto, com durao de 7 segundos;
A qualquer momento pode haver interveno do operador por uma chave em PTA5 (pulso na
borda de descida), fazendo com que a pea em produo seja rejeitada e o processo
reiniciado;
No poder haver mais de uma fase sendo executada ao mesmo tempo e o todo processo
dever funcionar continuamente;
Usar interrupo de timer (RTI) com clock externo de cristal de 32.768Hz, interrupo externa
e para o PWM, usar prescaler igual a 1, e o Busclk = 4MHz.
174
10.5 Empilhadeira
Elaborar um programa em Assembly, com base no microcontrolador HCS-08, para
efetuar o controle de uma empilhadeira eltrica.
Dados gerais:
Os push buttons ligados em PTB4 e PTB7, definem o peso mximo suportado pela
empilhadeira.
A chave ligada em PTB2 define sentido de giro das rodas da empilhadeira (0 = para frente e 1 =
para trs).,
A chave ligada em PTB3 define o momento da partida (0 = partida e 1 = desliga motor e
aguarda partida).
A chave ligada em PTA5 (interrupo externa) quando ativada, dever acionar um aviso
sonoro por 3 segundos , atravs de um dispositivo ligado em PTA3.
O potencimetro, ligado ao canal AD do pino PTA0, est conectado a um acelerador e faz o
ajuste de velocidade da empilhadeira.
Para nvel de tenso igual a 0V, o motor ligado em PTB5 (modo PWM) dever ser desligado
(nvel lgico 0), e para tenso igual a 3.3V, o mesmo dever operar em velocidade mxima
(ciclo ativo em 100%).
A sada PTB6 igual a 0 faz o motor ir para frente e 1 para trs.
O sensor de velocidade ligado ao canal AD do pino PTA2, gera um sinal de tenso de 100mV
para cada km/h.
O sensor de peso ligado ao canal AD do pino PTA1, gera um sinal de tenso de 3,22mV para
cada kg de carga.
Itens de segurana:
Para dar partida, a tenso em PTA0 dever ser igual a 0V.
O motor s poder mudar de sentido de giro com a empilhadeira parada.
A definio de carga mxima s poder ser alterada se a empilhadeira estiver sem carga.
Se a velocidade da empilhadeira ultrapassar os 33 km/h o motor dever ser desligado.
Se o peso da carga exceder o valor definido pelo usurio, a luz ligada em PTA4 dever ser
acionada (nvel lgico 1).
Dados para configurao: Fpwm = 3,91kHz | Oscilador Interno | prescaler = 1
175
176
10.6 Comunicador Hospitalar
Deseja-se implementar um comunicador hospitalar para ajudar os pacientes com
deficincia motora. Para isso, devem-se ligar oito LEDs (ativos em 1) na porta B de um HCS08 e
associar cada LED a um AVISO que o paciente deseja expressar, conforme a tabela abaixo:
LEDs AVISO
0 Ir ao banheiro
1 Beber gua
2 Fazer refeio
3 Ligar/desligar a TV
4 Ajudar a se sentar
5 Estar com dor
6 Abrir/fechar a janela
7 Ligar/desligar a lmpada
O equipamento deve funcionar de forma que quando o paciente acionar um push-
button (ligado ao PTA5 como interrupo externa), os LEDs fiquem acendendo (um por vez)
durante um tempo determinado pelo nvel lgico de uma chave ligada em PTA2 (nvel 0 = 1 seg e
nvel 1 = 3 seg), at que push-button seja novamente acionado. Nesse momento, o LED que
estiver aceso deve permanecer nesse estado e um buzzer ligado em PTA3 (ativo em 1) deve ser
acionado de forma intermitente (512ms ligado e 512ms desligado) at que o paciente decida
realizar um novo processo. Alm disso, um aviso sonoro deve ser gerado por um buzzer ligado em
PTA0 acionado por um trem de pulsos de 5kHz de freqncia, com razo cclica de 70%, sempre
que a temperatura do paciente ultrapassar 38C, e com razo cclica de 30% quando a
temperatura for inferior 35C. A temperatura medida por um termmetro com resoluo de
0,0825V para cada C (10 bits).
Dados gerais: f
osc
= 5kHz (oscilador do PWM), prescaler = 1 e ciclo ativo em nvel alto.
177
10.7 Mquina De Lavar-Roupas
1- Elaborar um programa para controlar uma mquina de lavar roupas, com as seguintes funes:
lavar pesado (acionar o motor durante 15 minutos com potncia mxima), lavar leve (acionar o
motor durante 10 minutos com potncia mdia) e aquecimento (s acionar o motor depois que a
temperatura da gua atinge 50C). Para tanto, existem duas bombas para a entrada e sada de
gua; um sensor de nvel de gua; duas teclas de seleo do tipo de lavao; um sensor para
indicar tampa aberta; e um termmetro. Por questes de segurana, caso a tampa da lava-roupas
seja aberta, o processo deve ser interrompido e s retomado aps a tampa ser fechada.
O termmetro linear e considerar 3,3V 100C com converso de 10bits.
Funcionamento da Mquina:
Selecionar o tipo de lavagem.
Selecionar com ou sem aquecimento.
Iniciar o processo.
Ligar entrada de gua e quando nvel OK ligar o motor (se aquecimento no ativo).
Aps o tempo de lavagem desligar o motor e ligar a sada de gua.
A temporizao dever ser feita pela interrupo de tempo real (RTI).
178
2. Elaborar um programa para controlar uma mquina de lavar roupas, utilizando o PWM (com
frequncia de 1kHz), com as seguintes funes:
a) Lavar pesado (acionar o motor durante 15 minutos com ciclo ativo nvel baixo igual a 100%)
b) Lavar leve (acionar o motor durante 10 minutos com ciclo ativo nvel baixo igual a 40%)
Alm disso h um modo de aquecimento (s h o acionamento do motor depois que a
temperatura da gua atinge 45
o
C).
Para tanto, existem:
Duas bombas para a entrada e sada de gua; um sensor de nvel de gua;
Duas teclas de seleo do tipo de lavao; um sensor para indicar tampa aberta;
Um termmetro e a uma sada PWM para controlar um motor.
Por questes de segurana, caso a tampa da lava-roupas seja aberta, o processo deve ser
interrompido e s retomado aps a tampa ser fechada.
Funcionamento:
Selecionar o tipo de lavagem.
Selecionar com ou sem aquecimento.
Iniciar o processo.
Ligar entrada de gua e quando nvel OK ligar o motor (se aquecimento no ativo).
Aps o tempo de lavagem desligar o motor e ligar a sada de gua.
A temporizao pode ser feita por interrupo RTI.
179
10.8 Mquina Computadorizada
Uma mquina controlada por um microcontrolador HCS08 e ativada por um
computador, conectado ao microcontrolador atravs de SCI. A ativao feita aps o envio do
caractere 'ENTER' (Hexadecimal 0A na tabela ASCII) ao microcontrolador.
Aps a mquina ser ativada, ela inicia seu processo verificando o comprimento e a
massa do bloco a ser perfurado, nessa ordem. Ela utiliza um Transdutor de resoluo 11cm/V e
0,1kg/V para esse processo. Caso a massa do bloco seja inferior 250g, a maquina ativa sua
furadeira com ciclo ativo de 40% para no danificar a pea. Caso contrrio, utilizado o motor em
100%.
O tempo de perfurao proporcional ao comprimento do bloco, para cada
centmetro, ela demora 0,5 segundo perfurando o material. (Utilizando a RTI)
Quando a mquina termina o seu processo, ela desliga o motor e envia ao
computador um caractere 'C' (Hexadecimal 43 na tabela ASCII) indicando a concluso do
processo.
Em caso de emergncia, existe um boto que faz a mquina parar imediatamente seu
funcionamento.
Dados complementares: Frequncia de operao: 4,5kHz, prescaler = 1
180
Captulo 11: Projetos
Neste captulo, encontra-se a documentao da placa de projeto, alm de dicas para
um bom projeto, tanto na parte de hardware quanto de software e um projeto modelo para
exemplo. Alm disso, h um guia sobre aquilo que exigido para o texto do projeto.
11.1 Documentao da placa de projeto................181
11.1.1 instalao do driver......................................181
11.1.1.1 WINDOWS 7..............................................181
11.1.2 Utilizao do kit...........................................183
11.1.2.1 preparao do cdigo...............................183
11.1.2.2 Gravando o cdigo no microcontrolador..183
11.2 Auxilio para o hardware do projeto................185
11.3 Formatao do projeto escrito.......................187
11.4 Projeto exemplo.............................................188
Tudo tem o seu tempo determinado, e h tempo para todo propsito debaixo
do cu. Eclesiastes 3:1
181
11.1 Documentao da placa de projeto
Os projetos da disciplina podem ser realizados com o auxilio de uma placa desenvolvida
pelo Grupo de Ensino em Robtica Mvel (GERM) da UDESC. Um guia de instalao da placa e do
uso do software com a mesma apresentado a seguir.
11.1.1 INSTALAO DO DRIVER
Segue a instalao do driver USB para os sistemas operacionais.
11.1.1.1 WINDOWS 7
Instale primeiro o driver USB Driver Installer.exe.
Depois, instale o driver Win Vista Driver Installer.exe.
Conecte o cabo USB em um porta USB disponvel em seu computador
O Windows 7 ir detectar o novo dispositivo e procurar o driver que voc acabou de
instalar.
Aguarde at que o driver seja encontrado. Aps instalado corretamente, clique em fechar. Seu
programador de microcontrolador MC9S08QG8 est pronto para o uso.
Caso a instalao no seja completa com xito
Siga os Passos a seguir:
INICIAR> PAINEL DE CONTROLE>HARDWARE E SONS>GERENCIADOR DE DISPOSITIVOS.
182
O cone do USB-Serial Controller deve aparecer da seguinte forma
Clique com o boto direito nele, Atualizar Driver.
Procurar Software no computador
Permitir que eu escolha em uma lista de drives de dispositivos no computador
Selecione a o arquivo Win Vista Driver Installer.exe que foi extraindo em uma pasta de seu computador.
E aperte Avanar. O driver deve ter sido instalado corretamente. Para checar v no Gerenciador de
Dispositivos, Ao, Verificar se h alteraes de hardware.
183
O dispositivo foi instalado com sucesso caso no haja exclamao de aviso no seu cone, como a seguir:
Seu programador de microcontrolador MC9S08QG8 est pronto para o uso.
11.1.2 UTILIZAO DO KIT
11.1.2.1 PREPARAO DO CDIGO
Escreva o seu cdigo normalmente no CodeWarrior.
Quando for gravar no microcontrolador, ao invs de utilizar o Debug (F5), utilize o Make
(F7) para apenas compilar o cdigo.
Este cdigo compilado fica armazenado na pasta do projeto, dento da pasta bin. O arquivo
o Project.abs.s19, este arquivo que interessa para este kit de programao. Ele s
criado depois da primeira vez que voc compilar o cdigo.
Ex: C:\blink_led\bin\Project.abs.s19
11.1.2.2 GRAVANDO O CDIGO NO MICROCONTROLADOR
Voc precisa do programa para carregar o cdigo no microcontrolador. Para fazer o
download entre na pgina do deste tutorial no site do GERM
(http://www2.joinville.udesc.br/~germ/?page_id=473) e baixe o HCS08_GUI.zip. Este
programa voc tambm pode encontrar no AN2295SW que o application note para
gravao de cdigo atravs do bootloader do HCS08.
Abra o BootLoader Control.exe, ele tem algumas opes: seleo do cdigo compilado,
seleo da porta de comunicao serial e velocidade de transmisso.
Clique em Open S19 file para selecionar o arquivo Project.abs.s19 da pasta bin do seu
projeto.
Selecione a porta de comunicao serial do seu gravador, no meu caso a COM4. Se ela
no estiver na lista, tente apertar o boto na direita Rescan para atualizar a lista. Se
mesmo assim ela no aparecer, provavelmente no foi instalada corretamente.
Seleciona a velocidade de transmisso, COM Speed, para 9600.
184
Aperte em Bootload e seu cdigo a ser gravado no microcontolador em instantes.
Quando a janela fechar sozinha, o seu cdigo estar gravado no microcontrolador e entrar em
execuo.
Voc pode deixar a o programa pra gravar, e continuar modificando o cdigo no
CodeWarrior. Quando quiser testar novamente, compile o cdigo e grave novamente no
microcontrolador, com apenas um clique em Bootload.
185
11.2 Auxilio para o hardware do projeto
A Placa apresentada funciona como uma protoboard, na qual possvel inserir
componentes sem sold-los, assim possvel reutiliz-los. Contudo, a placa no possui poderes
especiais, ou seja, no capaz de solucionar todos os tipos de problemas de hardware,
possuindo tambm limitaes.
Muitos tipos de carga, em especial motores, exigem uma corrente alta para seu
funcionamento. O microcontrolador no capaz de fornecer essa corrente, para isso necessrio
o uso de um reforador de corrente (associao buffer e transistor TIP). Alm disso, para
possibilitar a inverso de sentido e melhorar o controle de velocidade possvel utilizar uma
ponte H.
A Figura 11.1 mostra um circuito de uma Ponte H, enquanto a Figura 11.2 mostra um
circuito reforador de corrente.
Figura 11.1 Ponte H
186
Figura 11.2 Reforador de Corrente (Fonte: Clube da Eletrnica)
Observe que a alimentao dos dois circuitos deve ser superior a 3,3 V (use 12 V de
preferncia). Alm disso, talvez seja necessrio dar um ganho de tenso tenso proveniente do
microcontrolador, para o reforador de corrente. Assim, ao invs de se utilizar um buffer, pode se
utilizar um amplificador inversor (ou no-inversor), aproveitando-se do ganho do AMPOP. Uma
sugesto de AMPOP para uma aplicao que necessite de alta slew-rate e bom desempenho em
altas frequncias o LVH870, de alimentao simples. Contudo, o AMPOP de uso geral L741
resolve grande parte dos problemas possveis de se encontrar nessa disciplina.
H circuitos integrados comerciais da Ponte H, caso opte-se por utilizar uma, o mais
comum o L293. Caso seja necessria uma potncia maior, utilize o CI L297 ou o DRV8811.
Lembre sempre de utilizar o multmetro para verificar as tenses em cada componente,
alm de checar a continuidade (normalmente, esse teste realizado com um sinal sonoro). Cuide
com a alimentao dos circuitos, verifique se simples (Vcc e terra) ou simtrica (+Vcc e -Vcc).
Caso voc utilize sensores, verifique a razo entre a grandeza medida e a tenso gerada
pelo sensor e verifique seu datasheet.
Use a menor quantidade possvel de jumpers, pois eles funcionam como antenas e
podem facilmente captar rudos.
Utilize sempre filtros (um capacitor eletroltico de 2,2F em paralelo normalmente
suficiente), um sistema de isolamento (optoacopladores CC e CA e capacitores CC em srie e
CA em paralelo podem ser utilizados) entre a parte de controle e potncia (ou ainda, um
pequeno transformador, caso seja necessrio transferir potncia de uma fonte para um
mecanismo mecnico), diodos de proteo (normalmente um 4007 suficiente) e reguladores de
tenso (h CI's comerciais, contudo, o uso de diodos zener bem-vindo).
Para a alimentao, de corrente contnua, voc pode associar pilhas de 1,5V em srie,
utilizar uma bateria de 9V, ou ainda, se o oramento permitir e exigir, voc pode construir um
circuito transformador retificador, para utilizar vrios valores de tenso. Embora, um
potencimetro associado a um buffer permite bastante flexibilidade para vrios nveis de tenso.
187
11.3 Formatao do projeto escrito
Um bom projeto escrito necessita possuir uma formatao adequada. Os seguintes
elementos so obrigatrios em projetos escritos:
Capa e contracapa: no deve ser numerado nem paginado, devem conter o nome da
equipe, o ttulo do trabalho e a data. A capa contm ainda o nome da instituio e o
departamento enquanto a contracapa explica a finalidade do trabalho e apresenta o nome
do professor.
Sumrio: no deve ser numerado nem paginado e deve conter cada tpico e subtpico de
cada parte do projeto;
Introduo: deve ser numerada e paginada. Deve ser a fundamentao terica do projeto,
onde, por exemplo, caso o projeto seja o controle de um alarme, nessa parte do projeto
deve ser explicado o que um alarme, como funciona, suas aplicaes e a teoria de como
um alarme pode ser controlado.
Materiais e dispositivos: numerado e paginado, breve seo na qual se apresentam os
componentes utilizados para o projeto e sua finalidade.
Projeto em si: numerado e paginado, contm o que foi projetado e como foi projetado.
Aqui devem ser includas as definies para as portas do microcontrolador (de preferncia
em uma tabela), quais perifricos do mesmo foram utilizados. Deve-se apresentar atravs
de um esquema as portas utilizadas do microcontrolador HCS08QG8, bem como os
circuitos utilizados identificando suas funes. Onde houver a necessidade de utilizao de
frmulas demonstr-las tambm. Se for desejado e possvel, no h problemas em inserir
fotos do projeto pronto.
Programao: numerado e paginado, contm o software implementado no
microcontrolador, comentado e, preferencialmente, em fonte Courier New, prpria da
programao, com os espaos bem definidos (essa fonte ocupa o mesmo espao grfico
para todos os caracteres).
Resultados e Anlise: numerado e paginado, resultados obtidos com seu projeto e depois
de todos serem apresentados, deve-se fazer uma anlise dos mesmos.
Concluso: numerado e paginado. Faz-se uma reviso da ideia do projeto, verifica-se se
ele atingiu seus objetos, com argumentao quantitativa preferencialmente, como
indicadores de erros. Prope-se futuras melhorias no projeto e fala-se do conhecimento
obtido com o mesmo.
Referncias Bibliogrficas: no deve ser numerado, apenas paginado (e consta no
sumrio). Apresenta-se as referncias do projeto, em especial para a fundamentao
terica e datasheets de componentes.
11.4 Projeto exemplo
Segue um exemplo de projeto j implementado. O projeto no apresenta aqui o
sumrio ou a paginao para a mesma no se confundir com a do prprio livro, contudo, os
mesmos itens devem estar contidos no projeto a ser entregue para a aprovao na disciplina.
188
UNIVERSIDADE DO ESTADO DE SANTA CATARINA UDESC
CENTRO DE CINCIAS TECNOLGICAS CCT
DEPARTAMENTO DE ENGENHARIA ELTRICA DEE
ARTHUR GARCIA BARTSCH
CHRISTIAN JOEZER MEIRINHO
AUTOMATIC GUIDED VEHICLE AGV
Joinville
2011
189
ARTHUR GARCIA BARTSCH
CHRISTIAN JOEZER MEIRINHO
AUTOMATIC GUIDED VEHICLE AGV
Projeto apresentado para a disciplina de
Sistemas Digitais Microprocessados, como
requisito parcial de aprovao.
Professora: Ana T. Y. Watanabe
Joinville
2011
190
1 INTRODUO
Cada vez mais, a indstria exige meios de automatizao de sua produo, para
torn-la mais eficiente, dinmica e, consequentemente, mais produtiva e lucrativa.
Uma das reas de que mais se necessita a de robtica mvel. A mesma contribui
para a movimentao de veculos no interior da planta industrial, permitindo a movimentao, por
exemplo, de objetos frgeis, cujo deslocamento humano, ou mesmo em uma esteira, incorreria
em maiores riscos de perda.
O AGV um expoente da robtica mvel que merece ateno e ser o desafio desse
projeto.
1.1 CONCEITO GERAL DO AGV E APLICAES
Um AGV (Automatic Guided Vehicle, sigla em ingls para Veculo Teleguiado) um
elemento importante no setor industrial, naquilo que se refere a movimentao de materiais e
cargas.
Um AGV nada mais do que um rob mvel, capaz de realizar servios locomotivos
em indstrias e depsitos, principalmente. Tais servios locomotivos referem-se a tanto transporte
de matrias-primas e/ou materiais no interior do local quanto elevao desse materiais para seu
depsito em estantes, por exemplo.
Alm dos modelos teleguiados, existem modalidades de AGV guiados laser (LGV),
autoguiados (SGV) e modelos normais de baixo custo (AGC).
Os primeiros AGV comerciais foram introduzidos nos anos 50, e eram fabricados pela
Barrett Electronics of Northbrook, Illinois. E eram simples veculos de carga, semelhantes
a pequenos caminhes andando diretamente no cho ao envs de andar em um trilho.
Os AGVs so aplicados nos mais diversos ramos industriais, como nas indstrias
farmacutica, qumica, automotiva, de papel e impresso, de alimentos e at mesmo hospitalar.
Isso pelo fato de poderem exercer um transporte seguro, limpo e gil.
1.2 TCNICA DE CONTROLE DO AGV
Uma vez que o AGV uma planta eletrnica, o controle digital sobre o mesmo um
caminho eficiente e prtico para o seu funcionamento correto. Um DLP (Dispositivo de Lgica
Programvel) ou um microcontrolador so comumente utilizados, sendo aplicados de acordo com
a potncia do AGV. Naturalmente, h uma estrutura de controle, que desenvolve a lgica por trs
de seu funcionamento, e outra de potncia, que permite a execuo dessa lgica para a
191
movimentao de objetos e da planta (AGV) como um todo.
O controle on-off, apesar de no-linear, uma alternativa simples para aplicaes
simples do mesmo e ser utilizado nesse projeto.
Um controle PI (Proporcional-Integrativo), ou mesmo um PID (Proporcional-
Integrativo-Derivativo), so utilizados quando o AGV necessita de preciso em seu funcionamento
(normalmente com uma trajetria bem definida, como um Rob Seguidor-de-linha).
192
2 MATERIAIS E DISPOSITIVOS
O projeto consistir na simulao do controle de velocidade e direo do AGV. Para o
mesmo, ento, sero utilizados os seguintes componentes:
Um Microcontrolador HCS08QG8, para controle (implementao da programao);
Dois Motores CC de 12 V/400Hz, para simulao da direo e velocidade do AGV;
Quatro Capacitores, para filtragem de sinal;
Resistores, para controle de corrente;
Optoacopladores, para isolamento de sinal (controle) e potncia;
Push-botons, para reset, ativao e testes;
Quatro Rels, para o controle do sentido dos motores;
Protoboard, para testes;
193
3 PROJETO DO AGV
O nosso projeto visa ao desenvolvimento da lgica de movimentao do AGV. Para
isso, utilizamos os recursos disponveis no microcontrolador HCS08QG8.
A ideia da lgica basicamente utilizar os dois canais de PWM (Modulao em
largura de pulso) para controlar a velocidade, e tambm a direo, de dois motores, cada qual
conectado a uma roda. Alm disso, utilizamos duas sadas digitais (PTB6 e PTB7) para acionar o
sentido de giro do motor, atravs de um rel (e, assim, se o AGV vai para frente ou para trs, em
relao ao referencial adotado).
Os canais do PWM so equivalentes as portas PTA0 e PTB5. O PWM um recurso
da eletrnica para reduzir o valor eficaz de uma tenso contnua, de uma forma facilmente
controlvel. Isso permite, por exemplo, reduzir a velocidade para frenagem e aumento de
velocidade quando no h obstculos no caminho do AGV. Optou-se por dois canais (um para
cada roda) para ser possvel realizar curvas, uma vez que no utilizou-se servo-motores nesse
projeto. Assim, possvel variar a sada para o PWM de uma roda em detrimento da outra e,
consequentemente, fazer que um lado gire mais rpido e realize uma curva.
Para programar o PWM, foi necessrio calcular o valor do TPMMOD. Partiu-se do
pressuposto que a frequncia nominal de giro do Motor CC de 400Hz e que essa seria a
frequncia dos canais de PWM, a partir disso, impondo o prescaler igual a 1 e a fonte de
frequncia sendo o BusClk, pode-se calcular o valor de TPMMOD, da seguinte maneira:
H dois conjuntos de entradas digitais, sendo que o primeiro conjunto (PTB0 e PTB1),
altera a velocidade dos dois motores juntos, conforme a Tabela 1 (Veja que as entradas quando
so pressionadas enviam nvel zero. Veja tambm que o ltimo caso necessita que os dois
botes sejam apertados ao mesmo tempo, o que no usual).
Tabela 1 Velocidade dos Motores
PTB1
(Entrada)
PTB0
(Entrada)
PTB7
(Sada para motor)
PTB6
(Sada para motor)
Velocidade
1 1 0 0 Parado
1 0 0 1 Diminui se estiver indo para
frente e aumenta se estiver
indo para trs
0 1 1 0 Diminui se estiver indo para
trs e aumenta se estiver indo
para frente
0 0 1 1 Parado
f =
f
fonte
(TPMMOD+1)prescaler
400=
4000000
TPMMOD+1
TPMMOD=39999
194
Observe que quando TPMCxVH recebe valores negativos, ele inverte o sentido de
direo do motor. Os rels auxiliam nesse processo, visto que esto conectados em cada lado de
cada motor, conforme a Figura 1.
O segundo conjunto (PTA2 e PTA3) atua individualmente em cada motor, permitindo a
realizao de curvas. A Tabela 2 mostra a lgica de funcionamento.
Tabela 2 PWM individual de cada motor
PTA3
(Entrada)
PTA2
(Entrada)
PTB5
(Sada para motor)
PTA0
(Sada para motor)
Velocidade
1 1 0 0 No h acrscimo de
velocidade
1 0 0 1 Aumento de velocidade no
Motor 1 (direito),
consequentemente, gira para
a esquerda
0 1 1 0 Aumento de velocidade no
Motor 2 (esquerdo),
consequentemente, gira para
a direita
0 0 1 1 Aumento de velocidade nos
dois motores
A Figura 1 exibe as conexes do microcontrolador (As chaves e transistores so rels,
que funcionam como chave, apenas simbolizados dessa forma).
Figura 1 Diagrama de conexes do projeto
195
4 PROGRAMAO
O programa em Assembly utilizado est na sequncia.
INCLUDE 'MC9S08QG8.inc'

ORG $0060

ORG $E000
INICIO: LDA SOPT1 ;desativa o COP
AND #127
ORA #1 ;ativa pino PTA5 para reset
STA SOPT1
MOV #$00, PTADD ;define PTA2 e PTA3 como entradas
MOV #$FF, PTBD ;apaga todas as saidas
MOV #$C0, PTBDD ;define PTB0 e PTB1 como entradas
;define PTB6 e PTB7 como entradas

LDA PTBPE
ORA #3
STA PTBPE

LDA PTAPE
ORA #$0C
STA PTAPE
;configuracao do PWM

BSET 3, TPMSC ;ativa PWM
MOV #$28, TPMC0SC ;canal 0 ativo e pwm em subida de nvel
MOV #$28, TPMC1SC ;canal 1 ativo e pwm em subida de nvel
LDHX #39999 ;f = 400Hz, prescaler 1, fonte busclk
STHX TPMMODH
SUPER_RET: LDHX #0000 ;valor inicialmente de frequencia 0
STHX TPMC0VH
STHX TPMC1VH
BSET 7, PTBD ;valores para reinicio dos motores
BSET 6, PTBD
;os motores ficam parados quando os niveis logicos so iguais


LOGICA: JSR CONDICAO ;verifica direcao dos motores
JSR VER_PWM ;verifica pwm para variar velocidade
JMP LOGICA ;reinicia ciclo de verificacao

VER_PWM: BRCLR 0, PTBD, MOT1 ;logica de desvio para aumentar PWMs
BRCLR 1, PTBD, MOT2 ;e modificar a direo dos motores
SAI_PWM: RTS
196
MOT1: LDHX TPMC1VH
CPHX #0
BEQ SAI_MOT1
LDHX TPMC0VH
CPHX TPMMOD+1
BEQ SAI_MOT1
AIX #5 ;aumenta o valor de pwm do motor 1 em 5
STHX TPMC0VH
AIX #-10 ;diminui o valor de pwm do motor 2 em 10
STHX TPMC1VH
SAI_MOT1: RTS
MOT2: LDHX TPMC0VH
CPHX #0
BEQ SAI_MOT2
LDHX TPMC1VH
CPHX TPMMOD+1
BEQ SAI_MOT2
LDHX TPMC1VH
AIX #5 ;aumenta o valor de pwm do motor 2 em 5
STHX TPMC1VH
AIX #-10 ;diminui o valor de pwm do motor 1 em 10
STHX TPMC0VH
SAI_MOT2: RTS
CONDICAO: LDHX TPMC0VH
CPHX #0
BNE LA
BSET 7, PTBD
BSET 6, PTBD
LA: BRCLR 2, PTAD, FRENTE
BRCLR 3, PTAD, TRAZ
RTS
TRAZ:
LDHX TPMC0VH
CPHX #0
BEQ INIT

BRCLR 7, PTBD, AVANT
BRCLR 6, PTBD, TRANT
RTS

INIT: BSET 6, PTBD
BCLR 7, PTBD
LDHX #8000
STHX TPMC0VH
STHX TPMC1VH
RTS
AVANT: JMP AUM_VEL
TRANT: JMP DIM_VEL
SAI_COND: RTS
FRENTE: LDHX TPMC0VH
CPHX #0
BEQ INIF
197
BRCLR 6, PTBD, AVANF
BRCLR 7, PTBD, TRANF
RTS
AVANF: JMP AUM_VEL
TRANF: JMP DIM_VEL
INIF: BSET 7, PTBD
BCLR 6, PTBD
LDHX #8000
STHX TPMC0VH
STHX TPMC1VH
SAI_FRENTE: RTS
AUM_VEL: LDHX TPMC0VH
CPHX TPMMOD+1
BEQ SAI_DIM
LDHX TPMC0VH
AIX #5
STHX TPMC0VH
LDHX TPMC1VH
AIX #5
STHX TPMC1VH
RTS
DIM_VEL: LDHX TPMC0VH
CPHX #0
BEQ SAI_DIM
LDHX TPMC0VH
CPHX #8000
BEQ ZERA
LDHX TPMC0VH
AIX #-5
STHX TPMC0VH
LDHX TPMC1VH
AIX #-5
STHX TPMC1VH
SAI_DIM: RTS
ZERA: LDHX #0
STHX TPMC0VH
STHX TPMC1VH
BSET 6, PTBD
BSET 7, PTBD
RTS

;VETORES DE INTERRUPCAO
ORG $FFFE
FDB INICIO
198
5 RESULTADOS E ANLISE
O circuito conseguiu controlar o giro do motor e seu sentido, conforme desejado.
Contudo, a parte de potncia do circuito deixou a desejar e o mesmo no avanou alm da fase
de testes na protoboard.
Os erros so atribudos a necessidade de um amplificador de corrente para enviar a
corrente desejada ao motor em cada momento e a rudos provenientes do meio externo (em
especial os de 60Hz), devido a excessivo nmero de jumpers utilizado na implementao do
projeto, os mesmos atrapalham o sinal PWM.
199
6 CONCLUSO
O projeto de um simulador de AVG foi bem sucedido no que se referiu ao
embasamento de uma implementao de um controlador on-off, via interao direta do usurio. O
mesmo cumpriu seu objetivo de demonstrar o controle de velocidade e sentido dos motores,
simulando um AVG real.
A parte de potncia e funcionamento de movimentao de rodas em um carro, porm,
no foi executada, devido baixa capacidade de correntes e rudos externos.
De qualquer forma, esse trabalho possibilitou um contato direto com uso de
microcontrolador para aplicaes reais, utilizadas na indstria, e a verificaes de problemas
tpicos da engenharia eltrica.
200
REFERNCIAS BIBLIOGRFICAS
PEREIRA, Fabio. Microcontroladores HC908Q: teoria e pratica. Sao Paulo: Livros Erica,
2004.
PEREIRA, Fabio. Microcontroladores HCS08: teoria e pratica. Sao Paulo: Livros Erica,
2005.
Automated Guided Vehicle. Disponvel em
<http://en.wikipedia.org/wiki/Automated_Guided_Vehicle> Acessado em 10 maio 2011.
TRANSROBOTICS. Automatic Guided Vehicles (AGV) Drive & Steering Options
<http://www.transbotics.com/agvsteeringoptions.htm> Acessado em 20 maio 2011.
201
Captulo 12: Bibliotecas em C
para projetos
O Assembly no a nica linguagem utilizada pelo HCS08. Esse captulo se dedica a
apresentar algumas bibliotecas prontas na linguagem de programao C.
12.1 Biblioteca para Entradas e Sadas Digitais.....202
12.2 Biblioteca para Conversor AD........................ 207
12.3 Biblioteca para RTI..........................................208
12.4 Biblioteca para LCD.........................................209
Mais vale o pouco do justo que a abundncia de muitos mpios. Salmos
37:16
202
12.1 Biblioteca para Entradas e Sadas Digitais
Biblioteca para configurao inicial de Entradas e Sadas Digitais do microcontrolador.
/*Funo para configurao inicial do Entradas e Saidas
Digitais.Digital_direcao: Define entrada(0) ou Saida(1) do pino
da porta A ou B.
Os parmetros da funo so:
porta => 'A' ou 'B'
pino => Se for porta A (0 5) ou se for B (0 7)
direcao => 0 (entrada)
1 (sada)
*/

void digital_direcao (char porta, char pino, char direcao) {
if (porta =='A') { // porta A
switch (pino){
case 0: // PTAD0
if (direcao == 0) // entrada
{
PTADD_PTADD0 = 0;
PTAPE_PTAPE0 = 1; // pull-up habilitado
}
else // saida
PTADD_PTADD0 = 1;
break;
case 1: // PTAD1
if (direcao == 0) // entrada
{
PTADD_PTADD1 = 0;
PTAPE_PTAPE1 = 1; // pull-up habilitado
}
else // saida
PTADD_PTADD1 = 1;
break;
case 2: // PTAD2
if (direcao == 0) // entrada
{
PTADD_PTADD2 = 0;
PTAPE_PTAPE2 = 1; // pull-up habilitado
}
else // saida
PTADD_PTADD2 = 1;
break;
case 3: // PTAD3
if (direcao == 0) // entrada
{
PTADD_PTADD3 = 0;
PTAPE_PTAPE3 = 1; // pull-up habilitado
}
else // saida
203
PTADD_PTADD3 = 1;
break;
case 4: // PTAD4
if (direcao == 0) // entrada
{
PTADD_PTADD4 = 0;
PTAPE_PTAPE4 = 1; // pull-up habilitado
}
else // saida
PTADD_PTADD4 = 1;
break;
case 5: // PTAD5
if (direcao == 0) // entrada
{
PTADD_PTADD5 = 0;
PTAPE_PTAPE5 = 1; // pull-up habilitado
}
else // saida
PTADD_PTADD5 = 1;
break;
} // fim do switch
} // fim do if porta == 'A'
if (porta =='B') { // porta B
switch (pino){
case 0: // PTBD0
if (direcao == 0) // entrada
{
PTBDD_PTBDD0 = 0;
PTBPE_PTBPE0 = 1; // pull-up habilitado
}
else // saida
PTBDD_PTBDD0 = 1;
break;
case 1: // PTBD1
if (direcao == 0) // entrada
{
PTBDD_PTBDD1 = 0;
PTBPE_PTBPE1 = 1; // pull-up habilitado
}
else // saida
PTBDD_PTBDD1 = 1;
break;
case 2: // PTBD2
if (direcao == 0) // entrada
{
PTBDD_PTBDD2 = 0;
PTBPE_PTBPE2 = 1; // pull-up habilitado
}
else // saida
PTBDD_PTBDD2 = 1;
break;
case 3: // PTBD3
204
if (direcao == 0) // entrada
{
PTBDD_PTBDD3 = 0;
PTBPE_PTBPE3 = 1; // pull-up habilitado
}
else // saida
PTBDD_PTBDD3 = 1;
break;
case 4: // PTBD4
if (direcao == 0) // entrada
{
PTBDD_PTBDD4 = 0;
PTBPE_PTBPE4 = 1; // pull-up habilitado
}
else // saida
PTBDD_PTBDD4 = 1;
break;
case 5: // PTBD5
if (direcao == 0) // entrada
{
PTBDD_PTBDD5 = 0;
PTBPE_PTBPE5 = 1; // pull-up habilitado
}
else // saida
PTBDD_PTBDD5 = 1;
break;
case 6: // PTBD6
if (direcao == 0) // entrada
{
PTBDD_PTBDD6 = 0;
PTBPE_PTBPE6 = 1; // pull-up habilitado
}
else // saida
PTBDD_PTBDD6 = 1;
break;
case 7: // PTBD7
if (direcao == 0) // entrada
{
PTBDD_PTBDD7 = 0;
PTBPE_PTBPE7 = 1; // pull-up habilitado
}
else // saida
PTBDD_PTBDD7 = 1;
break;
} // fim do switch
} // fim do if porta == 'B'
}

/* DIGITAL_WRITE: Escreve 0 ou 1 na porta digital
Os parmetros da funo so:
porta => 'A' ou 'B'
205
pino => Se for porta A (0 5) ou se for B (0 7)
valor => 0 (low)
1 (high)
*/

void digital_write(char porta, char pino, char valor) {
if (porta =='A') { // porta A
switch (pino){
case 0: // PTAD0
PTAD_PTAD0 = valor;
break;
case 1: // PTAD1
PTAD_PTAD1 = valor;
break;
case 2: // PTAD2
PTAD_PTAD2 = valor;
break;
case 3: // PTAD3
PTAD_PTAD3 = valor;
break;
case 4: // PTAD4
PTAD_PTAD4 = valor;
break;
case 5: // PTAD5
PTAD_PTAD5 = valor;
break;
} // fim do switch
} // fim do if porta == 'A'
if (porta =='B') { // porta B
switch (pino){
case 0: // PTBD0
PTBD_PTBD0 = valor;
break;
case 1: // PTBD1
PTBD_PTBD1 = valor;
break;
case 2: // PTBD2
PTBD_PTBD2 = valor;
break;
case 3: // PTBD3
PTBD_PTBD3 = valor;
break;
case 4: // PTBD4
PTBD_PTBD4 = valor;
break;
case 5: // PTBD5
PTBD_PTBD5 = valor;
break;
case 6: // PTBD6
PTBD_PTBD6 = valor;
break;
case 7: // PTBD7
206
PTBD_PTBD7 = valor;
break;
} // fim do switch
} // fim do if porta == 'B'
}


/* DIGITAL_READ: L 0 ou 1 da porta digital
Os parmetros da funo so:
porta => 'A' ou 'B'
pino => Se for porta A (0 5) ou se for B (0 7)
*/

char digital_read(char porta, char pino) {
char leitura; // retorna valor da leitura

if (porta =='A') { // porta A
switch (pino){
case 0: // PTAD0
leitura = PTAD_PTAD0;
break;
case 1: // PTAD1
leitura = PTAD_PTAD1;
break;
case 2: // PTAD2
leitura = PTAD_PTAD0;
break;
case 3: // PTAD3
leitura = PTAD_PTAD3;
break;
case 4: // PTAD4
leitura = PTAD_PTAD4;
break;
case 5: // PTAD5
leitura = PTAD_PTAD5;
break;
} // fim do switch
} // fim do if porta == 'A'


if (porta =='B') { // porta B
switch (pino){
case 0: // PTBD0
leitura = PTBD_PTBD0;
break;
case 1: // PTBD1
leitura = PTBD_PTBD1;
break;
case 2: // PTBD2
leitura = PTBD_PTBD0;
break;
207
case 3: // PTBD3
leitura = PTBD_PTBD3;
break;
case 4: //PTBD4
leitura = PTBD_PTBD4;
break;
case 5: // PTBD5
leitura = PTBD_PTBD5;
break;
case 6: // PTBD6
leitura = PTBD_PTBD6;
break;
case 7: //PTBD7
leitura = PTBD_PTBD7;
break;
} // fim do switch
} // fim do if porta == 'B'
return(leitura);
}

12.2 Biblioteca para Conversor AD
Biblioteca para a configurao inicial do Conversor AD.
/*Funo para configurao inicial do conversor AD.

Os parmetros da funo so:

a) bits_preciso => 8, 10 ou 12 bits
b) interrupt_enable => 0 (disable) ou 1 (enable)
c) canal => 0-27 => Seleciona o canal de entrada
d) continuo => 0 - nica / 1 - Contnua
*/
void setup_AD(int bits_precisao, int interrupt_enable, int canal,
int continuo)
{
ADCCFG = 0b00010000;
switch (bits_precisao){
case 12:
ADCCFG_MODE0 = 0;
ADCCFG_MODE1 = 1;
break;
case 10:
ADCCFG_MODE0 = 1;
ADCCFG_MODE1 = 0;
break;
default:
ADCCFG_MODE0 = 0;
ADCCFG_MODE1 = 0;
break;
}
208
ADCSC2 = 0b00000000;
ADCSC1 = 0b00111111;
//Seleciona o canal de entrada a partir do parmetro
canal.
//Caso o parmetro ultrapasse os limites 0 ou 27, desliga
o mdulo.
if(canal<=27 && canal>=0) ADCSC1_ADCH = canal;
ADCSC1_AIEN = interrupt_enable;
ADCSC1_ADCO = continuo;
}
12.3 Biblioteca para RTI
/*Funo para configurao do RTI (Real Time Interrupt)

Os parmetros da funo so:

a) clock => 0(RTI off),1(8ms ou /256, 2(32ms ou /
1024...7(1024ms ou /32768)
b) en_int => 0 (disable) ou 1 (enable)
c) sel_fonte => 0 clock interno de 1kHz 1 clock externo
*/
void setup_RTI(int clock, int en_int, int sel_fonte) {
switch (clock)
{
case 0:
SRTISC_RTIS0 = 0;
SRTISC_RTIS1 = 0;
SRTISC_RTIS2 = 0;
break;
case 1:
SRTISC_RTIS0 = 1;
SRTISC_RTIS1 = 0;
SRTISC_RTIS2 = 0;
break;
case 2:
SRTISC_RTIS0 = 0;
SRTISC_RTIS1 = 1;
SRTISC_RTIS2 = 0;
break;
case 3:
SRTISC_RTIS0 = 1;
SRTISC_RTIS1 = 1;
SRTISC_RTIS2 = 0;
break;
209
case 4:
SRTISC_RTIS0 = 0;
SRTISC_RTIS1 = 0;
SRTISC_RTIS2 = 1;
break;
case 5:
SRTISC_RTIS0 = 1;
SRTISC_RTIS1 = 0;
SRTISC_RTIS2 = 1;
break;
case 6:
SRTISC_RTIS0 = 0;
SRTISC_RTIS1 = 1;
SRTISC_RTIS2 = 1;
break;
default:
SRTISC_RTIS0 = 1;
SRTISC_RTIS1 = 1;
SRTISC_RTIS2 = 1;
break;
}
SRTISC_RTIE = en_int; // int.habilita/desab.
SRTISC_RTICLKS = int sel_fonte; // seleo de fonte
}
12.4 Biblioteca para LCD
Procedimento para incluir arquivos em C nos arquivos em ASM:
1) Ao criar o projeto novo devem escolher a opo: C e relocable assembly
2) Arquivos utilizados: main.c, LCD.c, LCD.h e main.asm:

/***************************ARQUIVO MAIN.C *********************/
/*main.C => chamar o programa em assembly: asm_main() e incluir a
biblioteca do LCD: lcd.h
*/

#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "lcd.h"
#include "main_asm.h" /* interface to the assembly module */

void main(void) { // inicializa e configura o mdulo LCD
lcd_ini(display_8x5|_2_linhas,display_ligado|cursor_desligado|
cursor_fixo);

lcd_pos_xy(1,1); //posiciona o cursor na 1a. coluna da 1a. linha

while(1) // loop infinito
{
asm_main();
}
210
}
/**********************************LCD.C*************************/
#include "lcd.h"
#include "derivative.h"

// declarao das funes
void lcd_ini(char modo1, char modo2); //function para inicializar
//LCD
void lcd_envia_nibble(char dado); //function para inicio do LCD a
//8 bits (nibble)
void lcd_envia_byte(char endereco, char dado);
void lcd_pos_xy(char x, char y);
void delay_ms (unsigned int tempo);
void lcd_escreve_char(char c);
void lcd_escreve_num(char n);
void lcd_escreve_string (char *c);
/****************************************************************/
/* LCD.C - Biblioteca de manipulao de Mdulo LCD
/* Autor: Fbio Pereira */
/****************************************************************/
// varivel global que armazena o configurao do display
//static char modo_lcd2;

//************************************************************
// Funo de atraso em milisegundos
//************************************************************
// Argumentos de chamada: tempo em ms
//************************************************************
void delay_ms (unsigned int tempo)
{
unsigned int temp;
for(;tempo;tempo--) for(temp=(cpu_clock/72);temp;temp--);
}
//****************************************************************
// Funo de envio de um nibble para o display
//****************************************************************
// Argumentos de chamada: char dado : dado a ser enviado para
// display (somente o nibble inferior)
//****************************************************************
void lcd_envia_nibble(char dado)
{
union ubyte teste;
teste._byte = dado;
// coloca os quatro bits nas saidas
lcd_d4 = teste.bit.b0;
lcd_d5 = teste.bit.b1;
lcd_d6 = teste.bit.b2;
lcd_d7 = teste.bit.b3;
// pulsa a linha enable
lcd_enable = 1;
lcd_enable = 0;
211
}
//****************************************************************
// Funo de escrita de 1 byte no display
//****************************************************************
// Argumentos de chamada:
// char endereco : 0 se instruo, 1 se dado
// char dado : dado ou comando a ser escrito
//****************************************************************
void lcd_envia_byte(char endereco, char dado )
{
// coloca a linha rs em 0
lcd_rs = 0;
// configura a linha rs dependendo do modo selecionado
lcd_rs = endereco;
delay_ms(1);
// desativa linha enable
lcd_enable = 0;
// envia a primeira parte do byte
lcd_envia_nibble(dado >> 4);
// envia a segunda parte do byte
lcd_envia_nibble(dado & 0x0f);
}

//****************************************************************
// Funo de inicializao do display
//****************************************************************
// Argumentos de chamada:
// char modo1 : modo do display (nmero de linhas e tamanho dos
caracteres
// char modo2 : modo do display (estado do cursor e do display)
//****************************************************************
// Retorno : nada
//****************************************************************
void lcd_ini(char modo1, char modo2 ) {
char conta;
// configura os pinos como sadas
lcd_enable_dir = 1;
lcd_rs_dir = 1;
lcd_d4_dir = 1;
lcd_d5_dir = 1;
lcd_d6_dir = 1;
lcd_d7_dir = 1;
// coloca os pinos em nvel lgico 0
lcd_d4 = 0;
lcd_d5 = 0;
lcd_d6 = 0;
lcd_d7 = 0;
lcd_rs = 0;
lcd_enable = 0;
delay_ms(15);
// envia uma seqncia de 3 vezes 0x03
212
// e depois 0x02 para configurar o mdulo
// para modo de 4 bits
for(conta=1;conta<=3;++conta)
{
lcd_envia_nibble(3);
delay_ms(5);
}
lcd_envia_nibble(2);
// envia cdigos de inicializao do display
lcd_envia_byte(0,0x20 | modo1);
lcd_envia_byte(0,0x08 | modo2);
modo_lcd2 = 0x08 | modo2;
lcd_envia_byte(0,1);
lcd_envia_byte(0,6);
}

//****************************************************************
// Funo de posicionamento do cursor do display
//****************************************************************
// Argumentos de chamada:
// char x : coluna a ser posicionado o cursor (iniciando de 1)
// char y : linha a ser posicionado o cursor (1 ou 2)
//****************************************************************
// Retorno : nada
//****************************************************************
void lcd_pos_xy(char x, char y)
{
char endereco;
if(y!=1)
endereco = lcd_seg_lin;
else
endereco = 0;
endereco += x-1;
lcd_envia_byte(0,0x80|endereco);
}

//****************************************************************
// Funo de escrita de um caractere no display
//****************************************************************
// Argumentos de chamada : char c : caractere a ser escrito
//****************************************************************
// Retorno : nada
//****************************************************************
// Observaes :
// \f apaga o contedo do display
// \n e \r retornam o cursor para
// a primeira coluna da segunda linha
//****************************************************************
void lcd_escreve_char(char c)
// envia um caractere para o display
{
switch (c)
213
{
case '\f': lcd_envia_byte(0,1);
delay_ms(5);
break;
case '\n':
case '\r': lcd_pos_xy(1,2);
break;
default: lcd_envia_byte(1,c);
}
}

//****************************************************************
// Funo de escrita de um numero no display
//****************************************************************
// Argumentos de chamada : char n : numero a ser escrito
//****************************************************************
// Retorno : nada
//****************************************************************
// Observaes :
// \f apaga o contedo do display
// \n e \r retornam o cursor para
// a primeira coluna da segunda linha
//****************************************************************
void lcd_escreve_num(char n)
// envia um numero para o display
{
n += 0x30;
LCD_envia_byte(1,n );
}


//****************************************************************
// Funo de escrita de uma string no display
//****************************************************************
// Argumentos de chamada:
// char *c : um ponteiro para um caractere
//****************************************************************
// Retorno : nada
//****************************************************************
void lcd_escreve_string (char *c)
{
while (*c)
{
lcd_escreve_char(*c);
c++;
}
}


214
//****************************************************************
// Funo de limpa display
//****************************************************************
//
//****************************************************************
// Retorno : nada
//****************************************************************
void lcd_limpa_display (void)
{
char i; /* linha*/

lcd_pos_xy(1,1);
for(i =0; i<18; i++ )
lcd_escreve_char(0x20);
lcd_pos_xy(1,2);
for(i =0; i<18; i++ )
lcd_escreve_char(0x20);
}


/*****************************LCD.H******************************/
//declara funo que inicializa LCD

extern void lcd_ini(char modo1, char modo2);
//funcion para inicilaizar LCD
extern void lcd_envia_nibble(char dado);
//funcion para inicio del LCD a 8 bits (nibble)
extern void lcd_envia_byte(char endereco, char dado);
extern void lcd_pos_xy(char x, char y);
extern void delay_ms (unsigned int tempo);
extern void lcd_escreve_char(char c);
extern void lcd_escreve_string (char *c);

// As definies a seguir so utilizadas para acesso aos pinos do
display
#define lcd_enable PTBD_PTBD4 // pino enable do LCD
#define lcd_enable_dir PTBDD_PTBDD4 // direo do pino enable
#define lcd_rs PTBD_PTBD5 // pino rs do LCD
#define lcd_rs_dir PTBDD_PTBDD5 // direo do pino rs
#define lcd_d4 PTBD_PTBD0 // pino de dados d4 do LCD
#define lcd_d4_dir PTBDD_PTBDD0 // direo do pino d4
#define lcd_d5 PTBD_PTBD1 // pino de dados d5 do LCD
#define lcd_d5_dir PTBDD_PTBDD1 // direo do pino d5
#define lcd_d6 PTBD_PTBD2 // pino de dados d6 do LCD
#define lcd_d6_dir PTBDD_PTBDD2 // direo do pino d6
#define lcd_d7 PTBD_PTBD3 // pino de dados d7 do LCD
#define lcd_d7_dir PTBDD_PTBDD3 // direo do pino d7

#define lcd_seg_lin 0x40 //Endereo da 2a.linha na RAM do LCD

#define cpu_clock 20000
215

// Definies utilizadas para configurao do display
#define cursor_ligado 2
#define cursor_desligado 0
#define cursor_piscante 1
#define cursor_fixo 0
#define display_ligado 4
#define display_desligado 0
#define display_8x5 0
#define display_10x5 4
#define _2_linhas 8
#define _1_linha 0

union ubyte
{
char _byte;
struct
{
char b0 : 1;
char b1 : 1;
char b2 : 1;
char b3 : 1;
char b4 : 1;
char b5 : 1;
char b6 : 1;
char b7 : 1;
} bit;
};

;**********************************MAIN.ASM*********************
;* Este arquivo tem o programa em ASM com as chamadas da funo em
;C desejada. No exemplo abaixo tem a chamada da funo
;LCD_escreve_char que tem como parmetro de entrada:
;1 dado do tipo char (8 bits) => carregado no registrador A;
;1 dado do tipo int (16 bits) => carregado no par HX;
;2 dados do tipo char(8 bits cada) => carregado em A e em X;
;1 dado do tipo endereo(16 bits) => carregado no registrador HX o
;valor do endereo,
; exemplo: LDHX #$0060
;****************************************************************
; export symbols

; XDEF uma definio de smbolo externo para que outros mdulos
possam utilizar
XDEF asm_main
; XREF informa ao montador que os smbolos so definidos em outros
mdulos externos.
XREF lcd_envia_byte
XREF lcd_escreve_char
XREF lcd_escreve_string
XREF lcd_escreve_num
216
XREF lcd_pos_xy
XREF delay_ms


; Include derivative-specific definitions

INCLUDE 'derivative.inc'

; rea de dados variveis
Data_Sect: SECTION
temperatura_pot: DS.W 1
temperatura_real: DS.W 1
temporario: DS.W 1

; rea de constantes
ConstSect: SECTION ; sees de constantes
definida: DC.B "Definida:"
definida_l: DC.B $00 ;NECESSARIO PARA FINALIZAR O STRING
real: DC.B "Real:"
real_1: DC.B $00
; variable/data section
MY_ZEROPAGE: SECTION SHORT

;*****==== C D I G O ===*****

MyCode: SECTION

asm_main:
;=== CONFIGURACAO HCS ===
config:
LDA SOPT1 ;desabilita COP
AND #127
STA SOPT1
...
CLI ;habilita interrupes
;=== PRINCIPAL ===
principal:
BSR lcd_mostra_valores ;chama label responsavel pelo controle do
;LCD
LDHX temperatura_real ;aqui compara se a temperatura ja est igual
CPHX temperatura_pot
BEQ delay_4s ;label para esperar a temperatura estabilizar um
;pouco util para o rel nao ficar chaveando, evitando
;uma possvel queima da lampada
BRA principal


;=== SUB-ROTINAS ===
delay_4s: ;label responsavel por fazer um delay de 4 segundos.
LDHX #1000
JSR delay_ms
LDHX #1000
217
JSR delay_ms
LDHX #1000
JSR delay_ms
LDHX #1000
JSR delay_ms
RTS

lcd_mostra_valores:
;///*** PARTE RESPONSAVEL PELA TEMPERATURA DO POTENCIOMENTRO
;escreve 'Definida:' no LCD
LDA #1 ;define posicao no LCD
LDX #2
JSR lcd_pos_xy
LDHX #definida
JSR lcd_escreve_string
;BIT --X da temperatura definida pelo usuario
LDA #1 ;define posicao no LCD
LDX #15
JSR lcd_pos_xy
LDHX temperatura_pot ;carrega temperatura_pot em H:X
STX temporario ;joga valor de X para 'temporario'
LDA temporario ;carrega valor de 'temporario' em A
AND #%00001111 ;faz um AND bit a bit, para pegar somente o valor
; menos significativo do acumulador
JSR lcd_escreve_num ;chama funcao 'lcd_escreve_num' da biblioteca,
; e escreve o valor de A no LCD
;BIT -X- da temperatura definida pelo usuario
LDA #1 ;define posicao no LCD
LDX #14
JSR lcd_pos_xy
LDHX temperatura_pot ;carrega temperatura_pot em H:X
STX temporario ;joga valor de X para 'temporario'
LDA temporario ;carrega valor de 'temporario' em A
LSRA ;desloca A 4 bits para direita, e coloca 0 nos bits
;deslocados
LSRA ; essa funcao se torna necessaria, para pegar a parte mais
; significativa do registrador A.
STA temporario ;necessario, se no ocorre ERRO no LCD
LDA temporario
LSRA
LSRA
AND #%00001111 ;faz um AND bit a bit, para pegar somente o valor
; menos significativo do acumulador
JSR lcd_escreve_num ;chama funcao 'lcd_escreve_num' da biblioteca,
; e escreve o valor de A no LCD
;BIT X-- da temperatura definida pelo usuario
LDA #1 ;define posicao no LCD
LDX #13
JSR lcd_pos_xy
LDHX temperatura_pot ;carrega temperatura_pot em H:X
PSHH ;armazena conteudo de H na pilha
PULA ;carrega conteudo da pilha (H) em A
218
AND #%00001111 ;filtra nibble menos significativo
JSR lcd_escreve_num ;escreve valor no LDC
;///*** PARTE RESPONSAVEL PELA TEMPERATURA DO LM35 ***///
;escreve 'Real:' no LCD
LDA #2 ;define posicao no LCD
LDX #2
JSR lcd_pos_xy
LDHX #real
JSR lcd_escreve_string
;BIT --X da temperatura do LM35
LDA #2 ;define posicao no LCD
LDX #15
JSR lcd_pos_xy
LDHX temperatura_real ;carrega temperatura_real em H:X
STX temporario ;joga valor de X para 'temporario'
LDA temporario ;carrega valor de 'temporario' em A
AND #%00001111 ;faz um AND bit a bit, para pegar somente o valor
; menos significativo do acumulador
JSR lcd_escreve_num ;chama funcao 'lcd_escreve_num' da biblioteca,
; e escreve o valor de A no LCD
;BIT -X- da temperatura do LM35
LDA #2 ;define posicao no LCD
LDX #14
JSR lcd_pos_xy
LDHX temperatura_real ;carrega temperatura_real em H:X
STX temporario ;joga valor de X para 'temporario'
LDA temporario ;carrega valor de 'temporario' em A
LSRA ;desloca A 4 bits para direita, e coloca 0 nos bits
;deslocados
LSRA ; essa funcao se torna necessaria, para pegar a parte mais
STA temporario
LDA temporario
LSRA ; significativa do registrador A.
LSRA
AND #%00001111 ;faz um AND bit a bit, para pegar somente o valor
; menos significativo do acumulador
JSR lcd_escreve_num ;chama funcao 'lcd_escreve_num' da biblioteca,
; e escreve o valor de A no LCD
;BIT X-- da temperatura do LM35
LDA #2 ;define posicao no LCD
LDX #13
JSR lcd_pos_xy
LDHX temperatura_real ;carrega temperatura_real em H:X
PSHH ;armazena conteudo de H na pilha
PULA ;carrega conteudo da pilha (H) em A
AND #%00001111 ;filtra nibble menos significativo
JSR lcd_escreve_num ;escreve valor no LDC
RTS
219
Captulo 13: Materiais de apoio
Nessa seo, se encontram os resumos dos registradores e das instrues
Assembly, alm do ndice de instrues do captulo 3 deste livro.
13.1 Resumo das Instrues...................................220
13.2 Tabela de Vetores...........................................235
13.3 Resumo dos Registradores do HCS08QG8......236
13.3.1 Registradores do Sistema............................236
13.3.2 Entradas Digitais..........................................237
13.3.3 Entradas Analgicas, Conversor e Comparador
AD...........................................................................239
13.3.4 Interrupes................................................243
13.3.5 Temporizador de 8 Bits MTIM..................244
13.3.6 Temporizador de 16 Bits TPM...................245
13.3.7 Conexo Serial Assncrona SCI..................248
No desampares a sabedoria, e ela te guardar; ama-a, e ela te proteger.
Provrbios 4:6
220
13.1 Resumo das Instrues
LDA LoaD Accumulator
Instruo responsvel por carregar valores imediatos ou diretos no acumulador .
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode (fazer em todos!) A6 B6 C6 F6 E6 D6 9EE6 9ED6
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk(em todos!) 2 3 4 3 3 4 4 5
Sinalizadores Alterados V, N e Z
STA STore Accumulator
Instruo responsvel por armazenar o contedo do acumulador em uma posio de memria.
Modo de Endereamento DIR EXT IX IX1 IX2 SP1 SP2
Opcode B7 C7 F7 E7 D7 9EE7 9ED7
Operando dd hhll -- ff eeff ff eeff
Ciclos de BusClk 3 4 3 3 4 4 5
Sinalizadores Alterados V, N e Z
LDX LoaD X
Instruo responsvel por carregar imediatos ou diretos valores em X.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode AE BE CE FE EE DE 9EEE 9EDE
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados V, N e Z
STX STore X
Instruo responsvel por armazenar os valores de X em uma posio da memria.
Modo de Endereamento DIR EXT IX IX1 IX2 SP1 SP2
Opcode BF CF FF EF DF 9EEF 9EDF
Operando dd hhll -- ff eeff ff eeff
Ciclos de BusClk 3 4 3 3 4 4 5
Sinalizadores Alterados V, N e Z
LDHX LoaD H:X
Instruo responsvel por carregar um valor em H:X.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1
Opcode 45 55 32 9EAE 9ECE 9EBE 9EFE
Operando ii dd hhll -- ff eeff ff
Ciclos de BusClk 3 4 5 5 5 6 5
Sinalizadores Alterados V, N e Z
STHX STore H:X
Instruo responsvel por armazenar o contedo de H:X em um espao na memria.
Modo de Endereamento DIR EXT SP1
Opcode 35 96 9EFF
Operando dd hhll ff
Ciclos de BusClk 4 5 5
Sinalizadores Alterados V, N e Z
221
MOV - MOVement
Carrega valores em posies de memria ou faz uma cpia do conteudo de uma posio da memria em
outra.
Modo de Endereamento IMM/DIR DIR/DIR DIR/IX+ IX+/DIR
Opcode 6E 4E 5E 7E
Operando ii, dd dd, dd , dd dd
Ciclos de BusClk 4 5 5 5
Sinalizadores Alterados V, N e Z
CLR - CLeaR
Apaga todo o contedo de uma posio de memria ou de um componente da CPU.
Modo de Endereamento INH(A) INH(X) INH(H) DIR IX IX1 SP1
Opcode 4F 5F 8C 3F 6F 7F 9E6F
Operando dd ff ff
Ciclos de BusClk 1 1 1 5 4 5 6
Sinalizadores Alterados V, N e Z
BSET Bit Set
Seta o bit selecionado para uma determinada posio da memria.
Modo de Endereamento DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR (b7)
Opcode 10 12 14 16 18 1A 1C 1E
Operando ddrr ddrr ddrr ddrr ddrr ddrr ddrr ddrr
Ciclos de BusClk 5 5 5 5 5 5 5 5
Sinalizadores Alterados Nenhum
BCLR Bit CLeaR
Apaga o bit selecionado para uma determinada posio da memria.
Modo de Endereamento DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR (b7)
Opcode 11 13 15 17 19 1B 1D 1F
Operando ddrr ddrr ddrr ddrr ddrr ddrr ddrr ddrr
Ciclos de BusClk 5 5 5 5 5 5 5 5
Sinalizadores Alterados Nenhum
TAP (84) Tranference from Accumulator to Processor
TPA (85) Tranference from Processor to Accumulator
A instruo TAP copia o contedo do Acumulador e cola no CCR (registrador de
estado do processador), alterando seus flags e a TPA faz o inverso, copia o contedo do CCR e
cola no acumulador. Ambas possuem modo de endereamento implcito (INH).
Outras instrues de Transferncia:
TAX (97) Transfere o contedo de A para X, sem alterar o contedo de A.
TXA (9F) Transfere o contedo de X para A, sem alterar o contedo de X.
TSX (95) Transfere o contedo do SP + 1 para H:X, sem alterar o contedo de SP.
TXS (94) Transfere o contedo de H:X-1 para SP, sem alterar o contedo de H:X.
222
Instrues de Armazenamento e Remoo na Pilha (Todas em modo de endereamento INH):
PSHA (87) Armazena o contedo de A na pilha e decrementa uma posio do SP.
PSHH (8B) Armazena o contedo de H na pilha e decrementa uma posio do SP.
PSHX (89) Armazena o contedo de X na pilha e decrementa uma posio do SP.
PULA (86) Incrementa uma posio SP, retira seu contedo e armazena em A.
PULH (8A) Incrementa uma posio SP, retira seu contedo e armazena em H.
PULX (88) Incrementa uma posio SP, retira seu contedo e armazena em X.
RSP (9C) - SP retorna ao valor inicial, ou seja, SP = $00FF. (INH)
ADC ADdition with Carry
Realiza a seguinte adio: A + Operando + C e armazena a resposta no acumulador.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A9 B9 C9 F9 E9 D9 9EE9 9ED9
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados V, N, Z, H e C
ADD ADDition
Realiza a seguinte adio: A + Operando e armazena a resposta no acumulador.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode AB BB CB FB EB DB 9EEB 9EDB
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados V, N, Z, H e C
AIS Addition Indexed to Stack-pointer
Soma um operando sinalizado convertido a 16 bits ao contedo do valor do apontador da pilha, e
armazena o resultado na pilha.
Modo de Endereamento IMM
Opcode A7
Operando ii
Ciclos de BusClk 2
Sinalizadores Alterados Nenhum
AIX Addition Indexed to h:X
Soma um operando sinalizado convertido a 16 bits ao contedo do valor de H:X, e armazena o resultado
em H:X.
Modo de Endereamento IMM
Opcode AF
Operando ii
Ciclos de BusClk 2
Sinalizadores Alterados Nenhum
223
SBC SuBtraction with Carry
Realiza a seguinte subtrao: A - Operando C e armazena a resposta no acumulador.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A2 B2 C2 F2 E2 D2 9EE2 9ED2
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados V, N, Z, e C
SUB SUBtraction
Realiza a seguinte subtrao: A Operando e armazena a resposta no acumulador.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A0 B0 C0 F0 E0 D0 9EE0 9ED0
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados V, N, Z, e C
MUL MULtiplication
Realiza a seguinte multiplicao sem sinal: X * A. Armazena em X a MSB e em A o LSB.
Modo de Endereamento INH
Opcode 42
Operando --
Ciclos de BusClk 5
Sinalizadores Alterados H e C
DIV DIVision
Realiza a seguinte diviso sem sinal: contedo de H:A / contedo de X
O quociente da diviso armazenado em A e o resto em H. O divisor X no alterado
Modo de Endereamento INH
Opcode 52
Operando --
Ciclos de BusClk 6
Sinalizadores Alterados Z e C
INC INCrease
Incrementa uma unidade no local indicado no operando.
Modo de Endereamento DIR INH(A) INH(X) IX IX1 SP1
Opcode 3C 4C 5C 7C 6C 9E6C
Operando dd -- -- -- ff ff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados V, N e Z
DEC DECrease
Decrementa uma unidade no local indicado no operando.
Modo de Endereamento DIR INH(A) INH(X) IX IX1 SP1
Opcode 3A 4A 5A 7A 6A 9E6A
Operando dd -- -- -- ff ff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados V, N e Z
224
DAA Decimal Accumulator Adjust
Efetua o ajuste decimal do acumulador, para operaes realizadas em BCD, aps adies com ou sem
transporte.
Modo de Endereamento INH
Opcode 72
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados V, N, Z e C
AND - AND
Realiza a operao booleana AND (E ou &) entre o A e o Operando.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A4 B4 C4 F4 E4 D4 9EE4 9ED4
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados V, N e Z
ORA OR Accumulator
Realiza a operao booleana OR (OU ou |) entre o A e o Operando.
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode AA BA CA FA EA DA 9EEA 9EDA
Operando ii dd hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados V, N e Z
COM COMplement of 1
Faz o complemento de 1 (troca zeros por uns e uns por zeros) no operando.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 33 43 53 73 63 9E63
Operando dd -- -- -- ff eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados V, N, C e Z
NEG NEGation
Faz o complemento de 2 (troca zeros por uns e uns por zeros e soma 1) no operando.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 30 40 50 70 60 9E60
Operando dd -- -- -- ff Eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados V, N, C e Z
NSA Nibble Switch Accumulator
Efetua a troca dos nibbles (parte mais alta e parte mais baixa hexadecimal) do acumulador
Modo de Endereamento INH
Opcode 62
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados Nenhum
225
ASL Arithmetic Shift Left / LSL Logical Shift Left
Realiza o deslocamento esquerda dos bits do contedo do operando, equivalente multiplicao
inteira por dois. O MSB deslocado para o flag C e o LSB preenchido com 0.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 38 48 58 78 68 9E68
Operando dd -- -- -- ff eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados V, N, C e Z
ASR Arithmetic Shift Right
Realiza o deslocamento direita dos bits do contedo do operando, equivalente diviso inteira por dois
(sinalizada). O LSB flag C e o MSB preenchido com o valor anterior de C.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 37 47 57 77 67 9E67
Operando dd -- -- -- ff eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados V, N, C e Z
LSR Logic Shift Right
Realiza o deslocamento lgico direita dos bits do contedo do operando, equivalente diviso natural
por dois (no-sinalizada). O LSB deslocado para o flag C e o MSB recebe 0.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 34 44 54 74 64 9E64
Operando dd -- -- -- ff Eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados V, N, C e Z
ROL ROtation Left
Realiza a rotao esquerda dos bits do contedo do operando. Assim, os bits so deslocados esquerda,
o LSB recebe o valor inicial do flag C e o flag C recebe o valor inicial do MSB.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 39 49 59 79 69 9E69
Operando dd -- -- -- ff eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados V, N, C e Z
ROR ROtation Right
Realiza a rotao direita dos bits do contedo do operando. Assim, os bits so deslocados direita, o
MSB recebe o valor inicial do flag C e o flag C recebe o valor inicial do bit LSB.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 36 46 56 76 66 9E66
Operando dd -- -- -- ff Eeff
Ciclos de BusClk 5 1 1 4 5 6
Sinalizadores Alterados V, N, C e Z
226
CMP - CoMPare
Compara os valores do acumulador com o operando, fazendo a operao = A - Operando
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A1 B1 C1 F1 E1 D1 9EE1 9ED1
Operando ii dd Hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados V, N, C e Z
CPX ComPare X
Compara os valores do acumulador com o operando, fazendo a operao = X - Operando
Modo de Endereamento IMM DIR EXT IX IX1 IX2 SP1 SP2
Opcode A3 B3 C3 F3 E3 D3 9EE3 9ED3
Operando ii dd Hhll -- ff eeff ff eeff
Ciclos de BusClk 2 3 4 3 3 4 4 5
Sinalizadores Alterados V, N, C e Z
CPHX - ComPare H:X
Compara o contedo do registrador H:X com o contedo de 16 bits do operando.
Modo de Endereamento IMM DIR EXT SP1
Opcode 3E 75 65 9EF3
Operando jjkk dd hhll ff
Ciclos de BusClk 4 5 5 5
Sinalizadores Alterados V, N, C e Z
TST - TeST
Testa o contedo do operando, alterando os bits Z e N do CCR de acordo com o valor
comparado.
Modo de Endereamento DIR INH (A) INH (X) IX IX1 SP1
Opcode 3D 4D 5D 7D 6D 9E6D
Operando dd -- -- -- ff ff
Ciclos de BusClk 4 1 1 3 4 5
Sinalizadores Alterados V, N e Z
BRA BRanch Always
Efetua o desvio do fluxo do programa, at 127 posies adiante e 128 posies para trs.
Modo de Endereamento REL
Opcode 20
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BRN BRanch Never
Nunca desvia (equivale instruo NOP, com trs ciclos)
Modo de Endereamento REL
Opcode 21
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
227
BEQ Branch Equal
Desvia se igual (se Z = 1).
Modo de Endereamento REL
Opcode 27
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BNE Branch Not Equal
Desvia se o valor no for igual. (Se Z = 0)
Modo de Endereamento REL
Opcode 26
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BPL Branch if PLus
Desvia se positivo (Ou seja, se N = 0)
Modo de Endereamento REL
Opcode 2A
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BMI Branch if MInus
Desvia se negativo (ou seja, se N = 1)
Modo de Endereamento REL
Opcode 2B
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BCC Branch Carry Clear
Desvia se o Carry (flag C) igual a zero.
Modo de
Endereamento
REL
Opcode 24
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BCS Branch Carry Set
Desvia se o Carry (flag C) igual a um. (Idntica a instruo BLO)
Modo de Endereamento REL
Opcode 25
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
228
BHCC Branch Half-Carry Clear
Desvia se o Half-Carry (flag H) igual a zero.
Modo de Endereamento REL
Opcode 28
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BHCS Branch Half-Carry Set
Desvia se o Half-Carry (flag H) igual a um.
Modo de
Endereamento
REL
Opcode 29
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BMC Branch Mask-interruption Clear
Desvia se o bit de mscara de Interrupes (flag I) igual a zero (estiver habilitado).
Modo de Endereamento REL
Opcode 2C
Operando Rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BMS Branch Mask-interruption Set
Desvia se o bit de mscara de Interrupes (flag I) igual a um (no estiver habilitado).
Modo de Endereamento REL
Opcode 2D
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BHI Branch HIgh
Desvia se maior que o valor da comparao.
Modo de
Endereamento
REL
Opcode 22
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
229
BHS Branch High or Same
Desvia se maior ou igual que o valor da comparao.
Modo de Endereamento REL
Opcode 24
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BLO Branch LOwer
Desvia se menor que o valor da comparao.
Modo de Endereamento REL
Opcode 25
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BLS Branch Lower or Same
Desvia se menor que o valor da comparao.
Modo de
Endereamento
REL
Opcode 23
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BGT Branch Greater Than
Desvia se maior. (se N = V)
Modo de Endereamento REL
Opcode 92
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BGE Branch Greater or Equal
Desvia se maior ou igual. (se Z =1 ou N = V)
Modo de Endereamento REL
Opcode 90
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
230
BLT Branch Less Than
Desvia se menor. (se N V)
Modo de Endereamento REL
Opcode 91
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BLE Branch Less or Equal
Desvia se menor. (se Z = 1 ou N V)
Modo de Endereamento REL
Opcode 93
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BIL Branch Irq Low
Desvia para a posio indicada se o pino IRQ estiver em nvel 0.
Modo de
Endereamento
REL
Opcode 2E
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BIH Branch Irq High
Desvia para a posio indicada se o pino IRQ estiver em nvel 1.
Modo de
Endereamento
REL
Opcode 2F
Operando rr
Ciclos de BusClk 3
Sinalizadores Alterados Nenhum
BRSET BRanch if bit SET
Desvia se o bit indicado, da posio de memria descrita no operando, estiver setado.
Modo de Endereamento DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR (b7)
Opcode 00 02 04 06 08 0A 0C 0E
Operando ddrr ddrr ddrr ddrr ddrr ddrr ddrr ddrr
Ciclos de BusClk 5 5 5 5 5 5 5 5
Sinalizadores Alterados Nenhum
231
BRCLR BRanch if bit CLeaR
Desvia se o bit indicado, da posio de memria descrita no operando, estiver apagado.
Modo de Endereamento DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR (b7)
Opcode 01 03 05 07 09 0B 0D 0F
Operando ddrr ddrr ddrr ddrr ddrr ddrr ddrr ddrr
Ciclos de BusClk 5 5 5 5 5 5 5 5
Sinalizadores Alterados Nenhum
BSR Branch Sub-Routine
Desvia para a sub-rotina indicada.
Modo de
Endereamento
REL
Opcode AD
Operando rr
Ciclos de BusClk 5
Sinalizadores Alterados Nenhum
DBNZ Decrease and Branch if Not Zero
Decrementa o contedo da posio indicada no operando e desvia para posio apontada no
operando, caso o valor seja diferente de zero.
Modo de Endereamento DIR IX IX1 SP1
Opcode 3B 7B 6B 9E6B
Operando ddrr rr ffrr ffrr
Ciclos de BusClk 7 6 7 8
Sinalizadores Alterados Nenhum
DBNZA Decrease and Branch if Not Zero in Accumulator
Decrementa A e desvia para posio apontada no operando, caso o valor seja diferente de zero.
Modo de Endereamento IMM
Opcode 4B
Operando rr
Ciclos de BusClk 4
Sinalizadores Alterados Nenhum
DBNZX Decrease and Branch if Not Zero in X
Decrementa X e desvia para posio apontada no operando, caso o valor seja diferente de zero.
Modo de Endereamento INH
Opcode 5B
Operando rr
Ciclos de BusClk 4
Sinalizadores Alterados Nenhum
232
CBEQ Compare and Branch if EQual
Compara A com o contedo do operando e desvia para a posio indicada, se forem iguais.
Modo de Endereamento DIR IX+ IX1+ SP1
Opcode 31 71 61 9E61
Operando ddrr ee ffrr ffrr
Ciclos de BusClk 5 5 5 6
Sinalizadores Alterados Nenhum
CBEQA Compare and Branch if EQual Accumulator
Compara A com o valor imediato indicado e desvia se igual.
Modo de Endereamento IMM
Opcode 41
Operando iirr
Ciclos de BusClk 4
Sinalizadores Alterados Nenhum
CBEQX Compare and Branch if EQual X
Compara X com o valor imediato indicado e desvia se igual.
Modo de Endereamento IMM
Opcode 51
Operando iirr
Ciclos de BusClk 4
Sinalizadores Alterados Nenhum
JMP JuMP
Faz o salto do programa para determinada posio de memria. Ela faz um desvio absoluto para
a posio de memria indicada.
Modo de Endereamento DIR EXT IX IX1 IX2
Opcode BC CC FC EC DC
Operando dd eeff -- ff eeff
Ciclos de BusClk 3 4 3 3 4
Sinalizadores Alterados Nenhum
JSR Jump Sub-Routine
Faz o salto do programa para determinada sub-rotina.
Modo de Endereamento DIR EXT IX IX1 IX2
Opcode BD CD FD ED DD
Operando dd eeff -- ff eeff
Ciclos de BusClk 5 6 5 5 6
Sinalizadores Alterados Nenhum
RTS ReTurn Sub-routine
Provoca o retorno do fluxo do programa ao ponto seguinte chamada de sub-rotina.
Modo de Endereamento INH
Opcode 81
Operando --
Ciclos de BusClk 6
Sinalizadores Alterados Nenhum
233
RTI ReTurn Interruption
Provoca o retorno do fluxo do programa ao ponto seguinte de onde ocorreu a interrupo.
Modo de Endereamento INH
Opcode 80
Operando --
Ciclos de BusClk 9
Sinalizadores Alterados Todos, que recuperam o seu estado antes da interrupo
SEC SEt Carry
Seta o sinalizador C do CCR.
Modo de Endereamento INH
Opcode 99
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados C
CLC CLear Carry
Apaga o sinalizador C do CCR.
Modo de Endereamento INH
Opcode 98
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados C
SEI SEt Interruption-mask
Seta o sinalizador I do CCR. (Desabilita todas as interrupes)
Modo de Endereamento INH
Opcode 9B
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados I
CLI CLear Interruption-mask
Seta o sinalizador I do CCR. (Habilita todas as interrupes)
Modo de Endereamento INH
Opcode 9A
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados I
NOP No OPeration
No realiza nenhuma operao, apenas gasta um ciclo de relgio do programa.
Modo de Endereamento INH
Opcode 9D
Operando --
Ciclos de BusClk 1
Sinalizadores Alterados Nenhum
234
SWI SoftWare Interruption
Gera uma interrupo por software.
Modo de Endereamento INH
Opcode 83
Operando --
Ciclos de BusClk 11
Sinalizadores Alterados I
STOP STOP
Coloca a CPU em algum dos modos de parada (STOP3, STOP2 ou STOP1) dependendo da
configurao dos registrador SPMSC2.
Modo de Endereamento INH
Opcode 8E
Operando --
Ciclos de BusClk >=2
Sinalizadores Alterados I
WAIT WAIT
Coloca a CPU no modo de espera (WAIT mode).
Modo de Endereamento INH
Opcode 8F
Operando --
Ciclos de BusClk >=2
Sinalizadores Alterados I
235
13.2 Tabela de Vetores
Valor Endereo Nome do Vetor Sinalizador Bit de Habilitao Mdulo
0 $FFFE Vreset - - reset
1 $FFFC Vswi - - SWI
2 $FFFA Virq IRQSC: IRQF IRQSC: IRQIE IRQ
3 $FFF8 Vlvd SPMSC1:LVDF SPMSC1: LVDIE LVD
5 $FFF4 Vtpmch0 TPMC0SC: CH0F TPMC0SC: CH0IE TPM canal 0
6 $FFF2 Vtpmch1 TPMC1SC: CH1F TPMC1SC: CH1IE TPM canal 1
7 $FFF0 Vtpmovf TPMSC: TOF TPMSC: TOIE overflow TPM
12 $FFE6 Vmtim MTIMSC: TOF MTIMSC: TOIE overflow MTIM
13 $FFE4 Vspi SPIS: SPRF
SPIS: MODF
SPIS: SPTEF
SPIC1: SPIE
SPIC1: SPIE
SPIC1: SPTIE
SPI
14 $FFE2 Vscierr SCIS1: OR
SCIS1: NF
SCIS1: FE
SCIS1: PF
SCIC3: ORIE
SCIC3: NFIE
SCIC3: FEIE
SCIC3: PFIE
erro SCI
15 $FFE0 Vscirx SCISC1: IDLE
SCISC1: RDRF
SCIC2: ILIE
SCIC2: RIE
recepo SCI
16 $FFDE Vscitx SCIS1: TDRE
SCIS1: TC
SCIC2: TIE
SCIC2: TCIE
transmisso SCI
17 $FFDC Viic IICS:IICIF IICC:IICIE IC
18 $FFDA Vkeyboard KBISC: KBF KBISC: KBIE KBI
19 $FFD8 Vadc ADSC1: COCO ADSC1: AIEN A/D
20 $FFD6 Vacmp ACMPSC: ACF ACMPSC: ACIE ACMP
23 $FFD0 Vrti SRTISC: RTIF SRTISC: RTIE RTI
236
13.3 Resumo dos Registradores do HCS08QG8
13.3.1 Registradores do Sistema
----------------------------------------------------------------------------------------------------------------------------------
Registrador de Sinalizadores CCR (Condition Code Register)
----------------------------------------------------------------------------------------------------------------------------------
Tabela do Registrador CCR BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Bits de Leitura e Escrita V 1 1 H I N Z C
Valores Inicializados pelo Reset x 1 1 x 1 x x x
C Sinalizador de transporte/emprstimo (carry/borrow)
Z Sinalizador de Zero
N Sinalizador de negativo
H Indicador de Meio-transporte
V Sinalizador de Estouro
I Sinalizador de Interrupo
0 Interrupo habilitada
1 Interrupo desabilitada
----------------------------------------------------------------------------------------------------------------------------------
Registrador SOPT1 - System OPTions register 1
----------------------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x1802 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: COPE COPT STOPE ---- ---- ---- BKGPE RSTPE
Leitura(R)/Escrita(W): R/W R/W R/W ---- R R R/W R/W
Aps o reset: 1 1 0 1 0 0 1 0
Configurao usual: 0 1 0 1 0 0 1 0
BIT0 - RSTEPE - ReSeT Enable Pin Enable.
0 - pino na funo de Entrada/Sada
ou outra
1 - pino operando na funo
de reset externo do programa
BIT1 - BKGPE - BacKGroud Pin Enable
0 - funo de depurao do
pino desabilitada
1 - funo de depurao do
pino habilitada
BIT5 - STOPE - STOP Enable
0 - modo STOP desabilitado, a
instruo STOP no ser reconhecida pelo compilador
1 - modo STOP habilitado
BIT6 - COPT - COP Timeout
0 - Acontecer um reset aps 8 192 clocks
de barramento
1 - Acontecer um reset aps 262 144 clocks
de barramento
BIT7 - COPE - COP Enable
0 - COP desativado
1 - COP ativado
237
13.3.2 Entradas Digitais
----------------------------------------------------------------------------------------------------------------------------------
Registradores PTAD e PTBD - PorT A (B) Data
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0000 - Pgina Direta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ---- ---- PTAD5 PTAD4 PTAD3 PTAD2 PTAD1 PTAD0
Leitura(R)/Escrita(W): R R R W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0002 - Pgina Direta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: PTBD7 PTBD6 PTBD5 PTBD4 PTBD3 PTBD2 PTBD1 PTBD0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - PTXDn - PorT X Data n
0 - Porta est recebendo ou enviando nvel lgico 0.
1 - Porta est recebendo ou enviando nvel lgico 1.
----------------------------------------------------------------------------------------------------------------------------------
Registradores PTADD e PTBDD - PorT A (B) Data Direction
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0001 - Pgina Direta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ---- ---- PTADD5 PTADD4 PTADD3 PTADD2 PTADD1 PTADD0
Leitura(R)/Escrita(W) R R R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0003 - Pgina Direta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: PTBDD7 PTBDD6 PTBDD5 PTBDD4 PTBDD3 PTBDD2 PTBDD1 PTBDD0
Lei.(R)/Esc.(W) R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - PTXDDn - PorT X Data Direction n
0 - Porta configurada como entrada.
1 - Porta configurada como sada.
238
----------------------------------------------------------------------------------------------------------------------------------
Registradores PTAPE e PTBPE - PorT A (B) Pull-up Enable
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x1840 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: -- -- PTAPE5 PTAPE4 PTAPE3 PTAPE2 PTAPE1 PTAPE0
Lei.(R)/Esc.(W): R R R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x1844 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: PTBPE7 PTBPE6 PTBPE5 PTBPE4 PTBPE3 PTBPE2 PTBPE1 PTBPE0
Lei.(R)/Esc.(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - PTXDDn - PorT X D Pull-up Enable n
0 - pull-up desabilitado.
1 - pull-up habilitado.
.
239
13.3.3 Entradas Analgicas, Conversor e Comparador AD
----------------------------------------------------------------------------------------------------------------------------------
Registradores APCTL1 - Analogic Pin ConTroL register 1
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0017 - Pgina Direta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ADPC7 ADPC6 ADPC5 ADPC4 ADPC3 ADPC2 ADPC1 ADPC0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - ADPCn - AD Pin Control n
0 - Porta configurada em algum modo digital.
1 - Porta configurada como entrada analgica.
----------------------------------------------------------------------------------------------------------------------------------
Registrador ADCCFG - ADC ConFiGuration
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0016 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ADLPC ADIV ADLSMP MODE ADICLK
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 1 0 0 1 1 0 0 0
BIT1 e BIT0- ADICLK- AD Input CLK select
00 - a fonte selecionada BUSCLK/1
01 - a fonte selecionada BUSCLK/2
11 - clock interno ADACK
BIT3 e BIT2 - MODE
00 - resoluo do resultado de converso: 8 bits
10 - resoluo do resultado de converso: 10 bits
BIT4 - ADLSMP - AD Long SamPle time configuration
0 - tempo de amostragem normal (4 ciclos do clock
do ADC que foi selecionado)
1 - tempo de amostragem estendido (24 ciclos do
clock do ADC que foi selecionado)
BIT6 e BIT5 - ADIV - Clock DIVide Select
00 - Divide a fonte de clock selecionada por 1
01 - Divide a fonte de clock selecionada por 2
10 - Divide a fonte de clock selecionada por 4
11 - Divide a fonte de clock selecionada por 8
BIT7 - ADLPC - AD Low Power Configution
0 - alta velocidade de converso (consumo elevado)
1 - baixa consumo de converso (velocidade reduzida)

240
----------------------------------------------------------------------------------------------------------------------------------
Registrador ADCSC1 - ADC Status and Control 1
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0010 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: COCO AIEN ADCO ADCH
Leitura(R)/Escrita(W): R R/W R/W R/W
Aps o reset: 0 0 0 1 1 1 1 1
Configurao usual: 0 0 1 0 0 0 0 0
BIT0, BIT1, BI2, BIT3 e BIT4- ADCH - AD CHannel select
Valor Significado Pino
00000 Canal AD0 PTA0
00001 Canal AD1 PTA1
00010 Canal AD2 PTA2
00011 Canal AD3 PTA3
00100 Canal AD4 PTB0
00101 Canal AD5 PTB1
00110 Canal AD6 PTB2
00111 Canal AD7 PTB3
11111 Modo de converso
desativado
------
BIT5- ADCO - AD COntinuos conversion enable
0 - Converso nica.
1 - Converso contnua.
BIT6 - AIEN - Ad Interruption ENable
0 - Interrupo desabilitada.
1 - Interrupo habilitada. (Vetor 19 - $FFD8)
BIT7- COCO - COnversion COmplete flag
0 - Realizando a Converso (ou resultado de
comparao no condizente).
1 - Converso completa (ou resultado de
comparao condizente).
----------------------------------------------------------------------------------------------------------------------------------
Registrador ADCSC2 - ADC Status and Control 2
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0011 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ADACT ADTRG ACFE ACFGT 0 0 0 0
Leitura(R)/Escrita(W): R R/W R/W R/W W W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 0 0 0 0 0 0 0 0
BIT4 - ACFGT - Analogic Compare Function Greater Than enable
0 - O gatilho dispara com um valor menor que o da referncia de comparao (o BIT7 COCO do ADSC1
setado, se assim for o resultado da comparao)
1 - O gatilho dispara com um valor igual ou maior que o da referncia de comparao (o BIT7 COCO do
ADSC1 setado, se assim for o resultado da comparao)
BIT5 - ACFE - Analogic Compare Function Enable
0 - Comparao desabilitada.
1 - Comparao habilitada.
BIT6 - ADTRG - AD conversion TRiGger Select
0 - Gatilho via software (escrita no registrador ADCSC1)
1 - Gatilho via hardware (entrada em ADHWT).
241
BIT7- ADACT - AD conversion ACTive
0 - Sem converso em andamento.
1 - Converso em andamento.
----------------------------------------------------------------------------------------------------------------------------------
Registradores ADCRH e ADCRL - ADC Result High e ADC Result Low
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0012 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 0 0 0 0 0 ADR9 ADR8
Leitura(R)/Escrita(W): R R R R R R R R
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0013 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ADR7 ADR6 ADR5 ADR4 ADR3 ADR2 ADR1 ADR0
Leitura(R)/Escrita(W): R R R R R R R R
Aps o reset: 0 0 0 0 0 0 0 0
BITn - ADRn - AD Result n
0 - O nvel lgico convertido da tenso nesse bit 0
1 - O nvel lgico convertido da tenso nesse bit 1
----------------------------------------------------------------------------------------------------------------------------------
Registradores ADCCVH e ADCCVL - ADC Compare Value High e Low
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0014 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 0 0 0 0 0 ADCV9 ADCV8
Leitura(R)/Escrita(W): R R R R R R R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0015 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ADCV7 ADCV6 ADCV5 ADCV4 ADCV3 ADCV2 ADCV1 ADCV0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BITn - ADRn - AD Result n
0 - O nvel lgico a ser comparado nesse bit 0
1 - O nvel lgico a ser comparado nesse bit 1
242
----------------------------------------------------------------------------------------------------------------------------------
Registrador ACMPSC - Analog CoMParator Status and Control
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x001A - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: ACME ACBGS ACF ACIE ACO ACOPE ACMOD
Leitura(R)/Escrita(W): R/W R/W R/W R/W R R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 1 0 0 0 0 0 X 0
BIT1 e BIT0 - ACMOD - Analogic Comparator MODe
00 - O BIT5 ser setado na borda de
descida do BIT3 do comparador
01 - O BIT5 ser setado na borda de
subida do BIT3 do comparador
10 - O BIT5 ser setado na borda de
descida do BIT3 do comparador
11 - O BIT5 ser setado na borda de
subida ou descida do BIT3 do comparador
BIT2 - ACOPE - AC Output Pin Enable
0 - Sada externa desabilitada (assim,
PTA4 pode ser utilizada para outras funes).
1 - Sada externa habilitada.
BIT3 - ACO - AC Output
0 - Tenso na entrada inversora
maior que na entrada no-inversora
1 - Tenso na entrada inversora
menor que na entrada no-inversora
BIT4 - ACIE - AC Interrupt Enable
0 - Interrupo desabilitada
1 - Interrupo habilitada (Vetor 20 -
$FFD6). A interrupo acontece quando o BIT5 setado,
indicando o trmino da comparao.
BIT5 - ACF - AC Flag
0 - Nenhum evento de comparao ocorreu.
1 - Ocorreu algum evento de comparao.
BIT6 - ACBGS - AC BandGap Select
0 - Tenso na entrada no-nversora
proveniente do pino associado a PTA1.
1 - Tenso na entrada no-inversora
proveniente da referncia interna de aproximadamente
1,2V
BIT7 - ACME - AC Module Enable
0 - Mdulo desabilitado
1 - Mdulo habilitado, assim as portas PTA0
e PTA1 no se comportam como entradas digitais, por
exemplo.
243
13.3.4 Interrupes
----------------------------------------------------------------------------------------------------------------------------------
Registrador IRQSC - Interruption Pin ReQuest Status and Control
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x00F - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 IRQDD 0 IRQPE IRQF IRQACK IRQIE IRQMOD
Leitura(R)/Escrita(W): R R/W R R/W R W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 0 0 0 1 0 0 1 0
BIT0 - IRQMOD - IRQ detection MODe
0 - O gatilho dispara com a transio
do sinal de entrada.
1 - O gatilho dispara com a transio
e no nvel lgico da entrada.
BIT1 - IRQIE - IRQ Interrupt Enable
0 - Funo desabilitada.
1 - Funo habilitada. (Vetor $FFFA)
BIT2 - IRQACK - IRQ ACKnowlegde
1 - Apaga sinalizador de interrupo.
BIT3 - IRQF - IRQ Flag
0 - No aconteceu interrupo.
1 - Aconteceu interrupo.
BIT4 - IRQPE - IRQ Pin Enable
0 - Pino desabilitado.
1 - Pino habilitado.
BIT6 - IRQDD - IRQ pull Device Disable
0 - Pull-up /pull-down continua habilitado.
1 - Pull-up/pull-down desabilitado.
----------------------------------------------------------------------------------------------------------------------------------
Registrador SRTISC System Real Time Interruption Status and Control
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x1808 - Pgina Alta
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: RTIF RTIACK RTICLCKS RTIE --- RTIS2 RTIS1 RTIS0
Leitura(R)/Escrita(W): R W R/W R/W R R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 0 0 0 1 0 1 1 1
BIT2, BIT1 e BIT1 RTISn RIT Delay Select
RTIS2 RTIS1 RTIS0 Clock Interno
(1kHz)
Clock externo
0 0 0 No opera RTI No opera RTI
0 0 1 8ms Freq / 256
0 1 0 32ms Freq / 1024
0 1 1 64ms Freq / 2048
1 0 0 128ms Freq / 4096
1 0 1 256ms Freq / 8192
1 1 0 512ms Freq / 16384
1 1 1 1024ms Freq / 32768
BIT4 - RTIE RTI Enable
0 Interrupo desabilitada.
1 Interrupo habilitada. (Vetor $FFD0)
BIT5 - RTICLCKS - RTI Clock Select
0 Fonte interna de 1kHz.
1 Fonte externa.
BIT6 - RTIACK RTI acknowlegdge
1 - Apaga sinalizador de interrupo.
BIT7 - RTIF - RTI Flag
0 - No aconteceu interrupo.
1 - Aconteceu interrupo.
244
13.3.5 Temporizador de 8 Bits MTIM
----------------------------------------------------------------------------------------------------------------------------------
Registrador MTIMSC- MTIM Status and Control
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x003C - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: TOF TOIE TRST TSTP 0 0 0 0
Leitura(R)/Escrita(W): R R/W W R/W R R R R
Aps o reset: 0 0 0 1 0 0 0 0
BIT4 - TSTP - mTim counter SToP
0 - Libera a contagem
1 - Impede a continuidade da contagem
BIT5 - TRST - mTim counter ReSeT
Quando setado, esse bit reinicia a
contagem do microcontrolador.
BIT6 - TOIE - mTim Overflow Interrupt Enable
0 - Funo desabilitada.
1 - Funo habilitada.(Vetor 12 - $FFE6)
BIT7 - TOF - mTim Overflow Flag
0 - No aconteceu interrupo.
1 - Aconteceu interrupo.
----------------------------------------------------------------------------------------------------------------------------------
Registrador MTIMCLK- MTIM CLocK configuration register
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x003D - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 0 CLKS PS
Leitura(R)/Escrita(W): R R R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BIT0, BIT1, BIT2 e BIT3 - PS - PreScaler
0 Divide por 1 0101 Divide por 32
0001 Divide por 2 0110 Divide por 64
10 Divide por 4 0111 Divide por 128
0011 Divide por 8 1XXX Divide por 256
0100 Divide por 16
BIT6, BIT7 - CLKS - CLocK Source select
00 - BUSCLK
01 - XCLK
10 - TCLK, incremento do MTIM na borda de descida
11 - TCLK, incremento do MTIM na borda de subida
245
13.3.6 Temporizador de 16 Bits TPM
OBS: Canal 0 = PTA0 e Canal 1 = PTB5
----------------------------------------------------------------------------------------------------------------------------------
Registrador TPMMODH e TPMMODL - TPM MODulo High and Low
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0043 - Pgina Baixa (TPMMODH)
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0044 - Pgina Baixa (TPMMODL)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
----------------------------------------------------------------------------------------------------------------------------------
TPMC0VH, TPMC0VL, TPMC1VH e TPMC1VL - TPM Channel 0 (or 1) Value High Low
Endereo: 0x0046 - Pgina Baixa (TPMC0VH)
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0047- Pgina Baixa (TPMC0VL)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0049 - Pgina Baixa (TPMC1VH)
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
246
Endereo: 0x004A - Pgina Baixa (TPMC1VL)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Contagem do TPM
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
----------------------------------------------------------------------------------------------------------------------------------
Registrador TPMSC - TPM Status and Control
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0040 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: TOF TOIE CPWMS CLKSB CLKSA PS2 PS1 PS0
Leitura(R)/Escrita(W): R R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 0 0 0 0 1 -- -- --
BIT2, BIT1 e BIT0 - PSn - Prescaler Select n
0 Divide por 1 001 Divide por 2 010 Divide por 4 011 Divide por 8
100 Divide por 16 101 Divide por 32 110 Divide por 64 111 Divide por 128
BIT4, BIT3 - CLKSy - CLocK Source select y
00 - TPM paralisado 01 BUSCLK 10 XCLK 11 - Clock externo.
BIT5 - CPWMS - Center-alligned PWM Select
0 - Modo normal.
1 - Modo central.
BIT6 - TOIE - Timer Overflow Interrupt Enable
0 - Funo desabilitada.
1 - Funo habilitada (Vetor 7 - $FFF0)
BIT7 - TOF - Timer Overflow Flag
0 - No houve estouro de contagem
1 - Houve estouro de contagem
247
----------------------------------------------------------------------------------------------------------------------------------
Registrador TPMC0SC e TPMC1SC - TPM Channel 0 (or 1) Status and Control
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0045 - Pgina Baixa (TPMC0SC)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: CH0F CH0IE MS0B MS0A ELS0B ELS0A 0 0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R R
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0048 - Pgina Baixa (TPMC1SC)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: CH1F CH1IE MS1B MS1A ELS1B ELS1A 0 0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R R
Aps o reset: 0 0 0 0 0 0 0 0
BIT5, BIT4, BIT3 e BIT2 - ELSxy e MSxy - Edge/Level Select
x y e Mode Select x y (y=A ou B)
MSxB MSxA ELSxB ELSxA
Modo Selecionado
x x 0 0 Canal desativado
0 0 0 1 Captura (borda de subida)
0 0 1 0 Captura (borda de descida)
0 0 1 1 Captura(ambas as bordas)
0 1 0 0 Comparao (seta o CHxF)
0 1 0 1 Comparao (inverte o canal)
0 1 1 0 Comparao (limpa o canal)
0 1 1 1 Comparao (seta o canal)
1 x 1 0 PWM (nvel ativo alto)
1 x x 1 PWM (nvel ativo baixo)
BIT6 - CHxIE - CHannel x Interrupt Enable
0 - Funo desabilitada.
1 - Funo habilitada.
(Canal 0: Vetor 5 - $FFF4; Canal 1: Vetor 6 - $FFF2)
BIT7 - CHxF - CHannel x Flag
0 - No aconteceu captura ou comparao.
1 - Aconteceu captura ou comparao.
248
13.3.7 Conexo Serial Assncrona SCI
----------------------------------------------------------------------------------------------------------------------------------
Registrador SCID - SCI Data register
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0027 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: Caractere a ser recebido (R)/transmitido (W) pela SCI
Leitura(R)/Escrita(W): R/W
Aps o reset: 0 0 0 0 0 0 0 0
----------------------------------------------------------------------------------------------------------------------------------
Registradores SCIBDH e SCIBDL - SCI Baud Rate High and Low
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0020 - Pgina Baixa (SCIBDH)
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8
Nome do BIT: 0 0 0 SBR12 SBR11 SBR10 SBR9 SBR8
Leitura(R)/Escrita(W): R R R R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Endereo: 0x0021 - Pgina Baixa (SCIBDL)
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: SBR7 SBR6 SBR5 SBR4 SBR3 SBR2 SBR1 SBR0
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
249
----------------------------------------------------------------------------------------------------------------------------------
Registrador SCIC2 - SCI Control 2
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0023 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: TIE TCIE RIE ILIE TE RE RWU SBK
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
Configurao usual: 1 0 1 0 1 1 0 0
BIT0 - SBK - Send BreaK
0 - Andamento normal da SCI.
1- O prximo caractere a ser enviado ser BREAK.
A SCI continuar enviando esse caractere enquanto
esse bit estiver setado.
BIT1 - RWU - Receiver WakeUp control
0 - Receptor operando normalmente.
1 - Receptor em modo de baixa potncia,
no aguardo de um evento ativador (selecionado pelo
bit WAKE do registrador SCIC1).
BIT2 - RE - Receiver Enable
0 - Receptor desabilitado.
1 - Receptor habilitado.
BIT3 - TE- Transmitter Enable
0 - transmissor desabilitado.
1 - transmissor habilitado.
BIT4 - ILIE - Idle Line Interrupt Enable
Habilita a interrupo pela inatividade de linha
de recepo (o par o flag IDLE SCIS1).
0 - Interrupo desabilitada.
1- Interrupo habilitada. (Vetor 15 - $FFE0)
BIT5 - RIE - Receiver Interrupt Enable
Habilita a interrupo do receptor, assim quando o flag
RDRF for setado, gerar uma interrupo.
0 - Interrupo desabilitada.
1- Interrupo habilitada. (Vetor 15 - $FFE0)
BIT6 - TCIE - Transmission Complete Interruption Enable
Habilita a interrupo do transmissor para transmisso
completa (o par o flag TC SCIS1).
0 - Interrupo desabilitada.
1- Interrupo habilitada. (Vetor 16 - $FFDE)
BIT7 - TIE - Transmit Interruption Enable
Habilita a interrupo do transmissor para buffer de
transmisso vazio. (o par o flag TDRE SCIS1).
0 - Interrupo desabilitada.
1- Interrupo habilitada. (Vetor 16 - $FFDE)
250
----------------------------------------------------------------------------------------------------------------------------------
Registrador SCIS1 - SCI Status 1
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0024 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: TDRE TC RDRF IDLE OR NF FE PF
Leitura(R)/Escrita(W): R R R R R R R R
Aps o reset: 1 1 0 0 0 0 0 0
BIT0 - PF - Parity-error Flag
0 - No foi detectado erro de paridade.
1 - Foi detectado erro de paridade.
BIT1 - FE- Framing Error flag
0 - No foi detectado erro de quadro
1 - Foi detectado erro de quadro
BIT2 - NF - Noise Flag
0 - No foi detectado rudo
1 - Foi detectado rudo.
BIT3 - OR- receiver OverRun flag
0 - No foi detectado sobrescrita
1 - Houve sobrescrita de dado.
BIT4 - IDLE - IDLE line flag
0 - No foi detectada inatividade na linha
1 - Houve detectao de inatividade na
linha.
BIT5 - RDRF - Receiver Data Register Full
0 - O buffer de recepo est vazio.
1- H um novo caractere disponvel no
registrador SCID.
BIT6 - TC - Transmission Complete flag
0 - Trasmisso em andamento.
1 - Nenhuma transmisso em andamento.
BIT7 - TDRE - Transmit Data Register Empty
0 - H um caractere no buffer de trasmisso.
1 - O buffer de trasmisso est vazio.
----------------------------------------------------------------------------------------------------------------------------------
Registrador SCIS2 - SCI Status 2
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0025 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: 0 0 0 0 0 BRK13 0 RAF
Leitura(R)/Escrita(W): R R R R R R/W R R
Aps o reset: 0 0 0 0 0 0 0 0
BIT0 - RAF - Receiver Active Flag
0 - O receptor no recebe nenhum caractere.
1 - A recepo do caractere est em andamento.
BIT1 - BRK13 - BReaK character lenght
0 - caractere BREAK com 10 bits (11 se M=1).
1 - caractere BREAK com 11 bits (12 se M=1).
251
----------------------------------------------------------------------------------------------------------------------------------
Registrador SCIC1 - SCI Control 1
----------------------------------------------------------------------------------------------------------------------------------
Endereo: 0x0022 - Pgina Baixa
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
Nome do BIT: LOOPS SCISWAI RSRC M WAKE ILT PE PT
Leitura(R)/Escrita(W): R/W R/W R/W R/W R/W R/W R/W R/W
Aps o reset: 0 0 0 0 0 0 0 0
BIT0 - PT - Parity Type
0 - Paridade par.
1 - Paridade mpar.
BIT1 - PE - Parity Enable
0 - Paridade desabilitada.
1 - Paridade habilitada. (Vetor 14 - $FFE2).
BIT2 - ILT - Idle Line Type select
0 - A contagem inicia-se aps o bit START.
1 - A contagem inicia-se aps o bit STOP.
BIT3 - WAKE- receiver WAKEup mode select
0 - Receptor ativado quando a linha est inativa.
1 - Receptor ativado quando recebe um caractere de endereamento.
BIT4 - M - 9-bit or 8-bit Mode select
0 - 8 bits de dados (mais o START e o STOP totalizando 10 bits).
1 - 9 bits de dados (mais o START e o STOP totalizando 11 bits).
BIT5 - RSRC - Receiver SouRCe select
0 - Modo LOOP normal, os bits RxD e TxD no so utilizados pela SCI.
1 - Modo "A Um Fio": a sada da SCI est conectada a sua entrada e ao pino TxD.
BIT6 - SCISWAI - SCI Stops in WAIt mode
0 - A SCI opera durante o modo WAIT.
1 - A SCI no opera durante o modo WAIT.
BIT7 - LOOPS - LOOP mode Select
0 - Modo LOOP desativado.
1 - Modo LOOP ativado: o pino de sada TxD conectado entrada RxD.
252
ndice das Instrues do Captulo 3
-Armazenamento de dados
LDA 32
STA 33
LDX 33
STX 34
LDHX 35
STHX 35
MOV 36
CLR 37
BSET 37
BCLR 38
TAP 38
TPA 38
PSHA 38
PSHH 38
PSHX 38
PULA 38
PULH 38
PULX 38
RSP 38
Operaes lgicas e aritmticas
ADC 39
ADD 40
AIS 41
AIX 41
SBC 43
SUB 43
MUL 44
DIV 44
INC 45
DEC 46
DAA 47
AND 47
ORA 48
COM 48
NEG 49
NSA 50
ASL 50
LSL 50
ASR 51
LSR 51
ROL 52
ROR 53
Teste e Desvio
CMP 54
CPX 55
CPHX 56
TST 57
BRA 57
BRN 58
BEQ 58
BNE 58
BPL 59
BMI 59
BCC 59
BCS 59
BHCC 60
BHCS 60
BMC 60
BMS 60
BHI 61
BHS 61
BLO 61
BLS 61
BGT 62
BGE 62
BLT 62
BLE 62
BIL 63
BIH 63
BRSET 63
BRCLR 64
BSR 64
DBNZ 64
DBNZA 65
DBNZX 65
CBEQ 65
CBEQA 66
CBEQX 66
Endereo Absoluto
JMP 67
JSR 67
RTS 68
RTI 68
Processador
SEC 69
CLC 69
SEI 69
CLI 70
NOP 70
SWI 70
STOP 71
WAIT 71
253
Tabela ASCII
254
REFERNCIAS BIBLIOGRFICAS
FREESCALE. MC9S08QG8 Data Sheet Rev. 4. United States: Freescale, 2008.
MONTEIRO, Mrio A. Introduo a organizao de computadores. 4 .ed. Rio de Janeiro: Livros
Tcnicos e Cientficos, 2002.
PEREIRA, Fbio. HCS08 unleashed: Designer's guide to the HCS08 microcontrollers. 2nd ed. United
States: Book Surge, 2009.
PEREIRA, Fbio. Microcontroladores HC908Q: teoria e pratica. So Paulo: Livros Erica, 2004.
PEREIRA, Fbio. Microcontroladores HCS08: teoria e pratica. So Paulo: Livros Erica, 2005.
SEDRA, Adel S; SMITH, Kenneth Carless. Microeletrnica. 5. ed. So Paulo: Prentice Hall, 2007.