Вы находитесь на странице: 1из 16

Exemplos de Programao 8085

Prof. Dr. Remy Eskinazi


DEE UPE Escola Politcnica/Cefet-PE

remy.eskinazi@gmail.com

Exemplos de Programao: Acha zero
INCIO
HL ENDEREO INICIAL
B0
A M
A=0 ?
B 1
M M+1
FIM?
RET
S
N
S
N
Exemplos de Programao:
Acha maior valor
Ponteiro <-- pos. inicial
( HL <-- 4100H )
B <-- 0
Acc <-- (Ponteiro)
(Acc <-- M)
Acc > B ?
Prxima posio
(HL <-- HL + 1)
Preserva dado e end.
( B <-- Acc )
( DE <-- HL )
HL= 4110H ?
Acc <-- B
HL <-- DE
RET
INICIO
S
N
S
N
Subrotina
AchaMaior
Ent.: HL = End. Inicial
Sada.: Acc = Maior valor
HL = End. Maior dado
Converso ASCII

Tabela ASCII
Converso ASCII - Algoritmo
Considere NH um nmero hexadecimal de dois dgitos, com valores entre 00 e FFH. Na
converso para ASCII, os dois dgitos so separados e cada dgito convertido
separadamente para o seu respectivo codigo ASCII. O algoritmo a seguir exemplifica a
converso para o nmero A8H:

separa-se o nmero A8H de dois dgitos.
0AH
08H.
(Observe que ambos dgitos ocupam a parte menos significativa do byte).

converte-se cada nmero para o seu respectivo cdigo ASCII.

0AH convertido para 41H (0A > 09 => 0A+37 = 41)
08H convertido para 38H (08 09 => 08+30 = 38 )
Algoritmo para converso ASCII
Inicio
A A8h
B A8h
A A and F0h
Swap A
B B and 0Fh
1
1
A > 9 ? A A + 30h
A A + 37H
Fim
B > 9 ?
B B + 30h
B B + 37H
Converso
ASCII para uma
faixa de
memria

Saida .: ACC = ASCII
Ent .: ACC = Valor
Ponteiro < -- pos. inicial
( HL end. Inic. )
(DE) < -- Acc
Acc >09?
Prxima posio
(DE < -- DE + 1)
B ACC
Acc < -- 2
o
nibble (B)
HL = FIM ?
Acc < -- ACC +37
INICIO
S
N
S
N
Subrotina
ASCII
Ent .: HL = End. Inicial rea de dados
DE = end. Inicial bytes ASCII
DE end. Inic.
Armazen.
Acc (M)
Subrotina
Separa
Nibbles
Subrotina
Converte
ASCII
Subrotina
Converte
ASCII
(DE) < -- Acc
Prxima po sio
(DE < -- DE + 1)
Prxima posio
(HL < -- HL + 1)
RET
1
1 SUBROTINA
SEPARA
NIBBLES
B B . 0FH
A A . F0H
Rotaciona ACC X4
RET
SUBROTINA
CONVERTE
ASCII
Acc < -- ACC +30
RET
Ent .: AC C = Valor
Saida .: ACC = Nib+
B = Nib -
Ordenao: Algortmo Bubble Sort
3
2
5
1
4
Acha
maior e
permuta
com
ponteiro
5
2
3
1
4
Acha
maior e
permuta
com
ponteiro
5
4
3
1
2
Acha
maior e
permuta
com
ponteiro
5
4
3
1
2
Acha
maior e
permuta
com
ponteiro
5
4
3
2
1
Ordenao: Algortmo Bubble Sort

INICIO
Ponteiro2 < -- pos.
inicial
(HL end. Inic. )
Ponteiro1 < -- pos.
inicial Rot. acha maior
(DE end. Inic. )
Subrotina
Acha Maior
(HL) < -- > (DE)
(Permuta dad os)
Prxima posio
(HL < -- HL+ 1)

1
1
Prxima posio
(DE < -- DE + 1)
Fim rea ?
RET
Sada .: Acc = Maior valor
HL = End. Maior valor
Rotinas de Retardo de Tempo (Delay)
; Rotina de delay 8 bits

Delay8: MVI A, (VALOR) ;7 T
LOOP1: DCR A ;5 T
JNZ LOOP1 ;10 T/7 T
RET ;10 T



; Tdelay = No Ciclos x T

; No Ciclos = 7+(5xvalor)+(10x(valor-1))+7+10

; No Ciclos = 14+(15xvalor)

; Calcular para f=10MHz T=0,1S

; Valor = 1 -> No Ciclos = 29 Tdelay = 2,9 S

; Valor = 255 -> No Ciclos = 3.839 Tdelay = 383,9 S

; Valor = 0 = 256 -> No Ciclos = 3.854 Tdelay = 385,4 S

Rotinas de Retardo de Tempo (Delay)
; Rotina de delay 16 bits

Delay16: MVI B, (VALOR2) ;7 T
LOOP2: MVI A, (VALOR1) ;7 T
LOOP1: DCR A ;5 T
JNZ LOOP1 ;10 T/7 T Ciclos1
DCR B ;5 T
JNZ LOOP2 ;10 T/7 T
RET ;10 T

; Tdelay = No Ciclos x T

; Ciclos1 = 7+(5xvalor1)+(10x(valor1-1))+7+5

; Ciclos1 = 9+(15xvalor1)

; No Ciclos = 7+valor2xciclos1+10(valor2-1)+7+10

; No Ciclos = 24+valor2(9+15xvalor1)+10xvalor2-10

; No Ciclos = 14+19valor2+15xvalor2xvalor1

; Valor2 = valor1 = 1-> No Ciclos = 48 Tdelay = 4,8 S

; Valor2 = valor1 = 255 -> No Ciclos = 975.375 Tdelay = 97,5375 mS

; Valor2 = valor1 = 0 = 256 -> No Ciclos = 987.918 Tdelay = 98,7918 mS
Exemplos de Programao: Leitura Peridica de Port
de Entrada
INCIO
HL ENDEREO INICIAL RAM (Buffer)
Fim do
Delay ?
Leitura do port (In
Address)
FIM?
RET
S
N
S
N
Delay
Guarda na RAM e
atualiza Ponteiro
Exemplos de Programao: Contagem em Interface de
Display 7 Segmentos (Catodo Comum)
D7(pd) D6(c) D5(d) D4(e) D3(g) D2(b) D1(a) D0(f)
a
b
c
d
e
f
g
pd
Tabela de Acionamento
Dgito D7(pd) D6(c) D5(d) D4(e) D3(g) D2(b) D1(a) D0(f) Byte

0 x x x x x x 77h
1 x x 44h
2 x x x x x 35h
3 x x x x x 6Eh
4 x x x x 4Dh
5 x x x x x 6Bh
6 x x x x x x 7Bh
7 x x x 46h
8 x x x x x x x 7Fh
9 x x x x x x 6Fh
Exemplos de Programao: Contagem em Interface de
Display 7 Segmentos (Catodo Comum)
A8 A15
AD0 AD7
ALE
Latch
Latch Latch
Decoder
A0 A15
CS0/ CS7/
A0 A7

. . .
. . .
Exemplos de Programao: Contagem em Interface de
Display 7 Segmentos (0 9)

; **************************************
; * Programa contador de 0 --> 9 *
; **************************************

.define

display 01h

;*****************************************
;* Tabela de display para simulador 8085:*
;*
*
;* 77h=0 *
;* 44h=1 *
;* 3Eh=2 *
;* 6Eh=3 *
;* 4Dh=4 *
;* 6Bh=5 *
;* 7Bh=6 *
;* 46h=7 *
;* 7Fh=8 *
;* 6Fh=9 *
;* 00h = Apaga o display *
;*****************************************
.data 0100h

tabela: db 077h, 044h, 03eh, 06eh, 04dh, 06bh, 07bh, 046h, 07fh, 06fh
;continua...
.org 0

inicio: lxi h, tabela
proximo: mov a,m
out display
call delay
inx h
mov a, l
cpi 0ah
jz inicio
jmp proximo

hlt

delay: mvi a, 01h
delay_2: mvi b, 080h
delay_3: mvi c, 080h
retardo1: dcr c
jnz retardo1
dcr b
jnz delay_3
dcr a
jnz delay_2
ret
Exemplo Para simulador 8085 -ES
; define variveis (equivale ao EQU)

.define
BUFFER 2050H ; nomeia 2050H com nome BUFFER
DATA 10101010b ; byte para colocar no buffer
COUNT 32 ; byte contador

;define dados na memria de dados
;Inicializa dados em 2100h

.data 2100h
V1: DB 200 ; varivel global de 1 byte = 200
V2: DB 7,2,5 ; varivel global de 3 bytes

;incio do programa

.ORG 2000H ; inicio

MVI A, DATA ; inicializa A com valor
LXI H, BUFFER ; inicializa ponteiro de memria
MVI B, COUNT ; inicializa contador de lao
LOOP: MOV M, A ; armazena DATA na memria
INX H ; incrementa ponteiro BUFFER
DCR B ; decrementa contador
JNZ LOOP ; se no zero (Z=0), repita para o prximo byte

Вам также может понравиться