Está en la página 1de 16

Circuito sin alimentacin externa

Circuito con alimentacin externa


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.

También podría gustarte