You are on page 1of 15

INSTITUTO FEDERAL DO ESPÍRITO SANTO

DEPARTAMENTO DE ENGENHARIA ELÉTRICA
ARQUITETURA DE COMPUTADORES

ANDRÉ PEREIRA ROZETTI
HENRIQUE HOLZ CASTRO
RENATO SANTOS PEREIRA

PROJETO FINAL

VITÓRIA, ES
2016

Professor: Mário Mestria VITÓRIA. ANDRÉ PEREIRA ROZETTI HENRIQUE HOLZ CASTRO RENATO SANTOS PEREIRA PROJETO FINAL Trabalho desenvolvido durante a disciplina de Arquitetura de Computadores. ES 18 DE FEVEREIRO DE 2016 . como parte da avaliação referente ao 6º período.

.............................................................2 METODOLOGIA..........................................................................................................................................4 ANEXOS.................................................................................................3 CONSIDERAÇÕES FINAIS...................................... SUMÁRIO OBJETIVO.......................................................5 1 ..........................

O código gerado em linguagem Assembly referente ao programa está no anexo. 2 .OBJETIVO Este trabalho tem por objetivo a implementação do controle de um portão eletrônico. respectivamente. utilizando como ambientes de simulação e programação os softwares ARMSim# e Notepad.

v. e é exibida a mensagem “Portão fechando” no LCD. ele abre o portão.b.ii. os LED’s são acionados e é exibida a mensagem “PORTÃO ENTREABERTO” no LCD. clicando novamente no acionador. simulamos o controle de um portão eletrônico. 2. exibindo a letra F no display de 7 segmentos. no estado descrito em 2. Este estado foi escolhido também como estado de reset. o portão volta para o estado descrito em 2. exibindo a letra A no display de 7 segmentos e a mensagem “Portão abrindo” no LCD. iii. o portão passa ao estado 2. um temporizador dispara uma contagem. Clicando novamente. é exibida a letra P no display.a. Se ele estiver abrindo (ou fechando). e o ciclo recomeça. da seguinte maneira: 1. O botão esquerdo funciona como acionador do portão. Seu acionamento obedece aos seguintes critérios: i.METODOLOGIA: Com a ajuda do plugin simulador da Embest Board. com a letra P sendo exibida no display de 7 segmentos. Com mais um clique.i. o portão para.a. o portão fecha. Considerando o portão inicialmente parado. 3 . Clicando novamente. iv. e em 5 segundos. ii. os LED’s apagados e com a mensagem “Portão fechado” sendo mostrada no LCD. O portão começa inicialmente fechado. Caso o portão esteja parado.iii (fechando). os LED’s apagam. Botões pretos: a.a. o portão volta ao estado 2.

Caso o portão esteja em algum outro estado. Caso o portão esteja fechando. e os LED’s. Foram utilizadas nestes registradores as operações de adição e subtração (add/sub) e deslocamento (mov). devolvendo o portão ao estado descrito no tópico 1. esta função é útil caso haja alguma situação adversa na alimentação do motor ou da placa controladora (alavanca de emergência). iii. Na prática. e a mensagem “Portão aberto” aparece no LCD. 3. é exibida a letra O (open) no display de 7 segmentos.2. Botões azuis: a. ii. b.3. reseta o programa. o acionamento é inválido. O botão 6. Caso o portão esteja abrindo. b. que serviriam para indicar o estado lógico do portão (flags). simbolizado no plugin por 1. Também foi utilizada uma rotina de temporização. O botão direito simula uma chave fim-de-curso. termina o programa (swi 0x11) e desliga a placa. e a mensagem “Portão fechado” aparece no LCD. cujo comando principal é swi 0x6d (SWI_GetTicks) 4 . e de outros registradores. caso estejam acesos. displays e LED’s). nos utilizamos dos registradores associados aos elementos da placa (botões. simbolizado no plugin por 1. O botão 7. • Para a elaboração deste projeto. apagando os displays LCD e de 7 segmentos. Somente se o portão estiver abrindo ou fechando o fim de curso é ativado. é exibida a letra C (closed) no display de 7 segmentos. Seu acionamento obedece aos seguintes critérios: i.

Pereira @Arquitetura de Computadores. N. H. W. ANEXOS: @TRABALHO FINAL . na nossa opinião. Castro e R. Engenharia Eletrica @IFES . Horpoll. Rozetti. Serra @Department of Computer Science.Campus Vitoria @The ARMSim# Simulator . D. University of Victoria @For use by students undergraduate and graduate .text 5 .ARQUITETURA DE COMPUTADORES @Este trabalho simula. Lyons and M. torna o programa bem mais interessante e perfeitamente aplicável no quotidiano. Isto. P. prof Mario Mestria @Local: Laboratorio de Linguagens de Programacao @IEE6. O que traz um grau de aprimoramento do programa são as funcionalidades extras que ele possui e o tratamento de situações indesejadas e/ou irrelevantes. H.Copyright A.global _start .Copyright R. S. com o ARMSim#. o funcionamento de um portao eletronico @PORTAO ELETRONICO .CONSIDERAÇÕES FINAIS A rotina principal do programa (abre/fecha/para o portão e fim-de-cursos) possui baixa complexidade.

0x201 @LEDs ligado/desligado (on/off) @Botões . 0x20 . 0x02 .equ NO_LED. 0x80 @byte values for each segment . 0x204 .equ SWI_CheckBlack.equ SEG_D.equ SEG_G.equ SEG_F.@Display 8 Segmentos . 0x04 .equ SWI_SETLED.equ SEG_C.equ SEG_B. 0x206 .equ BOTH_LED.equ SWI_GetTicks.equ SWI_ClearScreen. 0x6d _start: 6 .equ SWI_DisplayOnScreen. 0x40 @of the 8 segment display . 0x202 @verifica botao preto acionado .equ SWI_ClearLine.equ SEG_A. 0x208 @Timer .equ SEG_E. 0x00 . 0x03 . 0x08 . 0x01 @LED's .equ SWI_CheckBlue. 0x203 @verifica se algum botão azul foi pressionado @LCD .

=5000. @Temporizacao mov r4. mov r7.#0 ldr r2.#NO_LED swi 0x201 @mostra os LEDS desligados(off) swi SWI_ClearScreen mov r0.#0x40 @botao (1. #0. #0.2) beq reset @reseta o portão bal loopbuttonblack loopbuttonblack: @aciona os leds e o leitor de 7 segmentos swi SWI_CheckBlack.#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.#0x80 @botao (1. mov r9.#0x02 @botao da esquerda acionado 7 . mov r10.=Message4 @escreve no LCD swi SWI_DisplayOnScreen ldr r3. mov r8. #1.reset: mov r0.#0 mov r1. loopbuttonblue: swi SWI_CheckBlue @ verifica se um dos botoes azuis foi pressionado cmp r0.3) beq fimdoprograma @ir para o label "fimdoprograma" cmp r0. cmp r0. #1. #0. #1. mov r6.

#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.#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.#0 mov r10.#0 mov r1.=Message1 @escreve no LCD swi SWI_DisplayOnScreen 8 .#NO_LED swi 0x201 @mostra os LEDS desligados(off) swi SWI_ClearScreen mov r0.#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 portão mov r0.beq botaoesquerdo cmp r0.#2 @Habilita o fim de curso "aberto" ldr r2.

#1 bal loopbuttonblue ActOnLeftBlack2: @fecha o portão mov r0.=Message2 @escreve no LCD swi SWI_DisplayOnScreen mov r6.#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.#0 mov r10.#1 beq GateStop1 @ir para o label "GateStop1" blt GateStop2 @ir para o label "GateStop2" GateStop1: @para o portao (abrindo) mov r0.mov r6.#1 mov r9.#0 @Habilita o fim de curso "fechado" ldr r2.#1 mov r9.#BOTH_LED swi 0x201 @mostra os LEDS ligados(on) swi SWI_ClearScreen 9 .#0 mov r1.#NO_LED swi 0x201 @mostra os LEDS desligados(off) swi SWI_ClearScreen mov r0.#0 bal loopbuttonblue GateStop: @botao da direita acionado cmp r9.#SEG_A|SEG_E|SEG_F|SEG_G @letra F swi 0x200 @mostra no display de 8 segmentos a letra "F" mov r0.

#0 mov r1.#NO_LED swi 0x201 @mostra os LEDS desligados (off) swi SWI_ClearScreen mov r0.r7 bal WaitLoop ActOnRightBlack1: @(Chave fim de curso .#0 10 .TOTALMENTE ABERTO) aciona os LEDs mov r0.#0 mov r1.=Message5 @escreve no LCD swi SWI_DisplayOnScreen sub r6.#2 bal WaitLoop GateStop2: @para o portao (fechando) mov r0.#1 @desabilita o fim de curso ldr r2.r6.#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.#1 @desabilita o fim de curso ldr r2.=Message5 @escreve no LCD swi SWI_DisplayOnScreen mov r6.mov r0.#0 mov r10.#0 mov r10.#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.#BOTH_LED swi 0x201 @mostra os LEDS ligados(on) swi SWI_ClearScreen mov r0.

#1 @desabilita o fim de curso bal loopbuttonblue WaitLoop: ldr r4.#0 mov r1.#0 ldr r2.r7 swi SWI_ClearScreen mov r0.#0 ldr r2.#1 @desabilita o fim de curso bal loopbuttonblue ActOnRightBlack2: @(Chave fim de curso .TOTALMENTE FECHADO) desliga os LEDs mov r0.r4 @adjusted time to 15-bit Wloop: @Checagem dos botões (Botões interrompem a temporização) 11 .r8.=0x00007FFF @mask for 15-bit timer SWI SWI_GetTicks @Get start time and r1.=Message4 @escreve no LCD swi SWI_DisplayOnScreen mov r6.r0.r8.r7 mov r6.#2 mov r10.=Message3 @escreve no LCD swi SWI_DisplayOnScreen add r8.#0 mov r10.mov r1.#SEG_A|SEG_D|SEG_E|SEG_G @letra C swi 0x200 @mostra no display de 8 segmentos a letra "C" sub r8.

#0x40 @botao (1.r4.#0x80 @botao (1.r0.r2 CmpLoop: cmp r5.r2.r5.r1 blt Roll @rolled above 15 bits sub r5.#0x02 @botao da esquerda acionado beq botaoesquerdo @Temporizacao SWI SWI_GetTicks @Get current time and r2.3) beq fimdoprograma @ir para o label "fimdoprograma" cmp r0. swi SWI_CheckBlue @ verifica se um dos botoes azuis foi pressionado cmp r0.2) beq reset @reseta o portão bal loopbuttonblack2 loopbuttonblack2: @aciona os leds e o leitor de 7 segmentos swi SWI_CheckBlack.r1 @compute rolled elapsed time add r5.#NO_LED swi 0x201 @mostra os LEDS desligados (off) 12 .#0 swi 0x200 @apaga o display de 7 segmentos mov r0. cmp r0.r1 @compute easy elapsed time bal CmpLoop Roll: sub r5.r3 @is elapsed time < delay? blt Wloop @Continue with delay bal ActOnLeftBlack2 fimdoprograma: mov r0.r4 @adjusted time to 15-bit cmp r2.

#1.asciz "PORTAO ENTREABERTO" Message6: . mov r8.asciz "Portao abrindo" Message2: .end 13 .asciz "Portao fechando" Message3: . swi 0x11 .swi SWI_ClearScreen mov r4.data . mov r6.asciz "Portao fechado" Message5: . #1. mov r7.asciz " " . mov r9. #0. #0.asciz "Portao aberto" Message4: . #0.align Message1: .