Распознавание данных из СОМ-порта - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Хелпаните с лабой комрады. Собственно само задание: составить программу считывания данных из СОМ-порта, генерируемых манипулятором Мышь. Serial Mouse — мышь с последовательным интерфейсом, подключаемая через 9- или 25-контактный разъем СОМ-порта Собственно сам код проги:
Листинг программы
  1. program ComMouse;
  2. uses
  3. Crt, Graph;
  4. {type
  5. TTryData =}
  6. var
  7. { Data }
  8. Dat0, Dat1, Dat2, Dat3, Dat4 : Byte;
  9. PortAdr : Word;
  10. { Mouse }
  11. LBut, MBut, RBut : Boolean;
  12. PX, PY : Integer;
  13. function TryMS : boolean; far;
  14. var
  15. r : Boolean;
  16. begin
  17. r := False;
  18. asm
  19. MOV DX, PortAdr
  20. ADD DX, 5
  21. IN AL, DX
  22. TEST AL, 01h
  23. JZ @x
  24. SUB DX, 5
  25. IN AL, DX
  26. TEST AL, 40h
  27. JZ @x
  28. MOV Dat0, AL
  29. ADD DX, 5
  30. @1: IN AL, DX
  31. TEST AL, 80h
  32. JNZ @x
  33. TEST AL, 01h
  34. JZ @1
  35. SUB DX, 5
  36. IN AL, DX
  37. MOV Dat1, AL
  38. ADD DX, 5
  39. @2: IN AL, DX
  40. TEST AL, 80h
  41. JNZ @x
  42. TEST AL, 01h
  43. JZ @2
  44. SUB DX, 5
  45. IN Al, DX
  46. MOV Dat2, AL
  47. MOV AH, Dat0
  48. SHL AH, 6
  49. MOV AL, Dat1
  50. AND AL, 3Fh
  51. OR AH, AL
  52. SAR AX, 8
  53. ADD PX, AX
  54. MOV AH, Dat0
  55. AND AH, 0Ch
  56. SHL AH, 4
  57. MOV AL, Dat2
  58. AND AL, 3Fh
  59. OR AH, AL
  60. SAR AX, 8
  61. ADD PY, AX
  62. MOV AL, Dat0
  63. MOV LBut, False
  64. TEST Al, 20h
  65. JZ @r
  66. MOV LBut, True
  67. @r: MOV MBut, False
  68. MOV RBut, False
  69. TEST Al, 10h
  70. JZ @t
  71. MOV RBut, True
  72. @t: MOV r, True
  73. @x:
  74. end;
  75. TryMS := r;
  76. end;
  77. function TryPC : boolean; far;
  78. var
  79. r : Boolean;
  80. begin
  81. r := False;
  82. asm
  83. MOV DX, PortAdr
  84. ADD DX, 5
  85. IN AL, DX
  86. TEST AL, 01h
  87. JZ @x
  88. SUB DX, 5
  89. IN AL, DX
  90. MOV AH, AL
  91. AND AH, $F8
  92. CMP AH, 80h
  93. JNE @x
  94. MOV Dat0, AL
  95. ADD DX, 5
  96. @1: IN AL, DX
  97. TEST AL, 80h
  98. JNZ @x
  99. TEST AL, 01h
  100. JZ @1
  101. SUB DX, 5
  102. IN AL, DX
  103. MOV Dat1, AL
  104. ADD DX, 5
  105. @2: IN AL, DX
  106. TEST AL, 80h
  107. JNZ @x
  108. TEST AL, 01h
  109. JZ @2
  110. SUB DX, 5
  111. IN Al, DX
  112. MOV Dat2, AL
  113. ADD DX, 5
  114. @3: IN AL, DX
  115. TEST AL, 80h
  116. JNZ @x
  117. TEST AL, 01h
  118. JZ @3
  119. SUB DX, 5
  120. IN Al, DX
  121. MOV Dat3, AL
  122. ADD DX, 5
  123. @4: IN AL, DX
  124. TEST AL, 80h
  125. JNZ @x
  126. TEST AL, 01h
  127. JZ @4
  128. SUB DX, 5
  129. IN Al, DX
  130. MOV Dat4, AL
  131.  
  132. MOV AH, Dat1
  133. SAR AX, 8
  134. ADD PX, AX
  135. MOV AH, Dat2
  136. SAR AX, 8
  137. SUB PY, AX
  138. MOV AL, Dat0
  139. MOV RBut, False
  140. TEST Al, 01h
  141. JNZ @r
  142. MOV RBut, True
  143. @r: MOV MBut, False
  144. TEST Al, 02h
  145. JNZ @s
  146. MOV MBut, True
  147. @s: MOV LBut, False
  148. TEST Al, 04h
  149. JZ @t
  150. MOV LBut, True
  151. @t: MOV r, True
  152. @x:
  153. end;
  154. TryPC := r;
  155. end;
  156. type
  157. TTryMouse = function : Boolean;
  158. var
  159. TryMouse : TTryMouse;
  160. procedure InitPC;
  161. begin
  162. asm
  163. MOV AX, 40h
  164. MOV ES, AX
  165. MOV DX, ES:[0]
  166. MOV PortADR, DX
  167. ADD DX, 3
  168. MOV AL, 10000000b
  169. OUT DX, AL
  170. SUB DX, 2
  171. XOR AL, AL
  172. OUT DX, AL
  173. DEC DX
  174. MOV AL, 60h
  175. OUT DX, AL
  176. MOV AL, 00000011b
  177. ADD DX, 3
  178. OUT DX, AL
  179. SUB DX, 2
  180. MOV AL, 0
  181. OUT DX, AL
  182. XOR AX, AX
  183. MOV PX, AX
  184. MOV PY, AX
  185. end;
  186. TryMouse := TryPC;
  187. end;
  188. procedure InitMS;
  189. begin
  190. asm
  191. MOV AX, 40h
  192. MOV ES, AX
  193. MOV DX, ES:[0]
  194. MOV PortADR, DX
  195. ADD DX, 3
  196. MOV AL, 10000000b
  197. OUT DX, AL
  198. SUB DX, 2
  199. XOR AL, AL
  200. OUT DX, AL
  201. DEC DX
  202. MOV AL, 60h
  203. OUT DX, AL
  204. MOV AL, 00000010b
  205. ADD DX, 3
  206. OUT DX, AL
  207. SUB DX, 2
  208. MOV AL, 0
  209. OUT DX, AL
  210. XOR AX, AX
  211. MOV PX, AX
  212. MOV PY, AX
  213. end;
  214. TryMouse := TryMS;
  215. end;
  216. procedure UpDatePicture;
  217. const
  218. Page : integer = 0;
  219. var
  220. C : Word;
  221. S : String;
  222. begin
  223. Page := Page xor 1;
  224. SetActivePage(Page);
  225. SetBkColor(Black);
  226. ClearDevice;
  227. SetColor(White);
  228. OutTextXY(10,10,'Press Q to exit');
  229. OutTextXY(10,20,'Press P to Init PC-Mouse');
  230. OutTextXY(10,30,'Press M to Init MS-Mouse');
  231. Str(PX,S);
  232. OutTextXY(GetMaxX-80,GetMaxY-10,S);
  233. Str(PY,S);
  234. OutTextXY(GetMaxX-40,GetMaxY-10,S);
  235. end;
  236. var
  237. GrDriv, GrMode : Integer;
  238. begin
  239. { Init Graph Section }
  240. GrDriv := VGA;
  241. InitGraph(GrDriv,GrMode,'С:\BP\BGI');
  242. UpDatePicture;
  243. { Maim Program Loop }
  244. while true do
  245. begin
  246. { Read A Command }
  247. if KeyPressed then
  248. case ReadKey of
  249. 'Q','q' : break;
  250. 'M','m' : InitMS;
  251. 'P','p' : InitPC;
  252. end;
  253. { Read A Mouse }
  254. if Assigned(TryMouse) then
  255. if TryMouse then
  256. UpDatePicture;
  257. end;
  258. CloseGraph;
  259. end.
Программа не компилируется. Как исправлять я не знаю поэтому и прошу помощи. Вообщем помогите откомпилить прогу.

Решение задачи: «Распознавание данных из СОМ-порта»

textual
Листинг программы
  1. var
  2.   f:text;
  3.   s:string;
  4. begin
  5.   assign(f,'COM1');
  6.   reset(f);
  7.   readln(f,s);
  8.   writeln(s);
  9.   close(f);
  10. end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы