Configuaracion del modulo de puerto paralelo

Cuestiones y dudas acerca de lenguajes de programación diversos.

Moderador: Moderadores

Avatar de Usuario
AndresElectro

Configuaracion del modulo de puerto paralelo

Mensaje por AndresElectro » Jue Feb 17, 2005 6:09 am

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

Avatar de Usuario
rd12686950
Preferencial
Mensajes: 867
Registrado: Mié Dic 08, 2004 2:00 am
Contactar:

Mensaje por rd12686950 » Jue Feb 17, 2005 10:52 am

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

Responder