A porta paralela é referida como porta paralela.
1. Leia e escreva paralelo
Na linguagem de montagem, a porta paralela pode ser operada com as instruções de entrada e saída, mas não há funções e métodos correspondentes em Delphi para ler e escrever a porta paralela. Instruções de montagem dentro e fora, ele pode ler e escrever portas paralelas facilmente. Também podemos acessar a porta paralela chamando as funções da API do Windows ou DLLs e VXDs fornecidas por terceiros, mas é mais conveniente e rápido de ler e escrever a porta paralela usando métodos de montagem incorporados.
Use a seguinte função ReadPort e procedimento Writeport para ler e gravar portas paralelas, e a porta de parâmetro é o endereço da porta para operar.
função readport (porta: word): byte;
var
B: Byte;
Começar
ASM
Mov dx, porta;
Em Al, dx;
Mov b, al;
FIM;
Resultados: = b;
fim;
Procedimento WritePort (Port: Word; Conbyte: Byte);
Começar
ASM
Mov dx, porta;
Mov Al, Conbyte;
Fora dx, al;
FIM;
fim; 2. Operação de bit
Para controlar a porta paralela em termos bittusivos, você pode primeiro ler os dados da porta paralela e executar operações de bit e depois gravar na porta paralela novamente, para que o controle de bits da porta paralela possa ser alcançado.
O operador lógico e executa lógica e operação bitwise em dois números a serem operados: isto é, o resultado de 1 e 1 é 1 e o outro 0 e 1, 1 e 0 e 0 e 0. Os resultados de 0 são todos 0 .
Operador lógico ou executa bitwise lógica ou operação em dois números a serem operados: ou seja, desde que os dois bits de "ou" sejam um, o resultado for 1;
Use o operador e especificar a posição 0. Por exemplo, o binário de 84H hexadecimal é: 10000100, e seu terceiro bit é 1. Para definir a terceira posição como 0 e outros bits permanecem inalterados, você pode usar: $ 84 e $ fb = US $ 80, o valor binário de 80H é 10000000.
Use o operador OR para especificar uma posição 1, por exemplo: o segundo bit de 84h hexadecimal é 0. Para definir o segundo bit como 1 e outros bits permanecem inalterados, você pode usar: $ 84 ou $ 02 = $ 86, 86h O valor binário é 10000110.
exemplo:
1. Defina o potencial dos bits D2 da porta de dados 378h como baixa, ou seja, definir 0:
B: = readport (US $ 378);
B: = b e $ fb;
Writeport (US $ 378, b);
2. Defina o potencial de D2 bits da porta de dados 378h como alta, ou seja, conjunto 1:
B: = readport (US $ 378);
B: = B ou $ 04;
Writeport (US $ 378, b);
3. Determine o potencial dos bits D2 da porta de dados 378H:
B: = readport (US $ 378);
if ((b e $ 04) = $ 04) Então
// codifica quando o potencial é alto
outro
// codifica quando o potencial é baixo
ou:
B: = readport (US $ 378);
if ((b ou $ fb) = $ ff) então
// codifica quando o potencial é alto
outro
// codifica quando o potencial é baixo
3. Implementação específica
O exemplo a seguir é a altura potencial de cada bit da porta de dados 378H que controla a porta paralela. Os 8 bits da porta de dados: d0 ~ d7 correspondem aos pinos 2 ~ 9 da interface paralela.
Primeiro Execute Delphi, crie um novo projeto e clique em F12 para adicionar o código de portas de leitura e gravação à Unidade1 do Form1:
função readport (porta: word): byte;
Procedimento WritePort (Port: Word; Conbyte: Byte);
função readport (porta: word): byte;
var
B: Byte;
Começar
ASM
Mov dx, porta;
Em Al, dx;
Mov b, al;
FIM;
Resultados: = b;
fim;
Procedimento WritePort (Port: Word; Conbyte: Byte);
Começar
ASM
Mov dx, porta;
Mov Al, Conbyte;
Fora dx, al;
FIM;
fim;
Adicione 8 componentes de caixa de seleção, modifique suas propriedades de legenda para D0 a D7, respectivamente, e organize -as da direita para a esquerda.
Clique duas vezes na caixa de seleção e adicione o código do programa a seguir ao evento OnClick do componente da caixa de seleção:
procedimento TFFORM1.CHECKBOX1CLICK (remetente: Tobject);
var
B: Byte;
Começar
b: = 0;
Se a caixa de seleção1.Charquei, então
B: = B ou $ 01;
Se a caixa de seleção. Verifiquei, então
B: = B ou $ 02;
Se a caixa de seleção. Verifiquei, então
B: = B ou $ 04;
Se a caixa de seleção
B: = B ou $ 08;
Se a caixa de seleção. Verifiquei, então
B: = B ou $ 10;
Se a caixa de seleção 6.Charquei, então
B: = B ou $ 20;
Se a caixa de seleção 7.CHECKED, então
B: = B ou $ 40;
Se a caixa de seleção8.CHECKED, em seguida
B: = B ou $ 80;
Writeport (US $ 378, b);
fim;
Após a conclusão da entrada, defina o evento OnClick da caixa de seleção 2 como caixa de seleção8, os 7 componentes da caixa de seleção, para o evento OnClick da caixa de seleção: Caixa de seleção.
No momento, compilar e executar o programa, você pode clicar nessas 8 caixas de seleção para controlar o potencial de cada bit da porta de dados LPT1.
Em seguida, a função de monitorar o status da porta de dados da porta paralela é adicionada.
Adicione um componente do timer no Form1: Timer1, modifique a propriedade ativada para propriedade falsa e intervalada para 1.
Adicionado ao evento Ontimer no Timer1:
procedimento TFFORM1.TIMER1TIMER (remetente: Tobject);
var
B: Byte;
Começar
B: = ReadPort (US $ 378);
Caixa de seleção1.CHecked: = ((b ou $ fe) = $ ff);
Caixa de seleção2.CHECKED: = ((b ou $ fd) = $ ff);
Checkbox3.Checked: = ((b ou $ fb) = $ ff);
Checkbox4.Checked: = ((b ou $ f7) = $ ff);
Caixa de seleção
Caixa de seleção6.CHecked: = ((b ou $ df) = $ ff);
Caixa de seleção7.CHecked: = ((b ou $ BF) = $ ff);
Caixa de seleção8.CHecked: = ((b ou $ 7f) = $ ff);
fim;
Adicione um componente de caixa de seleção e a propriedade de legenda modificada é "Monitor Paralled Port" e adicione -o ao seu evento OnClick:
procedimento TFFORM1.CHECKBOX9CLICK (remetente: TObject);
Começar
Timer1.enabled: = Checkbox9.Checked;
fim;
Compile e execute o programa, clique em "Monitor paralelo" e você pode monitorar o status da porta de dados da porta paralela LPT1 378H e modificar seu status em tempo real.
Para facilitar a visualização e a verificação do status da porta de dados 378H, fiz um pequeno circuito de teste de porta paralela, que usa uma interface de impressão, 8 LEDs (diodos emissores de luz) e 8 resistores 1K. :
Após a conclusão do diagrama do circuito, instale -o na porta paralela do computador e execute o programa escrito para visualizar facilmente o potencial de cada bit da porta de dados 378H.
Por fim, vamos fazer outro experimento de lanterna giratória.
Declare primeiro uma variável global TB: adicione "TB: byte" abaixo "Form1: TForm1":
var
Form1: TForm1;
TB: byte;
Em seguida, adicione um cronômetro e uma caixa de seleção no Form1, modifique a propriedade Ativada do Timer2 para False, modifique a propriedade Interval para 300, clique com o timer2 do clique duas vezes e adicione-o ao seu evento notimer:
procedimento tform1.timer2timer (remetente: tobject);
var
B: Byte;
Começar
Se tb = 0 então
TB: = 1
outro
tb: = tb * 2;
Writeport (US $ 378, TB);
B: = readport (US $ 378);
Caixa de seleção1.CHecked: = ((b ou $ fe) = $ ff);
Caixa de seleção2.CHECKED: = ((b ou $ fd) = $ ff);
Checkbox3.Checked: = ((b ou $ fb) = $ ff);
Checkbox4.Checked: = ((b ou $ f7) = $ ff);
Caixa de seleção
Caixa de seleção6.CHecked: = ((b ou $ df) = $ ff);
Caixa de seleção7.CHecked: = ((b ou $ BF) = $ ff);
Caixa de seleção8.CHecked: = ((b ou $ 7f) = $ ff);
fim;
Modifique a propriedade Legenda da caixa de seleção10 para "Demonstração de luz giratória", depois clique duas vezes na caixa de seleção10 e adicione-a ao seu evento OnClick:
procedimento tform1.checkbox10Click (remetente: tabjas);
Começar
Timer2.Enabled: = Checkbox10.CHecked;
fim;
Compilar e executar o programa.
Clique em "Demonstração de lanterna giratória", você viu o efeito de "Lanterna giratória"? Ao modificar o intervalo do Timer2, você pode ajustar a velocidade.
NOTA: O método acima de incorporar o acesso ao conjunto de portas paralelas pode ser usado apenas em Win9x.
O programa acima foi testado e passado sob Win98+Delphi6.0