Fórum Lendo Dados na Porta Paralela #295178
12/09/2005
0
Tenho uma aplicação que lê e escreve dados na porta paralela.
Uso Windows XP com a dll inpout32.dll. Com a função Out32 o programa escreve dados e com a função inp32 o programa lê o que esta sendo enviado por uma placa (interface), para a porta.
Agora estou precisando provocar uma interrupção na CPU #17, peguei aqui no forum uma rotina mas não esta resolvendo. Abaixo esta a função:
===// ====
Function OnLine(Porta:Word):Boolean;
Const
Portas :Byte = $02;
Var
Res :Byte;
Begin
{ Código em Assembler }
Asm
mov ah,Portas; {Requisita o acesso as portas}
mov dx,Porta;{Define a porta de teste}
Int $17; {Chama a interrupção de Impressora}
mov Res,ah; {Guarda em Res o resultado da operação }
end;
Result := (Res and $80) = $80; {Testa o valor de saída}
End;
Será que alguem tem uma dica de como posso provocar uma interrupção na CPU.
Abraços a todos.
Neto
Neto
Curtir tópico
+ 0Posts
12/09/2005
Massuda
Você está tentando usar INT 17/AH 02 para pegar o status da impressora/porta paralela, mas provavelmente isso pode ser feito usando a DLL que você citou.
Se você conhecer um pouco de C (e inglês), experimente dar uma olhada [url=http://www.codeproject.com/csharp/csppleds.asp]neste artigo[/url] e [url=http://www.codeproject.com/csharp/cspplcds.asp]neste artigo[/url] que são alguns exemplos de como interfacear a porta paralela com hardware externo.
Gostei + 0
12/09/2005
Neto
Aproposito, não conheço C nem inglês, mas com bôa vontade talves aproveito alguma coisa.
Você disse que talves a Dll que estou usando ofereça essa possibilidade.
Você sabe de alguma dica?
Muito obrigado Mussuda.
Gostei + 0
12/09/2005
Massuda
Como você já deve saber, para escrever dados na porta você usa Out32 na porta $378.
Para obter o status (o que equivale ao que você estava querendo fazer via interrupção), use Inp32 na porta $379. Os bits do valor lido correspondem aos seguintes sinais da impressora:[list:3479e0b322][*:3479e0b322]bit 0: não utilizado[*:3479e0b322]bit 1: não utilizado[*:3479e0b322]bit 2: /IRQ[*:3479e0b322]bit 3: ERROR[*:3479e0b322]bit 4: SELECT IN[*:3479e0b322]bit 5: PAPER OUT[*:3479e0b322]bit 6: ACK[*:3479e0b322]bit 7: BUSY[/list:u:3479e0b322]
Gostei + 0
12/09/2005
Neto
Neto
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)