22
Instalação A versão de demonstração deste software pode ser descarregada sem custos do seguinte link , bastanto efectuar um pequeno registo. Note: Esta versão é inteiramente funcional, embora o código máquina gerado não possa ultrapassar os 2 kBytes, valor que certamente não irá ser atingido por este projecto. Uma vez descarregado o ficheiro de instalação (neste exemplo na sua versão 8.18), este deverá ser executado iniciando-se o processo de instalação. Em seguida será perguntada a pasta onde o software vai ser instalado (C:\Keil por omissão).

Criar Projecto Keil

Embed Size (px)

Citation preview

Page 1: Criar Projecto Keil

Instalação

A versão de demonstração deste software pode ser descarregada sem custos do seguinte link, bastanto efectuar um pequeno registo.

Note:

Esta versão é inteiramente funcional, embora o código máquina gerado não possa ultrapassar os 2 kBytes, valor que certamente não irá ser atingido por este projecto.

Uma vez descarregado o ficheiro de instalação (neste exemplo na sua versão 8.18), este deverá ser executado iniciando-se o processo de instalação.

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

Page 3: Criar Projecto Keil

No final, é possível ter acesso a um conjunto de notas adicionais sobre o programa:

Concluído o processo de instalação, 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 demonstração denominado Hello). Os alunos futuramente deverão estar cientes desta particularidade pois é habitual ao executarem o programa, abrirem não o seu projecto mas sim o do grupo que esteve nesse computador na turma anterior!!! 

Page 4: Criar Projecto Keil

 Para criarmos um novo projecto podemos escolher a opção "New uVision Project..." no Menu "Project". Em seguida será perguntado o nome do projecto e sua localização. 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:Não é conveniente a colocação do projecto no "ambiente de trabalho", pois caso este procedimento seja repetido por mais turmas fará com que a confusão entre diferentes projectos se instale!!! 

Page 5: Criar Projecto Keil

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

Page 6: Criar Projecto Keil

À pergunta "se queremos adicionar o código de arranque standard ao nosso projecto", deveremos responder "Não" pois vamos programar em Assembly e esse código só irá ser usado em programas realizados em linguagem C.

Segue-se agora a definição dum conjunto de opções para o nosso projecto. Para tal bastará seleccionar a opção "Options for ..." no menú que surge quando se clica em "Target 1" com o botão direito do rato.

Page 7: Criar Projecto Keil

Uma dessas opções é a frequência de relógio a que vai trabalhar o micro (11.0952 MHz neste caso).

Page 8: Criar Projecto Keil

Uma outra opção importante é seleccionar "Create HEX File" de forma a que seja criado o ficheiro para programação posterior do micro como se mostra aqui.

Page 9: Criar Projecto Keil

Já que falamos de opções, será conveniente mudar o tamanho dos "Tabs" quando da edição de ficheiros "assembly". Um valor de 8 (em vez de 4) permite uma melhor formatação destes ficheiros. Esta janela poderá ser obtida clicando na opção "Configuration" do Menú "Edit".

Page 10: Criar Projecto Keil

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 botão correspondente (como a figura mostra).

Page 11: Criar Projecto Keil

Esse ficheiro começa por ser de texto, pelo que devemos guardá-lo como um ficheiro "assembly". Para tal podemos agora clicar o botão "Save the active document".

Page 12: Criar Projecto Keil

Uma vez guardado com a extensão 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 instruções, constantes, labels, comentários, etc.

Page 13: Criar Projecto Keil

De notar que sempre que o ficheiro é alterado surge um * após o seu nome no cabeçalho da janela. Na imagem é possível ver um pequeno programa assembly que efectua um ciclo em que a cada uma das 5 iterações o acumulador é incrementado em 10 unidades, após um que entra num ciclo infinito (com um salto para si próprio).

Page 14: Criar Projecto Keil

Resta adicionar este ficheiro ao nosso projecto, algo que pode ser feito através da opção "Add Files to Group..." do menú que se obtem quando se clica em "Source Group 1" com o botão direito do rato.

Page 15: Criar Projecto Keil

Com o teste01.a já integrado no projecto (algo que pode ser constatado pela sua presença no "Project Workspace", podemos agora "assemblar" o código clicando no botão "Rebuild all target files". Na área "Output Window" surgirá informações sobre o decorrer desse processo, nomeadamente se ocorreram erros.

Page 16: Criar Projecto Keil

Está agora na altura de efectuar o Debug para verificar se este programa apresenta de facto a funcionalidade pretendida.

Debug Para iniciarmos um sessão de Debug basta clicar no botão "Start/Stop Debug Session". Após uma aviso inicial relembrando-nos que esta versão de demonstração esta limitada a 2 Kbytes de código, surge agora na área de "Project Workspace" a lista de registos do micro e respectivos valores. Outras informações podem aí ser visualizadas, nomeadamente o número de "states" que já decorreram desde o início da execução. Na área do assembly uma seta amarela indica qual a instrução prestes a ser executada.

Page 17: Criar Projecto Keil

Para executarmos uma instrução bastará clicar no botão "Step into" ou simplesmente na tecla F11. Outros botões podem ser usados para percorrer o código, apresentando cada um deles uma funcionalidade diferente. De notar que à medida que as instruções vão sendo executadas os valores dos registos são actualizados (neste exemplo o registo R7 que passa a tomar o valor 5).

Page 18: Criar Projecto Keil

A execução do programa passo-a-passo permitirá verificar se aquilo que pretendíamos para o programa está de facto a ser realizado.

Projecto

Uma vez feita a implementação do circuito, e feito o seu teste, chegou o momento dos alunos desenvolverem o software para o mesmo.A programação será feita em assembly recorrendo ao programa µVision 3.

No sentido que também 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 irão conduzir o aluno à obtenção duma funcionalidade idêntica à apresentada pelos programas de teste, existindo contudo ligeiras alterações que serão devidamente referidas.

Page 19: Criar Projecto Keil

1º PassoRealizar um programa capaz de comutar o LED do circuito a cada 1 segundo.

Para tal sugere-se a criação da seguinte rotina:

DELAY_1S - faz uma temporização de 1 segundo.

2º PassoComplementar o programa anterior, fazendo o envio pela porta série (ainda antes do piscar do LED) do nome dos elementos do grupo.

Para tal sugere-se a criação das seguintes rotinas:

RS232_CONFIG - faz a configuração da comunicação série com as seguintes características: 9600,N,8,1.

SEND_CHAR - envia pela porta série o carácter cujo código ASCII se encontra no acumulador.

PRINT_STR - envia uma string de caracteres cujos códigos ASCII se encontram na memória a partir do endereço indicado pelo registo DPTR.

Os alunos poderão buscar "inspiração" no exemplo que acompanha o µVision, concretamente o projecto: Keil\C51\Examples\ASM\ASAMPLE.Uv2

3º PassoComplementar 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 diferença é que a escrita da mensagem "Hello World!" deverá ser agora substituída pelos nomes dos elementos do grupo.

Para tal sugere-se a criação das seguintes rotinas:

PRINT_DEC - faz a impressão do valor decimal contido no acumulador.

4º PassoComplementar o programa anterior, introduzindo (a exemplo do que aconteceu após a 2ª etapa), o teste à memória RAM. Caso não haja erros deverá aparecer a indicação "RAM: OK!", caso contrário deverá aparecer "RAM: Erro!" seguido do endereço onde esse erro se verificou.

Uma forma possível de fazer este teste será o de percorrer todo o espaço de endereçamento da RAM e ir escrevendo um valor, lendo-o de seguida. Caso o valor lido não seja o mesmo, então estamos perante o erro no acesso a essa posição de memória. A escolha deste valor deverá não só testar a memorização de zeros como de uns pelo que se sugere que o teste seja de facto realizado com dois valores. Cada endereço deverá por exemplo, ser escrito/lido com 55h (01010101) e AAh (10101010).

Para tal sugere-se a criação das seguintes rotinas:

Page 20: Criar Projecto Keil

TEST_RAM - faz o teste à RAM, retornando no acumulador: zero se não houve erro, um se ocorreu (neste caso o registo DPTR retorna o endereço do erro).

HEX2ASCII - retorna no acumulador o código ASCII do nibble menos significativo contido nesse mesmo acumulador.

PRINT_HEX - faz a impressão do valor hexadecimal contido no acumulador (a ser usada na impressão do endereço hexadecimal onde ocorreu o erro).

5º PassoNeste passo, deveremos replicar a funcionalidade do programa de teste da 3ª etapa, onde a contagem crescente foi substituída pela escrita dos valores lidos do conversor A/D. Para simplificar contudo o processo, iremos apenas exigir que seja impresso o valor hexadecimal. A impressão do valor em Volts a ser feita servirá apenas como elemento de valorização da classificação final.

Para tal sugere-se a criação das seguintes rotinas:

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

6º PassoA partir deste passo, serão indicadas as novas funcionalidades pretendidas para o programa. Por exemplo, a indicação do valor lido pelo ADC, deverá gora ser complementada com a impressão dos valores mínimo, médio e máximo desde o RESET até a esse instante.

Como a figura seguinte mostra, sob uma linha contendo os nomes dos valores (MIN para o valor mínimo, NOW para o valor lido nesse instante, MAX para o máximo e MED para o valor médio), deverão ser impressos (a cada segundo) os novos valores. Note que para evitar o aparecimento duma lista de valores, no final da impressão 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 variáveis a definir na RAM interna ou externa.

Page 21: Criar Projecto Keil

7º PassoNeste passo pretende-se introduzir alguma interactividade com o programa. Para isso este deverá prever a recepção pela porta série de comandos sob a forma de caracteres, que desencadeiam determinadas acções, a saber:

carácter C (ou c) - comuta entre a visualização dos valores no formato hexadecimal (por exemplo 12h 3Dh A5h 6Ah) ou decimal (018 061 165 106).

carácter R (ou r) - reinicia o processo de determinação dos valores mínimo, médio e máximo.

8º PassoPor 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" através 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).