Académique Documents
Professionnel Documents
Culture Documents
Microprocesadores
Mapa de memoria
FFFF
nodo comn
Puerto0
Puerto0
Puerto1
Puerto1
a
b
c
a
b
f
e
c
d
NC g
1
1
0
0
0
0
0
1
0
0
f
0
1
1
1
0
0
0
1
0
0
e
0
1
0
1
1
1
0
1
0
1
d
0
1
0
0
1
0
0
1
0
1
c
0
0
1
0
0
0
0
0
0
0
b
0
0
0
0
0
1
1
0
0
0
18H
18H
00H
00H
78H
78H
02H
02H
12H
12H
19H
19H
30H
30H
24H
24H
79H
79H
40H
40H
400H+9
a
0
1
0
0
1
0
0
0
0
0
STACK
RAM
.
.
.
cdigos de 7 segs
0
1
2
3
4
5
6
7
8
9
Buffer2
Buffer1
SP
Cdigo (400h)
EPROM
PROGRAMA
PROGRAMA
0000
Carlos Canto Quintal
Microprocesadores
Programa principal
Principal
Principal
Inicializa
Inicializa Stack
Stack
STACK
BUFFER1
BUFFER2
Inicializa
Inicializa cuenta
cuenta
MAIN:
Desempacar
Desempacar
BCD
BCD
Desplegar
Desplegar
Delay_1seg.
Delay_1seg.
EQU
EQU
EQU
ORG
0FFEh
0FFEh
0FFFh
0000h
LD SP, STACK
LD B,00H
CALL DESPLEGAR
CALL DELAY
CALL ACTUALIZA
JP NEXT
Actualiza
Actualiza
Microprocesadores
Contando en BCD
El diseo de un contador binario (o HEX) con programacin es muy
simple; se realiza poniendo en ceros un registro e ir incrementando
el conteo a un intervalo dado de tiempo hasta que la cuenta final sea
alcanzada . Sin embargo, el conteo en BCD requiere algunos
ajustes; esto se hace usando la instruccin DAA.
El microprocesador es una mquina binaria; no reconoce los
nmeros en BCD. En BCD cualquier nmero entre A y F son
invlidos . Cuando el conteo va de 9 a A, la instruccin DAA puede
ajustar la cuenta a 10. El microprocesador interpreta este nmero
como equivalente a 10 en Hex; sin embargo, vemos los 4 bits de
ms bajo orden como 0 y los 4 bits de ms alto orden como 1,
almacenados pegados en un registro de 8 bits. Esto es llamado
como BCD empacado.
Para desplegar 10BCD, en los dos displays de 7 segmentos, los bits de
bajo orden y los bits de alto orden necesitan estar separados
(llamado desempacar)
Carlos Canto Quintal
Microprocesadores
La instruccin DAA
1.-Es una instruccin de 1 byte. Despus de una operacin
aritmtica, esta instruccin ajusta un nmero de 8 bits en el
Acumulador para formar dos nmeros en BCD empacados.
2.-Usa las banderas H y C para realizar el ajuste.
3.-En la adicin aritmtica, si hay un acarreo del bit D3 al bit D4, la
bandera del medio Acarreo ( H) se hace uno. Similarmente, en la
substraccin, si hay un prstamo del bit D4, la bandera H se hace
uno. La instruccin DAA usa las banderas H y C internamente para
ajustar el resultado de los dgitos BCD.
Microprocesadores
Ejemplo:
si se suma 15 (BCD) y 27 (BCD), una suma aritmtica
decimal da como resultado:
15
+ 27
42
Pero cuando las representaciones binarias son sumadas en
el acumulador de acuerdo a la aritmtica binaria estndar.
0001
0101
+ 0010
0111
0011
1100 =3C
La suma es ambigua.
La instruccin DAA ajusta el resultado para que se obtenga
la representacin correcta en BCD
0011
1100
+ 0000
0110
0100
0010
= 42
Microprocesadores
DAA
DAA
00 11 00 11 11 00 00 00
Desempacar
00 00 00 00 00 11 00 11
00 00 00 00 11 00 00 00
8
Se salvan los dos
bytes en dos
localidades de la
memoria
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 1
Buffer1
Buffer2
Microprocesadores
Esta subrutina desempaca el nmero BCD del acumulador y almacena dos dgitos
BCD desempacados en el buffer BUFER1 y BUFFER2
Desempacar
Desempacar
DESEMPACAR:
LD HL,BUFFER1
HLBuffer1
HLBuffer1
Acuenta
Acuenta
AA&0Fh
AA&0Fh
(HL)A
(HL)A
Acuenta
Acuenta
Shift
Shiftright
rightAA
Shift
Shiftright
rightAA
Shift
Shiftright
rightAA
Shift
Shiftright
rightAA
HLHL+1
HLHL+1
LD A,B
AND 0Fh
LD (HL),A
INC HL
LD A,B
SRL A
SRL A
SRL A
SRL A
LD (HL),A
RET
(HL)A
(HL)A
Ret
Ret
Carlos Canto Quintal
Microprocesadores
Mapa de memoria
Lee
Leecdigo
cdigo
A(
A( HL)
HL)
FFFF
(SP)HL
(SP)HL
LEE_CODIGO
LEE_CODIGO
HLCdigo
HLCdigo
(puerto2)A
(puerto2)A
HLHL+A
HLHL+A
HLHL-1
HLHL-1
A(HL)
A(HL)
05H
05H
08H
08H
Buffer2
Buffer1
SP
STACK
.
.
.
18H
18H
00H
00H
78H
78H
02H
02H
12H
12H
19H
19H
30H
30H
24H
24H
79H
79H
40H
40H
400H+9
HL(SP)
HL(SP)
A(HL)
A(HL)
Ret
Ret
LEE_CODIGO
LEE_CODIGO
Cdigo (400h)
(puerto1)
(puerto1)AA
RAM
EPROM
PROGRAMA
PROGRAMA
Ret
Ret
0000
Microprocesadores
Subrutina DESPLEGAR
Tarea: Mostrar la cuenta del contador BCD en los displays de 7 segmentos
Display
Display
A(
A( HL)
HL)
LEE_CODIGO
LEE_CODIGO
(puerto2)A
(puerto2)A
DISPALY:
Mapa de memoria
FFFF
LD A,(HL)
CALL LEE_CODIGO
OUT (puerto2),A
INC HL
LD A,(HL)
Buffer2
Buffer1
SP
CALL LEE_CODIGO
OUT(puerto1),A
RET
18H
18H
00H
00H
78H
78H
02H
02H
12H
12H
19H
19H
30H
30H
24H
24H
79H
79H
40H
40H
400H+9
A(HL)
A(HL)
LEE_CODIGO
LEE_CODIGO
Ret
Ret
STACK
.
.
.
HLHL-1
HLHL-1
(puerto1)
(puerto1)AA
05H
05H
08H
08H
Cdigo (400h)
RAM
EPROM
PROGRAMA
PROGRAMA
0000
Microprocesadores
Subrutina LEE_CODIGO
Tarea: leer de la memoria los cdigos de 7 segmentos de los dgitos del conteo actual que sern
desplegado en los displays de 7 segnmentos
Mapa de memoria
Lee
Leecdigo
cdigo
LEE_CODIGO:
PUSH HL
LD HL,CODIGO
ADD A,L
LD L,A
LD A,(HL)
POP HL
FFFF
(SP)HL
(SP)HL
HLCdigo
HLCdigo
Buffer2
Buffer1
SP
HLHL+A
HLHL+A
18H
18H
00H
00H
78H
78H
02H
02H
12H
12H
19H
19H
30H
30H
24H
24H
79H
79H
40H
40H
400H+9
STACK
.
.
.
A(HL)
A(HL)
RET
05H
05H
08H
08H
HL(SP)
HL(SP)
Ret
Ret
Cdigo (400h)
RAM
EPROM
PROGRAMA
PROGRAMA
0000
Microprocesadores
DELAY
DELAY11SEG
SEG
(STACK)
(STACK)DE,AF,BC
DE,AF,BC
B10
B10
DECUENTA
DECUENTA
DELAY_1SEG:
DEDE-1
DEDE-1
AD
AD
AA
AAororEE
no
WAIT:
LOOP:
A=0?
A=0?
SI
BB-1
BB-1
no
POP BC
POP AF
POP DE
B=0?
B=0?
SI
PUSH DE
PUSH AF
PUSH BC
LD B,10
LD DE, CUENTA
DEC DE
LD A,D
OR E
JP NZ,LOOP
DJNZ WAIT
RET
BC,AF,DE
BC,AF,DE(STACK)
(STACK)
Ret
Ret
Microprocesadores
Subrutina Actualiza
Tarea:
Actualizar el conteo en BCD y ajustarlo. Cuando el conteo alcanza 60, resetea
el contador
ACTUALIZA
ACTUALIZA
A
ABB
AA+1
AA+1
Ajusta
AjustaaaBCD
BCD
BA
BA
Ret
Ret
no
A=60?
A=60?
ACTUALIZA:
LD A,B
ADD A,01H
DAA
LD B,A
CP 60H
RET NZ
LD B,00H
RET
SI
B00
B00
Ret
Ret
Carlos Canto Quintal