Witam
Piszę program w trybie tekstowym do sterowania silników krokowych przez LPT. Wystąpił jednak następujący problem:
Program wykożystuje licznik wykonań pętli z opóźnieniem DELAY(1) do sterowania odstępów między kolejnymi impulsami dla silników. W programie jest użyte czekanie na powrót pionowy monitora, aby usunąć mruganie ekranu. Problem w tym, że czekanie na powrót pionowy bardzo spowalnia działanie programu.
Poniżej przykładowy program pokazujący o co mi chodzi. Gdy uruchomi się go bez czekania na powrót pionowy to kolor napisu zmienia się co sekundę. Gdy czekanie na powrót pionowy jest włączone to (u mnie) kolor napisu zmienia się co około 15 sekund. Jak ustawić właściwe opóźnienie nie rezygnując z likwidacji mrugania??? Przecież nie mogę dla DELAY użyć parametru ułamkowego, aby odpowiednio zmniejszyć opóźnienie (do sterowania silników używam czas od 10 ms do 1000 ms).
Poniższy program należy uruchomić BEZ lub Z komendą "czekaj_na_odswiezanie;", aby zobaczyć na czym polega problem.
program przyklad;
uses crt;
var
kolor : byte;
czas, czas_temp : word;
procedure czekaj_na_odswiezanie;
begin
asm
mov dx, 3dah
@trwa:
in al, dx
test al, 00001000b
jnz @trwa
@nie_ma:
in al, dx
test al, 00001000b
jz @nie_ma
end;
end;
begin
kolor:=1;
czas:=1000;
clrscr;
while(1=1) do
begin
czekaj_na_odswiezanie; { eliminacja mrugania ekranu }
clrscr; { uzyte dla pokazania mrugania (lub braku) ekranu }
textcolor(kolor);
gotoxy(1,1);
write('Kolor napisu jest zmieniany co 1 sekunde...');
if (czas_temp>czas) then
begin
czas_temp:=1;
inc (kolor);
if (kolor>15) then kolor:=1;
end;
inc (czas_temp);
delay(1);
if keypressed then halt;
end;
end.