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
Configuaracion del modulo de puerto paralelo
Moderador: Moderadores
- rd12686950
- Preferencial
- Mensajes: 867
- Registrado: Mié Dic 08, 2004 2:00 am
- Contactar:
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
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