Você está na página 1de 22

Curso:

Disciplina:
Professor: Carlos Eduardo Carvalho
Turma:
Data:
Aluno:
Tutorial Bsico CodeWarrior

Nota

O CodeWarrior (Guerreiro do Cdigo) um software de compilao para os


microcontroladores da Freescale. A Freescale (www.freescale.com) o fabricante dos componentes
da Motorola.
Este tutorial tem o objetivo de auxiliar o incio da programao do microcontrolador
MC9S08QG8.
Vamos conhecer a interface de programao, o debugger e o simulador. Todos os programas
sero escritos em linguagem C, mas neste tutorial eu no tratarei especificamente da linguagem C.
O programa que ser usado como exemplo ir fazer um led piscar enquanto um boto estiver
pressionado e far o led ficar apagado enquanto o boto estiver solto.
O software utilizado o CodeWarrior IDE version 5.9.0. Special Edition que pode ser baixado
gratuitamente do site da Freescale.
A interface do CodeWarrior:
Abrindo o CodeWarrior IDE, voc ver a tela da figura 1.

Figura 1 Tela inicial do CodeWarrior

Se aparecer uma tela pedindo que se faa o registro, clique na opo de registrar mais tarde.
Quando ele disser que o software expirou, ele ir indicar que necessrio rodar um arquivo que est na
mesma pasta onde o software foi instalado. Verifique o nome do arquivo na mensagem e execute o.
Isso acontece porque a Freescale modificou a forma como os softwares gratuitos eram
distribudos. Antes, era necessrio registrar o software no site e agora no mais necessrio. Caso no
aparea nenhuma tela diferente da figura 1, v em frente com o tutorial.
Criando um novo projeto:
Na tela inicial, clique no boto Create New Project. A tela da figura 2 dever aparecer.

Figura 2 Tela de seleo do microcontrolador.


Na tela da figura 2, podemos selecionar qual microcontrolador ser utilizado. O CodeWarrior
abrange muitos componentes da Freescale. No nosso caso, utilizaremos o CI HCS08, a famlia
HCS08Q e o componente HCS08QG8.
Selecione este componente e na tela da direita (Conections) selecione a opo Full Chip
Simulation, conforme a figura 3.

Figura 3 Seleo do componente e da forma de conexo.


Escolhemos esta conexo pois iremos simular um programa, sem realmente grav lo em um
microcontrolador real. Esta opo muito boa quando estamos desenvolvendo programas, pois no
precisamos gravar e regravar o micro.
Feito isso, pressione Next.
Na prxima tela escolhemos a linguagem que ser usada na programao, o nome do projeto e o
local onde ele ser salvo.
Em programao de microcontroladores, sempre trabalhamos com projetos, mas o prprio
compilador organiza a maioria das coisas pra ns, ento fica tudo fcil !!!
Selecione a opo de linguagem C, nomeie o arquivo como Tutorial_1 e escolha um local para
salv lo. No meu caso, esta tela ficar conforme a figura 4.

Figura 4 Escolha da linguagem, do nome do projeto e do local.


Nesta tela podemos clicar em Finish, pois nenhuma outra opo ser modificada no projeto.
A tela que aparece dever ser igual a da figura 5.
Nesta figura, o arquivo da funo principal (main), est marcado de vermelho. nele que
iremos escrever o programa.
Clicando duas vezes sobre o arquivo main, voc ver uma tela igual a figura 6.

Figura 5 Projeto Tutorial_1

Figura 6 Arquivo main aberto.

Conhecendo a funo principal:


Vamos dar uma olhada de perto no que vem escrito no arquivo main.
As duas primeiras linhas so:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
Podemos ver que a diretiva #include continua presente, mas dessa vez em azul. Da mesma
forma que os comentrios. Na verdade, todas as regras de sintaxe da linguagem C continuam a mesma
e devero ser respeitadas na programao dos microcontroladores.
Estas duas linhas esto incluindo dois arquivos. O arquivo hidef.h e o arquivo derivative.h.
Este ltimo pode ser encontrado na pasta Includes.

Figura 7 Mostrando como o arquivo derivative.h chama a biblioteca do microcontrolador.


Quando abrimos o arquivo derivative.h, vemos uma tela igual a da figura 7. Ali podemos ver a
seguinte linha:
#include <MC9S08QG8.h>
Este arquivo muito importante e ele auxilia muito na programao. Ele a biblioteca de
definies de todos os registradores e bits do microcontrolador.
Todos os registradores do HCS08 (e de todos os microcontroladores do mundo!) esto
armazenados em endereos na memria. Quando programamos e precisamos utilizar um desses
registradores, teramos que indicar o endereo correspondente ao registrador. Mas como temos essa
biblioteca, podemos chamar o registrador por um nome, o que facilita muito na hora de lembrar tudo
que precisa ser feito no programa.

Vamos olhar melhor esta biblioteca. Ainda na pasta includes, abra o arquivo MC9S08QG8.h.
Voc deve ver uma tela igual a da figura 8.

Figura 8 Biblioteca do MC9S08QG8.


Inicialmente, s vemos o cabealho com todas as informaes sobre esta biblioteca, o nome do
criador dela, as revises e muitas outras coisas. Mais uma vez, a importncia dos cabealhos.
Se formos descendo, veremos os nmeros dos vetores de interrupo e depois a tabela dos
vetores de interrupo. Tambm veremos o mapeamento dos registradores de entrada/sada (I/O) e
muito mais...
A biblioteca tem muita informao e iremos utilizar toda esta informao aos poucos.
Vamos olhar novamente para o arquivo main. Ali dentro temos a funo principal (main) e em
seguida uma macro:
EnableInterrupts;
Esta macro serve para habilitar as interrupes gerais ou globais. Voc entender melhor
quando estudar as interrupes.
Depois disso, temos o loop infinito (for(;;)). Que legal, ele j foi escrito pra ns !! Algum
sabia que ns iramos usar... Perceba que tanto o loop infinito quanto o main, comeam e terminam
com chaves ({ })
Dentro do loop infinito, temos uma funo chamada :
__RESET_WATCHDOG();
Percebam o comentrio engraadinho:

/* feeds the dog */

Alimenta o cachorro...

O WATCHDOG (co de guarda) um dispositivo de proteo interno do microcontrolador. No


incio da nossa programao, iremos deslig lo, pois ele pode atrapalhar um pouco. Mais tarde
entenderemos melhor a sua utilizao.
Agora hora de comear !
Primeiro, vamos botar o cachorro pra dormir. V na biblioteca do HCS08 e procure pelo
registrador SOPT1. Veja a figura 9.

Figura 9 Registrador SOPT1 na biblioteca do micro.


Nesta figura, em vermelho est marcado o nome completo do registrador. Perceba o endereo
da memria em que ele est:
0x00001802
No sei vocs, mas eu acho muito mais fcil lembrar de SOPT1 do que lembrar desse nmero
a!!
Em verde, est marcado o nome do registrador que ser utilizado na programao.
Basicamente, ns vamos copiar este nome da biblioteca e colar dentro do main. Deve ficar como na
figura 10.

Figura 10 Registrador SOPT1 com o valor de configurao.


Este valor 0x02 (0b00000010), que est sendo atribudo ao registrador serve para desligar o
WATCHDOG e fazer mais algumas configuraes. Vamos usar este valor por enquanto e mais tarde
voc vai entender tudo que aconteceu...
A partir de agora, voc pode apagar a funo para alimentar o cachorro, pois ns colocamos o
cachorro pra dormir.
Configurando entradas e sadas:
Vamos agora configurar quais pinos sero utilizados, qual ser o led e qual ser o boto.
Para isso, vamos voltar na biblioteca do HCS08.
Nos microcontroladores, ns temos a liberdade de escolher se um pino ser uma entrada ou uma
sada. Para isso, necessrio configurar um registrador de direo de dados (entrada ou sada).
No HCS08, existem dois conjuntos de pinos de entrada e sada, chamados de PORTs. O
PORT A e o PORT B. Ento, quando vamos configurar entradas e sadas, deveremos escolher se elas
estaro no PORT A ou no PORT B.
Neste caso, o nosso led estar no bit 6 do PORT B e o boto estar no bit 2 do PORT A. Ou
seja o pino PORT B 6 dever ser uma sada e o pino PORT A 2 dever ser uma entrada.
Para fazer esta configurao, entre na biblioteca do micro e procure o registrador PTBDD. Veja
a figura 11.

Figura 11 Registrador de configurao de direo do dado do PORT B.


Voc dever copiar o bit PTBDD_PTBDD6 que est circulado na figura 11 e colar no main.
Faa a mesma coisa para o bit PTADD_PTADD2. O main deve ficar conforme a figura 12.

Figura 12 Registradores de configurao do PORT A e do PORT B.

Se o bit 6 do PORT B ser uma sada, ento ns deveremos colocar 1 neste bit. Para que o bit 2
do PORT A seja uma entrada, deveremos colocar 0 nele. s escrever no main o que est escrito
abaixo:
PTBDD_PTBDD6 = 1;
//Pino configurado como sada (led)
PTADD_PTADD2 = 0;
//Pino configurado como entrada (boto)
Depois de feitas as configuraes, vamos escrever a lgica de verdade !
Criando um pisca pisca:
Ela dever ser escrita dentro do loop infinito. muito simples:
Testar se o bit 2 do PORT A igual a 1.
Se for, devemos fazer o bit 6 do PORT B ficar igual a 1.
Aguardar um tempo.
Fazer o bit 6 do PORT B ficar igual a 0.
Aguardar um tempo.
Voltar na primeira linha e repetir.
Se o bit 2 do PORT A no for igual a 1.
Ento o bit 6 do PORT B deve ficar igual a 0.
Pronto, este o algoritmo do nosso programa. Em linguagem C, faremos o seguinte:
if (PTAD_PTAD2 = = 1){
PTBD_PTBD6 = 1;

//Acende o led

for (i = 0; i < 30000; i ++){


//Espera um tempo
}
PTBD_PTBD6 = 0;

//Apaga o led

for (i = 0; i < 30000; i ++){


//Espera um tempo
}
}
else{
PTBD_PTBD6 = 0;

//Apaga o led

}
Todas estas linhas devem estar dentro do loop infinito.
O programa dever ficar conforme a figura 13.

Figura 13 Programa para piscar o led quando o boto for pressionado.


Compilando e encontrando erros:
Certo !
Agora vamos compilar e ver se tudo est escrito dentro da sintaxe da linguagem C. Veja o
boto Compile que est marcado na figura 13. Pressionando este boto, o compilador vai tentar
compilar o seu cdigo. E se voc copiou exatamente o que eu escrevi, ento a tela da figura 14 dever
aparecer.

Figura 14 Erro de sintaxe.


O compilador est acusando um erro. Ele diz que a varivel i, usada na estrutura for no foi
declarada.
Vamos colocar essa varivel logo abaixo da linha do main, da seguinte forma:
int i;
Lembrou da varivel do tipo inteiro ? Beleza !!
Tente compilar novamente, que agora deve funcionar.
Se funcionou, a janela de erros desapareceu e vrios nomes de registradores ficaram azuis.
Agora vamos ver ser a lgica est correta.
Depurao:
Clique no boto Debug que est marcado na figura 15. Ele tem at o desenho de um bichinho...

Figura 15 Boto Debug.


Este boto ir abrir outro software chamado de True Time Simulator & Real Time Debugger . Se
tudo estiver certo, voc dever ver uma tela igual a da figura 16.

Figura 16 - True Time Simulator & Real Time Debugger.

Este software serve para que possamos testar o programa e verificar se ele est funcionando
corretamente. A janela superior da esquerda (Source) mostra o cdigo que voc escreveu. A linha
marcada em azul a prxima linha de programa que ser executada.
No lado direito superior, a tela Assembly mostra como ficou o seu cdigo na linguagem
Assembly. Eu gosto muito mais da linguagem C...
Novamente na esquerda, existem duas telas chamadas Data 1 e Data 2. A primeira mostra os
registradores do micro e as variveis globais que foram utilizadas no programa. A segunda mostra as
variveis locais que foram utilizadas. Neste caso, apenas a varivel i.
Se clicarmos com o boto direito em uma rea vazia nestas telas, veremos um menu de
informaes igual ao da figura 17.

Figura 17 Menu na tela Data 2.


Veja, pelas marcaes em vermelho, que nestas telas, todas as variveis esto na condio de
atualizao automtica. Ou seja, cada vez que o programa for executado, estas variveis vo atualizar
o seu valor. Mas durante o programa, elas no atualizaro os valores.
Para que os valores das variveis sejam atualizados periodicamente, selecione a opo
Periodical. Faa isso para a tela Data 1 e para a Data 2. Na tela Update Rate, coloque o valor 10 *
100ms. Ou seja, a cada 1 segundo o valor da varivel ser atualizada.
Agora vamos executar o nosso programa uma linha por vez. Pressione F11 e veja como a linha
azul desse pelo cdigo. Perceba que nas telas Assembly, Register e Memory os valores tambm so
modificados.
Acompanhe a execuo do cdigo e veja como ele chega at na condio
if (PTAD_PTAD2 == 1){
e depois pula diretamente para o

} else{
PTBD_PTBD6 = 0;

//Apaga o led

}
Isso acontece porque ainda no temos como fazer a entrada (pino 2 do PORT A) fica igual a 1.
Mas vamos criar uma forma de fazer isso.
V no menu Componente e selecione a opo Open. Dever aparecer uma tela igual a da figura
18.

Figura 18 Menu Component


Clique duas vezes no cone Visualization Tool que est marcado em vermelho.
Agora apareceu uma tela cinza. Clique com o boto direito em um ponto qualquer nessa rea e
selecione a opo Add New Instrument. No menu que aparece, selecione a opo Led. Isso vai fazer
com que o um pequeno led aparea. Coloque este led na tela e depois voc pode aumentar o seu
tamanho se quiser.
Clique com o boto direito sobre o led e selecione a opo Properties. Dever aparecer uma
tela igual a da figura 19.

Figura 19 Propriedades do led.


Agora precisamos indicar que este led estar ligado ao pino 6 do PORT B. Para isso deveremos
saber qual o endereo do registrador PTBD. Volte ao seu cdigo fonte e abra a biblioteca de
registradores do HCS08. Veja na figura 20 o endereo marcado em vermelho.

Figura 20 Endereo do registrador PTBD na memria.


Ento, na tela Properties of LED da figura da figura 19, no campo Port to Display voc deve
colocar o nmero 0x02. Que o endereo do registrador PTBD na memria do microcontrolador.
Como queremos que o bit 6 desse registrador esteja associado ao led, no campo Bitnumber to
Display escolheremos o nmero 6. Feito isso, podemos fecha a janela e colocar um boto.
Clique com o boto direito em uma rea vazia e selecione novamente Add New Instrument.
Agora voc vai escolher a opo Switch. Apareceu um chave de duas posies. Novamente, clique
com o boto esquerdo sobre a chave e selecione Properties. Dever aparecer uma tela igual a da figura
21.

Figura 21 Propriedades da chave.


Da mesma forma que no led, deveremos associar esta chave ao bit 2 do registrador PTAD.
Volte biblioteca do microcontrolador e verifique o endereo deste registrador. Voc ver que as
informaes que precisam ser modificadas so:
Port to Display: 0x00
Bitnumber to Display: 2
Feche a janela e faa uma ltima configurao. Clique com o boto direito sobre uma rea
cinza e selecione Properties. No menu que aparece selecione Periodical para o campo Refresh Mode e
no espao que aparece abaixo, coloque o nmero 1. Ou seja, os valores sero atualizados
periodicamente, a cada 1 x 100 ms. Feche a janela e v tomar gua.
No esquea de salvar a sua configurao no menu File.
Agora vamos brincar. A figura 22 mostra uma seta verde marcada. Clicando nesta seta, ns
colocaremos o programa para rodar.

Figura 22 Tela pronta para simulao.


Inicialmente nada acontece. Claro, pois o boto est com sinal 0. Perceba a marcao em
vermelho do bit PTAD2 na figura 22. Para colocar o boto em 1 um pouco chato, mas...
V no menu HCS08FCS. Selecione a opo Port Pins Module e clique em Set Input Pin Levels
(INPUTS), conforme a figura 23.

Figura 23 Atuando uma entrada pelo simulador.


Na tela que aparece, coloque o valor 04 no campo InputA. Este valor representa o nmero:
PTAD7
PTAD6
PTAD5
PTAD4
PTAD3
PTAD2
PTAD1
PTAD0
0
0
0
0
0
1
0
0
em hexadecimal. Ou seja, o pino PTAD2 estar em 1.
Agora sim voc deve estar vendo o led piscar.
Perceba como a varivel i se modifica. Veja na figura 24.

Figura 24 Led piscando e varivel i incrementando.


Perceba tambm que o bit PTBD6 na tela Data 1 fica mudando entre 0 e 1.
Para que o led pare de piscar basta voltar no menu da figura 23 e colocar 00 no campo InputA.
O CodeWarrior um software com bastante recursos para programao e depurao. Muita
coisa pode ser aprendida dele visitando o site do fabricante, lendo os manuais e participando de fruns
e seminrios.

Você também pode gostar