Z80_APL
Páginas: 9 (2146 palabras)
Publicado: 22 de octubre de 2015
Ejemplo No. 11:
Realizar el software y hardware para que cada 30 ms después de activarse un sensor se envie por el puerto 05 H una señal (activo alto) que indica que se activó el sensor, utilizándo una señal de reloj de f = 2MHz.
Solución:
Programando un canal del Z80-CTC en modo Timer:
––––––––––
Fsalida = Freloj / (cte. detiempo)(pre-escalador)]
==> Tsalida = (cte. de tiempo)(pre-escalador) / Freloj
Cte. de Tiempo = (Tsalida)(Freloj) / pre-escalador = (30 x 10-3)(2x106) / 256
Cte. de Tiempo = 234.37
Cte. de Tiempo » 234
Utilizándo el siguiente mapeo de puertos, se propone el hardware de la figura No. 43:
A7
A6
A5
A4
A3
A2
A1
A0
Canal 0 ==> F0 H
1
1
1
10
0
0
0
Canal 1 ==> F1 H
1
1
1
1
0
0
0
1
Canal 2 ==> F2 H
1
1
1
1
0
0
1
0
Canal 3 ==> F3 H
1
1
1
1
0
0
1
1
Programa:
CANAL_0: EQU 0F0H ;Definición de parámetros y P_CONT: EQU 0BDH ;constantes.
CONSTE: EQU 234H
VECTOR: EQU 20H
;Programa Principal:
ORG 0000H
IM 2 ;Programa Z80 en Modo 2 de Interupción
LD A,10H ;Cargaal Reg. I con la parte alta
LD I,A ;de la tabla de direcciones de
;rutinas de atención.
LD A,P_CONT ;Programa Canal 0 del CTC en Modo Timer
OUT (CANAL_0),A ;Habilita interrupciones y preescalar de 256.
LD A,VECTOR ;Envía al Canal 0 el vector de interrupción = 20 H
EI ;Habilita interrupciones
ESPERA: HALT ;Espera Interrupción
JR ESPERA
;Define la dirección de larutina de atención:
ORG 1020H
DB 00H,30H
;Rutina de Atención a la Interrupción:
ORG 3000H
LD A,0FFH ;Envía activo alto al puerto 05 para
OUT (5),A ;indicar que se activó sensor.
EI ;Vuelve a habilitar interrupciones RETI y regresa ;al programa principal.
Ejemplo No. 12:
Realizar el software y hardware para interfazar una CPU Z80 con una terminal serie, de formatal que el Z80 estará enviando a la terminal el valor leído de tres interrupciones a 3 indicadores ("LED'S") cada 2 segundos.
Se utilizará un USART 8251 transmitiendo a una velocidad de 1200 bps, usando un factor de baud-rate de x 16.
Las señales de reloj TxC y RxC se generan con un Z80-CTC que dispone de una señal de reloj del sistema de 4 MHz.
Solución:
Velocidad de Transmisión = TxC /Factor de baud-rate
==> TxC = (1200 bps) x 16 = 19.2 KHz
Además se requiere una interrupción cada 2 segundos. Entonces si utilizamos un sólo canal del CTC programando en Modo Counter obtenemos:
Fsalida = Fentrada / Cte. de tiempo ==> Tsalida = Cte. de tiempo / Fentrada
Máximo se podrá obtener un período de:
Tmáximo = 256 / 4 x 106 = 64 microsegundos
Por lo que vemos que con unsólo canal no es suficiente. Ahora, utilizándo dos canales programados en Modo Counter conectados en cascada:
Tmáximo = 2562 / 4 x 106= 0.016384 segs.
Que tampoco es suficiente. Por otra parte, si programamos un canal en Modo Timer, el período máximo que se obtiene será:
Fsalida = Freloj / (Cte. de tiempo)(pre-escalador)
==> Tsalida = (Cte. de tiempo)(pre-escalador) / FrelojTsalida máx. = 2562 / 4 x 106 = 0.016384 segs.
Y ahora el canal anterior se conecta en cascada con otro programado en Modo Counter para obtener:
Cte. de Tiempo = (Tsalida)(Fentrada) / Tentrada = Tsalida
Cte. de Tiempo = 2 segs. / 0.016384 seg. = 122.07 » 122
Para generar TxC = 19.2 KHz a partir de 4 MHz podemos utilizar un canal del CTC programado en Modo Counter:
Fsalida =Fentrada / Cte. de tiempo
Cte. de Tiempo = Fentrada / Fsalida = 4 x 106 / 19.2 x 103 = 208.33
Hardware:
Mapeo de puertos utilizándo:
Reg. Datos 8251 00 H
Reg. de Control 8251 01 H
Puerto de Entrada para los 3 interruptores 02 H
Puerto de salida para los 3 indicadores 03 H
Canal 0 CTC 04 H
Canal 1 CTC 05 H
Canal 2 CTC 06 H...
Leer documento completo
Regístrate para leer el documento completo.