Распознавание данных из СОМ-порта - Free Pascal
Формулировка задачи:
Хелпаните с лабой комрады.
Собственно само задание: составить программу считывания данных из СОМ-порта, генерируемых манипулятором Мышь. Serial Mouse — мышь с последовательным интерфейсом, подключаемая через 9- или 25-контактный разъем СОМ-порта
Собственно сам код проги:
Программа не компилируется. Как исправлять я не знаю поэтому и прошу помощи. Вообщем помогите откомпилить прогу.
program ComMouse; uses Crt, Graph; {type TTryData =} var { Data } Dat0, Dat1, Dat2, Dat3, Dat4 : Byte; PortAdr : Word; { Mouse } LBut, MBut, RBut : Boolean; PX, PY : Integer; function TryMS : boolean; far; var r : Boolean; begin r := False; asm MOV DX, PortAdr ADD DX, 5 IN AL, DX TEST AL, 01h JZ @x SUB DX, 5 IN AL, DX TEST AL, 40h JZ @x MOV Dat0, AL ADD DX, 5 @1: IN AL, DX TEST AL, 80h JNZ @x TEST AL, 01h JZ @1 SUB DX, 5 IN AL, DX MOV Dat1, AL ADD DX, 5 @2: IN AL, DX TEST AL, 80h JNZ @x TEST AL, 01h JZ @2 SUB DX, 5 IN Al, DX MOV Dat2, AL MOV AH, Dat0 SHL AH, 6 MOV AL, Dat1 AND AL, 3Fh OR AH, AL SAR AX, 8 ADD PX, AX MOV AH, Dat0 AND AH, 0Ch SHL AH, 4 MOV AL, Dat2 AND AL, 3Fh OR AH, AL SAR AX, 8 ADD PY, AX MOV AL, Dat0 MOV LBut, False TEST Al, 20h JZ @r MOV LBut, True @r: MOV MBut, False MOV RBut, False TEST Al, 10h JZ @t MOV RBut, True @t: MOV r, True @x: end; TryMS := r; end; function TryPC : boolean; far; var r : Boolean; begin r := False; asm MOV DX, PortAdr ADD DX, 5 IN AL, DX TEST AL, 01h JZ @x SUB DX, 5 IN AL, DX MOV AH, AL AND AH, $F8 CMP AH, 80h JNE @x MOV Dat0, AL ADD DX, 5 @1: IN AL, DX TEST AL, 80h JNZ @x TEST AL, 01h JZ @1 SUB DX, 5 IN AL, DX MOV Dat1, AL ADD DX, 5 @2: IN AL, DX TEST AL, 80h JNZ @x TEST AL, 01h JZ @2 SUB DX, 5 IN Al, DX MOV Dat2, AL ADD DX, 5 @3: IN AL, DX TEST AL, 80h JNZ @x TEST AL, 01h JZ @3 SUB DX, 5 IN Al, DX MOV Dat3, AL ADD DX, 5 @4: IN AL, DX TEST AL, 80h JNZ @x TEST AL, 01h JZ @4 SUB DX, 5 IN Al, DX MOV Dat4, AL MOV AH, Dat1 SAR AX, 8 ADD PX, AX MOV AH, Dat2 SAR AX, 8 SUB PY, AX MOV AL, Dat0 MOV RBut, False TEST Al, 01h JNZ @r MOV RBut, True @r: MOV MBut, False TEST Al, 02h JNZ @s MOV MBut, True @s: MOV LBut, False TEST Al, 04h JZ @t MOV LBut, True @t: MOV r, True @x: end; TryPC := r; end; type TTryMouse = function : Boolean; var TryMouse : TTryMouse; procedure InitPC; begin asm MOV AX, 40h MOV ES, AX MOV DX, ES:[0] MOV PortADR, DX ADD DX, 3 MOV AL, 10000000b OUT DX, AL SUB DX, 2 XOR AL, AL OUT DX, AL DEC DX MOV AL, 60h OUT DX, AL MOV AL, 00000011b ADD DX, 3 OUT DX, AL SUB DX, 2 MOV AL, 0 OUT DX, AL XOR AX, AX MOV PX, AX MOV PY, AX end; TryMouse := TryPC; end; procedure InitMS; begin asm MOV AX, 40h MOV ES, AX MOV DX, ES:[0] MOV PortADR, DX ADD DX, 3 MOV AL, 10000000b OUT DX, AL SUB DX, 2 XOR AL, AL OUT DX, AL DEC DX MOV AL, 60h OUT DX, AL MOV AL, 00000010b ADD DX, 3 OUT DX, AL SUB DX, 2 MOV AL, 0 OUT DX, AL XOR AX, AX MOV PX, AX MOV PY, AX end; TryMouse := TryMS; end; procedure UpDatePicture; const Page : integer = 0; var C : Word; S : String; begin Page := Page xor 1; SetActivePage(Page); SetBkColor(Black); ClearDevice; SetColor(White); OutTextXY(10,10,'Press Q to exit'); OutTextXY(10,20,'Press P to Init PC-Mouse'); OutTextXY(10,30,'Press M to Init MS-Mouse'); Str(PX,S); OutTextXY(GetMaxX-80,GetMaxY-10,S); Str(PY,S); OutTextXY(GetMaxX-40,GetMaxY-10,S); end; var GrDriv, GrMode : Integer; begin { Init Graph Section } GrDriv := VGA; InitGraph(GrDriv,GrMode,'С:\BP\BGI'); UpDatePicture; { Maim Program Loop } while true do begin { Read A Command } if KeyPressed then case ReadKey of 'Q','q' : break; 'M','m' : InitMS; 'P','p' : InitPC; end; { Read A Mouse } if Assigned(TryMouse) then if TryMouse then UpDatePicture; end; CloseGraph; end.
Решение задачи: «Распознавание данных из СОМ-порта»
textual
Листинг программы
var f:text; s:string; begin assign(f,'COM1'); reset(f); readln(f,s); writeln(s); close(f); end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д