Geral


Descrição
O sistema proposto que desenvolveremos apenas apresentará no visor três 
mensagens sendo que na linha 2 será exibido o nome do desenvolvedor e na 
linha 1 alternará entre as três frases pré determinadas num intervalo de 
tempo prefixado aleatório.

Arquivamento do projeto.

Estrutura do programa
  • informações de gestão
  • declaração dos rótulos fixos
  • declaração das variáveis alocadas
  • declaração dos vetores de interrupção
  • códigos

Estrutura do código
  • rotina principal
  • aplicações
  • rotinas de configuração
  • rotinas de retardo
  • rotinas do visor
  • rotinas das mensagens
  • mensagens

Codificação hierarquizada
Programar em assembly é muito prazeroso porém requer muita organização e 
uso das diretrizes do compilador para rotular informações a fim de deixar 
mais legível o programa. Logo, iniciaremos o programa com diretivas, definições 
e rotulações. Outra fato importante a ser evidenciado foi o processo de 
nomenclatura adotada de nomeação das rotinas e sub-rotinas. Perceberão que ao 
longo do desenvolvimento do código foram criadas inúmeras sub-rotinas criando 
uma estrutura hierarquizada com o intuito de deixá-las mais de alto nível. Uma 
rotina dispara a chamada de uma sub-rotina que por sua vez chama outra e assim 
sucessivamente até a de mais baixo nível que realiza a função esperada. Esta 
estrutura hierarquizada facilita a criação de lógica porém gera códigos complexos 
sendo necessário uma documentação adequada.

Formato das mensagens
As mensagens são formadas por grupos, cada grupo é formado por um número de 
linhas. E cada linha é formada por (1) um rótulo da linha da tabela de mensagens 
de inicialização, (2) um ID, (3) um valor de posição inicial de exibição da 
linha, (4) tamanho da cadeia de caracteres da linha corrente, (5) a mensagem 
propriamente dita e por último (6) um caractere indicador de final de linha. Ao 
término da última linha temos dois caracteres indicadores de final da tabela.

Observação: Em função da tecnologia do hardware as tabelas são obrigadas a terem 
número par de caracteres. Caso esta recomendação não seja seguida o compilador 
avisará.

Sistema de busca
O sistema de busca baseá-se nos 6 campos compostos contidos no formato das 
mensagens para avaliar os caracteres e realizar a exibição das mesmas.

O campo 1 é o que define a tabela que contém as linhas de um bloco de informação. 
É este campo que devemos carregar nos registradores indexadores pelas instruções:

ldi Zh, high(TAB_xxx<<1)  ; tabela
ldi Zl, low (TAB_xxx<<1)

O campo 2 é também denominado de ID e é utilizado pela rotina re_mensageiro 
para encontrar a linha desejada para ser exibida no visor selecionado.

O campo 3 contém o endereço inicial da linha e coluna do visor onde serão 
exibidos os caracteres da mensagem. A rotina re_mensageiro envia ao visor 
como comando o qual desloca o cursor para tal posição.

O campo 4 contém a tamanho da cadeia de caracteres da linha corrente, que 
servirá de contador para a rotina re_mensageiro não executar infinitamente. 
Uma medida de segurança para não haver travamento por programa. A cada 
caractere enviado como dado ao visor é decrementado este valor até atingir 
o valor zero logo, encerra a sua função após retorna a rotina chamadora.

O campo 5 temos a informação propriamente dita no formato ASCII. É comparado 
com o caractere de final de linha. Há duas possibilidades para tal fato: 1) se 
for finaliza o envio ao visor e retorna ou 2) senão for envia-os ao visor como
dado e retorna para o próximo dado a ser analisado ou enviado. 
 
O campo 6 temos o caractere indicador de final de linha.
 
;*******************************************************************************
;* MSG_opcao,L1C1,16,"OPCAO: ",f_SOH,f_EOT *
;* ^ ^ ^ ^ ^ ^ *
;* | | | | | | *
;* id ------+ | | | | | *
;* pos -------------+ | | | | *
;* tan -----------------+ | | | *
;* cadeia --------------------------+ | | *
;* final linha -------------------------------+ | *
;* final cadeia ----------------------------------+ *
;*******************************************************************************

 
Convenções
api estes prefixos são usados para denominar rotinas de alto nível isto é, 
rotinas que chamam outras rotinas de nível mais baixos através da instrução 
“call” outras rotinas de menor nível..re estes prefixos são usados para denominar 
rotinas de nível médio isto é, rotinas que chamam outras rotinas de nível mais 
baixos através da instrução “call” outras rotinas de menor nível.
ri estes prefixos são usados para denominar rotinas de nível baixo isto é, 
rotinas que chamam outras rotinas de nível mais baixos através da instrução 
“call” outras rotinas de menor nível.
hw estes prefixos são usados para denominar rotinas de nível do hardware isto é, 
as rotinas que acessam o hardware diretamente.

v_ estes prefixos são usados para denominar posições de memórias em 
byte – variáveis.
b_ estes prefixos são usados para denominar posições de memórias em 
bit – bit.
f_ estes prefixos são usados para denominar dados imutáveis em 
byte – fixos.
id_ estes prefixos são usados para denominar o caractere de identificação da 
palavra.
MSG_ estes prefixos tem a mesmo função do id_, foi empregado outro para ficar 
mais intuitivo.
macr estes prefixos são usados para denominar as macros. 
 

Variáveis
Para satisfazer as funcionalidades propostas foram desenvolvidas as seguintes variáveis:
  1. v_PORTA_C
  2. v_DDR_C
  3. v_mcucr
  4. v_wd
  5. v_mcucsr
  6. v_gicr
  7. v_CURSOR

Rotinas
Para satisfazer as funcionalidades propostas foram desenvolvidas as seguintes rotinas e 
subrotinas: 

  1. cefo
  2. api_ucp_ini 
  3. api_msg_ini 
  4. re_ucp_cnfg 
  5. re_dormencia 
  6. re_caoguarda 
  7. re_portC_cnfg 
  8. re_cpu_lcdcnfg 
  9. re_retardo 
  10. re_esp_humana 
  11. re_lcd_cnfg 
  12. re_lcd_cmd 
  13. re_lcd_dado 
  14. r_lcd_rs_cmd 
  15. r_lcd_rs_dad 
  16. r_lcd_en_101 
  17. lcd_en_0 
  18. lcd_en_1 
  19. r_lcd_74164 
  20. lcd_dado_0 
  21. lcd_dado_1 
  22. r_lcd_74164_clk 
  23. lcd_74164_clk0 
  24. lcd_74164_clk1 
  25. re_mensageiro 
  26. varre_cad 
  27. re_msg_amb 
  28. re_msg_aut 
  29. re_msg_cur 
  30. re_msg_emp 
  31. re_pre_ini
    




.

Nenhum comentário:

Postar um comentário