Assembler no Delphi - Porta Serial

Delphi

19/05/2004

[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]


Alaubr

Alaubr

Curtidas 0

Respostas

Alaubr

Alaubr

19/05/2004

SOBE


GOSTEI 0
Kroki

Kroki

19/05/2004

Aonde vc definiu a largura dos bytes,a frequencia etc..?


GOSTEI 0
Beppe

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

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;


GOSTEI 0
Alaubr

Alaubr

19/05/2004

SOBE


GOSTEI 0
POSTAR