Você está na página 1de 21

Instalao

A verso de demonstrao deste software pode ser descarregada sem custos do seguinte link, bastanto efectuar um pequeno registo.

Note: Esta verso inteiramente funcional, embora o cdigo mquina gerado no possa ultrapassar os 2 kBytes, valor que certamente no ir ser atingido por este projecto.

Uma vez descarregado o ficheiro de instalao (neste exemplo na sua verso 8.18), este dever ser executado iniciando-se o processo de instalao.

Em seguida ser perguntada a pasta onde o software vai ser instalado (C:\Keil por omisso).

Segue-se a introduo dos dados do utilizador:

No final, possvel ter acesso a um conjunto de notas adicionais sobre o programa:

Concludo o processo de instalao, surgir no ambiente de trabalho o seguinte Icon que d acesso ao uVision:

Est na altura de criarmos o nosso primeiro projecto...

Criar Projecto
Um vez executado o programa surgir a seguinte janela com todo o ambiente de desenvolvimento. Importante: Quando do arranque o programa tentar abrir o ltimo projecto aberto (neste exemplo um projecto em C de demonstrao denominado Hello). Os alunos futuramente devero estar cientes desta particularidade pois habitual ao executarem o programa, abrirem no o seu projecto mas sim o do grupo que esteve nesse computador na turma anterior!!!

Para criarmos um novo projecto podemos escolher a opo "New uVision Project..." no Menu "Project". Em seguida ser perguntado o nome do projecto e sua localizao. Neste exemplo o projecto foi denominado teste01 e est localizado numa pasta testes por sua vez situada na pasta que cada aluno dever criar para uso na cadeira de SBMI, a saber: D:/usr/alunos/SBMI/<turma> Importante: No conveniente a colocao do projecto no "ambiente de trabalho", pois caso este procedimento seja repetido por mais turmas far com que a confuso entre diferentes projectos se instale!!!

Dever-se- em seguida escolher o micro com que iremos trabalhar (T89C51CC01 neste caso):

pergunta "se queremos adicionar o cdigo de arranque standard ao nosso projecto", deveremos responder "No" pois vamos programar em Assembly e esse cdigo s ir ser usado em programas realizados em linguagem C.

Segue-se agora a definio dum conjunto de opes para o nosso projecto. Para tal bastar seleccionar a opo "Options for ..." no men que surge quando se clica em "Target 1" com o boto direito do rato.

Uma dessas opes a frequncia de relgio a que vai trabalhar o micro (11.0952 MHz neste caso).

Uma outra opo importante seleccionar "Create HEX File" de forma a que seja criado o ficheiro para programao posterior do micro como se mostra aqui.

J que falamos de opes, ser conveniente mudar o tamanho dos "Tabs" quando da edio de ficheiros "assembly". Um valor de 8 (em vez de 4) permite uma melhor formatao destes ficheiros. Esta janela poder ser obtida clicando na opo "Configuration" do Men "Edit".

Est agora na altura de criarmos o nosso primeiro programa assembly. Para tal h que criar um ficheiro ("Create a new file") ou recorrendo ao men (File > New...) ou simplesmente clicando no boto correspondente (como a figura mostra).

Esse ficheiro comea por ser de texto, pelo que devemos guard-lo como um ficheiro "assembly". Para tal podemos agora clicar o boto "Save the active document".

Uma vez guardado com a extenso correcta (teste01.a por exemplo) passar a ser visualizado duma forma mais interessante j que dependendo do seu significado, cada elemento do programa surgir com uma determinada cor, consoante se trate de instrues, constantes, labels, comentrios, etc.

De notar que sempre que o ficheiro alterado surge um * aps o seu nome no cabealho da janela. Na imagem possvel ver um pequeno programa assembly que efectua um ciclo em que a cada uma das 5 iteraes o acumulador incrementado em 10 unidades, aps um que entra num ciclo infinito (com um salto para si prprio).

Resta adicionar este ficheiro ao nosso projecto, algo que pode ser feito atravs da opo "Add Files to Group..." do men que se obtem quando se clica em "Source Group 1" com o boto direito do rato.

Com o teste01.a j integrado no projecto (algo que pode ser constatado pela sua presena no "Project Workspace", podemos agora "assemblar" o cdigo clicando no boto "Rebuild all target files". Na rea "Output Window" surgir informaes sobre o decorrer desse processo, nomeadamente se ocorreram erros.

Est agora na altura de efectuar o Debug para verificar se este programa apresenta de facto a funcionalidade pretendida.
Debug Para iniciarmos um sesso de Debug basta clicar no boto "Start/Stop Debug Session". Aps uma aviso inicial relembrando-nos que esta verso de demonstrao esta limitada a 2 Kbytes de cdigo, surge agora na rea de "Project Workspace" a lista de registos do micro e respectivos valores. Outras informaes podem a ser visualizadas, nomeadamente o nmero de "states" que j decorreram desde o incio da execuo. Na rea do assembly uma seta amarela indica qual a instruo prestes a ser executada.

Para executarmos uma instruo bastar clicar no boto "Step into" ou simplesmente na tecla F11. Outros botes podem ser usados para percorrer o cdigo, apresentando cada um deles uma funcionalidade diferente. De notar que medida que as instrues vo sendo executadas os valores dos registos so actualizados (neste exemplo o registo R7 que passa a tomar o valor 5).

A execuo do programa passo-a-passo permitir verificar se aquilo que pretendamos para o programa est de facto a ser realizado.

Projecto
Uma vez feita a implementao do circuito, e feito o seu teste, chegou o momento dos alunos desenvolverem o software para o mesmo. A programao ser feita em assembly recorrendo ao programa Vision 3. No sentido que tambm o desenvolvimento do programa para este projecto fosse balizado por um conjunto de etapas, iremos de seguida indicar quais os passos a seguir para o atingir dos objectivos pretendidos. Como iremos constatar, os primeiros passos iro conduzir o aluno obteno duma funcionalidade idntica apresentada pelos programas de teste, existindo contudo ligeiras alteraes que sero devidamente referidas.

1 Passo Realizar um programa capaz de comutar o LED do circuito a cada 1 segundo. Para tal sugere-se a criao da seguinte rotina:

DELAY_1S - faz uma temporizao de 1 segundo.

2 Passo Complementar o programa anterior, fazendo o envio pela porta srie (ainda antes do piscar do LED) do nome dos elementos do grupo. Para tal sugere-se a criao das seguintes rotinas:

RS232_CONFIG - faz a configurao da comunicao srie com as seguintes caractersticas: 9600,N,8,1. SEND_CHAR - envia pela porta srie o carcter cujo cdigo ASCII se encontra no acumulador. PRINT_STR - envia uma string de caracteres cujos cdigos ASCII se encontram na memria a partir do endereo indicado pelo registo DPTR.

Os alunos podero buscar "inspirao" no exemplo que acompanha o Vision, concretamente o projecto: Keil\C51\Examples\ASM\ASAMPLE.Uv2 3 Passo Complementar o programa anterior, fazendo acompanhar o piscar do LED pela escrita duma contagem crescente, a exemplo do que acontecia no programa de teste da 1 etapa. Note-se que a nica diferena que a escrita da mensagem "Hello World!" dever ser agora substituda pelos nomes dos elementos do grupo. Para tal sugere-se a criao das seguintes rotinas:

PRINT_DEC - faz a impresso do valor decimal contido no acumulador.

4 Passo Complementar o programa anterior, introduzindo (a exemplo do que aconteceu aps a 2 etapa), o teste memria RAM. Caso no haja erros dever aparecer a indicao "RAM: OK!", caso contrrio dever aparecer "RAM: Erro!" seguido do endereo onde esse erro se verificou. Uma forma possvel de fazer este teste ser o de percorrer todo o espao de endereamento da RAM e ir escrevendo um valor, lendo-o de seguida. Caso o valor lido no seja o mesmo, ento estamos perante o erro no acesso a essa posio de memria. A escolha deste valor dever no s testar a memorizao de zeros como de uns pelo que se sugere que o teste seja de facto realizado com dois valores. Cada endereo dever por exemplo, ser escrito/lido com 55h (01010101) e AAh (10101010). Para tal sugere-se a criao das seguintes rotinas:

TEST_RAM - faz o teste RAM, retornando no acumulador: zero se no houve erro, um se ocorreu (neste caso o registo DPTR retorna o endereo do erro). HEX2ASCII - retorna no acumulador o cdigo ASCII do nibble menos significativo contido nesse mesmo acumulador. PRINT_HEX - faz a impresso do valor hexadecimal contido no acumulador (a ser usada na impresso do endereo hexadecimal onde ocorreu o erro).

5 Passo Neste passo, deveremos replicar a funcionalidade do programa de teste da 3 etapa, onde a contagem crescente foi substituda pela escrita dos valores lidos do conversor A/D. Para simplificar contudo o processo, iremos apenas exigir que seja impresso o valor hexadecimal. A impresso do valor em Volts a ser feita servir apenas como elemento de valorizao da classificao final. Para tal sugere-se a criao das seguintes rotinas:

ACQUIRE - inicia o processo de converso pelo ADC, esperando de seguida pelo resultado (valor que dever depois ser retornado pelo acumulador).

6 Passo A partir deste passo, sero indicadas as novas funcionalidades pretendidas para o programa. Por exemplo, a indicao do valor lido pelo ADC, dever gora ser complementada com a impresso dos valores mnimo, mdio e mximo desde o RESET at a esse instante. Como a figura seguinte mostra, sob uma linha contendo os nomes dos valores (MIN para o valor mnimo, NOW para o valor lido nesse instante, MAX para o mximo e MED para o valor mdio), devero ser impressos (a cada segundo) os novos valores. Note que para evitar o aparecimento duma lista de valores, no final da impresso dessa linha, deveremos apenas fazer CR (Carriage Return). Embora todos estes valores possam eventualmente ser guardados nos registos, pretende-se que os mesmos sejam guardados em variveis a definir na RAM interna ou externa.

7 Passo Neste passo pretende-se introduzir alguma interactividade com o programa. Para isso este dever prever a recepo pela porta srie de comandos sob a forma de caracteres, que desencadeiam determinadas aces, a saber:

carcter C (ou c) - comuta entre a visualizao dos valores no formato hexadecimal (por exemplo 12h 3Dh A5h 6Ah) ou decimal (018 061 165 106). carcter R (ou r) - reinicia o processo de determinao dos valores mnimo, mdio e mximo.

8 Passo Por fim pretende-se conferir ao LED uma nova funcionalidade. Em lugar de piscar, ir agora acender sempre que o valor lido do ADC sair fora duma gama de valores definido por um limite inferior (LIMIT_DOWN), e superior (LIMIT_UP) que inicialmente possuem os valores 20h e E0h respectivamente. Estes valores podem contudo ser alterados em "runtime" atravs do envio dos seguintes comandos:

Dhh (ou dhh) - define o valor do LIMIT_DOWN (onde hh o novo valor em formato hexadecimal). Uhh (ou uhh) - define o valor do LIMIT_UP (onde hh o novo valor em formato hexadecimal).

Você também pode gostar