El temporizador /contador Intel 8254
El temporizador /contador Intel 8254
El temporizador /contador Intel 8254
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