Circuito con alimentacin externa y etapa separadora Circuito bidireccional con alimentacin externa Display de 7 segmentos Actividades
Circuito sin alimentacin externa Se trata de un circuito muy sencillo que usa un mnimo de componentes y proporciona un test funcional de 8 bits. Cada bit de la entrada puede ser individualmente controlado y visualizado en los LED de salida. Los diodos LED que actan de display se alimentan nicamente con la corriente proporcionada por las propias salidas del puerto. Sera preferible alimentar los LED y utilizar la corriente absorbida para iluminarlos, pero el conector no proporciona una seal de alimentacin (Vcc), de modo que se necesitara una fuente externa. Elctricamente, el puerto paralelo entrega seales TTL y como tal, tericamente, se le puede conectar cualquier dispositivo que cumpla con los niveles de voltaje especficos de la lgica TTL, sin embargo el hardware del puerto paralelo est muy limitado en cuanto a su capacidad de manejo de corriente, por sta razn se debe ser muy cuidadoso con el manejo de las seales del puerto: un cortocircuito puede daar permanentemente la tarjeta madre del PC. Sin embargo, experimentalmente se comprueba que en la mayora de los PC el puerto proporciona corriente suficiente para una clara indicacin visual de los LED. Las lneas de datos (D0- D7, pines 2-9) se utilizan como lneas de salida, e iluminan los LED cuando en ellas se fija por software un 1 lgico (+5 V). Cuando se fija un 0 lgico, los LED se apagan. Como entradas se utilizan, como nibble (semibyte) bajo, las cuatro lneas asociados al registro de control (C0, C1, C2 y C3, pines 1, 14, 16 y 17) y, como nibble alto, cuatro de las lneas asociadas al registro de estado (S4, S5, S6 y S7, pines 13, 12, 10 y 11). Obsrvese que las lneas de control se utilizan normalmente como salidas. Sin embargo, aqu deben ser configuradas como entradas. Obsrvese, asimismo, que cuatro de las lneas de entrada se corresponden con bits que utilizan lgica negativa (C0, C1, C3 y S7). Esto habr de tenerse en cuenta cuando se realice el programa de control de esta interfaz. Los detalles sobre el montaje de ste y los posteriores circuitos se pueden consultar en Actividades. Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 1 de 16 19/09/2014 11:19 p.m.
Circuito con alimentacin externa Fijmonos ahora solamente en una de las lneas de entrada y en una de las lneas de salida. Un circuito como el siguiente utiliza una fuente externa de +5 V para alimentar los diodos LED y las seales de entrada. Un 1 lgico en D7 (bit 7 del puerto de DATOS) produce que el LED se apague. Un 0 lgico produce la iluminacin del LED. El interruptor normalmente abierto S produce que aparezca un 1 lgico (+5 V) en la entrada Busy (registro de ESTADO, S7). Cuando se cierra S un 0 lgico (GND) se aplica a la entrada Busy. Un circuito como el precedente para las 8 lneas de entrada y salida es un alternativa al propuesto en la seccin anterior.
Circuito con alimentacin externa y etapa separadora Para disminuir lo ms posible el riesgo de daos al puerto se puede utilizar un circuito integrado 74LS244 como etapa separadora en las lneas de salida. Al mismo tiempo se mejora la capacidad de manejo de corriente, de forma que se pueden conectar sin riesgo la serie de diodos LED que indican la actividad en las lneas de datos del puerto paralelo. El circuito se detalla en el siguiente diagrama: Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 2 de 16 19/09/2014 11:19 p.m. Por cada lnea de entrada que tomamos directamente del puerto paralelo existe una etapa amplificadora-separadora dentro del circuito integrado 74LS244 que nos permite trabajar con una tasa de entrega de corriente suficiente para desplegar en los diodos emisores de luz la informacin escrita en las lneas de datos del puerto. Adems es posible habilitar deshabilitar el despliegue del nibble de orden inferior superior del byte escrito en el puerto. Colocando en un nivel lgico alto el pin 1 del CI 74LS244 inhabilitamos el despliegue del nibble de orden bajo y un nivel lgico alto en la patita 19 evita el despliegue del nibble de orden alto. Por comodidad, se conectan las patitas 1 y 19 permanentemente a tierra de tal manera que sea posible visualizar la actividad en los diodos LED. Este circuito, al igual que el anterior y el siguiente, necesita de alimentacin externa. Se puede alimentar directamente mediante una fuente de +5 V, o construir sta usando una pila de 9 V o un adaptador universal, y un regulador de voltaje 7805. El 7805 puede regular cualquier voltaje de entre 7 y 25 V c.c. hasta los 5 V que precisa el circuito
Circuito bidireccional con alimentacin externa Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 3 de 16 19/09/2014 11:19 p.m. El siguiente circuito aprovecha la capacidad bidireccional del puerto paralelo de la prctica totalidad de los PCs actuales. As, las 8 lneas de datos del puerto (D0- D8) se pueden utilizar a modo de un bus de datos que, en ocasiones contiene los valores que sern ledos por la computadora y, otras veces, transporta los datos que sta enva a la salida digital. No es preciso ahora utilizar las lneas de estado y de control del puerto a modo de entradas, como se haca en el circuito sin alimentacin externa. El esquema se observa en la siguiente figura:
Este circuito utiliza los siguientes CI: 74LS573: un registro octal latch D transparente usado como puerto de salida para iluminar los diodos LED, o cualquier dispositivo al que se le quieran enviar seales digitales. 74LS245: un transceptor octal bidireccional que proporciona un puerto de entrada de 8 lneas; toma datos de entrada de 8 interruptores o de cualquier dispositivo desde el cual se quiera leer informacin digital. Ambos integrados se controlan mediante el bit C0 del registro de control. Cuando el pin 1 se halla en alto, los datos escritos por el puerto se transfieren a los LED mediante el 74573, mientras que el 74245 est aislado del bus de datos. Cuando el pin 1 est bajando, los datos a su entrada se conservan en la salida. Cuando el pin 1 est bajo el 74245 se habilita y los datos presentes en su entrada se transfieren a su salida y pueden ser ledos por el programa. El bit C5 se utiliza como control de las operaciones de lectura/escritura del puerto bidireccional. El programa debe fijar tanto C0 como C5 a 0 para realizar una escritura (es decir, debe escribir un valor decimal 0 el el registro de control). Para llevar a cabo una lectura ambos bits deben ser establecidos a 1 (es decir, debe escribir un valor hexadecimal 0x21, o decimal 33, en el registro de control).
Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 4 de 16 19/09/2014 11:19 p.m. Display de 7 segmentos Una posibilidad es sustituir en los montajes anteriores el sistema de visualizacin mediante 8 diodos LED por un display numrico de 7 segmentos ms un punto decimal. El circuito resulta as ms compacto. Si se trata de un display de nodo comn hay que alimentar con Vcc= +5 V las dos lneas sealadas como comunes en la figura, y es preciso poner a tierra la lnea correspondiente al segmento que se quiere iluminar. Si se trata de un display de ctodo comn, hay que alimentar con +5 V el segmento que se desea iluminar y poner a tierra las dos lneas comunes. As, en un display de ctodo comn, las lneas 1-8 se pueden conectar directamente a las lneas de datos del puerto (pines 2-9 del conector DB25), y las dos lneas comunes se pueden conectar a cualquiera de las patillas de tierra del conector, por ejemplo, la 25.
Actividades Montaje de los circuitos anteriores Los circuitos se pueden montar sobre una placa tipo "protoboard" y utilizar cable rgido para realizar las conexiones necesarias entre los componentes. Placa "protoboard" simple Las entradas/salidas del circuito hacia el PC se pueden reunir en un conector DB25 macho unido a la placa por lneas de cable rgido o de cable plano. A su vez, el conector macho se puede unir directamente al conector hembra del PC mediante un cable de extensin paralelo, lo que normalmente resulta ms cmodo para acceder a la parte trasera del PC donde se sita el conector hembra. Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 5 de 16 19/09/2014 11:19 p.m. Conector DB25 macho con lneas de cable rgido. Otra posibilidad, utilizar cable plano. Cable de extensin paralelo. Para simplificar los circuitos que utilizan interruptores a modo de entradas digitales, stos se pueden reunir en un nico DIP switch de ocho posiciones. Tambin, por una cuestin de orden, las lneas que proviene del conector macho pueden introducirse en la placa mediante regletas apilables como las mostradas en la figura.
DIP switch (izquierda) y regletas (derecha). Conector DB25 macho con lneas de salida, entrada y tierra finalizadas en regletas. Ejemplo de circuito terminado, conectado al PC. Naturalmente, una vez finalizado el circuito, lo ms recomendable es probar el correcto funcionamiento del mismo antes de conectarlo al puerto paralelo del PC. Una vez ensamblado, se puede alimentar con una fuente regulada de +5 V y conectar temporalmente los pines del conector DB25 macho a tierra o a + 5 V, segn se necesite (un adaptador universal estabilizado, que da normalmente tensiones entre 1.5 V y 12 V, es una solucin vlida y barata, y sirve tambin para los circuitos que requieren alimentacin externa, los que utilizan motores de distintas clases, etc). Una vez que se ha verificado el correcto funcionamiento del circuito, est listo para conectarlo al puerto paralelo del PC. Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 6 de 16 19/09/2014 11:19 p.m. Para conectar el circuito al puerto apguese en primer lugar la computadora. Conctese el cable al puerto paralelo asegurndose que el conector est firme en su lugar. Alimntese el circuito (si procede) y por ltimo encindase la computadora. Por regla general, el circuito de restablecimiento de la computadora coloca inicialmente en las lneas de datos del puerto paralelo un valor igual a 0x0h. Por tanto, todos los diodos deben estar apagados una vez que la computadora ha terminado su proceso de arranque. Sin embargo, si algn diodo permanece encendido esto no indica necesariamente un fallo, y es responsabilidad del software de control que se escriba inicializarlo con un valor adecuado antes de realizar cualquier otra operacin. Ejemplo de montaje del circuito sin alimentacin externa, al que tambin se le ha aadido el display de 7 segmentos.
Programas de control del interfaz bsico de E/S Una vez montada la parte de salidas del circuito sin alimentacin externa, realcese un programa en QBasic que complete las siguientes operaciones: Iluminar secuencialmente los LED, desde el LSB hasta el MSB, con una temporizacin de 1 s. Realcese el mismo programa en TurboC.
Una vez montado completamente el circuito sin alimentacin externa o con alimentacin y etapa separadora, realcese un programa en QBasic que complete las siguientes operaciones: control de slo salidas: mostrar en los LED la codificacin binaria de un byte (entero entre 0-255) introducido desde teclado. control de slo entradas: detectar continuamente el estado de las entradas digitales y mostrar en pantalla el valor entero del byte correspondiente. interaccin de entradas-salidas: detectar continuamente el estado de las entradas y actuar sobre las salidas de la siguiente manera: - si el valor de la entrada es menor que 16, mostrar en las salidas el valor de la entrada. - si la entrada est entre 16 y 32 realizar un destello en las salidas impares. - si la entrada est entre 32 y 64 realizar un destello en las salidas pares. - si la entrada est entre 64 y 128 producir una intermitencia en todas las salidas durante 5 s. - si la entrada es < 256 realizar un destello que se desplace alternativamente de derecha a izquierda. Soluciones: QBasic Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 7 de 16 19/09/2014 11:19 p.m. ' ENT_SAL. BAS ' ' CONTROL DE ACTUADORES Y SENSORES MEDI ANTE PUERTO PARALELO ' ' Pr ogr amaci n de l a i nt er f ace b si ca de 8 LED y 8 mi cr oi nt er r upt or es ' Act uador es - LED en l as 8 l neas de DATOS: ' 7 6 5 4 3 2 1 0 ' D7 D6 D5 D4 D3 D2 D1 D0 ' ' Sensor es - DI P swi t ch de 8 pos. en 4 l neas de CONTROL y 4 de ESTADO: ' 7 6 5 4 3 2 1 0 ' S7# S6 S5 S4 C3# C2 C1# C0# ' ' 2002 V ct or R. Gonzl ez DECLARE SUB Esper a ( segundos AS SI NGLE) ' Di r ecci ones del puer t o par al el o CONST LPTBASE = &H378 CONST DATOS = LPTBASE CONST ESTADO = LPTBASE + 1 CONST CONTROL = LPTBASE + 2 DI M byt e AS I NTEGER DI M i AS I NTEGER, j AS I NTEGER ' Cont r ol de act uador es di gi t al es ( 8 di odos LED en el puer t o de DATOS) PRI NT " Cont r ol de sal i das di gi t al es ( val or > 255 par a f i n) : " byt e = 0 ' La pr i mer a vez apaga l os di odos ( env a 0) DO WHI LE byt e < 256 OUT DATOS, byt e I NPUT " I nt r oduce el byt e que se envi ar al puer t o: " , byt e LOOP ' Cont r ol de sensor es di gi t al es ( 8 mi cr oi nt er r upt or es - DI P swi t ch- ' 4 en l neas de CONTROL y 4 en l neas de ESTADO) PRI NT " Cont r ol de ent r adas di gi t al es ( f <i nt r o> par a f i n) : " OUT CONTROL, &H4 ' Pone CONTROL en modo ent r ada ( si posi bl e) DO byt e = ( ( I NP( CONTROL) AND &HF) OR ( I NP( ESTADO) AND &HF0) ) XOR &H8B PRI NT " Byt e l e do del puer t o: " ; byt e LOOP UNTI L I NKEY$ = " f " ' I nt er acci n de act uador es y sensor es PRI NT " Real i ment aci n de l as sal i das con l as ent r adas di gi t al es ( f <i nt r o> par a f i n) : " PRI NT " ent r ada < 16 = di r i ge l a ent r ada a l a sal i da" PRI NT " ent r ada < 32 = dest el l o i mpar es" PRI NT " ent r ada < 64 = dest el l o par es" PRI NT " ent r ada < 128 = i nt er mi t enci a 5 s" PRI NT " ent r ada < 256 = dest el l o pr ogr esi vo" DO ' Toma ni bbl e baj o de CONTROl y al t o de ESTADO ' e i nvi er t e bi t s 0, 1, 3 y 7 byt e = ( ( I NP( CONTROL) AND &HF) OR ( I NP( ESTADO) AND &HF0) ) XOR &H8B PRI NT " Byt e l e do: " ; byt e SELECT CASE byt e CASE I S < 16 ' Env a el val or de l a ent r ada a l a sal i da OUT DATOS, byt e CASE I S < 32 ' Real i za un dest el l o en l as sal i das i mpar es OUT DATOS, 85 ' Enci ende Esper a . 5 OUT DATOS, 0 ' Apaga CASE I S < 64 ' Real i za un dest el l o en l as sal i das par es OUT DATOS, 170 ' Enci ende Esper a . 5 Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 8 de 16 19/09/2014 11:19 p.m. OUT DATOS, 0 ' Apaga CASE I S < 128 ' I nt er mi t enci a dur ant e 5 segundos FOR i = 1 TO 10 OUT DATOS, 0: Esper a . 25 ' Apaga OUT DATOS, 255: Esper a . 25 ' Enci ende t odos NEXT i CASE ELSE ' Dest el l o pr ogr esi vo FOR i = 1 TO 10 j = 7 DO OUT DATOS, j Esper a . 05 j = j * 2 LOOP WHI LE j <= 224 j = 224 DO OUT DATOS, j Esper a . 05 j = j / 2 LOOP WHI LE j >= 7 NEXT i END SELECT LOOP UNTI L I NKEY$ = " f " END ' Rut i na de esper a SUB Esper a ( segundos AS SI NGLE) t I ni ! = TI MER DO WHI LE TI MER - t I ni ! < segundos: LOOP END SUB En la parte de control de slo las entradas digitales existen dos sentencias, indicadas con negrita en el cuadro siguiente: OUT CONTROL, &H4 ' Pone CONTROL en modo ent r ada ( si posi bl e) DO byte = ( (INP(CONTROL) AND &HF) OR (INP(ESTADO) AND &HF0) ) XOR &H8B PRI NT " Byt e l e do del puer t o: " ; byt e LOOP UNTI L I NKEY$ = " f " y que merecen una explicacin detallada. La primera de ellas: OUT CONTROL, &H4 permite utilizar las cuatro lneas de control como lneas de entrada. Recurdese que, estrictamente, son de salida. Sin embargo, al poner las lneas en alto escribiendo 0100, es decir, 0x04, en LPT_BASE+2, la direccin del registro de control (bits C3- C2- C1- C0), se hace que las salidas "floten" y que un dispositivo externo pueda forzar a bajo alguna de las salidas. Esto podra no ser posible en todos los puertos. Sin embargo, en algn puerto que en principio aparentemente no es posible, se consigue si lo configuramos en modo SPP o en la emulacin SPP del modo ECP. La segunda: byte = ( (INP(CONTROL) AND &HF) OR (INP(ESTADO) AND &HF0) ) XOR &H8B , lee un byte de las entradas del interface de la siguiente manera: extrae los cuatro bits bajos del registro de control (bits C3- C2- C1- C0), los cuatro bits altos del registro de estado (bits S7- S6- S5- S4), los concatena e invierte todos los bits que sea necesario (dado que los bits C3, C1, C0 y S7 se utilizan en lgica negativa). Para ello, se utilizan los operadores de manipulacin de bits AND, OR y XOR que proporciona Qbasic. La operacin se explica paso a paso y grficamente en lo que sigue. En las tablas que figuran a continuacin una X o una Y indican bits que se necesitan finalmente mientras que ? indica bits prescindibles. Asimismo, el color azul indica bits en lgica positiva mientras que el color rojo y el suprarrayado indican bits en lgica negativa (estos ltimos necesitarn ser invertidos). Extraccin del semi-byte bajo del registro de control: Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 9 de 16 19/09/2014 11:19 p.m. INP(CONTROL) AND &HF I NP( CONTROL) ? ? ? ? X X X X &HF 0 0 0 0 1 1 1 1 AND 0 0 0 0 X X X X Extraccin del semi-byte alto del registro de estado: INP(ESTADO) AND &HF0 I NP( ESTADO) Y Y Y Y ? ? ? ? &HF0 1 1 1 1 0 0 0 0 AND Y Y Y Y 0 0 0 0 Combinacin del semi-byte bajo con el semi-byte alto: (INP(CONTROL) AND &HF) OR (INP(ESTADO) & &HF0) I NP( CONTROL) AND &HF Y Y Y Y 0 0 0 0 I NP( ESTADO) AND &HF0 0 0 0 0 X X X X OR Y Y Y Y X X X X Inversin de los bits 0, 1, 3, y 7: byte = ( (INP(CONTROL) AND &HF) OR (INP(ESTADO) AND &HF0) ) XOR &H8B ( I NP( CONTROL) AND &HF) OR ( I NP( ESTADO) AND &HF0) Y Y Y Y X X X X &H8B 1 0 0 0 1 0 1 1 XOR Y Y Y Y X X X X TurboC / * ENT_SAL. C CONTROL DE ACTUADORES Y SENSORES MEDI ANTE PUERTO PARALELO Pr ogr amaci n de l a i nt er f ace bsi ca de 8 LED y 8 mi cr oi nt er r upt or es Act uador es - LED en l as 8 l neas de DATOS: 7 6 5 4 3 2 1 0 D7 D6 D5 D4 D3 D2 D1 D0 Sensor es - DI P swi t ch de 8 pos. en 4 l neas de CONTROL y 4 de ESTADO: 7 6 5 4 3 2 1 0 S7# S6 S5 S4 C3# C2 C1# C0# 2002 V ct or R. Gonzl ez */ #i ncl ude <st di o. h> #i ncl ude <dos. h> / * Di r ecci ones del puer t o par al el o */ #def i ne LPT_BASE 0x378 Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 10 de 16 19/09/2014 11:19 p.m. #def i ne DATOS LPT_BASE #def i ne ESTADO LPT_BASE+1 #def i ne CONTROL LPT_BASE+2 mai n ( ) { unsi gned byt e; unsi gned i , j ; / * Cont r ol de act uador es di gi t al es ( 8 di odos LED en el puer t o de DATOS) */ pr i nt f ( " Cont r ol de sal i das di gi t al es ( val or > 255 par a f i n) : \ n" ) ; byt e = 0; / * La pr i mer a vez apaga l os di odos ( env a 0) */ whi l e ( byt e < 256) { out por t b ( DATOS, byt e) ; pr i nt f ( " I nt r oduce el byt e que se envi ar al puer t o: " ) ; scanf ( " %u" , &byt e) ; get char ( ) ; } / * Cont r ol de sensor es di gi t al es ( 8 mi cr oi nt er r upt or es - DI P swi t ch- 4 en l neas de CONTROL y 4 en l neas de ESTADO) */ pr i nt f ( " \ nCont r ol de ent r adas di gi t al es ( f <i nt r o> par a f i n) : \ n" ) ; out por t b ( CONTROL, 0x04) ; / * Pone CONTROL en modo ent r ada ( si posi bl e) */ do { byt e = ( ( i npor t b( CONTROL) & 0x0F) | ( i npor t b( ESTADO) & 0xF0) ) ^ 0x8B; pr i nt f ( " Byt e l e do del puer t o: %u ", byt e) ; } whi l e ( get char ( ) == ' \ n' ) ; get char ( ) ; / * I nt er acci n de act uador es y sensor es */ pr i nt f ( " \ nReal i ment aci n de l as sal i das con l as ent r adas di gi t al es ( f <i nt r o> par a f i n) : " ) ; pr i nt f ( " \ n\ t ent r ada < 16 = di r i ge l a ent r ada a l a sal i da" ) ; pr i nt f ( " \ n\ t ent r ada < 32 = dest el l o i mpar es" ) ; pr i nt f ( " \ n\ t ent r ada < 64 = dest el l o par es" ) ; pr i nt f ( " \ n\ t ent r ada < 128 = i nt er mi t enci a 5 s" ) ; pr i nt f ( " \ n\ t ent r ada < 256 = dest el l o pr ogr esi vo\ n" ) ; do { / * Toma ni bbl e baj o de CONTROl y al t o de ESTADO e i nvi er t e bi t s 0, 1, 3 y 7 */ byt e = ( i npor t b( CONTROL) & 0x0F | i npor t b( ESTADO) & 0xF0) ^ 0x8B; pr i nt f ( " Byt e l e do: %u " , byt e) ; i f ( byt e < 16) / * Env a el val or de l a ent r ada a l a sal i da */ out por t b ( DATOS, byt e) ; el se i f ( byt e < 32) { / * Real i za un dest el l o en l as sal i das i mpar es */ out por t b ( DATOS, 85) ; / * Enci ende */ del ay ( 500) ; out por t b ( DATOS, 0) ; / * Apaga */ } el se i f ( byt e < 64) { / * Real i za un dest el l o en l as sal i das par es */ out por t b ( DATOS, 170) ; / * Enci ende */ del ay ( 500) ; out por t b ( DATOS, 0) ; / * Apaga */ } el se i f ( byt e < 128) / * I nt er mi t enci a dur ant e 5 segundos */ f or ( i =1; i <=10; i ++ ) { out por t b ( DATOS, 0) ; del ay ( 250) ; / * Apaga */ out por t b ( DATOS, 255) ; del ay ( 250) ; / * Enci ende t odos */ } el se / * Dest el l o pr ogr esi vo */ f or ( i =1; i <=10; i ++ ) { f or ( j =7; j <=224; j *=2) { out por t b ( DATOS, j ) ; del ay( 50) ; } f or ( j =224; j >=7; j / =2) { Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 11 de 16 19/09/2014 11:19 p.m. out por t b ( DATOS, j ) ; del ay( 50) ; } } } whi l e ( get char ( ) == ' \ n' ) ; r et ur n 0; } En la parte de control de slo las entradas digitales existen dos sentencias, indicadas con negrita en el cuadro siguiente: outportb (CONTROL, 0x04); /* Pone CONTROL en modo entrada (si posible) */ do { byte = ((inportb(CONTROL) & 0x0F) | (inportb(ESTADO) & 0xF0)) ^ 0x8B; pr i nt f ( " Byt e l e do del puer t o: %u " , byt e) ; } whi l e ( get char ( ) == ' \ n' ) ; y que merecen una explicacin detallada. La primera de ellas: outportb (CONTROL, 0x04); permite utilizar las cuatro lneas de control como lneas de entrada. Recurdese que, estrictamente, son de salida. Sin embargo, al poner las lneas en alto escribiendo 0100, es decir, 0x04, en LPT_BASE+2, la direccin del registro de control (bits C3- C2- C1- C0), se hace que las salidas "floten" y que un dispositivo externo pueda forzar a bajo alguna de las salidas. Esto podra no ser posible en todos los puertos. Sin embargo, en algn puerto que en principio aparentemente no es posible, se consigue si lo configuramos en modo SPP o en la emulacin SPP del modo ECP. La segunda: byte = ((inportb(CONTROL) & 0x0F) | (inportb(ESTADO) & 0xF0)) ^ 0x8B; , lee un byte de las entradas del interface de la siguiente manera: extrae los cuatro bits bajos del registro de control (bits C3- C2- C1- C0), los cuatro bits altos del registro de estado (bits S7- S6- S5- S4), los concatena e invierte todos los bits que sea necesario (dado que los bits C3, C1, C0 y S7 se utilizan en lgica negativa). Para ello, se utilizan los operadores de manipulacin de bits & (AND), | (OR) y ^ (XOR) que proporciona C. La operacin se explica paso a paso y grficamente en lo que sigue. En las tablas que figuran a continuacin una X o una Y indican bits que se necesitan finalmente mientras que ? indica bits prescindibles. Asimismo, el color azul indica bits en lgica positiva mientras que el color rojo y el suprarrayado indican bits en lgica negativa (estos ltimos necesitarn ser invertidos). Extraccin del semi-byte bajo del registro de control: inportb(CONTROL) & 0x0F i npor t b( CONTROL) ? ? ? ? X X X X 0x0F 0 0 0 0 1 1 1 1 & ( AND) 0 0 0 0 X X X X Extraccin del semi-byte alto del registro de estado: inportb(ESTADO) & 0xF0 i npor t b( ESTADO) Y Y Y Y ? ? ? ? 0xF0 1 1 1 1 0 0 0 0 & ( AND) Y Y Y Y 0 0 0 0 Combinacin del semi-byte bajo con el semi-byte alto: Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 12 de 16 19/09/2014 11:19 p.m. (inportb(CONTROL) & 0x0F) | (inportb(ESTADO)& 0xF0) i npor t b( ESTADO) & 0xF0 Y Y Y Y 0 0 0 0 i npor t b( CONTROL) & 0x0F 0 0 0 0 X X X X | ( OR) Y Y Y Y X X X X Inversin de los bits 0, 1, 3, y 7: byte = ((inportb(CONTROL) & 0x0F) | (inportb(ESTADO) & 0xF0)) ^ 0x8B ( i npor t b( CONTROL) & 0x0F) | ( i npor t b( ESTADO) & 0xF0) Y Y Y Y X X X X 0x8B 1 0 0 0 1 0 1 1 ^ ( XOR) Y Y Y Y X X X X Montado el display de 7 segmentos: Realizar una "cuenta adelante" y una "cuenta atrs" de 9 s de forma que se muestre el dgito de cada segundo. Soluciones: QBasic ' DI SPLAY7. BAS ' CONTROL DE ACTUADORES Y SENSORES MEDI ANTE PUERTO PARALELO ' ' Pr ogr amaci n de un di spl ay de 7 segment os de ct odo comn ' Segment os y punt o deci mal en l as 8 l neas de DATOS: ' ' punt o seg. 7 seg. 6 seg. 5 seg. 4 seg. 3 seg. 2 seg. 1 ' D7 D6 D5 D4 D3 D2 D1 D0 ' 3 ' - - - ' 2 | | 4 ' 1 - - - ' 5 | | 7 ' - - - o8 ' 6 ' 2002 V ct or R. Gonzl ez DECLARE SUB Act i va ( val or %) ' Di r ecci ones del puer t o par al el o CONST LPTBASE = &H378 CONST DATOS = LPTBASE CONST ESTADO = LPTBASE + 1 CONST CONTROL = LPTBASE + 2 CONST APAGADO = &H0 ' di spl ay apagado DI M i AS I NTEGER, segment o( 11) AS I NTEGER ' Val or es que act i van l os segment os segment o( 0) = &H7E ' segment os , 7, 6, 5, 4, 3, 2, : 01111110 segment o( 1) = &H48 ' segment os , 7, , , 4, , , : 01001000 segment o( 2) = &H3D ' segment os , , 6, 5, 4, 3, , 1: 00111101 segment o( 3) = &H6D ' segment os , 7, 6, , 4, 3, , 1: 01101101 segment o( 4) = &H4B ' segment os , 7, , , 4, , 2, 1: 01001011 segment o( 5) = &H67 ' segment os , 7, 6, , , 3, 2, 1: 01100111 segment o( 6) = &H73 ' segment os , 7, 6, 5, , , 2, 1: 01110011 segment o( 7) = &H4C ' segment os , 7, , , 4, 3, , : 01001100 Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 13 de 16 19/09/2014 11:19 p.m. segment o( 8) = &H7F ' segment os , 7, 6, 5, 4, 3, 2, 1: 01111111 segment o( 9) = &H4F ' segment os , 7, , , 4, 3, 2, 1: 01001111 segment o( 10) = &H80 ' segment os 8, , , , , , , : 10000000 CLS : PRI NT " Cont r ol de un di spl ay de 7 segment os: " ' Cuent a adel ant e PRI NT : I NPUT " Pul sa <i nt r o> par a comenzar una cuent a adel ant e . . . ", a$ FOR i = 0 TO 10 I F segment o( i ) <> PUNTO THEN PRI NT " "; i ; ELSE PRI NT " . " ; END I F Act i va segment o( i ) SLEEP 1 NEXT i ' Cuent a at r s PRI NT : I NPUT " Pul sa <i nt r o> par a comenzar l a cuent a at r s . . . " , a$ FOR i = 10 TO 0 STEP - 1 I F segment o( i ) <> PUNTO THEN PRI NT " "; i ; ELSE PRI NT " . " ; END I F Act i va segment o( i ) SLEEP 1 NEXT i ' Apaga el di spl ay PRI NT : I NPUT " Pul sa <i nt r o> par a apagar y sal i r . . . " , a$ Act i va APAGADO END ' Env a un val or al puer t o de dat os SUB Act i va ( val or %) OUT DATOS, val or % END SUB TurboC
/ * DI SPLAY7. C CONTROL DE ACTUADORES Y SENSORES MEDI ANTE PUERTO PARALELO Pr ogr amaci n de un di spl ay de 7 segment os de ct odo comn Segment os y punt o deci mal en l as 8 l neas de DATOS: punt o seg. 7 seg. 6 seg. 5 seg. 4 seg. 3 seg. 2 seg. 1 D7 D6 D5 D4 D3 D2 D1 D0 3 - - - 2 | | 4 1 - - - 5 | | 7 - - - o8 6 2002 V ct or R. Gonzl ez */ #i ncl ude <st di o. h> #i ncl ude <dos. h> / * Di r ecci ones del puer t o par al el o */ #def i ne LPT_BASE 0x378 #def i ne DATOS LPT_BASE #def i ne ESTADO LPT_BASE+1 Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 14 de 16 19/09/2014 11:19 p.m. #def i ne CONTROL LPT_BASE+2 / * Val or es que act i van l os segment os */ #def i ne CERO 0x7E / * segment os , 7, 6, 5, 4, 3, 2, : 01111110 */ #def i ne UNO 0x48 / * segment os , 7, , , 4, , , : 01001000 */ #def i ne DOS 0x3D / * segment os , , 6, 5, 4, 3, , 1: 00111101 */ #def i ne TRES 0x6D / * segment os , 7, 6, , 4, 3, , 1: 01101101 */ #def i ne CUATRO 0x4B / * segment os , 7, , , 4, , 2, 1: 01001011 */ #def i ne CI NCO 0x67 / * segment os , 7, 6, , , 3, 2, 1: 01100111 */ #def i ne SEI S 0x73 / * segment os , 7, 6, 5, , , 2, 1: 01110011 */ #def i ne SI ETE 0x4C / * segment os , 7, , , 4, 3, , : 01001110 */ #def i ne OCHO 0x7F / * segment os , 7, 6, 5, 4, 3, 2, 1: 01111111 */ #def i ne NUEVE 0x4F / * segment os , 7, , , 4, 3, 2, 1: 01001111 */ #def i ne PUNTO 0x80 / * segment os 8, , , , , , , : 10000000 */ #def i ne APAGADO 0x00 / * di spl ay apagado */ / * Macr o que env a un val or al puer t o de DATOS */ #def i ne Act i va( val or ) out por t b ( DATOS, val or ) / * Macr o que r eal i za una esper a en segundos */ #def i ne esper a( val or ) del ay ( 1000*val or ) mai n ( ) { i nt i ; unsi gned segment o[ ] = { CERO, UNO, DOS, TRES, CUATRO, CI NCO, SEI S, SI ETE, OCHO, NUEVE, PUNTO }; pr i nt f ( " Cont r ol de un di spl ay de 7 segment os: \ n" ) ; / * Cuent a adel ant e */ pr i nt f ( " \ nPul sa <i nt r o> par a comenzar una cuent a adel ant e . . . " ) ; get char ( ) ; f or ( i =0; i <=10; i ++ ) { i f ( segment o[ i ] ! = PUNTO) pr i nt f ( " %i " , i ) ; el se pr i nt f ( " . ") ; Act i va ( segment o[ i ] ) ; esper a ( 1) ; } / * Cuent a at r s */ pr i nt f ( " \ n\ nPul sa <i nt r o> par a comenzar l a cuent a at r s . . . " ) ; get char ( ) ; f or ( i =10; i >=0; i - - ) { i f ( segment o[ i ] ! = PUNTO) pr i nt f ( " %i " , i ) ; el se pr i nt f ( " . ") ; Act i va ( segment o[ i ] ) ; esper a ( 1) ; } / * Apaga el di spl ay */ pr i nt f ( " \ n\ nPul sa <i nt r o> par a apagar y sal i r . . . " ) ; get char ( ) ; Act i va ( APAGADO) ; r et ur n 0; }
Pelcula con el funcionamiento del circuito sin alimentacin externa ms display de 7 segmentos Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 15 de 16 19/09/2014 11:19 p.m. volver a Inicio Interfaces bsicos de E/S con el puerto paralelo http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/practicas/p_2.htm 16 de 16 19/09/2014 11:19 p.m.