Electricidad y Electrónica Industrial Informática II Universidad Tecnológica de Puebla Informática II Manual de asignatura Carrera Electricidad y Electrónica Industrial Programa 2004 Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 0 Electricidad y Electrónica Industrial Informática II Contenido Horas Página Teoría Práctica Total I Sistemas numéricos. 4 2 6 3 II Algoritmos 2 8 10 15 III Metodología de la programación 3 2 5 19 IV Lenguajes de programación 8 31 39 28 V Canales de comunicación 5 10 15 42 Anexos (Manual de prácticas y ejercicios) Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez 45 Pagina 1 Electricidad y Electrónica Industrial Informática II I Sistemas Numéricos I.1 INTRODUCCIÓN. Saber en la Teoría (4 hrs.) EL SISTEMA DECIMAL (Base 10): Este sistema está formado por diez símbolos, llamados números arábicos. También es llamado sistema de base 10. Usando los diez símbolos separadamente 0, 1, 2, 3, ..., 9 nos permite representar el valor de los números en unidades individuales, pero para representar mas de nueve números es necesario combinarlos. Cuando usamos símbolos en combinación, el valor de cada uno de ellos depende de su posición con respecto al punto decimal, designando así un símbolo para las unidades, otro para las decenas, otro para las centenas, otro para los millares (de miles, no de millón), en adelante. El símbolo correspondiente a las unidades asume la posición mas izquierda antes del punto decimal. Esta designación de posición determina que la potencia del número se corresponde con la distancia en que está del punto decimal, y es por ello que la primera posición se llama UNIDAD (100 = 1). Matemáticamente esto puede ser representado como: unidad = 100 decena = 101 centena = 102 Por ejemplo: El valor en combinación de los símbolos 234 es determinado por la suma de los valores correspondientes a cada posición: 2 x 102 + 3 x 101 + 4 x 100 + 3 x 10 + 4x1 Que equivale a: 2 x 100 Efectuando las multiplicaciones esto da: Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 2 Electricidad y Electrónica Industrial 200 + Informática II 30 + 4 Cuya suma da como resultado: 234 Para representar un número base diez es posible colocar su valor seguido de la base en sub-índice (18.97410) o bien seguido de la letra d entre paréntesis: 645(d). EL SISTEMA BINARIO (Base 2): Es un sistema de números de base igual a 2, lo que nos lleva a representar los números con sólo dos símbolos distintos: 0 y 1. Es usado para representar números del mismo modo que el sistema decimal, donde cada símbolo puede ser usado individualmente o en combinación. Por ello con sólo un símbolo en sistema binario podemos representar apenas dos valores (cero y uno) a diferencia del sistema decimal donde un sólo símbolo podía representar hasta diez. Combinando dos símbolos binarios logramos generar los cuatro primeros valores del sistema binario, que se muestran abajo: 00 01 10 11 (El uno se movió una posición a la izquierda) Para un número mas grande, el símbolo 1 debe ser movido otra vez, haciendo aparecer una tercera columna, tal como ocirrió antes con la segunda. aplicando todas las combinaciones posibles de 0's y 1's, se obtiene: Binario Decimal Universidad Tecnológica de Puebla 000 0 001 1 010 2 011 3 100 4 Lic. Jorge Cerezo Sánchez Pagina 3 Electricidad y Electrónica Industrial Informática II 101 5 110 6 111 7 En este sistema se emplea el mismo concepto de posicionamiento y potencia que en el anterior. A continuación se ven algunos ejemplos de posicionamiento y potencia de los símbolos: En este sistema se emplea el mismo concepto de posicionamiento y potencia que en el anterior. A continuación se ven algunos ejemplos de posicionamiento y potencia de los símbolos: Para números enteros (a la izquierda del punto decimal): Trigésimo-Segundo (32) =25 Décimo-Sexto (16)= 24 Octavo (8) = 21 Cuarto (4) = 22 Segundo (2) = 21 Primero (1) = 20 Cuando los símbolos 0 y 1 son usados para representar números binarios, cada símbolo es llamado dígito binario, o simplemente BIT. El número binario 10102 es llamado número binario de cuatro dígitos o número binario de 4-bits. Este sistema es muy empleado en circuitería digital por ser fácil de representar y transmitir electrónicamente. Comúnmente (aunque no siempre) el símbolo cero del sistema binario está representado por un estado eléctrico bajo, usualmente correspondiente a la masa o a los 0V. Del mismo modo el símbolo 1 es representado por un estado alto que, por lo general, se corresponde con la tensión de fuente (suele ser 5V en sistemas digitales). Pero esto es "por lo general". Hay muchos casos donde si bien el sistema es binario los símbolos son representados eléctricamente de otra forma. Tal es el caso del estándar de comunicaciones seriales 232C donde el 1 es representado por una tensión negativa de entre 5V y 25V, mientras que el 0 es representado por una tensión positiva del mismo rango. CONVERSIÓN ENTRE SISTEMAS Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 4 Electricidad y Electrónica Industrial Informática II DE BINARIO A DECIMAL: Para poder transformar números binarios en su correspondiente decimal basta multiplicar el dígito binario (que sólo puede ser 0 o 1) por 2 elevado a la potencia correspondiente a la distancia de ese símbolo al punto decimal. Luego se suman los valores obtenidos y se consigue el número final. Ejemplos: 102 = 1x21 + 0x20 = 1x2 + 0x1 = 2 + 0 = 210 1012 = 1x22 + 0x21 + 1x20 = 1x8 + 1x4 + 0x2 + 1x1 = 4 + 0 + 1 = 510 10012 = 1x23 + 0x22 + 0x21 + 1x20 = 1x8 + 0x4 + 0x2 + 1x1 = 8 + 0 + 0 + 1 = 910 DE DECIMAL A BINARIO: Aquí veremos el método de divisiones y multiplicaciones sucesivas. Para convertir un número ENTERO decimal a una nueva base, el número decimal es sucesivamente dividido por la nueva base. Como en nuestro caso la nueva base es 2 el número será sucesivamente dividido por 2, O sea, el número original es dividido por 2, el resultado de ese cociente es dividido por 2 sucesivamente hasta que el cociente de 0. El resto de cada división es un número binario que conforma el número resultante de la conversión. El primer resultado producido (el primer resto obtenido) corresponde al bit mas próximo al punto decimal (o lo que se conoce como bit de menor peso). Los sucesivos bits se colocan a la izquierda del anterior. Nótese que esto es como escribir en sentido contrario al empleado normalmente. Veamos esto con un ejemplo: Convertiremos a binario el número 1810 18 / 2 = 9 y resta 0 (este cero es el bit mas próximo al punto binario) 9 / 2 = 4 y resta 1 (este uno es el bit que le sigue a la izquierda al cero obtenido arriba) 4 / 2 = 2 y resta 0 (este cero es el bit que le sigue a la izquierda al uno obtenido arriba) 2 / 2 = 1 y resta 0 (este cero es el bit que le sigue a la izquierda al cero obtenido arriba) Con 1 no se puede continuar dividiendo pero se coloca éste a la izquierda del cero obtenido arriba, quedando como bit de mayor peso. Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 5 Electricidad y Electrónica Industrial Informática II Entonces, 1810 = 100102. EL SISTEMA OCTAL (Base 8): Este sistema es muy usado en trabajos digitales, por su fácil conversión de y hacia el sistema binario. Tiene su base igual a ocho, lo que genera la necesidad de ocho símbolos para representar valores en este sistema y para esta finalidad se seleccionaron los primeros ocho símbolos del sistema decimal: 0, 1, 2, 3, 4, 5, 6 y 7. A continuación del 7 y para seguir contando hacia adelante, hay que agregar una nueva columna a la izquierda la cual tendrá como valor inicial un 1. De esta forma es posible obtener otras ocho nuevas combinaciones tal como sucedía en los otros sistemas comentados anteriormente. Estos son algunos de los valores para cada símbolo. Septuagésimo-Cuarto (64) = 82 Octavo (8) = 81 Unidad (1) = 80 Un Octavo = 8-1 Un Sesenta y Cuatroavos = 8-2 Los números octales son parecidos a los números decimales excepto por los símbolos 8 y 9, que no son usados. CONVERSIÓN DE DECIMAL A OCTAL: En esta caso basta usar el mismo método de conversión con los números binarios. Pero en vez de hacer divisiones sucesivas por 2 hay que efectuarlas por 8. Nótese que el divisor corresponde a la base del sistema al cual se va a convertir. Lo mismo sucede con las multiplicaciones sucesivas, necesarias para convertir números fraccionarios. Ejemplo 1: Convertir 24510 245 / 8 = 30 y resta 5 (dígito mas próximo al punto octal) 30 / 8 = 3 y resta 6 (dígito a la izquierda del 5 obtenido arriba) No se puede seguir dividiendo, por lo que el 3 queda como dígito de mayor peso a la izquierda del 6 obtenido arriba. Resultado: 24510 = 3658 Ejemplo 2: Convertir 17510 Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 6 Electricidad y Electrónica Industrial Informática II 175 / 8 = 21 y resta 7 (dígito mas próximo al punto octal) 21 / 8 = 2 y resta 5 (dígito a la izquierda del 7 obtenido arriba) No se puede seguir dividiendo, por lo que el 2 queda como dígito de mayor peso a la izquierda del 7 obtenido arriba. Resultado: 17510 = 2578 SISTEMA HEXADECIMAL (Base 16): Este sistema requiere el uso de 16 símbolos, siendo formado por los mismos empleados en el sistema decimal y seis letras del alfabeto arábico comprendidas entre A y F. Dado que las computadoras usualmente agrupan conjuntos de bits en múltiplos de cuatro este sistema permite representar a cada grupo con un simple símbolo. Por ello es que es tan usado en estos días. En la tabla de abajo se muestra la relación entre los sistemas. Decimal Binario Octal Hexa 0 0000 0 0 1 0001 1 1 2 0010 2 2 3 0011 3 3 4 0100 4 4 5 0101 5 5 6 0110 6 6 7 0111 7 7 8 1000 10 8 9 1001 11 9 10 1010 12 A 11 1011 13 B 12 1100 14 C 13 1101 15 D 14 1110 16 E 15 1111 17 F Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 7 Electricidad y Electrónica Industrial Informática II Al igual que en los otros sistemas en Hexadecimal, cuando se llega a la F y se requiere seguir contando hacia adelante se torna necesario agregar una nueva columna a la izquierda de la actual la cual inicialmente deberá estar en 1. Esto permite generar otros 16 símbolos nuevos diferentes a los anteriores. CONVERSIÓN DE HEXADECIMAL A BINARIO: Para efectuar la conversión basta con colocar los cuatro bits correspondientes a cada símbolo del número hexa respetando su posición original. Para saber el valor de cada símbolo sólo tiene que mirar la tabla de relación entre sistemas mostrada arriba. Por ejemplo: Para convertir 7A216 7 0111 A 1010 2 0010 Resultado: 7A216 = 0111101000102 Otro ejemplo: Para convertir 3D4.F16 3 0011 D 1101 4 0100 . . F 1111 Resultado: 3D4.F16 = 001111010100.11112 CONVERSIÓN DE BINARIO A HEXADECIMAL: Primeramente hay que agrupar los bits de a cuatro comenzando por la derecha y siguiendo hacia la izquierda. Si bien en palabras cuya longitud sea múltiplo de cuatro esto no tiene obligatoriedad, en aquellas cuyo tamaño no sea múltiplo de cuatro si selecciona de izquierda a derecha los grupos de bits quedarán mal conformados. Esto anterior para la parte entera. Para la parte fraccionaria el orden es inverso, o sea que se agrupa de izquierda a derecha. Nótese que siempre es del punto hacia afuera. Una vez formados los grupos basta con fijarse en la tabla de arriba y reemplazar cada grupo por el símbolo Hexa correspondiente. Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 8 Electricidad y Electrónica Industrial Informática II Nada mejor que unos ejemplos: Ejemplo 1: Convertir 1010110100102 1010 A 1101 D 0010 2 Resultado: 1010110100102 = AD216 Ejemplo 2: Convertir 101110101102 101 5 1101 D 0110 6 Resultado: 101110101102 = 5D616 CONVERSIÓN DE HEXADECIMAL A DECIMAL: Los números hexa son convertidos a su equivalente decimal multiplicando el peso de cada posición por el equivalente decimal del dígito de cada posición y sumando los productos. Entonces: 12116 = 1 x 162 + 2 x 161 + 1 x 160 1 x 256 + 2 x 16 + 1 x 1 256 + 32 + 1 28910 A1C16 A x 162 + 1 x 161 + C x 160 10 x 256 + 1 x 16 + 12 x 1 2560 + 16 + 12 258810 OBS: Los valores que sustituyen a las letras se obtienen de la tabla dada arriba. CONVERSIÓN DE DECIMAL A HEXADECIMAL: Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 9 Electricidad y Electrónica Industrial Informática II Se puede realizar empleando dos procesos: Divisiones sucesivas por 16, cuando el número es entero, o multiplicaciones sucesivas por 16, cuando el número es fraccionario. Siguiendo los mismos lineamientos empleados con los otros sistemas numéricos. Ejemplo 1: 65010 650 / 16 = 40 y resta 10 = A (dígito mas próximo al punto hexadecimal) 40 / 16 = 2 y resta 8 (dígito a la izquierda del anterior) No se puede continuar dividiendo, por lo que el 2 queda como símbolo mas significativo a la izquierda del anterior. Resultado 65010 = 28A16 Ejemplo 2: 258810 2588 / 16 = 161 y resta 12 = C (dígito mas próximo al punto hexadecimal) 161 / 16 = 10 y resta 1 (Dígito siguiente a la izquierda del obtenido arriba) No se puede seguir dividiendo, por lo que el diez (la A) queda como símbolo mas significativo a la izquierda del obtenido arriba Resultado 258810 = A1C16 Operaciones entre bases: La regla principal es: Cualquier operación aritmética se debe realizar entre números que se encuentren en la misma base, de lo contrario, la operación aritmética a realizar no tendrá ningún sentido. En binario, la cifra más alta es el 1, por lo tanto, cuando en la suma encontramos dos unos resulta 1 + 1 = 10, entonces se deja el 0 y se arrastra el 1 para ser sumado a la izquierda. Debido al 1 de arrastre pueden juntarse tres unos, con lo que obtenemos 1 + 1 + 1 = 11 luego dejaremos un 1 y arrastramos otro 1 a la izquierda. Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 10 Electricidad y Electrónica Industrial Informática II Ejemplo de resta binaria: Se ha puesto un ejemplo de resta en decimal como punto de referencia para restar en binario. Vea que empezando por la derecha, en cuarto lugar encontramos que de 7 a 13 van 6 y arrastramos 1 a la izquierda que se suma al 4 (quedando 5 y faltando 3 para llegar a 8). En sexto lugar encontramos que de 9 a 15 van 6 y arrastramos 1 a la izquierda que se suma al 9. Esto hace que 9 + 1 = 10, con lo que queda 0 (de 0 a 4 van 4) y se arrastra el 1 para sumarse al 1 del extremo izquierdo, con lo que de 2 a 5 van 3. En el ejemplo binario, en cuarto lugar comenzando por la derecha, encontraremos que de 1 a 10 (será 2 pasado a decimal) va 1 y se arrastra 1 a la izquierda para sumar al 0. En sexto lugar volvemos a encontrar que de 1 a 10 va 1 y se arrastra 1 a la izquierda para sumar al 1 (esto desencadena otro arrastre hasta la última posición izquierda). Ejemplo de producto binario: La multiplicación es tan sencilla que no se necesita explicación. Si sabemos multiplicar en sistema decimal no encontraremos ningún problema para hacerlo en binario. Si el número de cifras es grande, es posible que se junten muchos unos en las sumas finales, por ejemplo 5 unos cuya suma binaria es 101, en cuyo caso queda 1, se arrastra un 0 a la izquierda (que no afecta) y se arrastra un 1 dos lugares a la izquierda. Ejemplo de división binaria: En este ejemplo, hay que comenzar cogiendo 4 cifras del dividendo para sobrepasar al divisor. Así resulta que 1011 entre 111 toca Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 11 Electricidad y Electrónica Industrial Informática II a 1 (solo puede ser 1 o 0). 1 por 111 es 111 y falta 100 hasta llegar a 1011. Bajando la siguiente cifra (un 0) resulta que 1000 entre 111 toca a 1. Así sucesivamente. El complemento a 1 de un valor binario se obtiene invirtiendo el estado de todas sus cifras, incluyendo los ceros a la izquierda hasta completar la capacidad del registro. Por ejemplo, el valor 10011 en un registro de 8 bits (cifras) será 00010011 y su complemento a 1 será 11101100. El complemento a 2 de un valor binario se obtiene sumando 1 al complemento a 1. Por ejemplo, el complemento a 2 de 10011 (el mismo anterior) será 11101100 + 1 = 11101101. SUMA OCTAL Antes de empezar a desarrollar los ejemplos correspondientes se presenta en la figura 38 una tabla de suma octal básica para hacer las primeras sumas. 0 1 2 3 4 5 6 7 0 0 1 2 3 4 5 6 7 1 1 2 3 4 5 6 7 10 2 2 3 4 5 6 7 10 11 3 3 4 5 6 7 10 11 12 4 4 5 6 7 10 11 12 13 5 5 6 7 10 11 12 13 14 6 6 7 10 11 12 13 14 15 7 7 10 11 12 13 14 15 16 1. Ejemplos: Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 12 Electricidad y Electrónica Industrial Informática II 1. Resolver: (25731)8 + (32147)8 25731 + 32147 60100 (25731)8+(32147)8 = (60100)8 2. Resolver (4327)8 + (6714) 8 4327 +6714 13243 Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 13 Electricidad y Electrónica Industrial Informática II II Algoritmos ¿QUÉ ES ALGORITMO? La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX. Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solución a un problema específico. ¿TIPOS DE ALGORITMOS…? Existen dos tipos y son llamados así por su naturaleza: • Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras. Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso. • Lenguajes Algorítmicos Un Lenguaje algorítmico es una serie de símbolos y reglas que se utilizan para describir de manera explícita un proceso. Tipos de Lenguajes Algorítmicos • Gráficos: Es la representación gráfica de las operaciones que realiza un algoritmo (diagrama de flujo). Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 14 Electricidad y Electrónica Industrial • Informática II No Gráficos: Representa en forma descriptiva las operaciones que debe realizar un algoritmo (pseudocodigo). INICIO Edad: Entero ESCRIBA “cual es tu edad?” Lea Edad SI Edad >=18 entonces ESCRIBA “Eres mayor de Edad” FINSI ESCRIBA “fin del algoritmo” FIN Metodología para la solución de un problema mediante un ordenador. Creación de un algoritmo. El computador es una máquina que por sí sola no puede hacer nada, necesita ser programada, es decir, introducirle instrucciones u ordenes que le digan lo que tiene que hacer. Un programa es la solución a un problema inicial, así que todo comienza allí: en el Problema. El proceso de programación es el siguiente: Dado un determinado problema el programador debe idear una solución y expresarla usando un algoritmo (aquí es donde entra a jugar); luego de esto, debe codificarlo en un determinado lenguaje de programación y por último ejecutar el programa en el computador el cual refleja una solución al problema inicial. Esto es a grandes rasgos lo que hace el programador de computadores. La parte que corresponde a este manual es la de: “Dado un determinado problema debemos idear una solución y expresarla usando un ALGORITMO!”. Metodología para la solución de problemas por medio de computadora • DEFINICIÓN DEL PROBLEMA Esta fase está dada por el enunciado del problema, el cual requiere una definición clara y precisa. Es importante que se conozca lo que se desea que realice la computadora; mientras esto no se conozca del todo no tiene mucho caso continuar con la siguiente etapa. • ANÁLISIS DEL PROBLEMA Una vez que se ha comprendido lo que se desea de la computadora, es necesario definir: o Los datos de entrada. Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 15 Electricidad y Electrónica Industrial o o Informática II Cual es la información que se desea producir (salida) Los métodos y fórmulas que se necesitan para procesar los datos. Una recomendación muy práctica es el de colocarse en el lugar de la computadora y analizar qué es lo que se necesita que se ordene y en qué secuencia para producir los resultados esperados. • DISEÑO DEL ALGORITMO Las características de un buen algoritmo son: o Debe tener un punto particular de inicio. o Debe ser definido, no debe permitir dobles interpretaciones. o Debe ser general, es decir, soportar la mayoría de las variantes que se puedan presentar en la definición del problema. o Debe ser finito en tamaño y tiempo de ejecución. o Diseño del Algoritmo o Prueba de escritorio o Depuración Se denomina prueba de escritorio a la comprobación que se hace de un algoritmo para saber si está bien hecho. Esta prueba consiste en tomar datos específicos como entrada y seguir la secuencia indicada en el algoritmo hasta obtener un resultado, el análisis de estos resultados indicará si el algoritmo está correcto o si por el contrario hay necesidad de corregirlo o hacerle ajustes. Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 16 Electricidad y Electrónica Industrial Informática II III Metodología de la programación. Para el proceso de Algoritmos es necesario aprender a desarrollar un conjunto de elementos. Todos estos elementos con los cuales se construyen dichos algoritmos se basan en una disciplina llamada: Programación Estructurada. Empecemos por conocer las reglas para cambiar fórmulas matemáticas a expresiones válidas para la computadora, además de diferenciar constantes e identificadores y tipos de datos simples. Tipos De Datos Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carácter, tal como ‘b’, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de valores que puede tomar una variable. Tipos de Datos Simples Datos Numéricos: Permiten representar valores escalares de forma numérica, esto incluye a los números enteros y los reales. Este tipo de datos permiten realizar operaciones aritméticas comunes. Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 17 Electricidad y Electrónica Industrial Informática II Datos lógicos: Son aquellos que solo pueden tener dos valores (cierto o falso) ya que representan el resultado de una comparación entre otros datos (numéricos o alfanuméricos). Datos alfanuméricos (string): Es una secuencia de caracteres alfanuméricos que permiten representar valores identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc. Es posible representar números como alfanuméricos, pero estos pierden su propiedad matemática, es decir no es posible hacer operaciones con ellos. Este tipo de datos se representan encerrados entre comillas. identificadores Los identificadores representan los datos de un programa (constantes, variables, tipos de datos). Un identificador es una secuencia de caracteres que sirve para identificar una posición en la memoria de la computadora, que permite acceder a su contenido. Ejemplo: » Nombre » Num_hrs » Calif2 Reglas para formar un identificador • Debe comenzar con una letra (A a Z, mayúsculas o minúsculas) y no deben contener espacios en blanco. • Letras, dígitos y caracteres como la subraya ( _ ) están permitidos después del primer carácter. • La longitud de identificadores puede ser de varios caracteres. Pero es recomendable una longitud promedio de 8 caracteres. • El nombre del identificador debe dar una idea del valor que contiene. Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 18 Electricidad y Electrónica Industrial Informática II Qué son las constantes, las variables y las expresiones en la programación así como su clasificación. Constantes Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa. Ejemplo: pi = 3.1416 Variable Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecución de un proceso, su contenido puede cambiar durante la ejecución del programa. Para poder reconocer una variable en la memoria de la computadora, es necesario darle un nombre con el cual podamos identificarla dentro de un algoritmo. Ejemplo: area = pi * radio ^ 2 Las variables son : el radio, el area y la constate es pi Clasificación de las Variables Por su contenido • Variables Numéricas: Son aquellas en las cuales se almacenan valores numéricos, positivos o negativos, es decir almacenan números del 0 al 9, signos (+ y -) y el punto decimal. Ejemplo: iva = 0.15 pi = 3.1416 costo = 2500 Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 19 Electricidad y Electrónica Industrial Informática II • Variables Lógicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos representan el resultado de una comparación entre otros datos. • Variables Alfanuméricas: Esta formada por caracteres alfanuméricos (letras, números y caracteres especiales). Ejemplo: letra = ’a’ apellido = ’lopez’ direccion = ’Av. Libertad #190’ Por su uso • • • Variables de Trabajo: Variables que reciben el resultado de una operación matemática completa y que se usan normalmente dentro de un programa. Ejemplo: Suma = a + b /c Contadores: Se utilizan para llevar el control del numero de ocasiones en que se realiza una operación o se cumple una condición. Con los incrementos generalmente de uno en uno. Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente. Expresiones Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales. Por ejemplo: a + (b + 3) / c Cada expresión toma un valor que se determina tomando los valores de las variables y constantes implicadas y la ejecución de las operaciones indicadas. Una expresión consta de operadores y operandos. Según sea el tipo de datos que manipulan, se clasifican las expresiones en: • • • Aritméticas Relaciónales Lógicas Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 20 Electricidad y Electrónica Industrial Informática II Qué son los operadores y los operando, sus tipos y las prioridades de ejecución de los mismos. Operadores Son elementos que relacionan de forma diferente, los valores de una o mas variables y/o constantes. Es decir, los operadores nos permiten manipular valores. Operadores Aritméticos Los operadores aritméticos permiten la realización de operaciones matemáticas con los valores (variables y constantes). Los operadores aritméticos pueden ser utilizados con tipos de datos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real. Operadores Aritméticos + Suma - Resta * Multiplicación / División mod Modulo (residuo de la división entera) Ejemplos: Expresión Resultado 7/2 3.5 12 mod 7 5 Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 21 Electricidad y Electrónica Industrial Informática II Prioridad de los Operadores Aritméticos Todas las expresiones entre paréntesis se evalúan primero. Las expresiones con paréntesis anidados se evalúan de dentro a fuera, el paréntesis más interno se evalúa primero. Dentro de una misma expresión los operadores se evalúan en el siguiente orden: 1. ^ Exponenciación 2. *, /, mod Multiplicación, división, modulo. 3. +, - Suma y resta. Los operadores en una misma expresión con igual nivel de prioridad se evalúan de izquierda a derecha. Ejemplos: 4 + 2 * 5 = 14 3 + 5 * (10 - (2 + 4)) = 23 23 * 2 / 5 = 9.2 2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98 Operadores Relaciónales Se utilizan para establecer una relación entre dos valores. Luego compara estos valores entre si y esta comparación produce un resultado de certeza o falsedad (verdadero o falso). Los operadores relacionales comparan valores del mismo tipo (numéricos o cadenas). Estos tienen el mismo nivel de prioridad en su evaluación. Los operadores relaciónales tiene menor prioridad que los aritméticos. Tipos de operadores Relaciónales • • • • • • > Mayor que < Menor que > = Mayor o igual que < = Menor o igual que < > Diferente = Igual Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 22 Electricidad y Electrónica Industrial Informática II Ejemplos: Si a = 10, b = 20, c = 30 a+b>c Falso a-b<c Verdadero a-b=c Falso a * b < > c Verdadero Ejemplos no lógicos: a<b<c 10 < 20 < 30 T > 5 < 30 (no es lógico porque tiene diferentes operandos) Operadores Lógicos Estos operadores se utilizan para establecer relaciones entre valores lógicos. Estos valores pueden ser resultado de una expresión relacional. Tipos de operadores Lógicos And Y Or O Not Negación Ejemplo: Para los siguientes ejemplos T significa verdadero y F falso. Operador Not Operador Not Operando Resultado T F F T Operador And Operador And Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 23 Electricidad y Electrónica Industrial Informática II Operando1 T T F F Operador AND Operando2 T F T F Resultado T F F F Operador Or Operador Or Operando1 Operador Operando2 Resultado T Or T T T F T F T T F F F Prioridad de los Operadores Lógicos 1. Not 2. And 3. Or Prioridad de los Operadores en General 1. ( ) 2. ^ 3. *, /, Mod, Not 4. +, -, And 5. >, <, > =, < =, < >, =, Or Ejemplos: Sea: a = 10 b = 12 c = 13 d =10 Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 24 Electricidad y Electrónica Industrial Informática II Existen dos principales técnicas de diseño de algoritmos de programación, el Top Down y el Bottom Up. Top Down También conocida como de arriba-abajo y consiste en establecer una serie de niveles de mayor a menor complejidad (arriba-abajo) que den solución al problema. Consiste en efectuar una relación entre las etapas de la estructuración de forma que una etapa jerárquica y su inmediato inferior se relacionen mediante entradas y salidas de información. Este diseño consiste en una serie de descomposiciones sucesivas del problema inicial, que recibe el refinamiento progresivo del repertorio de instrucciones que van a formar parte del programa. La utilización de la técnica de diseño Top-Down tiene los siguientes objetivos básicos: • • • Simplificación del problema y de los subprogramas de cada descomposición. Las diferentes partes del problema pueden ser programadas de modo independiente e incluso por diferentes personas. El programa final queda estructurado en forma de bloque o módulos lo que hace mas sencilla su lectura y mantenimiento. Bottom Up El diseño ascendente se refiere a la identificación de aquellos procesos que Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 25 Electricidad y Electrónica Industrial Informática II necesitan computarizarse con forme vayan apareciendo, su análisis como sistema y su codificación, o bien, la adquisición de paquetes de software para satisfacer el problema inmediato. Cuando la programación se realiza internamente y haciendo un enfoque ascendente, es difícil llegar a integrar los subsistemas al grado tal de que el desempeño global, sea fluido. Los problemas de integración entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programación alcanza la fecha limite para la integración total del sistema. En esta fecha, ya se cuenta con muy poco tiempo, presupuesto o paciencia de los usuarios, como para corregir aquellas delicadas interfaces, que en un principio, se ignoran. Aunque cada subsistema parece ofrecer lo que se requiere, cuando se contempla al sistema como una entidad global, adolece de ciertas limitaciones por haber tomado un enfoque ascendente. Uno de ellos es la duplicación de esfuerzos para acceder el software y mas aún al introducir los datos. Otro es, que se introducen al sistema muchos datos carentes de valor. Un tercero y tal vez el mas serio inconveniente del enfoque ascendente, es que los objetivos globales de la organización no fueron considerados y en consecuencia no se satisfacen. Entonces… La diferencia entre estas dos técnicas de programación se fundamenta en el resultado que presentan frente a un problema dado. Imagine una empresa, la cual se compone de varios departamentos (contabilidad, mercadeo, …), en cada uno de ellos se fueron presentando problemas a los cuales se le dieron una solución basados en un enfoque ascendente (Bottom Up): creando programas que satisfacían sólo el problema que se presentaba. Cuando la empresa decidió integrar un sistema global para suplir todas las necesidades de todos los departamentos se dio cuenta que cada una de las soluciones presentadas no era compatible la una con la otra, no representaba una globalidad, característica principal de los sistemas. Como no hubo un previo análisis, diseño de una solución a nivel global en todos sus departamentos, centralización de información, que son características propias de un diseño Descendente (Top Down) y características fundamentales de los sistemas; la empresa no pudo satisfacer su necesidad a nivel global. La creación de algoritmos es basado sobre la técnica descendente, la cual brinda el diseño ideal para la solución de un problema. Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 26 Electricidad y Electrónica Industrial Informática II IV Lenguajes de programación. IV. Lenguajes de programación. Al hablar de C, no hablamos de una tecnología nueva, sino de un lenguaje que lleva mucho tiempo funcionando. Quizás en posteriores artículos, veamos su historia, sus orígenes... por el momento vamos a seguir comentando aspectos básicos para tener una vista general de él. También, deberemos tener en cuenta que se trata de un lenguaje Case Sensitive, es decir, que diferencia las mayúsculas y las minúsculas, no siendo igual PEPE, pepe y Pepe. A la hora de programar hay que tenerlo en cuenta, pues de lo contrario, será una gran fuente de problemas. Además, todas las instrucciones han de terminar en ";", aspecto que por olvido también suele causar demasiados errores tontos. El lenguaje C inicialmente fue creado para la programación de -Sistemas operativos -Intérpretes -Editores -Ensambladores -Compiladores -Administradores de bases de datos. Actualmente, debido a sus caraterísticas, puede ser utilizado paratodo tipo de programas Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 27 Electricidad y Electrónica Industrial Informática II ELEMENTOS GENERALES DE UN PROGRAMA EN C Aunque cada uno de los programas son distintos, todos tienen características comunes. Los elementos de un programa en C son los siguientes: Comentarios Inclusión de archivos main() { variables locales flujo de sentencias } A continuación veremos algunos ejemplos de programas sencillos en lenguaje C. La mejor forma de aprender un lenguaje es programando con él. El programa más sencillo que se puede escribir en C es el siguiente: main( ) { } Un programa algo más complicado es el siguiente: #include <stdio.h> main( ) { printf("Hola amigos!\n"); } Con él visualizamos el mensaje Hola amigos! en el terminal. En la primera línea indica que se tengan en cuenta las funciones y tipos definidos en la librería stdio (standard input/output). Estas definiciones se encuentran en el fichero header stdio.h. Ahora, en la función main se incluye una única sentencia que llama a la Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 28 Electricidad y Electrónica Industrial Informática II función printf. Esta toma como argumento una cadena de caracteres, que se imprimen van encerradas entre dobles comillas " ". El símbolo \n indica un cambio de línea. Hay un grupo de símbolos, que son tratados como caracteres individuales, que especifican algunos caracteres especiales del código ASCII. Los más importantes son: Código Descripción \a Alerta \b Espacio atrás \f Salto de página \n Salto de línea \r Retorno de carro \t Tabulación horizontal \v Tabulación vertical \\ Barra invertida \' Comilla simple \" Comillas dobles \OOO Visualiza un carácter cuyo código ASCII es OOO en octal \xHHH Visualiza un carácter cuyo código ASCII es HHH en hexadecimal Un programa C puede estar formado por diferentes módulos o fuentes. Es conveniente mantener los fuentes de un tamaño no muy grande, para que la compilación sea rápida. También, al dividirse un programa en partes, puede facilitar la legibilidad del programa y su estructuración. Los diferentes fuentes son compilados de forma separada, únicamente los fuentes que han sido modificados desde la última compilación, y después combinados con las librerías necesarias para formar el programa en su versión ejecutable Tipos básicos y variables Expresiones y operadores Los distintos operadores permiten formar expresiones tanto aritméticas como lógicas. Los operadores aritméticos y lógicos son: Operadores +, ++, -*, /, % >>, << & | Universidad Tecnológica de Puebla Descripción Suma, resta Incremento, decremento Multiplicación, división, módulo Rotación de bits a la derecha, izquierda. AND booleano OR booleano Lic. Jorge Cerezo Sánchez Pagina 29 Electricidad y Electrónica Industrial ^ ~ ! ==, != &&, || <, <= >, >= Informática II XOR booleano Complemento a 1 Complemento a 2, NOT lógico Igualdad, desigualdad AND, OR lógico Menor, menor o igual Mayor, mayor o igual En estos operadores deben tenerse en cuenta la precedencia de operadores y las reglas de asociatividad, que son las normales en la mayoría de lenguajes. Se debe consultar el manual de referencia para obtener una explicación detallada. Además hay toda una serie de operadores aritméticos con asignación, como pueden ser += y ^=. En la evaluación de expresiones lógicas, los compiladores normalmente utilizan técnicas de evaluación rápida. Para decidir si una expresión lógica es cierta o falsa muchas veces no es necesario evaluarla completamente. Por ejemplo una expresión formada <exp1> || <exp2>, el compilador evalúa primero <exp1> y si es cierta, no evalúa <exp2>. Por ello se deben evitar construcciones en las que se modifiquen valores de datos en la propia expresión, pues su comportamiento puede depender de la implementación del compilador o de la optimización utilizada en una compilación o en otra. Estos son errores que se pueden cometer fácilmente en C ya que una asignación es también una expresión. Debemos evitar: if (( x++ > 3 ) || ( x < y )) y escribir en su lugar: x++; if (( x > 3 ) || ( x < y )) Hay un tipo especial de expresión en C que se denomina expresión condicional y está representada por los operadores ? : . Su utilización es como sigue: <e> ? <x> : <y>. Se evalúa si e entonces x; si no, y. int mayor ( int a, int b ) { return ( a > b ) ? TRUE : FALSE; } waste_time () { float a, b = 0.0; ( b > 0.0 ) ? sin(M_PI / 8) : cos(M_PI / 4); } Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 30 Electricidad y Electrónica Industrial Informática II Las variables son definidas utilizando un identificador de tipo seguido del nombre de la variable. Veamos el siguiente programa: #include <stdio.h> main() { float cels, farh; farh = 35.0; cels = 5.0 * ( farh - 32.0 ) / 9.0; printf("-> %f F son %f C\n", farh, cels ); } En el programa anterior se definen dos variables float, se asigna un valor a la primera y se calcula la segunda mediante una expresión aritmética. Las asignaciones en C también son una expresión, por lo que se pueden utilizar como parte de otra expresión, pero según que prácticas de este tipo no son muy recomendables ya que reducen la legibilidad del programa. En la instrucción printf, el símbolo %f indica que se imprime un número en coma flotante. Hay un tipo muy importante que se representa por void que puede significar dos cosas distintas, según su utilización. Puede significar nada, o sea que si una función devuelve un valor de tipo void no devuelve ningún resultado, o puede significar cualquier cosa, como puede ser un puntero a void es un puntero genérico a cualquier tipo de dato. Más adelante veremos su utilización. Algunos ejemplos básicos de la programación en C serian los siguientes: a)/*Programa que despliega un mensaje de bienvenida en la pantalla*/ #include<stdio.h> #include<conio.h> void main() { clrscr(); gotoxy(20,10); Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 31 Electricidad y Electrónica Industrial Informática II printf("BIENVENIDO AL CURSO DE C ESTANDAR"); delay(2500); } b) /*Programa que calcula el número de dias vividos*/ #include<stdio.h> #include<conio.h> void main() { char nombre[50]; int edad; clrscr(); printf("¿Cómo te llamas?\n "); scanf("%s",nombre); printf("¿Cuántos años tienes?\n"); scanf("%i",&edad); edad=edad*365; gotoxy(5,10); printf("%s, has vivido %i dias",nombre,edad); gotoxy(40,22); printf("Pulsa cualquier tecla para terminar..."); getch(); Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 32 Electricidad y Electrónica Industrial Informática II } c) /*Programa que saca el promedio de 3 números*/ #include<stdio.h> #include<conio.h> void main() { float numero; float promedio=0; clrscr(); printf("Dame el primer número: "); scanf("%f",&numero); promedio+=numero; printf("Dame el segundo número: "); scanf("%f",&numero); promedio+=numero; printf("Dame el tercer número: "); scanf("%f",&numero); promedio+=numero; promedio=promedio/3; printf("El promedio es %f",promedio); gotoxy(40,22); printf("Presione cualquier tecla para terminar..."); getch(); Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 33 Electricidad y Electrónica Industrial Informática II } d) /*Programa que convierte un número decimal entero a octal*/ #include<stdio.h> #include<conio.h> void main() { int numero; clrscr(); printf("Numero entero en decimal: "); scanf("%i", &numero); printf("\n\nSu representacion en octal es %o"); gotoxy(40,22); printf("Presione cualquier tecla para terminar..."); getch(); } e) /*Programa que manda un mensaje de advertencia */ #include <dos.h> #include<conio.h> int main(void) { clrscr(); gotoxy(28,11); Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 34 Electricidad y Electrónica Industrial Informática II printf("¡ P E L I G R O ! "); sound(250); delay(600); sound(80); delay(600); delay(600); nosound(); return 0; } Funciones Un programa C está formado por un conjunto de funciones que al menos contiene la función main. Una función se declara con el nombre de la función precedido del tipo de valor que retorna y una lista de argumentos encerrados entre paréntesis. El cuerpo de la función está formado por un conjunto de declaraciones y de sentencias comprendidas entre llaves. Veamos un ejemplo de utilización de funciones: #include <stdio.h> #define VALOR 5 #define FACT 120 int fact_i ( int v ) { int r = 1, i = 0; while ( i <= v ) { r = r * i; i = i + 1; } return r; } Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 35 Electricidad y Electrónica Industrial Informática II int fact_r ( int v ) { if ( v == 0 ) return 1; else return v * fact_r(v-1); } main() { int r, valor = VALOR; if ( (r = fact_i(valor)) != fact_r(valor) ) printf("Codificación errónea!!.\n"); else if ( r == FACT ) printf("Codificación correcta.\n"); else printf("Algo falla!!.\n"); } Se definen dos funciones, fact_i y fact_r, además de la función main. Ambas toman como parámetro un valor entero y devuelven otro entero. La primera calcula el factorial de un número de forma iterativa, mientras que la segunda hace lo mismo de forma recursiva. Ciclos y sentencias: Sentencia if La sentencia de control básica es if (<e>) then <s> else <t>. En ella se evalúa una expresión condicional y si se cumple, se ejecuta la sentencia s; si no, se ejecuta la sentencia t. La segunda parte de la condición, else <t>, es opcional. int cero ( double a ) { if ( a == 0.0 ) return (TRUE); else return (FALSE); } En el caso que <e> no sea una expresión condicional y sea aritmética, se considera falso si vale 0; y si no, verdadero. Hay casos en los que se deben evaluar múltiples condiciones y únicamente se debe evaluar una de ellas. Sentencia switch Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 36 Electricidad y Electrónica Industrial Informática II Se puede programar con un grupo de sentencias if then else anidadas, aunque ello puede ser farragoso y de complicada lectura. Para evitarlo nos puede ayudar la sentencia switch. Su utilización es: switch (valor) { case valor1: <sentencias> case valor2: <sentencias> ... default: <sentencias> } Cuando se encuentra una sentencia case que concuerda con el valor del switch se ejecutan las sentencias que le siguen y todas las demás a partir de ahí, a no ser que se introduzca una sentencia break para salir de la sentencia switch. Por ejemplo: ver_opcion ( char c ) { switch(c){ case 'a': printf("Op A\n"); break; case 'b': printf("Op B\n"); break; case 'c': case 'd': printf("Op C o D\n"); break; default: printf("Op ?\n"); } } Sentencia while Otras sentencias de control de flujo son las que nos permiten realizar iteraciones sobre un conjunto de sentencias. En C tenemos tres formas principales de realizar iteraciones. La sentencia while (<e>) <s> es seguramente la más utilizada. La sentencia, o grupo de sentencias <s> se ejecuta mientras la evaluación de la expresión <e> sea verdadera. long raiz ( long valor ) { long r = 1; while ( r * r <= valor ) r++; Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 37 Electricidad y Electrónica Industrial Informática II return r; } Una variación de la sentencia while es: do <s> while ( <e> ); En ella la sentencia se ejecuta al menos una vez, antes de que se evalúe la expresión condicional. Sentencia for Otra sentencia iterativa, que permite inicializar los controles del bucle es la sentencia for ( <i>; <e>; <p> ) <s>. La sentencia for se puede escribir también como: <i>; while ( <e> ) { <s>; <p>; } El ejemplo anterior se podría escribir como: long raiz ( long valor ) { long r; for ( r = 1; r * r <= valor; r++ ); return r; } break y continue Otras sentencias interesantes, aunque menos utilizadas son break y continue. break provoca que se termine la ejecución de una iteración o para salir de la sentencia switch, como ya hemos visto. En cambio, continue provoca que se comience una nueva iteración, evaluándose la expresión de control. Veamos dos ejemplos: void final_countdown (void) { int count = 10; while ( count--> 1 ) Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 38 Electricidad y Electrónica Industrial Informática II { if ( count == 4 ) start_engines(); if ( status() == WARNING ) break; printf("%d ", count ); } if ( count == 0 ){ launch(); printf("Shuttle launched\n"); } else { printf("WARNING condition received.\n"); printf("Count held at T - %d\n", count ); } } d2 () { int f; for ( f = 1; f <= 50; f++ ) { if ( f % 2 == 0 ) continue; printf("%d",f ); } } Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 39 Electricidad y Electrónica Industrial Informática II V Canales de comunicación. Usando el puerto paralelo de una PC Proyecto: Interfaz para el Puerto Paralelo Introducción: El puerto paralelo de una PC es ideal para ser usado como herramienta de control de motores, relés, LED's, etc. El mismo posee un bus de datos de 8 bits (Pin 2 a 9) y muchas señales de control, algunas de salida y otras de entrada que también pueden ser usadas fácilmente. Las PC's generalmente poseen solo uno de estos puertos (LPT1) pero con muy poco dinero se le puede adicionar una tarjeta con un segundo puerto paralelo (LPT2). En reglas generales la dirección hexadecimal del puerto LPT1 es igual a 0x378 (888 en decimal) y 0x278 (632 en decimal) para el LPT2. Esto se puede verificar fácilmente en el setup de la PC o bien en el cartel que generalmente la PC muestra en el momento del booteo. Puede darse el caso que el LPT1 asuma la dirección 0x3BC (956 en decimal) y el LPT2 0x378, en ese caso habrá que tratar de corregir el setup y/o los jumper de las tarjetas en caso que sea posible. De lo contrario se puede modificar el software que veremos mas adelante para aceptar esas direcciones. Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 40 Electricidad y Electrónica Industrial Informática II Breve descripción del puerto paralelo: El puerto paralelo de un PC posee un conector de salida del tipo DB25 hembra cuyo diagrama y señales utilizadas podemos ver en la siguiente figura: Si deseamos escribir un dato en el bus de salida de datos (pin 2 a 9) solo debemos escribir el byte correspondiente en la dirección hexadecimal 0X378 (888 en decimal) cuando trabajamos con el LPT1 y 0x278 (632 en decimal) cuando trabajamos con el LPT2. Los distintos pins (bits) de salida correspondientes al bus de datos no pueden ser escritos en forma independiente, por lo que siempre que se desee modificar uno se deberán escribir los ocho bits nuevamente. Controlando un Motor Paso a Paso mediante la interfaz IPP01 Proyecto: Manejo de un stepper motor con la Interfaz para Puerto Paralelo Introducción: El propósito de este proyecto es familiarizarse con el manejo y comportamiento de los motores paso a paso. Para ello utilizaremos la Interfaz para el puerto paralelo Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 41 Electricidad y Electrónica Industrial Informática II Diagrama de conexionado: En la siguiente figura se puede ver el diagrama interno y las salidas correspondientes a un clásico motor P-P Unipolar: Los cinco cables de salida deben conectarse al puerto de salida High Power de la interfaz para puerto paralelo (HP0 a HP6) de la siguiente manera: • • • • • Universidad Tecnológica de Puebla Común --------- Vdd A ----------------- HP0 B ----------------- HP1 C ----------------- HP2 D ----------------- HP3 Lic. Jorge Cerezo Sánchez Pagina 42 Electricidad y Electrónica Industrial Informática II Apéndices Software de control Para empezar, aqui sencillo un programa en C++ para un motor unipolar de 4 fases y 5 cables, el circuito controlador es el circuito para excitación de una bobina en forma secuencial, y esta formado principalmente por un ULN2003, un diodo zener de 15 voltios y cuatro lineas de datos tomadas de los pines de datos del puerto paralelo DB-25 El programa mediante el teclado hará girar el motor ya sea en sentido horario o anti horario. //DECLARACION DE LIBRERIAS y VARIABLES// #include<STDIO.H > // requerido para las funciones printf, getch #include<CONIO.H >// requerido para las funciones outp, inp #define Data 0x378 // o 0x278 o 0x3BC //DECLARACION DE FUNCIONES Y/O PROCEDIMIENTOS// void Delay(void) //rutina que genera un tiempo de espera entre cada paso// { int i; for (i = 1; i <= 100000; i++); //el tiempo varia segun el tipo de computador y la velocidad del microprocesador// } void KeyWait(void) //rutina que hace que el programa este parado mientras no se presione una tecla// { printf(" "); while (!getch()); //no hace nada hasta que se presione una tecla// printf("\n"); } Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 43 Electricidad y Electrónica Industrial Informática II //PROGRAMA PRINCIPAL// void main(void) { int i; printf("\n"); printf("Software de control de motor de pasos mediante el puerto paralelo\n"); printf("======================================\n"); printf("\n"); outp(Data, 0x00); //asumiendo lógica positiva, desenergizamos inicialmente todas las bobinas// printf("Inicio con todas las bobinas desactivadas"); KeyWait(); //procedimiento que espera hasta que no se haya presionado una tecla// printf("Sentido horario"); //una vez presionada la tecla, se ejecutaran 25 pasos en sentido horario// for (i=1; i<=25; i++) { outp(Data,0x08); Delay(); outp(Data,0x04); Delay(); outp(Data,0x02); Delay(); outp(Data,0x01); Delay(); printf("."); } KeyWait(); //espera hasta que no se presione otra tecla// printf("Sentido antihorario"); //luego de presionada la tecla, se ejecutan 25 pasos, pero esta vez en sentido antihorario// for (i=1; i<=25; i++) { outp(Data, 0x01); Delay(); outp(Data, 0x02); Delay(); outp(Data, 0x04); Delay(); outp(Data, 0x08); Delay(); printf("."); } Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 44 Electricidad y Electrónica Industrial Informática II KeyWait(); //espera que se presione una tecla para apagar el sistema y desenergizar las bobinas// outp(Data, 0x00); //desenergiza las bobinas// printf("Todo desactivado"); KeyWait(); //para salir del programa// } Universidad Tecnológica de Puebla Lic. Jorge Cerezo Sánchez Pagina 45