Aplicaciones visual c++ parte3

14
Puertos E/S del PPI, Timer, etc Ing.CIP Jorge Luis Robles Bokun

description

lo maximo

Transcript of Aplicaciones visual c++ parte3

Page 1: Aplicaciones visual c++ parte3

Ing.CIP Jorge Luis Robles Bokun

Puertos E/S del PPI, Timer, etc

Page 2: Aplicaciones visual c++ parte3

Ing.CIP Jorge Luis Robles Bokun

Palabra de control del Timer 82C54

Page 3: Aplicaciones visual c++ parte3

Ing.CIP Jorge Luis Robles Bokun

La palabra de control selecciona también 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 mínima de 1 es aplicable a todos los modos de operación excepto los modos 2 y 3, las cuales tienen una cuenta mínima de 2.

CONFIGURACIÓN:Ejemplo 6.1: Configurar el CH0 del TIMER en modo 2, cuenta binaria, operación leer y escribir byte bajo y luego el byte alto.- Palabra de control: 00110100 = 34h- La instrucción sería: xout (0x77, 0x34);Ejemplo 6.2: Configurar el CH1 del TIMER en modo 3, cuenta binaria, operación leer y escribir byte bajo y luego el byte alto.- Palabra de control: 01110110 = 76h- La instrucción sería: xout (0x77, 0x76);Ejemplo 6.3: Configurar el CH2 del TIMER en modo 4, cuenta binaria, operación leer y escribir byte bajo y luego el byte alto.- Palabra de control: 10111000 = 0B8h- La instrucción sería: xout (0x77, 0xB8);

Page 4: Aplicaciones visual c++ parte3

Ing.CIP Jorge Luis Robles Bokun

Teoría básica de números - Conversión binaria a hexadecimal

Con dos cifras decimales podemos obtener 10x10 = 100 números, es decir, hasta el 99 (junto con el cero son un total de 100 números).Con dos cifras del sistema hexadecimal podemos obtener 16x16 = 256 números, es decir, hasta el FF que equivale al número decimal 255 (junto con el cero son un total de 256 números diferentes). Es la misma cantidad que podemos obtener con 1 byte. Por lo tanto dos cifras hexadecimales es el método ideal para expresar el número contenido en 1 byte.

Hay un método muy sencillo para pasar de número binario a hexadecimal o viceversa. Consiste en agrupar el número binario en bloques de 4 cifras y hacer la conversión 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 señalar que se usa el sistema hexadecimal se antepone el símbolo #. Por ejemplo “#FFFF00” indica un número en hexadecimal. Otro método usado por los lenguajes de programación es anteponer 0x. Por ejemplo 0xFFF00 indica también un número en sistema hexadecimal.

Page 5: Aplicaciones visual c++ parte3

Ing.CIP Jorge Luis Robles Bokun

Conversión número decimal a hexadecimal

Ejemplo 1

Ejemplo 2

1869 (10) = 74D h

Page 6: Aplicaciones visual c++ parte3

Ing.CIP Jorge Luis Robles Bokun

Ejemplo 6.4: Programe el CH0 del TIMER para obtener una señal 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 = 9C40hxout (0x74, 0x40); // Se envía Byte LSB al CH0xout (0x74, 0x9C); // Se envía Byte MSB al CH0}

Page 7: Aplicaciones visual c++ parte3

Ing.CIP Jorge Luis Robles Bokun

Ejemplo 6.5: Programe el CH1 y CH2 del TIMER para obtener una señal cuadrada con frecuencia de 1 KHz en el CH1 y una señal 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 binarioxout(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 envía Byte LSB al CH1xout (0x75, 0x1F); // Se envía Byte MSB al CH1xout (0x76, 0x00); // Se envía Byte LSB al CH2xout (0x76, 0x7D); // Se envía Byte MSB al CH2}

Page 8: Aplicaciones visual c++ parte3

Módulo – Equipo deExperimentos DISEN-EXP

Caja plástica-dimensiones:260x185x75 mm

Ing.CIP Jorge Luis Robles Bokun

Page 9: Aplicaciones visual c++ parte3

Ing.CIP Jorge Luis Robles Bokun

Page 10: Aplicaciones visual c++ parte3

Ing.CIP Jorge Luis Robles Bokun

Page 11: Aplicaciones visual c++ parte3

Aplicaciones del TIMER 82C54

Para hacer uso del TIMER de la Tarjeta LPT ByM V2.0, tiene que entender en primer lugar comose programa, configura y opera. Luego puede implementar y ejecutar los siguientes programasbásicos hasta llegar al control de un motor de corriente continua usando PWM.

Ing.CIP Jorge Luis Robles Bokun

Page 12: Aplicaciones visual c++ parte3

TIMER_1.CPP:Este programa muestra como programar el TIMER 82C54 de la Tarjeta y obtener unafrecuencia de 1 MHz en el CH1 (modo 2) y en el CH2 (modo 3).Descripción:a) Coloque los 4 bits del SW TIMER (S1) en ON, para que la frecuencia de 8 MHzle llegue al CH1 y CH2. Así mismo, los GATE de ambos estén habilitados.b) Programe al CH1 en modo 2 a una frecuencia de 1MHz, y observe su salida OUT1en el osciloscopio.c) Programe al CH2 en modo 3 a una frecuencia de 1MHz, y observe su salida OUT2en 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" // Librería usada por la tarjeta LPT V2.0int Base = 0x378; // Dirección base del puerto paralelovoid 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, binarioxout(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 envía Byte LSB al CH1xout(0x75, 0x00); // Se envía 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 envía Byte LSB al CH2xout(0x76, 0x00); // Se envía Byte MSB al CH2} /* FIN de main */

Ing.CIP Jorge Luis Robles Bokun

Page 13: Aplicaciones visual c++ parte3

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.Descripción: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 estén 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 dela conexión externa (bornera azul).d) En la bornera del TIMER unir con un cable la salida OUT1 del CH1 a la entradaCLK2 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 lasalida OUT2 en un LED.g) Escriba el programa en Visual C++ (modo consola)h) Compile (Ctrl + F7) -> Build (F7) -> Execute program (Ctrl + F5) Ing.CIP Jorge Luis Robles Bokun

Page 14: Aplicaciones visual c++ parte3

Ing.CIP Jorge Luis Robles Bokun

#include <windows.h>#include <stdio.h>#include <conio.h>#include "BymWin.h" // Librería usada por la tarjeta LPT V2.0int Base = 0x378; // Dirección base del puerto paralelovoid main (void) // Inicia programa principal{inicio_tarjeta(); // Inicializa Tarjeta de interfase LPT V2.0// Configura los canales 1 y 2xout(0x77, 0x76); // CH1, Modo 3, binarioxout(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 envía Byte LSB al CH1xout(0x75, 0xC3); // Se envía 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. */xout(0x76, 0xA0); // Se envía Byte LSB al CH2xout(0x76, 0x00); // Se envía Byte MSB al CH2} /* FIN de main */