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 * ; **************************************
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