31
A Embest Board

A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Embed Size (px)

Citation preview

Page 1: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

A Embest Board

Page 2: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Interface com o usuário

Page 3: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Componentes Programáveis

Cinco componentes principais para programação • Um display de 8 segmentos • Dois LEDs vermelhos • Dois botões pretos • Dezesseis botões no formato de um teclado 4x4 • Uma tela LCD com 40 colunas x 15 linhas

Coordenadas dadas por pares {coluna, linha}Canto superior esquerdo é {0,0}Canto inferior esquerdo é {39,14}Cada célula (posição) contém um caracter ASCII

Page 5: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Display de 8 segmentos• Interrupção de software SWI 0x200• R0 conterá o padrão dos segmentos– Deverá ser feito um OR dos valores dos segmentos – Ex: Para acender o dígito “3.” no display devemos

acender os segmentos “A,B,C,D,F,P” ou seja: 0x80 OR 0x40 OR 0x20 OR 0x08 OR 0x02 OR 0x10 = 0xFA

– Para acender o ponto decimal: “OR” com 0x10

Page 6: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Display de 8 segmentos - Padrão

Page 7: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Display de 8 segmentos - Equates• Primeiro crie Equates para cada segmento, para

uso no código .equ SWI_SETSEG8, 0x200 @display on 8 Segment.equ SEG_A,0x80.equ SEG_B,0x40.equ SEG_C,0x20.equ SEG_D,0x08.equ SEG_E,0x04.equ SEG_F,0x02.equ SEG_G,0x01.equ SEG_P,0x10

Page 8: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Display de 8 segmentos - Combinações• Depois, crie na área de dados (.data) um “vetor” contendo as

combinações de segmentos para exibir cada dígitoDigits:.word SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_G @0.word SEG_B|SEG_C @1.word SEG_A|SEG_B|SEG_F|SEG_E|SEG_D @2.word SEG_A|SEG_B|SEG_F|SEG_C|SEG_D @3.word SEG_G|SEG_F|SEG_B|SEG_C @4.word SEG_A|SEG_G|SEG_F|SEG_C|SEG_D @5.word SEG_A|SEG_G|SEG_F|SEG_E|SEG_D|SEG_C @6.word SEG_A|SEG_B|SEG_C @7.word SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G @8.word SEG_A|SEG_B|SEG_F|SEG_G|SEG_C @9.word 0 @Blank display

Page 9: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Display de 8 segmentos – Exibir 0-9; Exibe o numeral 7 no displayldr r0, =Digits ; Endereço base do “vetor”mov r1, #7 ; Valor a ser exibidoldr r0, [r0,r1,lsl#2] ; R0 <- Digits[R1]swi SWI_SETSEG8 ; Exibe no display

Page 10: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Display de 8 segmentos - Subrotina@ ===== Display8Segment (Number:R0; Point:R1)@ Exibe números de 0-9 em R0 no display de 8 segmentos@ Se R1 = 1, o ponto decimal é mostradoDisplay8Segment:

stmfd sp!,{r0-r2,lr} ; Salva registradoresldr r2,=Digitsldr r0,[r2,r0,lsl#2]tst r1,#0x01 ; se r1=1,orrne r0,r0,#SEG_P ; então mostre o pontoswi SWI_SETSEG8ldmfd sp!,{r0-r2,pc} ; Restaura registradores

Page 11: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Display de 8 segmentos - Chamada

Exemplo: Exibir o numeral 7

Mov R0, #7BL Display8Segment

Page 12: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Temporizador – Uso

; Esperar por 3 segundos (3000 ms)ldr r3,=3000BL Wait

Page 13: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Temporizador - Subrotina.equ SWI_GetTicks, 0x6d @get current time

...@ Delays for the amount of time stored in r3 for a 15-bit timerWait:

stmfd sp!,{r0-r5,lr}

ldr r4,=0x00007FFF @mask for 15-bit timerSWI SWI_GetTicks @Get start timeand r1,r0,r4 @adjusted time to 15-bit

Wloop:SWI SWI_GetTicks @Get current time and r2,r0,r4 @adjusted time to 15-bitcmp r2,r1blt Roll @rolled above 15 bitssub r5,r2,r1 @compute easy elapsed timebal CmpLoop

Roll: sub r5,r4,r1 @compute rolled elapsed timeadd r5,r5,r2

CmpLoop: cmp r5,r3 @is elapsed time < delay?blt Wloop @Continue with delay

Xwait:ldmfd sp!,{r0-r5,pc}

Page 14: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

LEDs on/off• LEDs a serem acesos é informado em R0• Usar SWI 0x201 para comandar LEDs• Recomendável criar Equate

.equ SWI_SETLED, 0x201 @LEDs on/offExemplo:

mov r0,#0x02swi 0x201 @ LED esquerdo acesomov r0,#0x01swi 0x201 @ LED direito acesomov r0,#0x03swi 0x201 @ Ambos LEDs acesos

Page 15: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Exercícios para aula

1. Exibir os dígitos de 0-9 no display de 8 segmentos, trocando de dígito a cada 1(s)

2. Modificar o exercício 1 para exibir também os dígitos hexadecimais (0x0-0xF)

3. Modificar o exercício 2, para exibir o ponto de milhar, durante a contagem

4. Modificar o exercício 2 para comandar os LEDs seguindo a sequência: ambos apagados, esquerdo aceso, direito aceso, ambos acesos, à cada mudança de valor exibido no display. Repetir a sequência até que F seja exibido.

Page 16: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Botões Pretos• Verificar pressionamento pela swi 0x202• Recomendável criar Equate

.equ SWI_CheckBlack, 0x202• No retorno da interrupção R0 conterá:

1 se o botão direito foi pressionado2 se o botão esquerdo foi pressionado

Exemplo:swi 0x202cmp r0,#0x02beq ActOnLeftBlackcmp r0,#0x01bal ActOnRightBlack

Page 17: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Exercícios• Para aula:5. Exibir os dígitos de 0-9 no display de 8 segmentos, avançando a contagem, a cada pressionamento do botão preto esquerdo 6. Modificar o exercício 5 para avançar a contagem a cada vez que qualquer um dos botões pretos for pressionado • Para casa:7. Modificar o exercício 6 para avançar a contagem a cada vez que um dos botões pretos for pressionado OU 3 segundos tenham se passado

Page 18: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Botões Azuis (teclado)Layout e numeração dos botões

Page 19: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Botões Azuis (teclado)• Usar swi 0x203 para verificar pressionamento• Recomendável criar Equate

.equ SWI_CheckBlue, 0x203 • Na saída os primeiros 16 bits de R0 conterão

o botão pressionadoExemplo: Se o botão na posição 1 for pressionado R0 conterár0 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

Page 20: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Botões Azuis - Equates.equ BLUE_KEY_00, 0x0001 @button(0).equ BLUE_KEY_01, 0x0002 @button(1).equ BLUE_KEY_02, 0x0004 @button(2).equ BLUE_KEY_03, 0x0008 @button(3).equ BLUE_KEY_04, 0x0010 @button(4).equ BLUE_KEY_05, 0x0020 @button(5).equ BLUE_KEY_06, 0x0040 @button(6).equ BLUE_KEY_07, 0x0080 @button(7).equ BLUE_KEY_08, 0x0100 @button(8).equ BLUE_KEY_09, 0x0200 @button(9).equ BLUE_KEY_10, 0x0400 @button(10).equ BLUE_KEY_11, 0x0800 @button(11).equ BLUE_KEY_12, 0x1000 @button(12).equ BLUE_KEY_13, 0x2000 @button(13).equ BLUE_KEY_14, 0x4000 @button(14).equ BLUE_KEY_15, 0x8000 @button(15)

Page 21: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Botões Azuis - Verificação

Ficar em loop até que uma tecla seja pressionadaExemplo: Saltar para label Azul quando uma tecla for pressionadaBB1: swi SWI_CheckBlue

cmp r0,#0bgt Azul B BB1

Page 22: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Botões Azuis - Decisão

Tomar ações em função da tecla pressionadaExemplo: Mover para R0 o valor correspondente ao número da tecla pressionadaAzul: cmp r0,#BLUE_KEY_00

moveq r0, #0cmp r0,#BLUE_KEY_01moveq r0, #1cmp r0,#BLUE_KEY_02moveq r0, #2cmp r0,#BLUE_KEY_03moveq r0, #3…

Page 23: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Botões Azuis - Exercícios

8. Exibir no display de 8 segmentos o valor hexadecimal correspondente à tecla azul pressionada. Terminar o programa quando quaisquer 5 teclas tenham sido pressionadas

9. Modificar o exercício 8 para terminar o programa quando o botão preto for pressionado

Page 24: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Tela LCD• Usar as seguintes SWIs

0x204 para escrever uma string na tela0x205 para escrever um inteiro na tela0x206 para apagar a tela0x207 para escrever um caracter ASCII na tela0x208 para apagar uma linha da tela

• Coordenadas supridas em R0 e R1R0 = x (coluna), de 0 a 39R1 = y (linha), de 0 a 14

Page 25: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Tela LCD - Equates

Equates recomendados.equ SWI_DRAW_STRING, 0x204 .equ SWI_DRAW_INT, 0x205 .equ SWI_CLEAR_DISPLAY,0x206

.equ SWI_DRAW_CHAR, 0x207 .equ SWI_CLEAR_LINE, 0x208

Page 26: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Tela LCD – Escrever String• Usar swi 0x204• R0 e R1 contém as coordenadas• R2 contem o ponteiro para a stringExemplo: Escrever mensagem na linha 1, col. 4mov r0,#4mov r1,#1ldr r2,=Messageswi 0x204 @ display message...Message: .asciz "Hello There\n"

Page 27: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Tela LCD – Escrever Inteiro• Usar swi 0x205• R0 e R1 contém as coordenadas• R2 contem o valor a ser escritoExemplo: Escrever 23 na linha 1, col. 4mov r0,#4mov r1,#1mov r2,#23swi 0x205 @ display integer

Page 28: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Tela LCD – Escrever Caracter• Usar swi 0x207• R0 e R1 contém as coordenadas• R2 contem o caracter a ser escritoExemplo: Escrever “Z” na linha 1, col. 4mov r0,#4mov r1,#1mov r2,#’Zswi 0x207 @display char

Page 29: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Tela LCD – Apagar tela• Usar swi 0x206• Nada a ser passado ou recebido

Exemplo: Apagar a telaswi 0x206 @ clear screen

Page 30: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Tela LCD – Apagar uma linha da tela

• Usar swi 0x208• R0 contém a linha a ser apagada

Exemplo: Apagar a linha 5ldr r0,#5swi 0x208 @clear line 5

Page 31: A Embest Board. Interface com o usuário Componentes Programáveis Cinco componentes principais para programação Um display de 8 segmentos Dois LEDs vermelhos

Tela LCD - Exercícios10. Exibir na tela LCD o número da tecla azul pressionada, conforme figura abaixo. Sair do programa quando uma tecla preta for pressionada. Exibir mensagem explicativa no inicio da execução e antes de sair do programa.