01.11.2012 Views

El temporizador /contador Intel 8254

El temporizador /contador Intel 8254

El temporizador /contador Intel 8254

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

EL TIMER <strong>8254</strong><br />

Microprocesadores<br />

<strong>El</strong> <strong>temporizador</strong> /<strong>contador</strong> <strong>Intel</strong><br />

<strong>8254</strong><br />

• Su Arquitectura interna<br />

• Modos de programación<br />

programaci<br />

• Su interconexión interconexi n con un µprocesador<br />

procesador<br />

• Aplicaciones<br />

EL TIMER <strong>8254</strong><br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

Características principales del 82C54<br />

�� Frecuencia del reloj de entrada de 8MHz a 12MHz<br />

�� Versión Versi n mejorada del NMOS 8253<br />

�� Tres <strong>contador</strong>es independientes de 16 bits<br />

�� Seis modos programables de Contador<br />

�� Comando Read Back de Status<br />

�� Conteo en Binario o BCD<br />

�� Completamente compatible con TTL<br />

�� Una fuente de poder de 5V<br />

�� Baja Potencia<br />

– ICCSB ICCSB (corriente (corriente en en Stand Stand By). By). ... ... . . . . . . . . . . .10µµAA .10<br />

– ICCOP ICCOP (corriente (corriente en en operacióón) operaci n) . . .. .. .. .. . . . . . . . . 10mA 10mA a a 8MHz<br />

8MHz


EL TIMER <strong>8254</strong><br />

Microprocesadores<br />

Ejemplo de Aplicaciones del <strong>8254</strong><br />

Algunas de las otras funciones computadora/timers comunes a<br />

las microcomputadoras los cuales pueden ser implementados<br />

con el <strong>8254</strong> son:<br />

� Reloj de Tiempo Real<br />

� Contador de Eventos<br />

� One-Shot Digital<br />

� Generador de baudaje Programable<br />

� Generador de Onda Cuadrada<br />

� Multiplicador Binario<br />

� Generador de forma de onda compleja<br />

� Controlador complejo de motor<br />

EL TIMER <strong>8254</strong><br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

Arquitectura interna del <strong>8254</strong>


EL TIMER <strong>8254</strong><br />

D0-D7<br />

Arquitectura interna del <strong>8254</strong><br />

WR<br />

RD<br />

A0<br />

A1<br />

CS<br />

EL TIMER <strong>8254</strong><br />

Registro<br />

Registro<br />

de<br />

de<br />

control<br />

control<br />

Lógica Lógica de de<br />

Control<br />

CLK n GATE n OUT n<br />

Buffer<br />

Buffer<br />

del<br />

del<br />

bus<br />

bus<br />

de<br />

de<br />

datos<br />

datos<br />

Lógica<br />

Lógica<br />

de<br />

de<br />

lectura/<br />

lectura/<br />

escritura<br />

escritura<br />

Registro<br />

Registro<br />

de<br />

de<br />

control<br />

control<br />

Latch Latch de de status status<br />

Registro Registro de de status status<br />

Contador<br />

Contador<br />

0<br />

0<br />

Contador<br />

Contador<br />

1<br />

1<br />

Contador<br />

Contador<br />

2<br />

2<br />

BUS<br />

BUS<br />

INTERNO<br />

INTERNO<br />

Bus<br />

Bus<br />

interno<br />

interno<br />

de<br />

de<br />

Datos<br />

Datos<br />

Registro<br />

Registro<br />

de<br />

de<br />

conteo<br />

conteo<br />

(CRM)<br />

(CRM)<br />

MSB<br />

MSB<br />

Registro<br />

Registro<br />

de<br />

de<br />

conteo<br />

conteo<br />

(CRL)LSB<br />

(CRL)LSB<br />

CONTADOR n n (CE) (CE)<br />

Latch<br />

Latch<br />

De<br />

De<br />

Salida<br />

Salida<br />

(OLM)<br />

(OLM)<br />

Latch<br />

Latch<br />

de<br />

de<br />

salida<br />

salida<br />

(OLL)<br />

(OLL)<br />

MSB<br />

MSB<br />

LSB<br />

LSB<br />

Microprocesadores<br />

CLK0<br />

GATE0<br />

OUT0<br />

CLK1<br />

GATE1<br />

OUT1<br />

CLK2<br />

GATE2<br />

OUT2<br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

Arquitectura interna de un <strong>contador</strong> del <strong>8254</strong>


EL TIMER <strong>8254</strong><br />

D0-D7 D0 D7<br />

RD<br />

WR<br />

A0<br />

A1<br />

CS<br />

EL TIMER <strong>8254</strong><br />

Distribución Distribuci n De Terminales<br />

Contador 0<br />

Contador 1<br />

Contador2<br />

OUT0<br />

GATE0<br />

CLK0<br />

OUT1<br />

GATE1<br />

CLK1<br />

OUT2<br />

GATE2<br />

CLK2<br />

D7<br />

D6<br />

D5<br />

D4<br />

D3<br />

D2<br />

D1<br />

D0<br />

CLK0<br />

OUT0<br />

GATE0<br />

GND<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

<strong>8254</strong><br />

Microprocesadores<br />

24<br />

23<br />

22<br />

21<br />

20<br />

19<br />

18<br />

17<br />

16<br />

15<br />

14<br />

13<br />

VCC<br />

WR<br />

RD<br />

CS<br />

A1<br />

A0<br />

CLK2<br />

OUT2<br />

GATE2<br />

CLK1<br />

GATE1<br />

OUT1<br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

Tabla de verdad de la operación operaci n del <strong>8254</strong><br />

CS<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

RD<br />

1<br />

1<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

X<br />

1<br />

WR<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

1<br />

1<br />

X<br />

1<br />

A1<br />

0<br />

0<br />

1<br />

1<br />

0<br />

0<br />

1<br />

1<br />

X<br />

X<br />

A0<br />

0<br />

1<br />

0<br />

1<br />

0<br />

1<br />

0<br />

1<br />

X<br />

X<br />

FUNCION<br />

CARGA CONTADOR 0<br />

CARGA CONTADOR 1<br />

CARGA CONTADOR 2<br />

ESCRIBIR PALABRA DE CONTROL<br />

LEER CONTADOR 0<br />

LEER CONTADOR 1<br />

LEER CONTADOR 2<br />

READ BACK (LEER STATUS)<br />

BUS DE DATOS EN TRI- STATE<br />

BUS DE DATOS EN TRI-STATE


EL TIMER <strong>8254</strong><br />

D7<br />

FORMATO DE LA PALABRA DE CONTROL<br />

D6<br />

D5<br />

D4<br />

SC1 SC1 SC0 SC0 RW1 RW1 RW0 RW0 M2 M2 M1 M1 M0 M0 BCD BCD<br />

D3<br />

<strong>El</strong>egir <strong>contador</strong>:<br />

0 0 <strong>contador</strong> 0<br />

0 1 <strong>contador</strong> 1<br />

1 0 <strong>contador</strong> 2<br />

1 1 comando Read Back Operación:<br />

0 0 comando de enclavamiento<br />

0 1 leer/escribir byte bajo<br />

1 0 leer/escribir byte alto<br />

1 1 leer/escribir byte bajo y<br />

después el alto<br />

EL TIMER <strong>8254</strong><br />

D2<br />

D1<br />

Modo:<br />

0 0 0 modo 0<br />

0 0 1 modo 1<br />

x 1 0 modo 2<br />

x 1 1 modo 3<br />

1 0 0 modo 4<br />

1 0 1 modo 5<br />

Microprocesadores<br />

D0<br />

Contador:<br />

0 binario 16 bits<br />

1 BCD 4 décadas<br />

Carlos E. Canto Quintal M.C. M.C<br />

Operaciones de lectura de conteo.<br />

�Existen tres posibles métodos para leer el valor de conteo de un<br />

<strong>contador</strong> del <strong>8254</strong>:<br />

1).-Con un comando Read-Back.<br />

2).-Leer simplemente el <strong>contador</strong> accediendo a su puerto<br />

correspondiente:<br />

este método requiere inhibir la entrada CLK al <strong>contador</strong> (por<br />

ejemplo, a través de la línea GATE o utilizando circuitería<br />

exterior de apoyo) con objeto de evitar leer la cuenta en medio<br />

de un proceso de actualización de la misma, lo que daría un<br />

resultado incorrecto.<br />

3).- Con un comando de enclavamiento<br />

Microprocesadores


EL TIMER <strong>8254</strong><br />

D7<br />

D6<br />

D5<br />

D4<br />

1 1 -CONTEO -CONTEO -STATUS -STATUS CONTADOR2 CONTADOR1 CONTADOR0 0<br />

D3<br />

0 si enclava la cuenta<br />

A 1 los <strong>contador</strong>es seleccionados<br />

de los <strong>contador</strong>es<br />

seleccionados 0 si enclava el byte de status del <strong>contador</strong><br />

seleccionado<br />

D2<br />

Microprocesadores<br />

Formato de Comando Read-Back.<br />

Read Back.<br />

Permite enclavar la cuenta en varios latches de salida (OL's ( OL's ) de varios<br />

<strong>contador</strong>es de una sola vez, sin requerir múltiples m ltiples comandos de<br />

enclavamiento, poniendo el bit 5 a cero.<br />

Los <strong>contador</strong>es permanecen enclavados hasta ser leídos, le dos, los que no son leídos le dos<br />

permanecen enclavados. También Tambi n es posible enviar información informaci n de estado al<br />

latch de salida ( OL), enclavándola enclav ndola para que puede ser leída le da con comodidad<br />

por el puerto que corresponda a ese <strong>contador</strong>.<br />

EL TIMER <strong>8254</strong><br />

D7<br />

D6<br />

Palabra de status<br />

D5<br />

D4<br />

D1<br />

D0<br />

Carlos E. Canto Quintal M.C. M.C<br />

OUTPUT OUTPUT NULL NULL COUNT COUNT RW1 RW1 RW0 RW0 M2 M2 M1 M1 M0 M0 BCD BCD<br />

Valor de la<br />

terminal out<br />

D3<br />

Modo del<br />

<strong>contador</strong> activo Contador:<br />

0 binario 16 bits<br />

1 “Null count”<br />

1 BCD 4 décadas<br />

0 cuenta disponible para ser leída<br />

D2<br />

Microprocesadores<br />

Al leer la palabra de status se permite leer el valor actual de la cuenta, así as<br />

como averiguar también tambi n el modo programado para un <strong>contador</strong> y el estado<br />

actual de la terminal OUT, además adem s de verificar la bandera de cuenta nula<br />

(Null Null Count) Count)<br />

de los <strong>contador</strong>es que se indiquen<br />

D1<br />

D0


EL TIMER <strong>8254</strong><br />

Microprocesadores<br />

Comando de enclavamiento (Counter ( Counter Latch Command). Command).<br />

D7<br />

D6<br />

D5<br />

D4<br />

SC1 SC1 SC0 SC0 0 0 0 0 X X X X X X X X<br />

<strong>contador</strong> afectado:<br />

0 0 <strong>contador</strong> 0<br />

0 1 <strong>contador</strong> 1<br />

1 0 <strong>contador</strong> 2<br />

Si se envían env an varios comandos de enclavamiento al mismo <strong>contador</strong>, separados por un<br />

cierto intervalo de tiempo, sólo s lo se considerará considerar el primero (por tanto, la cuenta leída le da<br />

corresponderá corresponder al valor del <strong>contador</strong> cuando fue enclavado enclavado por vez primera).<br />

EL TIMER <strong>8254</strong><br />

D3<br />

D2<br />

D1<br />

D0<br />

Este comando se envía env a como una palabra de control<br />

(A1=A0=1) con los bits 5 y 4 a cero.<br />

Cuando se envía env a el comando, el latch de salida (OL) del<br />

<strong>contador</strong> seleccionado queda congelado hasta que la CPU<br />

lo lee, momento en el que se descongela descongela y pasa de nuevo a<br />

seguir a CE.<br />

Esto permite leer los <strong>contador</strong>es al al vuelo vuelo sin afectar la<br />

cuenta en curso. Se pueden enviar varios de estos<br />

comandos a los diversos <strong>contador</strong>es, cuyos latches de<br />

salida (OL's ( OL's) ) quedarán quedar n enclavados hasta ser leídos. le dos.<br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

Modos de programación programaci n del timer<br />

<strong>8254</strong>


EL TIMER <strong>8254</strong><br />

CLK<br />

WR<br />

GATE<br />

OUT<br />

CLK<br />

WR<br />

GATE<br />

OUT<br />

Microprocesadores<br />

Modo 0: Interrupt On Terminal Count (Interrupción al final de la<br />

cuenta).<br />

EL TIMER <strong>8254</strong><br />

CLK<br />

WR<br />

GATE<br />

(TRIGGER)<br />

OUT<br />

Pulso de<br />

escritura<br />

Pulso de<br />

escritura<br />

Se carga la cuenta al<br />

registro de conteo<br />

(4)<br />

(4)<br />

(3) (2) (1) (0)<br />

Inicia conteo<br />

Carlos E. Canto Quintal M.C. M.C<br />

Final de conteo<br />

(3) (2) (1) (0)<br />

Conteo detenido<br />

Microprocesadores<br />

Modo 1:Hardware Retriggerable One-Shot (Monoestable<br />

programable).<br />

N=4<br />

(4)<br />

(3) (2) (1) (0)<br />

Disparos del monoestable<br />

T=NTc<br />

(4) (3) (2) (1)


EL TIMER <strong>8254</strong><br />

CLK<br />

WR<br />

GATE<br />

OUT<br />

EL TIMER <strong>8254</strong><br />

CLK<br />

WR<br />

GATE<br />

OUT<br />

Modo 2: Rate Generator (Generador de ritmo).<br />

N=4<br />

(4)<br />

(3) (2) (1) (0) (4) (3) (2) (1)<br />

T=NTc<br />

N=cuenta cargada<br />

Tc=periodo del reloj en CLK=1/fclk<br />

N=4<br />

(4)<br />

N = cuenta cargada<br />

Tc = periodo del reloj en CLK = 1/fclk<br />

T= NTc<br />

Microprocesadores<br />

un periodo de reloj (Tc)<br />

(3) (2) (1) (0) (4) (3) (2) (1)<br />

(0) (4) (3)<br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

Modo 3: Square Wave Mode (Generador de onda cuadrada).<br />

T1 T0-<br />

(0) (4) (3)<br />

Ya que es una onda cuadrada T1 = T0 = N/2<br />

Si N es impar entonces T1 = (N+1)/2 y T0 = (N-1)/2


EL TIMER <strong>8254</strong><br />

Microprocesadores<br />

MODO 4: Software Triggered strobe Mode (Pulso Strobe iniciado<br />

por programa)<br />

CLK<br />

WR<br />

GATE<br />

OUT<br />

EL TIMER <strong>8254</strong><br />

CLK<br />

WR<br />

GATE<br />

(TRIGGER)<br />

OUT<br />

N=4<br />

(4)<br />

(3) (2) (1) (0)<br />

T=NTc<br />

N=cuenta cargada<br />

Tc=periodo del reloj en CLK=1/fclk<br />

N=4<br />

(4)<br />

(3) (2) (1) (0)<br />

T=NTc<br />

un periodo de reloj (Tc)<br />

Strobe Strobe<br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

MODO 5: Hardware Triggered strobe Mode (Pulso Strobe iniciado<br />

por hardware)<br />

Disparo del Strobe<br />

un periodo de reloj (Tc)<br />

Strobe Strobe


EL TIMER <strong>8254</strong><br />

Microprocesadores<br />

Interconexión Interconexi n del <strong>8254</strong> con un<br />

microprocesador<br />

EL TIMER <strong>8254</strong><br />

Z80<br />

Ejemplo de Conexión del <strong>8254</strong> con el Z80<br />

RD<br />

IORQ<br />

WR<br />

A0<br />

A1<br />

A2<br />

A3<br />

A4<br />

A5<br />

A6<br />

A7<br />

Bus<br />

Bus<br />

de<br />

de<br />

Datos<br />

Datos<br />

Bus<br />

Bus<br />

de<br />

de<br />

Direcciones<br />

Direcciones<br />

(Bajo)<br />

(Bajo)<br />

A2<br />

A3<br />

A4<br />

A5<br />

A6<br />

A7<br />

IORD<br />

IOWR<br />

74LS138<br />

A<br />

B<br />

C<br />

G1A<br />

G1B<br />

G2<br />

RD<br />

WR<br />

A0<br />

A1<br />

CS<br />

Y1=84H-87H<br />

Contador 0<br />

Timer<br />

<strong>8254</strong><br />

Contador 1<br />

Contador 2<br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

Out 0<br />

Gate 0<br />

Clock 0<br />

Out 1<br />

Gate 1<br />

Clock 1<br />

Out 2<br />

Gate 2<br />

Clock 2<br />

Direcciones<br />

Direcciones<br />

válidas<br />

válidas<br />

para<br />

para<br />

el<br />

el<br />

<strong>8254</strong>:<br />

<strong>8254</strong>:<br />

84h<br />

84h<br />

�<br />

�<br />

<strong>contador</strong><br />

<strong>contador</strong><br />

0<br />

0<br />

85h<br />

85h<br />

�<br />

�<br />

<strong>contador</strong><br />

<strong>contador</strong><br />

1<br />

1<br />

86H<br />

86H<br />

�<br />

�<br />

<strong>contador</strong><br />

<strong>contador</strong><br />

2<br />

2<br />

87H<br />

87H<br />

�<br />

�<br />

r.<br />

r.<br />

control<br />

control


EL TIMER <strong>8254</strong><br />

Microprocesadores<br />

EJEMPLO DE APLICACIONES DEL<br />

<strong>8254</strong><br />

EL TIMER <strong>8254</strong><br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

Control de velocidad de un motor de CD con PWM


EL TIMER <strong>8254</strong><br />

+VS<br />

CIRCUITO DE CONTROL DE SENTIDO DE GIRO DE UN<br />

MOTORES DE CD USANDO UN CI (½) ( ) L293<br />

8<br />

7<br />

EL TIMER <strong>8254</strong><br />

6<br />

½ L293B<br />

M<br />

D VEN<br />

C<br />

1<br />

3<br />

2<br />

16<br />

+VCC=5v<br />

Microprocesadores<br />

Carlos E. Canto Quintal M.C. M.C<br />

Circuito de un sensor óptico ptico herradura para un encoder<br />

220Ω<br />

DISCO RANURADO O ENCODER<br />

+5V<br />

10 kΩ<br />

7414<br />

CLK 0<br />

CLK 0<br />

Al <strong>8254</strong><br />

CIRCUITO SUGERIDO PARA LIMPIAR LOS PULSOS<br />

ENVIADOS POR EL ENCODER<br />

Microprocesadores<br />

Motor


EL TIMER <strong>8254</strong><br />

Microprocesadores<br />

Circuito para contar el número n mero de revoluciones de un motor de CD<br />

Z80 Z80<br />

INT<br />

+5v<br />

Out 0<br />

EL TIMER <strong>8254</strong><br />

+5V<br />

PPI PPI<br />

8255 8255<br />

4.7 kΩ<br />

T0<br />

GATE0<br />

OUT 0<br />

Bus de Datos<br />

gate0<br />

<strong>8254</strong> <strong>8254</strong><br />

+5V<br />

IN1<br />

4.7 kΩ<br />

EN1<br />

IN2<br />

<strong>8254</strong><br />

<strong>8254</strong><br />

CONTADOR<br />

CONTADOR<br />

0<br />

0<br />

Clk 0<br />

PPI PPI<br />

8255 8255<br />

Circuito L293B<br />

doble puente” H”<br />

1<br />

(½)L293B<br />

(½)L293B<br />

CLK 0<br />

2<br />

Out1<br />

Out2<br />

74LS14<br />

L293 L293<br />

Motor de CD<br />

10 kΩ<br />

Carlos E. Canto Quintal M.C. M.C<br />

Motor de CD<br />

220 Ω<br />

+VS<br />

Microprocesadores<br />

alimentación<br />

del motor<br />

10 kΩ<br />

220 Ω


EL TIMER <strong>8254</strong><br />

Start<br />

Uso del <strong>8254</strong> para controlar el conteo del giro de un motor de CD<br />

Circuito<br />

Circuito<br />

De<br />

De<br />

reloj<br />

reloj<br />

del<br />

del<br />

z80<br />

z80<br />

PA.7<br />

INT<br />

Z80<br />

No No<br />

se se<br />

usa<br />

usa<br />

EL TIMER <strong>8254</strong><br />

PPI PPI<br />

8255 8255<br />

PB.0<br />

PB.1<br />

PC.0<br />

fclk =2Mhz<br />

L293B L293B<br />

Gate0<br />

Contador0<br />

Contador0<br />

Out 0<br />

Gate1<br />

Contador1<br />

Contador1<br />

Clk 1<br />

Contador2<br />

Contador2<br />

Clk0<br />

Out 1<br />

TIMER <strong>8254</strong><br />

Encoder Encoder<br />

Microprocesadores<br />

Programado en modo 0<br />

Tono de 1khz<br />

Programado en modo 3<br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

Esquemático Esquem tico de la conexión conexi n del <strong>8254</strong> con el z80 para la práctica pr ctica 9<br />

START<br />

VCC<br />

4.7 K<br />

PRACTICA NUM.9<br />

APLICACIONES DEL TIMER /CONTADOR <strong>8254</strong><br />

2<br />

3<br />

7<br />

1A<br />

1Y<br />

6<br />

10<br />

2A<br />

2Y<br />

11<br />

15<br />

3A<br />

3Y<br />

MOTOR CD<br />

14<br />

PA.7 4A<br />

4Y<br />

D1<br />

D2<br />

+5V<br />

PB.0<br />

1<br />

PPI<br />

9<br />

1/2EN<br />

1 2<br />

3/4EN<br />

PB.1<br />

8255<br />

16<br />

D4<br />

8<br />

VCC1<br />

VCC2<br />

PPI<br />

8255<br />

INT<br />

IORD<br />

IOWR<br />

CIRCUITO DE<br />

RELOJ DEL<br />

Z80<br />

PC.0<br />

A0<br />

A1<br />

A2<br />

A3<br />

A4<br />

2<br />

BUS DE DATOS<br />

7414<br />

BUS DE DIRECCIONES<br />

A7<br />

A6<br />

A5<br />

1<br />

15<br />

2<br />

A Y0<br />

14<br />

3<br />

B Y1<br />

13<br />

C Y2<br />

12<br />

Y3<br />

74LS138 11<br />

6<br />

Y4<br />

10<br />

4<br />

G1 Y5<br />

9<br />

5<br />

G2A Y6<br />

7<br />

G2B Y7<br />

1<br />

84H-87H<br />

+5V<br />

A7 A6 A5 A4 A3 A2 A1 A0<br />

1 0 0 0 0 1 X X<br />

LAS DIRECCIONES SELECCIONADAS SON DE 84H A 87H<br />

24<br />

8<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

22<br />

23<br />

19<br />

20<br />

VCC<br />

D0<br />

D1<br />

D2<br />

D3<br />

D4<br />

D5<br />

D6<br />

D7<br />

RD<br />

WR<br />

A0<br />

A1<br />

21<br />

12<br />

CS<br />

GND<br />

VS<br />

<strong>8254</strong><br />

AL <strong>8254</strong><br />

G0<br />

OUT0<br />

CLK0<br />

CLK1<br />

G1<br />

OUT1<br />

OUT2<br />

CLK2<br />

G2<br />

11<br />

10<br />

9<br />

15<br />

14<br />

13<br />

17<br />

18<br />

16<br />

+5V<br />

2<br />

L293<br />

7414<br />

2.7 K<br />

2<br />

1<br />

+5V<br />

3<br />

1<br />

10K<br />

2N3904<br />

+5V<br />

220<br />

SENSOR ÓPTICO<br />

SPEAKER<br />

D3<br />

Carlos Canto


EL TIMER <strong>8254</strong><br />

Out 0<br />

Final Final de de<br />

conteo conteo<br />

Gate1<br />

Out 1<br />

EL TIMER <strong>8254</strong><br />

Inicio<br />

Inicio<br />

Ubica<br />

Ubica<br />

el<br />

el<br />

Stack<br />

Stack<br />

Configurar<br />

Configurar<br />

PPI<br />

PPI<br />

Programar<br />

Programar<br />

<strong>El</strong><br />

<strong>El</strong><br />

<strong>8254</strong><br />

<strong>8254</strong><br />

Inicializar<br />

Inicializar<br />

<strong>El</strong><br />

<strong>El</strong><br />

<strong>8254</strong><br />

<strong>8254</strong><br />

Habilitar<br />

Habilitar<br />

Interrupciones.<br />

Interrupciones.<br />

en<br />

en<br />

modo1<br />

modo1<br />

Arranca<br />

Arranca<br />

motor<br />

motor<br />

1 segundo<br />

Tono de 1KHZ<br />

Microprocesadores<br />

Pita Pita la la bocina bocina por por 1 1 seg. seg.<br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

Diagrama de flujo que muestran las tareas a realizar por el<br />

programa<br />

Aquí Aqu el Z80 entra en un<br />

estado HALT hasta que ocurra<br />

la interrupción<br />

interrupci<br />

Si<br />

Motor<br />

Motor<br />

giró<br />

giró<br />

1000<br />

1000<br />

vueltas?<br />

vueltas?<br />

Out<br />

Out<br />

0=alto?<br />

0=alto?<br />

No<br />

CALL<br />

CALL<br />

RSI<br />

RSI<br />

RETI<br />

RETI<br />

RSI<br />

RSI<br />

Detener<br />

Detener<br />

el<br />

el<br />

motor<br />

motor<br />

iniciar<br />

iniciar<br />

pitido<br />

pitido<br />

Bocina<br />

Bocina<br />

a<br />

a<br />

1khz<br />

1khz<br />

Delay<br />

Delay<br />

1 seg<br />

1 seg<br />

Parar<br />

Parar<br />

pitido<br />

pitido<br />

De<br />

De<br />

bocina<br />

Si bocina<br />

Inicializar<br />

Inicializar<br />

<strong>El</strong><br />

<strong>El</strong><br />

<strong>8254</strong><br />

<strong>8254</strong><br />

Rehabilitar<br />

Rehabilitar<br />

Interrupciones.<br />

Interrupciones.<br />

Invertir<br />

Invertir<br />

giro<br />

giro<br />

del<br />

del<br />

motor<br />

motor


EL TIMER <strong>8254</strong><br />

Microprocesadores<br />

Definición de los símbolos usados en el programa<br />

STACK EQU 1000H ; Inicio del stack<br />

PORT_A EQU 80H ; dirección del puerto A<br />

PORT_B EQU 81H ; dirección del puerto B<br />

PORT_C EQU 82H ; dirección del puerto C<br />

CTRL_PPI EQU 83H ; dirección del registro de control del PPI<br />

PAL_CTRL EQU 88H ; palabra de control del PPI el pto.Ch =entrada<br />

CONT_0 EQU 84H ; dirección del <strong>contador</strong> 0<br />

CONT_1 EQU 85H ; dirección del <strong>contador</strong> 1<br />

CTRL_TIM EQU 87H ; dirección del registro de control del <strong>8254</strong><br />

CONT_0_MOD0 EQU ; palabra de control para el <strong>contador</strong> 0, en modo 0<br />

CONT_1_MOD3 EQU ; palabra de control para <strong>contador</strong> 1 en modo 3<br />

CONT_INICIAl_LSB EQU ; Byte menos significativo del valor de conteo inicial<br />

CONT_INICIAl_MSB EQU ; Byte menos significativo del valor de conteo inicial<br />

DIV_LSB EQU 0F0H ; Byte divisormenos significativo<br />

DIV_MSB EQU 07H ; Byte divisor más significativo<br />

EL TIMER <strong>8254</strong><br />

;UBICA EL STACK<br />

LD SP, STACK<br />

; CONFIGUARCIÓN DEL PPI<br />

LD A , PAL_CTRL ; Carga de palabra de control del PPI<br />

OUT (CTRL_PPI) , A<br />

; PROGRAMACIÓN DEL TIMER <strong>8254</strong><br />

LD A , CONT_0_MOD0 ;Configura el <strong>contador</strong> 0 en modo 0<br />

OUT (CONT_0) , A<br />

LD A , CONT_1_MOD3 ; Configura <strong>contador</strong> 1 en modo 1<br />

OUT (CONT_1) , A<br />

Carlos E. Canto Quintal M.C. M.C<br />

Microprocesadores<br />

; INICIALIZACIÓN DEL TIMER <strong>8254</strong><br />

CALL INICIA_<strong>8254</strong><br />

; HABILITACIÓN DE LA INTERRUPCIONES Y SELECCIÓN DEL MODO1<br />

IE ; Habilita las interrupciones del Z80<br />

IM1 ; Selección del modo 1 de interrupciones<br />

;ARRANCA EL MOTOR<br />

LEER: IN A , (PTO_A) ;leer tecla start del puerto A<br />

AND 80H ;enmascara bits no usados<br />

JP NZ, LEER ;si no se oprimió la tecla vuelve a checar<br />

LD A, 01H<br />

OUT (PTO_B) , A ; si se oprimió la tecla , arranca el motor<br />

HALT ; espera que ocurra la interrupción


EL TIMER <strong>8254</strong><br />

INICIA_<strong>8254</strong> :<br />

;INICIALIZACIÓN DEL CONTADOR 0<br />

LD A, CONT_INICIAL_LSB ;Carga el byte menos significativo del valor<br />

OUT (CONT_0) , A ; de conteo inicial al <strong>contador</strong> 0<br />

LD A, CONT_INICIAL_MSB ;Carga el byte más significativo del valor<br />

OUT (CONT_0) , A ; de conteo inicial al <strong>contador</strong> 0<br />

;INICIALIZACIÓN DEL CONTADOR 1<br />

LD A , DIV_LSB ;Cargar al <strong>contador</strong>1 con el divisor de frecuencia<br />

OUT (CONT_2) , A ; menos significativo<br />

LD A , DIV_MSB ; Cargar al <strong>contador</strong>1 con el divisor de frecuencia<br />

OUT (CONT_2) , A ; más significativo<br />

RET<br />

Microprocesadores<br />

Generador de señales en una IBM PC

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!