Está en la página 1de 10

El Puerto Paralelo

1. 1. Direcciones de los Puertos con Turbo C++


2. 2. Teora sobre Manejo del Puerto Paralelo
3. 3. Circuitos para Puerto Paralelo Circuitos para Puerto Paralelo
4. 4. Prograas para Manejo del Puerto Paralelo Prograas para Manejo del Puerto Paralelo
!. !. PrinterPortControlData"c#uisition.doc

Direcciones de los Puertos con Turbo C+


+.
Con el compilador Turbo C se realiza la lectura de la direccin de memoria de la BIOS donde se
encuentra la direccin del puerto paralelo 1 de la siguiente forma:
//LPT1!CPP
"include #ConiO!$%
"include #IOStream!$%
"include #IO&anip!$%
"include #'OS!$%
(oid main)*+
int puerto,
clrscr)*,
/-.n los manuales de computadores se encuentra /ue la direccin del primer puerto paralelo se
encuentra en las posiciones de memoria definidas por 0010:0002 3 siguientes -/
puerto 4 pee5)06107062*, / /lee palabra 7 pee5)segmento7 desplazamiento*
cout ## 8'ireccin7 9e6adecimal7 del primer puerto paralelo)LPT1*: 8
## setiosflags)ios::9e6* ## puerto,
/-pee5 es una instruccin de lectura7 lee una palabra7 : b3tes consecuti(os pee5b lee solamente 1
b3te! po5e escribe en : b3tes, po5eb escribe en un b3te!-/
getc9)*,
;
$$Prograa en Turbo C++% el cual escribe direcciones de los puertos paralelos

//LPT1:<1!CPP
"include #dos!9%
"include #conio!9%
"include #IOStream!9%
(oid main)*+ // funcin /ue encuentra la direccin del puerto
unsigned int far -punteroadireccion, // declara puntero largo
int i7puerto40, //declara (ariables
punteroadireccion 4 )unsigned int far -* 0600000102,
//asigna direccion donde se indican los puertos paralelos del computador
for )i40, i#<, i==*+
if )-punteroadireccion 44 0*
cout ## 8>o se encontr puerto asignado a LPT8 ## i=1,
else +
cout ## 8'ireccin asignada a LPT? ## i=1 @ es @ ## punteroadireccion ##
@An?,
puerto 4 -punteroadireccion, //asigna direccin del puerto
;
punteroadireccion==, // incrementa puntero
;
getc9)*,
;
Salida del programa anterior:
>ota! La salida anterior7 es probable /ue no sea igual en su computador!
TeorBa sobre &aneCo del Puerto Paralelo
Dn computador es muc9o mEs rEpido /ue cual/uier perifFrico 37 por lo tanto7 le puede transmitir mEs datos de los /ue
puede recibir! Por esta razn7 los circuitos de los perifFricos7 como la impresora7 usan seGales especiales para decirle al
computador /ue detenga momentEneamente el en(i de datos 9asta /ue se encuentre listo para recibirlos! 'e esta
manera el computador tiene la oportunidad de eCecutar otras tareas 9asta /ue el perifFrico le indi/ue7 por intermedio de
una seGal de protocolo7 /ue se encuentra listo para recibir datos!
La ma3orBa de los puertos paralelos de la parte posterior de las computadoras IB&Hcompatibles poseen un conector
'BH:I! .sto es e6traGo7 puesto /ue este conector es el de serie /ue se utiliza para los interfaces serie! .l conector es
normalmente 9embra )tiene orificios en lugar de pines* para distinguirlo de los conectores serie /ue son 9abitualmente
mac9os 3 /ue puede tener tambiFn el PC!
The original IBM-PC's Parallel Printer Port had a total of 12 digital outputs
and 5 digital inputs accessed via 3 consecutive 8-it ports in the processor's
I!" space#
8 output pins accessed via the $%T% Port
5 input pins &one inverted' accessed via the (T%T)( Port
* output pins &three inverted' accessed via the C"+T,"- Port
The re.aining 8 pins are grounded
25-/a0 1e.ale $-T0pe Connector
Cada puerto de impresin consiste de tres direcciones, la del puerto de datos7 de estado 3 de control! .stas direcciones
se encuentran en orden consecuti(o! .sto es7 si la direccin del puerto de datos es 060<J27 entonces la direccin del
puerto de estado serE 06<JK 3 la de control 06<JL! )las direcciones estEn dadas en nMmeros 9e6adecimales*!
Internamente el computador 3 algunos programas identifican sus puertos paralelos con las siglas LPT17 LPT:7 etc!
'ependiendo del nMmero de puertos /ue dispongan!
Tabla de configuraciones tBpicas a continuacin:
Puerto de Impresin Puerto de datos Puerto de estado Puerto de Control
LPT1 060<BC 060<B' 060<B.
LPT: 060<J2 060<JK 060<JL
LPT< 060:J2 060:JK 060:JL
Los registros de /ue consta el puerto paralelo son <: el primero es el registro de datos7 de 2 bits7 ubicado en la
direccin base! )<BC97 <J297 :J297 etc!*.ste registro es de slo escritura7 para en(iar los caracteres a la impresora! .l
siguiente registro7 de slo lectura7 es el registro de estado7 inmediatamente a continuacin del anterior! )<B'97 <JK97
:JK9*Ninalmente7 tras ellos 9a3 un registro de slo escritura7 el registro de control )en <B.97 <JL97 :JL9*! Lun/ue en
los tres casos se indica la direccin7 9a3 /ue tener en cuenta /ue lo correcto es consultar la (ariable de la BIOS 3
tomarla como punto de partida!
Printer Port Registers
Register Name Address
Data Register Base + 0x00
Status Register Base + 0x01
Control Register Base + 0x02
Como su nombre lo indica7 la salida de datos transfiere informacin desde el PC a un perifFrico en paralelo! .sto se
9ace con oc9o bits )un b3te* por (ez utilizando los pines :HK! 'O se considera el bit menos significati(o )LSB* 3 'J el
mas significati(o )&SB*! )>ota: algunas computadoras emplean las designaciones '1 H'2 en lugar de '0H'J*!
Llgunos puertos de computadora no soportan el &SB! Por supuesto /ue en esos casos no debe diseGar sus pro3ectos
de modo /ue lo necesiten! 'e la misma manera7 algunos perifFricos solo utilizan datos de J bits!
Puerto de datos ) <BC9 <J29 :J29*:
BITS Pin 'B :IN
0 : '0 Salida
1 < '1 Salida
: 1 ': Salida
< I '< Salida
1 O '1 Salida
I J 'I Salida
O 2 'O Salida
J K 'J Salida
Los registros de estado 3 control estEn asociados a unas lBneas fBsicas del puerto paralelo estEndar7 3 poseen un
significado concreto /ue se resumen en las siguientes dos tablas!
Puerto de estado) <B'9 <JK9 :JK9*:
BITS Pin 'B :IN
0 H >o utilizado!
1 H >o utilizado!
: H >o utilizado!
< 1I .ntrada! )H.PPOP*! L 0 si 9a3 un error!
1 1< .ntrada! )SLCT*! L 1 si la impresora estE O> LI>.!
I 1: .ntrada! )P.*! L 1 si la impresora no tiene papel )PLP.P .PPOP*!
O 10 .ntrada! )HLCQ*! L 0 si la impresora confirma la recepcin del carEcter!
J 11
.ntrada! .l dato en este bit estE in(ertido
)HBDSR*! L 0 si la impresora estE ocupada!

Puerto de control) <B.9 <JL9 :JL9*:
BITS Pin 'B :IN
0 1
Salida! .l dato en este bit estE in(ertido! )HSTPOB.*! L 0 si 9a3 un carEcter en el registro
de datos!
1 11
Salida! .l dato en este bit estE in(ertido! )HLDTO N..'*! L 1 si la impresora debe saltar
lBnea tras cada cdigo 1< )CP*!
: 1O Salida! )HI>IT*! L 0 para @resetear?7 reiniciar7 la impresora!
< 1J
Salida! .l dato en este bit estE in(ertido! )SLCT I>*! L 1 para seleccionar la impresora )0
para ONNHLI>.*!
1 ! no conectado al puerto de impresora! L 1 acti(a la interrupcin de la impresora!
I al J H no utilizados!
Los pines 12H:I son de tierra!
Las tierras cumplen dos funciones: la primera es /ue (inculan las tierras de seGal de los dos dispositi(os /ue se
interconectan de modo /ue puedan compartir una tierra comMn como referencia para la seGal!
Los bits7 como tambiFn las demEs seGales7 se representan mediante ni(eles de tensin TTL con(encionales: una seGal
entre :71 3 I (oltios es un ni(el alto o 1 binario! Cual/uier cosa entre 072 3 :71 (oltios se considera dato no (alido!
Puesto /ue la computadora es muc9o mEs rEpida /ue cual/uier perifFrico con el /ue se comuni/ue7 puede fEcilmente
transmitir mas datos /ue los /ue el perifFrico puede maneCar! Par ello7 los perifFricos utilizan seGales especiales para
decirle a la computadora /ue detenga momentEneamente el en(Bo de datos cuando tienen suficientes para trabaCar! .sto
le permite al perifFrico alcanzar a la computadora7 /ue puede realizar otras tareas mientras tanto! Dna (ez /ue el
perifFrico /ueda libre7 le pide a la computadora /ue transmita mas datos7 3 el proceso continMa!
Circuitos para Puerto Paralelo
Para los siguientes programas se debe contar con una tarCeta la cual conectarE en el puerto paralelo7 (er circuito en
grEfica a continuacin! .lla debe tener 1: Leds /ue se controlarEn con los 2 bits de salida del puerto de datos 3
otros 1 /ue se controlarEn con los 1 bits /ue son de salida del puerto de control! .l circuito tambiFn puede tener
9asta cinco interruptores a maneCar efectuando lecturas por medio del puerto de estado!



Para en(iar datos al puerto paralelo se utiliza la instruccin de C outportb)direccion7dato*7 donde direccin es la
direccin del puerto )datos o de control* 3 dato es una (ariable con los oc9o bits /ue se desean en(iar al puerto! .l
parEmetro direccin debe coincidir con la direccin del puerto de estado!
El siguiente dise&o es toado de la re'ista (Electr)nica * Coputadores de
la epresa CE+,T de Pereira. - espec.icaente de su secci)n
@.l Qinder del C?
Prograas para anejo del Puerto Paralelo
/os siguientes prograas sir'en para ensa*ar el anterior circuito de CE+,T0
El siguiente programa es un ejemplo de la instruccin
switch, prendiendo los LEDS del mismo circuito anterior.
"include #ConIO!9%
"include #IOStream!9%
//L.'S:!cpp
int Puerto'atos 4 06<J2, //S 06<bc
(oid dela3)int Tiempo*+
for )long i 4 0, i#Tiempo-<0000, i==*
,
;
(oid main)*+
int 'ato,
cout ## 8'igite un >Mmero del 0 al J 3 .ncender el respecti(o L.'8,
cin %% 'ato,
sTitc9)'ato*+
case 0: outportb)Puerto'atos7 0601*,
brea5,
case 1: outportb)Puerto'atos7 060:*,
brea5,
case :: outportb)Puerto'atos7 0601*,
brea5,
case <: outportb)Puerto'atos7 0602*,
brea5,
case 1: outportb)Puerto'atos7 0610*,
brea5,
case I: outportb)Puerto'atos7 06:0*,
brea5,
case O: outportb)Puerto'atos7 0610*,
brea5,
case J: outportb)Puerto'atos7 0620*,
brea5,
default:
outportb)Puerto'atos7 0600*,
;
;
El siguiente programa es un ejemplo de la instruccin for
infinita, prendiendo los LEDS del mismo circuito anterior.
"include #ConIO!9%
"include #IOStream!9%
//L.'S<!cpp
int Puerto'atos 4 06<J2, //S 06<bc
(oid dela3)int Tiempo*+
for )long i 4 0, i#Tiempo-<0000, i==*
,
;
(oid main)*+
int 'ato,
for),,*+
cout ## 8'igite un >Mmero del 0 al J 3 .ncender el respecti(o L.'8 ## endl,
cout ## 8'igite 2 K para terminar!8 ## endl ## endl,
cin %% 'ato,
sTitc9)'ato*+
case 0: outportb)Puerto'atos7 0601*,
brea5,
case 1: outportb)Puerto'atos7 060:*,
brea5,
case :: outportb)Puerto'atos7 0601*,
brea5,
case <: outportb)Puerto'atos7 0602*,
brea5,
case 1: outportb)Puerto'atos7 0610*,
brea5,
case I: outportb)Puerto'atos7 06:0*,
brea5,
case O: outportb)Puerto'atos7 0610*,
brea5,
case J: outportb)Puerto'atos7 0620*,
brea5,
default:
outportb)Puerto'atos7 0600*,
return,
;
;
;
El siguiente programa es un ejemplo del manejo de las ocho
salidas del puerto de datos y de las cuatro del puerto de
control.
"include #ConIO!9%
"include #IOStream!9%
//L.'S1!cpp
int Puerto'atos 4 06<J2, //S 06<bc
int Puerto.stado 4 Puerto'atos=1,
int PuertoControl 4 Puerto'atos=:,
(oid dela3)int Tiempo*+
for )long i 4 0, i#Tiempo-<0000, i==*
,
;
(oid main)*+
outportb )Puerto'atos7 0*, //apagar leds maneCados por puerto de datos con 00000000
//todos los bits del puerto de datos trabaCan de forma normal! bits 0 al J!
outportb)PuertoControl7 06b*, //apagar leds maneCados por puerto de control con 06b:
//06b: 00001011
//recuerde /ue los bits 07 1 3 < estEn in(ertidos7 los bits de derec9a a iz/uierda
//el bit : estE normal 3 los 17 I7 O 3 J no estEn 9abilitados!
cout## 8Cuenta escribiendo en puerto de datos 3 prendiendo L.'s 8 ## endl,
for )int i40, i#4:IO , i==*+
outportb)Puerto'atos7 i*,
cout ## i ## endl,
dela3)100*,
;
outportb)Puerto'atos7 0600*, //se apagan los L.'S acoplados al puerto de control
cout ## endl## 8.nciende led maneCado por bit 0 del puerto de control8 ## endl,
//0000 1010 4 060a //recuerde /ue el bit 0 esta in(ertido!
//entonces 9a3 /ue mandarle un 0 para /ue el Led se prenda
outportb)PuertoControl7 06a*, //enciende leds maneCado por bit 0 del puerto de control
dela3)1000*,
outportb)PuertoControl7 06b*, //apaga bit 0 del puerto de control! en realidad todos
cout ## endl## 8Lpaga led roCo maneCado por bit 0 del puerto de control8 ## endl,
cout ## endl## 8.nciende led roCo maneCado por bit 1 del puerto de control8 ## endl,
//0000 1001 4 060K //recuerde /ue el bit 1 esta in(ertido!
//entonces 9a3 /ue mandarle un 0 para /ue el Led se prenda
outportb)PuertoControl7 060K*, //enciende led maneCado por bit 1 del puerto de control
dela3)1000*,
cout ## endl## 8Lpaga led roCo maneCado por bit 1 del puerto de control8 ## endl,
outportb)PuertoControl7 06b*, //apaga bit 1 del puerto de control! en realidad todos
cout ## endl## 8.nciende led maneCado por bit : del puerto de control8 ## endl,
//0000 1111 4 060f
//9a3 /ue mandarle un 1 para /ue el Led se prenda
outportb)PuertoControl7 060f*, //enciende led maneCado por bit : del puerto de control
dela3)1000*,
cout ## endl## 8Lpaga led maneCado por bit : del puerto de control8 ## endl,
outportb)PuertoControl7 06b*, //apaga bit : del puerto de control! en realidad todos
cout ## endl## 8.nciende led maneCado por bit < del puerto de control8 ## endl,
//0000 0011 4 060< //recuerde /ue el bit < esta in(ertido!
//entonces 9a3 /ue mandarle un 0 para /ue el Led se prenda
outportb)PuertoControl7 060<*, //enciende led maneCado por bit : del puerto de control
dela3)1000*,
cout ## endl## 8Lpaga led maneCado por bit < del puerto de control8 ## endl,
outportb)PuertoControl7 06b*, //apaga bit < del puerto de control! en realidad todos
;
El siguiente programa es un ejemplo de lectura por el
puerto paralelo, con la instruccin inportb y por medio del
puerto de estado:
"include#IOStream!9%
"include#ConIO!9%
"include#'OS!9%
//LptLeer!Cpp
(oid main)*+
int Puerto7 'atoLeido,
clrscr)*,
Puerto 4 pee5)06107 062*, //00100002
do+
'atoLeido 4 inportb)Puerto=1*,
If )'atoLeido U 062* //00001000 .n 'BH:I pin 1I: .rror
cout ## 8Interruptor Cerrado! Puerto de estado bit <An8,
else
cout ## 8Interruptor Cerrado! Puerto de estado bit <An8,
if)'atoLeido U 0610* //00010000 .n 'BH:I pin 1<:Select
cout ## 8Interruptor Cerrado! Puerto de estado bit 1An8,
else
cout ## 8Interruptor Cerrado! Puerto de estado bit 1An8,
if)'atoLeido U 06:0* //00100000 .n 'BH:I pin 1::Paper .mpt3
cout ## 8Interruptor Cerrado! Puerto de estado bit IAn8,
else
cout ## 8Interruptor Cerrado! Puerto de estado bit IAn8,
; T9ile ) 5b9it)* 44 0*,
;
1e.erencias
9ttp://et!nmsu!edu/Vetti
9ttp://TTT!ce5it!com!co/inde6!p9p

También podría gustarte