Documentos de Académico
Documentos de Profesional
Documentos de Cultura
microprocesadores y
microcontroladores
Guía
Quinto semestre
Segundo Parcial
Arq. De Micros Parte 1
1.-Algo de conceptos:
Apilar (No confundir con concatenar): Poner en paralelo muchos registros, formando memorias.
Debug – Debugear – Emular- Depurar: Es simular el programa que se va ejecutar, paso a paso,
analizando sus respectivos estados lógicos y representaciones de las señales de entrada o salida y los
resultados de estas señales en el circuito o dispositivos del sistema.
Transparencia: La información de los latches (del los flipflops de los registros de las memorias…) siempre
es visible al usuario y siempre está disponible para su lectura.
Referenciar: Llevar a una entrada o salida a un potencial de voltaje (tierra o Vcc por ejemplo), una línea al
aire NO está referenciada a nadita de nada.
PullUp: Referenciar a Vcc, sirve para levantar el voltaje de una señal al nivel lógico 1 y reducir ruido.
PullDown: Referenciar a Gnd, sirve para tener un nivel lógico 0 y evitar el estado flotante (Tercer estado o
alta impedancia).
Bifurcar: Es hacer que el sistema pueda decidir cual es el camino mas corto y fácil para resolver un
problema, se dice que un sistema que bifurca es un sistema inteligente.
Conmutar: Llevar a un dispositivo de un estado lógico a otro, o sea, la puesta a 0 o la puesta a 1 podrían
ser “sinónimos” de conmutar.
En la primer guía puse “llevar un transistor a zona de corte o zona de saturación…”
Recuerda que corte =0 y saturación =1 lógicos
1
Arq. De Micros Parte 2
1.-ALU (Arithmetical-Logic Unit, Unidad Aritmético-Lógica)
Dentro del Z80 existe la ALU, es un dispositivo que trabaja instrucciones de 8 bits, la ALU se encarga de
las funciones lógicas y de matemáticas del procesador. Internamente la ALU tiene muchos circuitos
integrados que en su mayoría ya conocemos; compuertas lógicas, sumadores, multiplexores, es como un
repertorio de funciones. BUS de datos
Entrada de datos
Y esto es básicamente un
procesador, básico, pero
clk clk
OC
RTemp1 RTemp2 OC
procesa
Flags ALU
Control
En RTemp1 y RTemp2 entran dos datos diferentes con los cuales se van a realizar operaciones, la
operación a realizar se selecciona con la entrada de control.
Por ejemplo, si queremos sumar 10010110 + 11010111 el primer sumando se ingresa en RTemp1 y el
segundo en RTemp2, con la entrada de la unidad de control se le da la instrucción de suma, pero puede
ser resta, o una función lógica, o transformar ambos datos o solo uno, para eso están las instrucciones
disponibles para el procesador.
La unidad de control recibe direcciones directas desde la memoria del sistema para saber que diablos
hacer con la información que le llega o realizar otras funciones como el control de salida de la ALU o el
control de los buses internos del z80.
Las banderas (Flags), son una clase de condicionales que acompañan al resultado de alguna operación,
son digamos “etiquetas” que clasifican el tipo de resultado, el Z80 maneja flags de 8 bits de ancho.
Digamos, restas dos números y el resultado es negativo, entonces se envía una flag de que el resultado
que se muestra es en realidad negativo.
-Incremento -Decremento -Test (comprobar un bit) -Comparar (Entre bits) -Set (Puesta a 1)
-Rotar información (Desplazar el valor de los bits de información hacia la izquierda o derecha)
Ejemplo:
2
Arq. De Micros Parte 3
2.-El Microprocesador z80 Entrada y salida del
Nuestro queridísimo z80… bus de datos
D E D’ E’
Decodific
H L H’ L
AcuTmp
Secuencia
-dor
Reg IX
Reg IY ALU
SP
PC + Salida del bus
±1 ±1 Sumador de direcciones
B
u
f
Bus de direcciones (16 bit solo de salida) f
e
r
B
u
f
Bus de direcciones (Bidireccional) f
La explicación: e
r
Registros internos: Entrada y salida del
Banco principal y Banco Alterno bus de control
Son registros interconectados entre si, se pueden pasar información de uno a otro. Se utilizan para
guardar información necesaria para después recuperarla a lo largo de la ejecución del programa.
El banco principal y el alterno NO pueden ser utilizados al mismo tiempo, solo uno a la vez.
Acumuladores:
Aquí es donde se realizan casi todas las funciones que se le presentan al procesador, es un registro
simple. El segundo acumulador funciona como “respaldo” del primero.
Registros de Flags:
Es donde se van almacenando las banderas de los resultados de las operaciones que realiza la ALU con
los datos que vienen de los acumuladores.
Registros de uso especifico del procesador (Registros que el procesador va utilizando automáticamente)
Stack Pointer (SP):
Es un registro que almacena información en forma de Stack (Pila en inglés) (Similar a la RAM, que va
almacenando datos como le van llegando), sirve para realizar subrutinas (funciones secundarias dentro
del programa).
Bloque de suma (El sumador en forma de V, el que se parece a la ALU, pero no es ALU, no le puse color
porque el amarillo no se ve):
Sirve para desplazar las instrucciones de los registros de índice (IX)
El encapsulado de hasta la izquierda es la unidad de control, tiene tanto entradas como salidas, algunas
sirven para controlar los buses internos del procesador, y otras sirven para el control del sistema general.
En el 4to apartado se ven mas a fondo estas funciones.
3.-Nuevas instrucciones para ASM!
add a,<hex>h; Suma al contenido del acumulador la constante en hex
RRL; | RRF; Rota el contenido del registro, RRL hacia la izquierda, RRF a la derecha
and a,<hex>h; Función lógica AND entre el valor de a y <hex> bit por bit.
xor a,<hex>h; Función lógica XOR entre el valor de a y <hex> bit por bit.
test a,<hex>h; Prueba el estado del bit, verifica que tipo de bandera tiene para continuar.
4
Arq. De Micros Parte 5
4.-El encapsulado del z80
Ahora si veremos para que sirve cada bus del z80 y que función tiene cada terminal del encapsulado
que conocemos:
MI A0
MREQ Todo mundo sabe para que
Terminales del
IORQ … Bus de
diablos son los terminales del
control del direcciones
sistema
RD bus de direcciones y del bus de
WR A15
RFSH
datos… se supone.
Para que estas entradas funcionen correctamente, necesitan tener un nivel TTL correcto, si hay anomalías en los
voltajes se puede perder información, en caso de anomalías se necesita “Bufferear” la línea para levantar voltajes o
reducir el ruido.
MiniGuía
Quinto semestre
Segundo Parcial
Programar like a boss Parte 1
1.-Inicio
Para generar el código fuente y escribir el programa, básicamente solo necesitas abrir el notepad.exe o
puedes escribir en Word, pero es mas recomendable el notepad.
Guardas el archivo como “<nombre del programa sin espacios y no mayor a 8 caracteres,duh>.ASM “ en
la misma carpeta que donde están los compiladores. (La dirección recomendada es C:\progsz80\ )
Recuerda, el archivo ASM es tu código fuente, pero éste no es el que funciona así shido. Pero para allá
vamos
El nombre de la etiqueta puede ser cualquiera que quepa en 8 caracteres o menos, NO PUEDEN TENER
ESPACIOS.
Programar like a boss Parte 3
2.-Escribir el código, comandos y sintaxis. Cont.
6.-Decrementar el valor registrado en un acumulador
dec <r>; La función de decremento hará que el valor registrado en el
acumulador r se le reste un uno.
Por ejemplo:
ld d,40h; (ahora d = 40h)
dec d; (ahora d = 40h -1h = 3Fh, en decimal, 64-1=63)
7.-Jump o salto según valor 0
jp nz,<etiqueta a saltarse>;
Esta instrucción requiere tener un decremento y una etiqueta
antes para que funcione bien.
Se utiliza para generar ciclos o loops, normalmente con fines
de hacer una clase de delay o espera
Esta instrucción hace que un ciclo se repita hasta que el valor
del decremento superior de como resultado un cero.
Un ejemplo: de loop con el salto.:
En verde se muestra lo que pasa si a es
ld a,03H; diferente de cero
ciclo1 dec a;
jp nz,ciclo1; En rojo se muestra lo que pasa si a es al fin
decrementado a cero
>otra instrucción;
Esta línea de código hace lo siguiente:
Primero se carga la constante 03h al acumulador a,
Luego decrementa a en 1, o sea que al 3 le restamos 1 y nos
queda 2.
El jp detecta que a es diferente de cero, entonces se regresa
hasta la instrucción que indica la etiqueta ciclo1.
Y así hasta que a tenga un valor de cero. Una vez que el jp
detecte que a es igual a cero, el programa continuara con la
siguiente instrucción.
Un ejemplo de loop para 6 segundos: Imagina que esto funciona como un cronometro
ld a,06h; a b c
loop3 ld b,0ffh; 6 : 255 : 255
loop2 ld c,0ffh;
loop1 dec c; Los valores de a b y c cambian a ritmos
jp nz,loop1; diferentes.
dec b; Análogamente con el cronometro, a serían
jp nz,loop2; minutos, b segundos y c fracciones de segundo
dec a;
jp nz,loop3; Para que se complete un ciclo de b necesitas que
pasen 255 de c, y para que pase un ciclo de a
>otra instrucción necesitas que pasen 255 de b (65,025 de c)
Y a es en realidad la cuenta de segundos enteros
Programar like a boss Parte 4
2.-Escribir el código, comandos y sintaxis. Cont.
Un ejemplo de loop indefinido o infinity loop.
Como a se decrementa en uno, entonces, 40h
loopi ld a,40h;
pasa a ser 3Fh, como el jp no detecta un cero,
dec a;
regresa a la etiqueta loopi, y el valor de a se
jp nz,loopi;
reestablece a 40h, y así hasta el final de los
tiempos, o de las materias que recursarás…
> cd C:\progsz80
Si no hay errores, la consola te dirá que el ensamblado fue correcto y se te generaran dos nuevos
archivos, si hay errores, el programa te dirá que hiciste mal y donde metiste la pata.
Los dos nuevos archivos generados:
<nombre del código fuente>.OBJ Que es el programa ya compilado, listo para cargarlo a la
memoria.
Para cargarlo usando a Stefi el programador maravilla, solo le
das en “Open file” y buscas el archivo OBJ y lo cargas.
<nombre del código fuente>.LST Es un enlistado de direcciones, nos sirve como referencia
para corregir errores.