Vous êtes sur la page 1sur 14

Puertos E/S del PPI, Timer, etc

Ing.CIP Jorge Luis Robles Bokun

Palabra de control del Timer 82C54

Ing.CIP Jorge Luis Robles Bokun

La palabra de control selecciona tambin una cuenta binaria o BCD.


Cada contador puede programarse con una cuenta de 1 a FFFFh.
Una cuenta de 0 es igual a FFFFh + 1 (65536) o 10000 en BCD. La
cuenta mnima de 1 es aplicable a todos los modos de operacin
excepto los modos 2 y 3, las cuales tienen una cuenta mnima de 2.
CONFIGURACIN:
Ejemplo 6.1: Configurar el CH0 del TIMER en modo 2, cuenta
binaria, operacin leer y escribir byte bajo y luego el byte alto.
- Palabra de control: 00110100 = 34h
- La instruccin sera: xout (0x77, 0x34);
Ejemplo 6.2: Configurar el CH1 del TIMER en modo 3, cuenta
binaria, operacin leer y escribir byte bajo y luego el byte alto.
- Palabra de control: 01110110 = 76h
- La instruccin sera: xout (0x77, 0x76);
Ejemplo 6.3: Configurar el CH2 del TIMER en modo 4, cuenta
binaria, operacin leer y escribir byte bajo y luego el byte alto.
- Palabra de control: 10111000 = 0B8h
- La instruccin sera: xout (0x77, 0xB8);

Ing.CIP Jorge Luis Robles Bokun

Teora bsica de nmeros - Conversin binaria a hexadecimal


Con dos cifras decimales podemos obtener 10x10 = 100 nmeros, es decir, hasta el 99 (junto con el cero
son un total de 100 nmeros).
Con dos cifras del sistema hexadecimal podemos obtener 16x16 = 256 nmeros, es decir, hasta el FF que
equivale al nmero decimal 255 (junto con el cero son un total de 256 nmeros diferentes). Es la misma
cantidad que podemos obtener con 1 byte. Por lo tanto dos cifras hexadecimales es el mtodo
ideal para expresar el nmero contenido en 1 byte.
Hay un mtodo muy sencillo para pasar de nmero binario a hexadecimal o viceversa. Consiste en
agrupar el nmero binario en bloques de 4 cifras y hacer la conversin de esas cuatro cifras. Veamos un
ejemplo:

Observe que para convertir a hexadecimal, primero pasamos a decimal y luego


escribimos su equivalente hexadecimal.
Igualmente, para convertir a binario, primero pasamos a decimal y luego
escribimos su equivalente binario.
Para sealar que se usa el sistema hexadecimal se antepone el smbolo #. Por ejemplo #FFFF00 indica
un nmero en hexadecimal.
Otro mtodo usado por los lenguajes de programacin es anteponer 0x. Por ejemplo 0xFFF00 indica
tambin un nmero en sistema hexadecimal.
Ing.CIP Jorge Luis Robles Bokun

Conversin nmero decimal a hexadecimal


Ejemplo 1

Ejemplo 2

1869
Ing.CIP Jorge Luis Robles Bokun

(10)

= 74D

Ejemplo 6.4: Programe el CH0 del TIMER para obtener una


seal cuadrada con frecuencia de 200 Hz, sabiendo que la
frecuencia de entrada es de 8 MHz.
void main ()
{
// Configura el canal 0 (CH0)
xout(0x77, 0x36); // CH0, Modo 3, cuenta binario
// Frecuencia de entrada al CH0 = 8 MHz. Para obtener una
frecuencia de 200 Hz
// (T=5 ms), se tiene que dividir (8 MHz/200 Hz)= 40000;
==> el factor N = 9C40h
xout (0x74, 0x40); // Se enva Byte LSB al CH0
xout (0x74, 0x9C); // Se enva Byte MSB al CH0
}

Ing.CIP Jorge Luis Robles Bokun

Ejemplo 6.5: Programe el CH1 y CH2 del TIMER para obtener


una seal cuadrada con frecuencia de 1 KHz en el CH1 y una
seal para generar interrupciones de 250 Hz en el CH2. La
frecuencia de entrada es de 8 MHz.
void main ()
{
/* Configura el canal 0 (CH0) y el canal 1 (CH1) */
xout(0x77, 0x76); // CH1, Modo 3, cuenta binario
xout(0x77, 0xB4); // CH2, Modo 2, cuenta binario
/* Frecuencia de entrada al CH1=CH2= 8 MHz. Para obtener una
frecuencia de 1 KHz en CH1, se tiene que dividir (8 MHz/1 KHz)=
8000; ==> el factor N1 = 1F40h.
Para obtener una frecuencia de 250 Hz en CH2, se tiene que
dividir (8MHz/250Hz)= 32000; ==> el factor N2 = 7D00h. */
xout (0x75, 0x40); // Se enva Byte LSB al CH1
xout (0x75, 0x1F); // Se enva Byte MSB al CH1
xout (0x76, 0x00); // Se enva Byte LSB al CH2
xout (0x76, 0x7D); // Se enva Byte MSB al CH2
}

Ing.CIP Jorge Luis Robles Bokun

Mdulo Equipo de
Experimentos DISEN-EXP

Caja plstica-dimensiones:
60x185x75 mm

Ing.CIP Jorge Luis Robles Bokun

Ing.CIP Jorge Luis Robles Bokun

Ing.CIP Jorge Luis Robles Bokun

Aplicaciones del
TIMER 82C54
Para hacer uso del
TIMER de la Tarjeta
LPT ByM V2.0, tiene
que entender en
primer lugar como
se programa,
configura y opera.
Luego puede
implementar y
ejecutar los siguientes
programas
bsicos hasta llegar al
control de un motor de
corriente continua
usando PWM.

Ing.CIP Jorge Luis Robles Bokun

TIMER_1.CPP:
Este programa muestra como programar el TIMER 82C54 de la Tarjeta y obtener una
frecuencia de 1 MHz en el CH1 (modo 2) y en el CH2 (modo 3).
Descripcin:
a) Coloque los 4 bits del SW TIMER (S1) en ON, para que la frecuencia de 8 MHz
le llegue al CH1 y CH2. As mismo, los GATE de ambos estn habilitados.
b) Programe al CH1 en modo 2 a una frecuencia de 1MHz, y observe su salida OUT1
en el osciloscopio.
c) Programe al CH2 en modo 3 a una frecuencia de 1MHz, y observe su salida OUT2
en el osciloscopio.
d) Escriba el programa en Visual C++ (modo consola)
e) Compile (Ctrl + F7) -> Build (F7) -> Execute program (Ctrl + F5)
********************************************************************************/
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "BymWin.h" // Librera usada por la tarjeta LPT V2.0
int Base = 0x378; // Direccin base del puerto paralelo
void main (void) // Inicia programa principal
{inicio_tarjeta(); // Inicializa Tarjeta de interfase LPT V2.0
/* Configura los canales 1 y 2 */
xout(0x77, 0x74); // CH1, Modo 2, binario
xout(0x77, 0XB6); // CH2, Modo 3, binario
/* Frecuencia de entrada al CH1 = 8 MHz. Para obtener una frecuencia de 1 MHz
(T =1 s), se tiene que dividir (8 MHz/1 MHz)= 8; ==> el factor N1=0008 */
xout(0x75, 0x08); // Se enva Byte LSB al CH1
xout(0x75, 0x00); // Se enva Byte MSB al CH1
/* Frecuencia de entrada al CH2 = 8 MHz. Para obtener una frecuencia de 1 MHz
(T =1 s), se tiene que dividir (8 MHz/1 MHz)= 8; ==> el factor N1=0008 */
xout(0x76, 0x08); // Se enva Byte LSB al CH2
xout(0x76, 0x00); // Se enva Byte MSB
al CH2
Ing.CIP
Jorge Luis Robles Bokun

TIMER_2.CPP: Este programa muestra como conectar en cascada el CH1 y CH2


del TIMER 82C54 para obtener una frecuencia de 1Hz en la salida del CH2.
Descripcin:
Realice las siguientes conexiones sobre los canales 1 y 2 del TIMER.
a) Coloque los bits 1 y 2 del SW TIMER (S1) en ON, para que los GATES de los 2
canales estn habilitados.
b) Coloque el bit 3 del SW TIMER (S1) en ON, para que el CH1 tenga una
frecuencia de entrada de 8 MHz.
c) Coloque el bit 4 del SW TIMER (S1) en OFF, para que la entrada CLK2 dependa
de
la conexin externa (bornera azul).
d) En la bornera del TIMER unir con un cable la salida OUT1 del CH1 a la entrada
CLK2 del CH2.
e) Programe al CH1 en modo 3 a una frecuencia de 160 Hz (N1 = C350h).
f) Programe al CH2 en modo 3 a una frecuencia de 1 Hz (N2 = 00A0h), y
observe la
Ing.CIP Jorge Luis Robles Bokun
salida OUT2 en un LED.

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "BymWin.h" // Librera usada por la tarjeta LPT V2.0
int Base = 0x378; // Direccin base del puerto paralelo
void main (void) // Inicia programa principal
{
inicio_tarjeta(); // Inicializa Tarjeta de interfase LPT V2.0
// Configura los canales 1 y 2
xout(0x77, 0x76); // CH1, Modo 3, binario
xout(0x77, 0XB6); // CH2, Modo 3, binario
/* Frecuencia de entrada al CH1 = 8 MHz. Para obtener una
frecuencia de 160 Hz.
(T = 6.25 ms), se tiene que dividir (8 MHz/160 Hz) = 50000 =
C350h;
==> el factor N1 = C350h */
xout(0x75, 0x50); // Se enva Byte LSB al CH1
xout(0x75, 0xC3); // Se enva Byte MSB al CH1
/* Frecuencia de entrada al CH2 = 160 Hz. Para obtener una
frecuencia de 1 Hz
(T = 1 Seg), se tiene que dividir (160 Hz/1 Hz) = 160 = 00A0h;
==> el factor N2 = 00A0h. */
Ing.CIP Jorge Luis Robles Bokun
xout(0x76, 0xA0); // Se enva
Byte LSB al CH2

Vous aimerez peut-être aussi