Avatar billede cybermouse Nybegynder
26. august 2001 - 13:25 Der er 3 kommentarer og
1 løsning

simpel hjælp til pascal

jeg har en kode som jeg gerne vil have rettet lidt til
http://home19-upload.inet.tele.dk/dsv/adam.PAS
lige nu fungerer programmet ved at det går ud og spørger mig om en streng som den så sender til com porten og så skriver den svaret fra comporten tilbage det som jeg gerne vil have programmet til er at sende følg. til comporten og så ellers gå ud af programmet (det skal nemligt lægges i en batch fil) koden er #010001 og svaret som jeg får tilbage kan være lige gyldigt og jeg vil og så gerne have en med koden #010000 hvis i bare retter koden compiler jeg den selv i pascal det burde være meget let bortset fra hvis man som mig intet kender til pascal :)
jeg skulle mene det ville være lettest hvis man bare fik den til at lægge koden op i rammen i stedet for at spørge om den da den tager koden fra rammen når den sender den til com porten
p.s. jeg har og så den samme kode til c++ da kan jeg desværre bare ikke selv compile den da jeg ikke har nogen compilere liggende til c++
p.p.s det er adam moduler det skal bruges til hvis nogen er interreset
Avatar billede hkramer Nybegynder
26. august 2001 - 14:22 #1
Medenstående pascal-kode tager en parameter istedet, således at du kan kalde dit program med :
adam.exe #010000

uses Dos, Drivers;

const COM1=0;
      TIME_OUT=$7000;
      BASE = $3f8;
var i, r, timeout ,flag : Integer;
    str, rec : String;

function bioscom(cmd:Integer; char:Byte; port:Integer):Integer;
var regs : Registers;
begin
    regs.ah := cmd;
    regs.al := char;
    regs.dx := port;
    intr($14,regs);
    bioscom := regs.ax;
end;

begin
    { set RS-232 COM1 to 9600 bps, no parity, 8 data bit, 1 stop bit }
    r := bioscom(0, $e3, COM1);
{    write(\'Input command : \');
    readln(str); }
    str = paramstr(1);
{    while ((str[1] <> \'q\') and (str[1] <> \'Q\')) do
    begin }
    str[length(str)+1] := chr(13);

    i := 1;
    repeat
    begin
        {  Send data  }
        port[BASE] := ord(str[i]);
        i := i+1;
        {  Wiat until transmitter shift register empty  }
        repeat
        until (port[BASE+5] and 64) = 64;
    end
    until ord(str[i-1])    = 13;

    i := 1;
    flag := 1;
    timeout := TIME_OUT;
    repeat
    begin
        {  Check receiver data ready?  }
        if ((port[BASE+5] and 1) = 1) then
        begin
            {  Receive data  }
            rec[i]:=chr(port[BASE]);
            if (ord(rec[i]) = 13) then
            begin
                flag:=0;
                rec[0] := chr(i);
                writeln(\'Received data : \',rec);
            end;
            i := i+1;
        end
        else
        begin
            {  Check timeout  }
            timeout := timeout-1;
            if timeout = 0 then
            begin
                flag := 0;
                writeln(\'Timeout error\');
            end
        end
    end
    until flag = 0;
{    write(\'Input command : \');
    readln(str); }

{    end; }
end.
Avatar billede cybermouse Nybegynder
26. august 2001 - 16:17 #2
ok jeg tester lige om den dur :)
Avatar billede cybermouse Nybegynder
26. august 2001 - 16:50 #3
jeg får følg. fejl når jeg vil compile
Error 91: \":=\" expected
fejlen er i linje 24 colonne 9 hvis det hjælper min compiler er turbo pascal 5.5
Avatar billede cybermouse Nybegynder
26. august 2001 - 17:10 #4
hov jeg har selv fundet og rettet fejlen så nu virker det tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester