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; for (i = 0; i < 30000; i ++){ //Espera um tempo } PTBD_PTBD6 = 0; for (i = 0; i < 30000; i ++){ //Espera um tempo } } else{ PTBD_PTBD6 = 0; } Todas estas linhas devem estar dentro do loop infinito. O programa dever ficar conforme a figura 13. //Apaga o led //Apaga o led //Acende o led

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