Você está na página 1de 15

INSTITUTO FEDERAL DO ESPRITO SANTO

DEPARTAMENTO DE ENGENHARIA ELTRICA


ARQUITETURA DE COMPUTADORES

ANDR PEREIRA ROZETTI


HENRIQUE HOLZ CASTRO
RENATO SANTOS PEREIRA

PROJETO FINAL

VITRIA, ES
2016
ANDR PEREIRA ROZETTI
HENRIQUE HOLZ CASTRO
RENATO SANTOS PEREIRA

PROJETO FINAL

Trabalho desenvolvido durante a disciplina de


Arquitetura de Computadores, como parte da
avaliao referente ao 6 perodo.
Professor: Mrio Mestria

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:

Com a ajuda do plugin simulador da Embest Board, simulamos o controle de um


porto eletrnico, da seguinte maneira:

1. O porto comea inicialmente fechado, com a letra P sendo exibida no


display de 7 segmentos, os LEDs apagados e com a mensagem Porto
fechado sendo mostrada no LCD. Este estado foi escolhido tambm como
estado de reset.
2. Botes pretos:
a. O boto esquerdo funciona como acionador do porto. Seu
acionamento obedece aos seguintes critrios:
i. Considerando o porto inicialmente parado, ele abre o porto,
exibindo a letra A no display de 7 segmentos e a mensagem
Porto abrindo no LCD.
ii. Se ele estiver abrindo (ou fechando), clicando novamente no
acionador, o porto para, exibida a letra P no display, os
LEDs so acionados e exibida a mensagem PORTO
ENTREABERTO no LCD.
iii. Clicando novamente, o porto fecha, exibindo a letra F no
display de 7 segmentos, os LEDs apagam, e exibida a
mensagem Porto fechando no LCD.
iv. Com mais um clique, o porto volta para o estado descrito em
2.a.ii. Clicando novamente, o porto volta ao estado 2.a.i, e o
ciclo recomea.
v. Caso o porto esteja parado, no estado descrito em 2.b, um
temporizador dispara uma contagem, e em 5 segundos, o
porto passa ao estado 2.a.iii (fechando).

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).

Para a elaborao deste projeto, nos utilizamos dos registradores associados


aos elementos da placa (botes, displays e LEDs), e de outros registradores,
que serviriam para indicar o estado lgico do porto (flags). Foram utilizadas
nestes registradores as operaes de adio e subtrao (add/sub) e
deslocamento (mov). Tambm foi utilizada uma rotina de temporizao, cujo
comando principal swi 0x6d (SWI_GetTicks)

4
CONSIDERAES FINAIS

A rotina principal do programa (abre/fecha/para o porto e fim-de-cursos) possui


baixa complexidade. O que traz um grau de aprimoramento do programa so as
funcionalidades extras que ele possui e o tratamento de situaes indesejadas e/ou
irrelevantes. Isto, na nossa opinio, torna o programa bem mais interessante e
perfeitamente aplicvel no quotidiano.

ANEXOS:

@TRABALHO FINAL - ARQUITETURA DE COMPUTADORES


@Este trabalho simula, com o ARMSim#, o funcionamento de um
portao eletronico
@PORTAO ELETRONICO - Copyright A. P. Rozetti, H. H. Castro e
R. S. Pereira
@Arquitetura de Computadores, prof Mario Mestria
@Local: Laboratorio de Linguagens de Programacao
@IEE6, Engenharia Eletrica
@IFES - Campus Vitoria
@The ARMSim# Simulator - Copyright R. N. Horpoll, W. D. Lyons
and M. Serra
@Department of Computer Science, University of Victoria
@For use by students undergraduate and graduate

.global _start
.text

5
@Display 8 Segmentos

.equ SEG_A, 0x80 @byte values for each segment


.equ SEG_B, 0x40 @of the 8 segment display
.equ SEG_C, 0x20
.equ SEG_D, 0x08
.equ SEG_E, 0x04
.equ SEG_F, 0x02
.equ SEG_G, 0x01

@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

loopbuttonblack: @aciona os leds e o leitor de 7 segmentos


swi SWI_CheckBlack;
cmp r0,#0x02 @botao da esquerda acionado

7
beq botaoesquerdo
cmp r0,#0x01 @botao da direita acionado
beq botaodireito
bal loopbuttonblue @ir para o label "loopbottonblue" e nao
termina o programa

botaoesquerdo: @botao da esquerda acionado


cmp r6,#1
beq GateStop @ir para o label "GateStop"
blt ActOnLeftBlack1 @ir para o label "ActOnLeftBlack1"
bgt ActOnLeftBlack2 @ir para o label "ActOnLeftBlack2"

botaodireito: @botao da direita acionado


cmp r10,#1
bgt ActOnRightBlack1 @ir para o label "ActOnRightBlack1"
blt ActOnRightBlack2 @ir para o label "ActOnRightBlack2"
beq loopbuttonblue

ActOnLeftBlack1: @abre o porto


mov r0,#SEG_A|SEG_B|SEG_C|SEG_E|SEG_F|SEG_G @letra A
swi 0x200 @mostra no display de 8 segmentos a letra "A"
mov r0,#NO_LED
swi 0x201 @mostra os LEDS desligados(off)
swi SWI_ClearScreen
mov r0,#0
mov r1,#0
mov r10,#2 @Habilita o fim de curso "aberto"
ldr r2,=Message1 @escreve no LCD
swi SWI_DisplayOnScreen

8
mov r6,#1
mov r9,#1
bal loopbuttonblue

ActOnLeftBlack2: @fecha o porto


mov r0,#SEG_A|SEG_E|SEG_F|SEG_G @letra F
swi 0x200 @mostra no display de 8 segmentos a letra "F"
mov r0,#NO_LED
swi 0x201 @mostra os LEDS desligados(off)
swi SWI_ClearScreen
mov r0,#0
mov r1,#0
mov r10,#0 @Habilita o fim de curso "fechado"
ldr r2,=Message2 @escreve no LCD
swi SWI_DisplayOnScreen
mov r6,#1
mov r9,#0
bal loopbuttonblue

GateStop: @botao da direita acionado


cmp r9,#1
beq GateStop1 @ir para o label "GateStop1"
blt GateStop2 @ir para o label "GateStop2"

GateStop1: @para o portao (abrindo)


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,#BOTH_LED
swi 0x201 @mostra os LEDS ligados(on)
swi SWI_ClearScreen

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

GateStop2: @para o portao (fechando)


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,#BOTH_LED
swi 0x201 @mostra os LEDS ligados(on)
swi SWI_ClearScreen
mov r0,#0
mov r1,#0
mov r10,#1 @desabilita o fim de curso
ldr r2,=Message5 @escreve no LCD
swi SWI_DisplayOnScreen
sub r6,r6,r7
bal WaitLoop

ActOnRightBlack1: @(Chave fim de curso - TOTALMENTE ABERTO)


aciona os LEDs
mov r0,#SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_G @letra O
swi 0x200 @mostra no display de 8 segmentos a letra "O"
mov r0,#NO_LED
swi 0x201 @mostra os LEDS desligados (off)
swi SWI_ClearScreen
mov r0,#0

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

ActOnRightBlack2: @(Chave fim de curso - TOTALMENTE FECHADO)


desliga os LEDs
mov r0,#SEG_A|SEG_D|SEG_E|SEG_G @letra C
swi 0x200 @mostra no display de 8 segmentos a letra "C"
sub r8,r8,r7
swi SWI_ClearScreen
mov r0,#0
mov r1,#0
ldr r2,=Message4 @escreve no LCD
swi SWI_DisplayOnScreen
mov r6,#0
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

Message1: .asciz "Portao abrindo"


Message2: .asciz "Portao fechando"
Message3: .asciz "Portao aberto"
Message4: .asciz "Portao fechado"
Message5: .asciz "PORTAO ENTREABERTO"
Message6: .asciz " "
.end

13

Você também pode gostar