Codigo:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
int puerto,anterior;
long array[10000];
long i,n;
FILE *fichero;
void main()
{
n=10;
clrscr();
printf("Pulsa una tecla para empezar."
getch();
printf("
Leyendo %d datos....",n);
for(i=0;i<n;i++)
{
puerto=inportb(0x379);
if(puerto!=anterior)
{
array=puerto;
anterior=puerto;
}
else
i--;
}
fichero=fopen("muestreo.txt","wt"
for(i=0;i<n;i++)
{
fprintf(fichero,"Codigo %d:",i);
switch(array)
{
case 0x3f: fprintf(fichero," 11
"break;
case 0x37: fprintf(fichero," 10
"break;
case 0x27: fprintf(fichero," 00
"break;
case 0x2f: fprintf(fichero," 01
"break;
}
}
fclose(fichero);
}
PUERTO PARALELO
Entradas y Salidas de datos en el puerto paralelo
TABLA Nº 1
| Patita | Señal | Función | Conexión | Registro | Bit | Estado |
| 1 | STB | Strobe | I/O | Control | 0 | Y |
| 2 | DO | Bit 0 | O | Datos | 0 | N |
| 3 | D1 | Bit 1 | O | Datos | 1 | N |
| 4 | D2 | Bit 2 | O | Datos | 2 | N |
| 5 | D3 | Bit 3 | O | Datos | 3 | N |
| 6 | D4 | Bit 4 | O | Datos | 4 | N |
| 7 | D5 | Bit 5 | O | Datos | 5 | N |
| 8 | D6 | Bit 6 | O | Datos | 6 | N |
| 9 | D7 | Bit 7 | O | Datos | 7 | N |
| 10 | ACK | Acknowledge | I | Status | 6 | N |
| 11 | BSY | PrinterBusy | I | Status | 7 | Y |
| 12 | PE | PaperEnd | I | Status | 5 | N |
| 13 | SEL | PrinterSelect | I | Status | 7 | N |
| 14 | AUTOLF | AutomLineFeed | I/O | Control | 4 | N |
| 15 | ERR | Error | I | Status | 3 | N |
| 16 | INIT | InicialicePrinter | I/O | Control | 2 | N |
| 17 | SELIN | SelectPrinter | I/O | Control | 3 | Y |
| 18 - 25 | GND | Ground |
Los puertos paralelo de las computadoras se llaman por lo general&h378.&h278 y &h3bc
La combinacion de terminales es la siguiente
TABLA Nº2
| Datos BASE | Status BASE + 1 | Control BASE + 2 |
| 3BCH | 3BDH | 3BEH |
| 378H | 379H
| 37AH |
| 278H | 279H | 27AH |
| En la columna registro de la tabla Nº 1 se muestran DATOS - STATUS Y CONTROL |
| Podemos observar que en la columna Conexión se indica el trabajo que puede realizar |
| Todos los terminales de DATOS son O (output , salida ) de datos |
| Todos los de CONTROL son I/O (input, output ,entrada.salida) de datos |
| Todos los de STATUS son I (input,entrada) de datos |
| En la columna Estado se muestra como es la tensión en esa pata sin recibir una orden desde la |
| PC |
| Las Letras N en la columna Estado indican que no hay tensión, La letra Y indica que hay tensión |
La combinación de letras y números se debe a la forma del conteo Hexadecimal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 corresponden a
1 2 3 4 5 6 7 8 9 B C D E F G H I etc.
Con este programa que corre en cualquier Basic podemos ensayar losresultados
CLS
INPUT H
A$ = HEX$ (H)
PRINT H ; "Decimal " ; A$ ;" Hexadecimal "
Las salidas del puerto paralelo manejan pocacorriente y no se pueden conectar |
a ningún circuito de potencia sin previamente tomar unaprecaución |
Las salidas se conectan a el circuito nuevo a través deun opto acoplador |
Con esto obtenemos la separación eléctrica de lacomputadora con el nuevo circuito y limitamos |
la corriente de salida de la placa del puerto paralelo a algunos miliamper |

El diagrama muestra el interior de un opto acoplador , en + tenemos la tensiónde alimentación |
del transistor de salida, en S la salida y la resistencia de 680 ohms limitala corriente del led |
del acoplador a 3-8 miliamper |
ENTRADAS PARA ADQUISICION DE DATOS
Los terminales del 10 al 12 de Status son de entrada y se puede comprobar su |
funcionamiento con el siguiente programa en qbasic |
cls |
do |
a# = inp (&h379) oel que corresponde a la PC |
locate 10,5 : print a# xor &h80 |
sleep 1 |
loop |
Apoyando un destornillador en alguna de las patitas indicadas veremos que |
aparece un numero que cambia cada segundo y que el menor coincide con el |
que indica si conectamos a neutro esa patita |
!!!!ATENCIÓN NO HACER CORTOCIRCUITO ENTRELAS PATITAS
Esto indica que una señal que entra estasiendo leída e impresa en pantalla |
Leamos los números que nos indica en los tres puertos por ejemplo |
94-126-222-254 |
En cada pata se leerá un numero mayor y uno menor |
Para controlar una salida de datos cambiar el programa al que sigue |
cls |
do |
a# = inp (&h379) oel que corresponde a la PC |
| if a# > xxx then out &h378,5 |
| if a# < xxx then out &h378,2 |
locate 10,5 : print a# xor &h80 |
sleep 1 |
loop |
En lugar que las XXX colocar un numeropromedio de los leídos y ejecutar el |
programa
|
Veremos que los led 2 y 5 se encienden y apagan acompañando el valor delnumero |
que aparece en pantalla que sera uno mayor y otro menor al colocado
|
Esta es la ejecución de una orden condicionada a un dato, en este casoencendemos |
en forma alternativa un led según el numero leído en el puerto de entrada |
Escrito originalmente por antoniof
Buenas.
No se si lo sabrás, pero los 8 bits del puerto paralelo son sólo de salida. Para leer entradas debes usa los bits de ack, page feed, etc. Éstos bits están en la dirección siguiente a la normal, es decir, 0x379. Aqui te paso un programa que hice para capturar datos por el puerto paralelo y guardarlos en un fichero.