Hemos
visto como leer la memoria de la placa prototipo, como leer el programa e
interpretarlo, como ver el valor de los registros. Pero todo esto solo se podrá
hacer si la placa prototipo está correctamente diseñada y cableada. Por ello
algo importante que debe tener el emulador es una forma de testear el
prototipo.
En realidad, en cualquier prototipo,
lo primero que habrá que hacer con el emulador es testear la placa. A partir de
ahí podremos introducir un programa y ejecutarlo, pero nunca antes de disponer
de hard bien montado.
Esta rutina, como parte del
emulador permite la ejecución directa del micro en tres modos, y aprovechar
esto para visualizar el estado de los buses de control y datos:
Manual - los pulsos de
reloj se mandan mediante el ratón. Ejecuta microinstrucción a microinstrucción
para ver el accionamiento de cada señal de bus.
Paso a paso- Ejecuta
instrucción a instrucción.
Continuo- Ejecuta de forma
continua el programa, pero controlado por el PC, de forma que entre cada
instrucción lee el estado de los buses y los presenta en pantalla. La velocidad
de ejecución, por lo tanto, no será la real.
Control Externo.- Da paso al
cristal del reloj de la placa, de forma que el programa funciona a frecuencia
real.
Como se puede ver en el programa esta función llama a
interpreta. No es para ver el formato de la instrucción, sino para conocer sus
ciclos de reloj.
BUSES.ASM
; Copyright (C) 2013 José Ángel Moneo Fernández ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; You should have received a copy of the GNU General Public License ; along with this program. If not, see <http://www.gnu.org/licenses/
include main.mac
include stdio.mac
include 48iocent.mac
include mouse.mac
include 8051.mac
.model compact,pascal
;CONTROL
PASO EQU 1
MANUAL EQU 2
TRACE EQU 4
CONTINUO EQU 8
EXTER EQU 16
led macro puerto,senal
local fuera
mov al,' '
test Puerto,senal
jz fuera
mov al,' '
fuera:
putchar al
endm
.data
extrn Dir_cur:word
public control
public Dato
Pantalla label byte
DB '╔═══════════════════════════ Monitor 8051══════════════════════════════════════╗'
DB '║ ║'
DB '║ Nivel alto ║'
DB '║ ╔══════════════════╗ ╔═════════════════╗ ║'
DB '║ ║ Interrupciones ║ ║ Control Bus ║ ║'
DB '║ ╠══════════════════╣ ╠═════════════════╣ ║'
DB '║ ║ /INT0 ║ ║ /WR ║ ║'
DB '║ ║ /INT1 ║ ║ /RD ║ ║'
DB '║ ║ ║ ║ ALE ║ ║'
DB '║ ║ RESET ║ ║ /PSEN ║ ║'
DB '║ ╚══════════════════╝ ╚═════════════════╝ ║'
DB '║ ║'
DB '║ DIRECCION DATO ║'
DB '║ ┌───────┐ ┌─────┬─────┐ ║'
DB '║ │ │ │ │ │ ║'
DB '║ └───────┘ └─────┴─────┘ ║'
DB '║ ║'
DB '║ Paso Velocidad 1 ║'
DB '║ ║'
DB '║ Manual Control externo ║'
DB '║ Trace ║'
DB '║ Continuo Salir ║'
DB '║ ║'
DB '╚══════════════════════════════════════════════════════════════════════════════╝'
DB 0
dato dw 0,0
direccion dw 0,0
CONTROL DB 0
borra db " ",0
borraa db " ",0
raton dw 0
velocidad dw 1,0
dw 1,1
.code
public buses
public conf_int
extrn _reset:near
extrn interpreta:near
extrn _trace:near
extrn Dma_off:near
buses proc near
mouse off
clrscr ;inicializacion programa
printf Pantalla
call Dma_off
mouse on
present:
inp cl,PA1 ;lectura de señales AD0-AD7
inp ch,PB1 ;A8-A15
inp dl,PC1 ;CONTROL MICRO
call actualiza ;actualiza pantalla
getmouse ;comprueba el estado del rfaton
cmp ax,1
jnz pantal ;si no se ha pulsado se sigue
cmp ax,raton ;si se pulso se verifica si ha sido un
mov raton,ax ;flanco de subida
jnz seleccion ;si es asi se selecciona la opcion deseada
pantal:
mov raton,ax
pantall:
call conmutador ;se llama a la subrutina que realiza las
jmp present ;acciones de los conmutadores seleccionados
seleccion: ;selecciona el comnutador deseado
getmousex ;comprueba las posiciones del raton
sub ax,7*8 ;y si estan dentro del margen deseado se
jb no
cmp ax,7*8 ;pone el indicador correspondiente
jb s0
no:
getmousex
sub ax,25*8
jb pantall
cmp ax,5*8
jnb pantall
jmp a1
s0:
getmousey
cmp ax,17*8
jnz s1
xor CONTROL,PASO
jmp present
s1:
cmp ax,19*8
jnz s2
call conf_int
mov CONTROL,MANUAL
jmp present
s2:
cmp ax,20*8
jnz s3
call conf_int
mov CONTROL,TRACE
jmp present
s3:
cmp ax,21*8
jnz s6
call conf_int
mov CONTROL,CONTINUO
JMP PRESENT
s6:
cmp ax,9*8 ;RESET
jnz s4
call _reset
S4:
jmp present
a1:
getmousey
cmp ax,21*8
jnz aa
jmp fin
aa:
cmp ax,19*8
jnz a2
call conf_ext
mov CONTROL,EXTER
jmp s4
a2:
cmp ax,17*8
jnz s4
setcursor on
de_nuevo:
gotoxy 35,17
printf borraa
gotoxy 35,17
scanf velocidad
cmp velocidad,20
ja de_nuevo
mov ax,velocidad
mov velocidad+4,ax
mov velocidad+6,ax
setcursor off
jmp s4
fin:
ret
buses endp
conf_int proc near
test CONTROL,EXTER
jz no_conf
outp p0,BUSRQPC_ON
outp p0,CLK_OFF
outp p0,EXTERNO_OFF
NO_CONF:
ret
conf_int endp
conf_ext proc near
outp p0,CLK_ON
OUTP P0,BUSRQPC_ON
outp P0,EXTERNO_ON
ret
conf_ext endp
actualiza proc near
test dl,ALE
jnz es_direcc
no_es_direcc:
test dl,RD
jz es_dato
test dl,WR
jz es_dato
test dl,PSEN
jz es_dato
jmp no_es_dato
es_direcc:
mov word ptr direccion,cx
mov Dir_cur,cx
gotoxy 10,14
printf borra
gotoxy 10,14
printf direccion,@h
gotoxy 21,14
printf borra
gotoxy 26,14
printf borra
jmp no_es_dato
es_dato:
mov byte ptr dato,cl
gotoxy 21,14
printf dato,@h
gotoxy 26,14
printf byte ptr dato
no_es_dato:
gotoxy 7,6
led dl,INT0
gotoxy 7,7
led dl,INT1
gotoxy 7,9
led dl,RESET
gotoxy 34,6
led dl,WR
gotoxy 34,7
led dl,RD
gotoxy 34,8
led dl,ALE
gotoxy 34,9
led dl,PSEN
gotoxy 4,17
led CONTROL,PASO
gotoxy 4,19
led CONTROL,MANUAL
gotoxy 4,20
led CONTROL,TRACE
gotoxy 4,21
led CONTROL,CONTINUO
gotoxy 23,19
led CONTROL,EXTER
ret
actualiza endp
conmutador proc near
test CONTROL,CONTINUO
jz b1
dec velocidad+4
jnz b
mov ax,velocidad
mov velocidad+4,ax
dec velocidad+6
jnz b
mov ax,velocidad
mov velocidad+6,ax
outp p0,CLK_ON
outp p0,CLK_OFF
b: ret
b1:
test CONTROL,TRACE
jz b2
test CONTROL,PASO
jz b
mov dx,Dir_cur
call interpreta
dec dx
mov bx,ax
mov cl,[bx+1]
xor ch,ch
call _trace
gotoxy 21,14
printf dato,@h
gotoxy 26,14
printf byte ptr dato
Pasos:
ret
b2:
test CONTROL,MANUAL
jz b3
test CONTROL,PASO
jz b3
and CONTROL,NOT PASO
outp P0,CLK_ON
outp P0,CLK_OFF
b3: ret
conmutador endp
end buses
No hay comentarios:
Publicar un comentario
Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.