Professional Documents
Culture Documents
PROJETO FINAL
VITRIA, ES
2016
ANDR PEREIRA ROZETTI
HENRIQUE HOLZ CASTRO
RENATO SANTOS PEREIRA
PROJETO FINAL
VITRIA, ES
18 DE FEVEREIRO DE 2016
SUMRIO
OBJETIVO...............................................................................................................2
METODOLOGIA.......................................................................................................3
CONSIDERAES FINAIS.....................................................................................4
ANEXOS...................................................................................................................5
1
OBJETIVO
Este trabalho tem por objetivo a implementao do controle de um porto eletrnico,
utilizando como ambientes de simulao e programao os softwares ARMSim# e
Notepad, respectivamente.
O cdigo gerado em linguagem Assembly referente ao programa est no anexo.
2
METODOLOGIA:
3
b. O boto direito simula uma chave fim-de-curso. Seu acionamento
obedece aos seguintes critrios:
i. Caso o porto esteja abrindo, exibida a letra O (open) no
display de 7 segmentos, e a mensagem Porto aberto
aparece no LCD.
ii. Caso o porto esteja fechando, exibida a letra C (closed) no
display de 7 segmentos, e a mensagem Porto fechado
aparece no LCD.
iii. Somente se o porto estiver abrindo ou fechando o fim de curso
ativado. Caso o porto esteja em algum outro estado, o
acionamento invlido.
3. Botes azuis:
a. O boto 6, simbolizado no plugin por 1.2, reseta o programa,
devolvendo o porto ao estado descrito no tpico 1.
b. O boto 7, simbolizado no plugin por 1.3, termina o programa (swi
0x11) e desliga a placa, apagando os displays LCD e de 7 segmentos,
e os LEDs, caso estejam acesos. Na prtica, esta funo til caso
haja alguma situao adversa na alimentao do motor ou da placa
controladora (alavanca de emergncia).
4
CONSIDERAES FINAIS
ANEXOS:
.global _start
.text
5
@Display 8 Segmentos
@LED's
.equ BOTH_LED, 0x03
.equ NO_LED, 0x00
.equ SWI_SETLED, 0x201 @LEDs ligado/desligado (on/off)
@Botes
.equ SWI_CheckBlack, 0x202 @verifica botao preto acionado
.equ SWI_CheckBlue, 0x203 @verifica se algum boto azul
foi pressionado
@LCD
.equ SWI_DisplayOnScreen, 0x204
.equ SWI_ClearScreen, 0x206
.equ SWI_ClearLine, 0x208
@Timer
.equ SWI_GetTicks, 0x6d
_start:
6
reset:
mov r0,#SEG_A|SEG_B|SEG_E|SEG_F|SEG_G @letra P
swi 0x200 @mostra no display de 8 segmentos a letra "P"
mov r0,#NO_LED
swi 0x201 @mostra os LEDS desligados(off)
swi SWI_ClearScreen
mov r0,#0
mov r1,#0
ldr r2,=Message4 @escreve no LCD
swi SWI_DisplayOnScreen
ldr r3,=5000; @Temporizacao
mov r4, #1;
mov r6, #0;
mov r7, #1;
mov r8, #0;
mov r9, #0;
mov r10, #1;
loopbuttonblue:
swi SWI_CheckBlue @ verifica se um dos botoes azuis foi
pressionado
cmp r0,#0x80 @botao (1.3)
beq fimdoprograma @ir para o label "fimdoprograma"
cmp r0,#0x40 @botao (1.2)
beq reset @reseta o porto
bal loopbuttonblack
7
beq botaoesquerdo
cmp r0,#0x01 @botao da direita acionado
beq botaodireito
bal loopbuttonblue @ir para o label "loopbottonblue" e nao
termina o programa
8
mov r6,#1
mov r9,#1
bal loopbuttonblue
9
mov r0,#0
mov r1,#0
mov r10,#1 @desabilita o fim de curso
ldr r2,=Message5 @escreve no LCD
swi SWI_DisplayOnScreen
mov r6,#2
bal WaitLoop
10
mov r1,#0
ldr r2,=Message3 @escreve no LCD
swi SWI_DisplayOnScreen
add r8,r8,r7
mov r6,#2
mov r10,#1 @desabilita o fim de curso
bal loopbuttonblue
WaitLoop:
ldr r4,=0x00007FFF @mask for 15-bit timer
SWI SWI_GetTicks @Get start time
and r1,r0,r4 @adjusted time to 15-bit
Wloop:
@Checagem dos botes (Botes interrompem a temporizao)
11
swi SWI_CheckBlue @ verifica se um dos botoes azuis foi
pressionado
cmp r0,#0x80 @botao (1.3)
beq fimdoprograma @ir para o label "fimdoprograma"
cmp r0,#0x40 @botao (1.2)
beq reset @reseta o porto
bal loopbuttonblack2
loopbuttonblack2: @aciona os leds e o leitor de 7
segmentos
swi SWI_CheckBlack;
cmp r0,#0x02 @botao da esquerda acionado
beq botaoesquerdo
@Temporizacao
SWI SWI_GetTicks @Get current time
and r2,r0,r4 @adjusted time to 15-bit
cmp r2,r1
blt Roll @rolled above 15 bits
sub r5,r2,r1 @compute easy elapsed time
bal CmpLoop
Roll: sub r5,r4,r1 @compute rolled elapsed time
add r5,r5,r2
CmpLoop: cmp r5,r3 @is elapsed time < delay?
blt Wloop @Continue with delay
bal ActOnLeftBlack2
fimdoprograma:
mov r0,#0
swi 0x200 @apaga o display de 7 segmentos
mov r0,#NO_LED
swi 0x201 @mostra os LEDS desligados (off)
12
swi SWI_ClearScreen
mov r4, #1;
mov r6, #0;
mov r7, #1;
mov r8, #0;
mov r9, #0;
swi 0x11
.data
.align
13