Página 1 de 1

Configuaracion del modulo de puerto paralelo

Publicado: Jue Feb 17, 2005 6:09 am
por AndresElectro
Necesito ayuda con la configuracion de los modulos del puerto paralelo por medio del lenguaje ensamblador.

El caso es crear un codigo para realizar el cambio del modulo SPP a EPP del puerto paralelo

Publicado: Jue Feb 17, 2005 10:52 am
por rd12686950
Turbo C (c) para DOS.

unsigned int far *pAddr; // Puntero Vector direecion

unsigned int IOaddr; // Direccion de LPT1

{

pAddr = (unsigned int far *) 0x408;

IOaddr = *pAddr;

printf("LPT1 base address is 0x%X\n", IOaddr);

}

TurboPascal (c)

Var addr:word; {Direccion de LPT1}

Begin

addr := MemW[$0000:$0408];

writeln("LPT1 base address is", addr);

End

A continuacion dos tablas para ayudar en el programa
Pin DB25 (lado PC) Pin centronics (Lado impresora) Name Address

Record

1 1 Strobe Out * Control
2 2 Data 0 Out Data
3 3 Data 1 Out Data
4 4 Data 2 Out Data
5 5 Data 3 Out Data
6 6 Data 4 Out Data
7 7 Data 5 Out Data
8 8 Data 6 Out Data
9 9 Data 7 Out Data
10 10 Ack In Status
11 11 Busy In Status
12 12 Paper Out In Status
13 13 Select In Status
14 14 Linefeed Out * Control
15 32 Error In Status
16 31 Inizialize Out * Control
17 36 Select-in Out * Control
18-25 19-30, 33 Masa - -
- 18,35 + 5V (Rpu) - -
- 14,34 Non usad -

Address Bit Nome Pin (DB25) Invertido
BASE + 2 Control 7 Reservado - -
Control 6 Reservado - -
Control 5 Bidireccional - -
Control 4 Ahabilitacion Interrupt - -
Control 3 Select-in 17 SI
Control 2 Inicilizar 16 NO
Control 1 Linefeed 14 SI
Control 0 Strobe 1 SI


assembler:

MOV DX,ADDR
MOV AL,DATO
OUT DX,AL
MOV DX,ADDR
IN AL,DX
MOV DATO,AL
#define STATUS (DATA+1)
unsigned char data, busy, po // 3 Variables de 8 bit, unsigned
data = inportb (STATUS);
data = data ^ 0x80; // Invierte el bit mas significativo con un xor
busy = (data & 0x80) >> 7; // Extrae el valore de busy (bit 7)
po = (data & 0x20) >> 5; // Extrae el valor de Paper Out (bit 5)
#define CONTROL (DATA+2)
outportb (CONTROL, 0x04);
utportb (CONTROL, 0x04);
data = inportb (CONTROL) & 0x0F;
outportb (CONTROL, 0x20); // 0x20 = 0010 000
data = inportb (DATA);

Todo esto y mucho mas puedes encontrar en :

http://www.beyondlogic.org
http://linux.nuvoli.to.it/pj/pj9703/parallela.html