Assembler no Delphi - Porta Serial
[b:0ff4e610c7] Olá pessoal.
Estou com um problema meio urgente: Preciso fazer a leitura da minha porta serial com assembler. Por exemplo, eu preciso ler uma string. Claro, na porta serial vem somente ascii, um caracter por vez. Mas quando é enviado para minha serial a string ´ABC´ são enviados os ascii #65, depois o 66, o 67 e no final um 13.
Estou usando o seguinte código em um timer mas não consigo ler um caracter após o outro. Se for enviado um caracter ele lê certo, depois enviado outro também. Mas o problema é que quando é enviado vários caracteres de uma só vez eu não consigo ler todos, um após o outro.
var
A : Byte;
begin
A := 0;
asm
mov dx,$3FA //COM1
in al,dx
mov A,al
end;
if A > 0 then
Memo1.Lines.Add(IntToStr(A)); //Mostra em um Memo o ascii recebido
Agradeço desde já a colaboração de todos.
Abraços,
Alau.
[/b:0ff4e610c7]
Estou com um problema meio urgente: Preciso fazer a leitura da minha porta serial com assembler. Por exemplo, eu preciso ler uma string. Claro, na porta serial vem somente ascii, um caracter por vez. Mas quando é enviado para minha serial a string ´ABC´ são enviados os ascii #65, depois o 66, o 67 e no final um 13.
Estou usando o seguinte código em um timer mas não consigo ler um caracter após o outro. Se for enviado um caracter ele lê certo, depois enviado outro também. Mas o problema é que quando é enviado vários caracteres de uma só vez eu não consigo ler todos, um após o outro.
var
A : Byte;
begin
A := 0;
asm
mov dx,$3FA //COM1
in al,dx
mov A,al
end;
if A > 0 then
Memo1.Lines.Add(IntToStr(A)); //Mostra em um Memo o ascii recebido
Agradeço desde já a colaboração de todos.
Abraços,
Alau.
[/b:0ff4e610c7]
Alaubr
Curtidas 0
Respostas
Alaubr
19/05/2004
SOBE
GOSTEI 0
Kroki
19/05/2004
Aonde vc definiu a largura dos bytes,a frequencia etc..?
GOSTEI 0
Beppe
19/05/2004
Pq vc naum continua lendo os bytes da porta, até que surja uma condição de erro(sem mais bytes de entrada). Ler coisas de uma porta é uma coisa que ainda naum fiz, mas deve ser indicado este erro de alguma forma, não?
GOSTEI 0
Alaubr
19/05/2004
Primeiramente obrigado pela atenção.
Eu inicializo as configurações da porta no onshow:
asm
mov DX,$3FB
mov AL,131 // Será informada a velocidade
out DX,AL
mov DX,$3F9
mov AL,$0
out DX,AL
mov DX,$3F8
mov AL,$C // 9600 bps
out DX,AL
mov DX,$3FB
mov AL,$03 // Databits=8, StopBits=1, Sem Paridade
out DX,AL
Na verdade eu continuo lendo a serial, pois a rotina de leitura está em um timer de timeout=1. Só que se é enviado #65+66+67 + 13 (´ABC´), só recebo o 65 continuamente, ou seja, eu fico sempre recebendo o 65.
É como se o buffer com o primeiro caractere não estivesse sendo limpo após a leitura.
Agradeço a ajuda.
end;
Eu inicializo as configurações da porta no onshow:
asm
mov DX,$3FB
mov AL,131 // Será informada a velocidade
out DX,AL
mov DX,$3F9
mov AL,$0
out DX,AL
mov DX,$3F8
mov AL,$C // 9600 bps
out DX,AL
mov DX,$3FB
mov AL,$03 // Databits=8, StopBits=1, Sem Paridade
out DX,AL
Na verdade eu continuo lendo a serial, pois a rotina de leitura está em um timer de timeout=1. Só que se é enviado #65+66+67 + 13 (´ABC´), só recebo o 65 continuamente, ou seja, eu fico sempre recebendo o 65.
É como se o buffer com o primeiro caractere não estivesse sendo limpo após a leitura.
Agradeço a ajuda.
end;
GOSTEI 0
Alaubr
19/05/2004
SOBE
GOSTEI 0