Skip to content

Aplicativo de temporização para um processador ARMV6L que exibe a contagem num display LCD 16x2 com timer e drive do display escritos em assembly

Notifications You must be signed in to change notification settings

DanielSRS/Timer_Assembly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 

Repository files navigation

Aplicativo de Temporização

GitHub Org's stars

O problema propõe desenvolver um aplicativo de temporização para um processador ARMV6L que apresente a contagem num display LCD 16x2, esse display exibirá o tempo em segundos que é pré-definido no código, além disso o app deve ser capaz de aceitar a entrada de 2 botões que tem como papel Start/Pause e Restart que reseta a contagem para o tempo pré-definido. Também é pedido que o código seja modelado pensando em funcionar como uma biblioteca para os problemas futuros, tendo como principais funçoes: 1- Escrever Carácter, 2- Limpar Display e 3- Posicionar cursor linha e coluna.

🔨 Compilar e executar

Assemblar um arquivo

  as -o lcd_main.o lcd_main.s

Linkar um objeto compilado ou arquivo compactado

  ld -o lcd_main lcd_main.o

Executar código

  ./lcd_main

Buildar Makefile

  cd src/
  make all

Executar Makefile

  cd src/
  make run

✔️ Softwares Utilizados

  • Linux

  • Nano

  • Visual Studio Code

  • GCC (GNU Compiler Collection)

  • Git

💻 Arquitetura do Computador

Sistema Operacional: Raspbian

Arquitetura: ARMV6L

Ordem de armazenamento de byte: Little Endian (menor para o MSB)

CPU: 1

VID: ARM

Modelo: 7

Nome do Modelo: ARM1176

📝 Instruções utilizadas

CMP reg,#val - compara o valor em reg com o número val

LDR reg,=val - coloca o número val no registrador chamado reg.

MOV reg,#val - coloca o número val no registrador chamado reg.

SVC cond - instrução causa uma exceção. Isso significa que o modo do processador muda para Supervisor, o CPSR é salvo no modo Supervisor SPSR e a execução ramifica para o vetor SVC.

ADDEQ reg, #val - Faz a adição somente se for igual

ADD reg,#val - adiciona o número val ao conteúdo do registro reg.

STR reg,[dest,#val] - armazena o número em reg no endereço dado por dest + val.

BIC reg1, reg - executa uma operação AND nos bits com os complementos dos bits correspondentes no valor de reg

ORR reg1, reg - executa operações OR bit a bit nos valores em reg

PUSH {reg1,reg2,...} - copia os registradores da lista reg1,reg2,... no topo da pilha. Apenas registradores de uso geral e lr podem ser enviados.

LSR dst,src,#val - desloca a representação binária do número em src para a direita por val, mas armazena o resultado em dst.

AND reg,#val - calcula o booleano e a função do número em reg com val.

POP {reg1,reg2,...} - copia os valores do topo da pilha para a lista de registradores reg1,reg2,.... Somente registradores de uso geral e pc podem ser exibidos.

LSL reg,#val - desloca a representação binária do número em reg por val lugares para a esquerda.

BNE cond - muda o ramo quando resultado da comparação é não igual

B cond - muda o ramo para cond

SUB reg,#val - subtrai o número val do valor em reg.

BEQ cond - muda o ramo quando resultado da comparação é igual

BLT cond - muda o ramo quando resultado da comparação é menor que

BGT cond - muda o ramo quando resultado da comparação é maior que

Testes

1- Contagem do valor pré-definido até 0 Resultado: O Aplicativo funciona perfeitamente e ao chegar ao 0 reseta para o estado de espera do botão Start/Pause

2- Usando Reset Resultado: O Aplicativo inicia a contagem e ao pressionar o botão Reset age como o esperado chegando no estado de espera do botão Start/Pause

3- Usando Pause/Start Resultado: O Aplicativo inicia a contagem e ao pressionar o botão Pause/Start ele pausa a contagem e ao clicar novamente retorna a contagem, no entanto, em alguns momentos a depender da velocidade do clique a função pode não funcionar perfeitamente.

4- Usando Reset enquanto pausado Resultado: O Aplicativo faz a contagem, pausa e ao tentar resetar funciona exatamente como o programado, permanecendo no estado de pause.

5- Usando Start/Pause e Reset ao mesmo tempo Resultado: Ao pressionar os 2 botões ao mesmo tempo ele reseta como esperado pelo programa, pois o reset tem prioridade.

Autores


Alexandre Silva Caribé

Daniel Santa Rosa Santos

Joanderson Santos

About

Aplicativo de temporização para um processador ARMV6L que exibe a contagem num display LCD 16x2 com timer e drive do display escritos em assembly

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published