Раздел: Документация
0 ... 31 32 33 34 35 36 37 ... 105 delay(1000); Textbackground(black); window(1,1,80,25); clrscr; end; (•-Библиотека ресурсов № A7 (запись в регистр разрешения прерываний).-») Procedure write interrupt enable(RS232 address, output.byte:integer); begin port(RS232 address+1):=0utput byte; end; (•-Библиотека ресурсов № A8 (чтение из регистра идентификации прерываний).-*) Function read interrupt identification(RS232 address:integer):integer; begin read interrupt identification:=port(RS2132 address+2); end; (•-Библиотека ресурсов ft A9 (запись данных в регистр формата данных).-*) Procedure Write data format (RS232 address, Baud, Parity, 0ata bit, Stop bit:integer); var bytel, byte2,output byte:byte; divisor:integer; begin divisor:=115200 div Baud; if divisor<=255 then begin bytel:=divisor; byte2:=0; end; if divisor>255 then begin bytel:=divisor mod 256; byte2:=divisor div 256; end; output byte:=(data bit-5)+4*(stop bit-1)+8*parity; port(RS232 address+3):=128;{Загрузка формата последовательных данных, первый бит регистра равен 1.} port(RS232 address+0):=byte1;{Младший байт делителя равен 1.) port(RS232 address+1):=byte2;{Старший байт делителя равен 0.) port(RS232 address+3):=output byte; {Загрузка делителя и других параметров.) end; (•-Библиотека ресурсов № А10 (запись данных в буферный регистр передатчика).-*) Procedure write transmit buffer(RS232 address,output byte:integer); begin port(RS232 address):=output byte; end; (•-Библиотека ресурсов № A11 (запись данных в регистр состояния модема).-*) procedure wnte modem status(RS232 address, RTS, DTR:integer); (•RTS и DTR или 1, или 0. RTS и DTR инвертируются с помощью МАХ238 на экспериментальной плате.*) (*RTS=6ht 1, DTR=6ht 0 регистра управления модемом, смещение 04h.«) begin RTS;=1-RTS; DTR:=1-DTR; port(RS232 address+4):=RTS*2+DTR;(«Запись в регистр 04h.*) end; (♦-Библиотека ресурсов № A12 (чтение данных из буферного регистра приемника).-*) Function read receive buffer(RS232 address:integer):integer; Begin read receive buffer:=port(RS232 address); end; (♦-Библиотека ресурсов № А13 (чтение данных из регистра состояния модема).-*) Function read modem status(RS232 address, х:integer):integer; (*х=1 - выбор бита DCD, х=2 - выбор бита DSR, х=3 - выбор бита CTS.*) (*DCD=6ht 7, DSR=6kt 5, СТБ=бит 4 регистра состояния модема, смещение 06h.») (•Все биты инвертируются с помощью МАХ238 на экспериментальной плате.*) var input byte:byte; begin input byte:=port(RS232 add ress+6); case x of 1: Read modem status-=1-round((input byte and 128)/128); 2: Read modem status:=1-round((input byte and 32)/32); 3: Read mode(n status:=1-round((input byte and 16)/16); end; end; («-Библиотека ресурсов № A14 (чтение регистра игрового порта).-*) Function read game port(bitx:integer):integer; (♦Адрес игрового порта: 201h. Bitx (1-8) выбирает состояние АХ, AY, BX, BY, ВА1, ВА2, ВВ1 и ВВ2.*) var input byte:byte; begin input byte:=port($201); read game port :=round((input byte and bit weight(bitx))/bitjveight(bitx)); end; (♦-Библиотека ресурсов № A15 (запись в регистр игрового порта).-♦) Function write game port; (♦Вводит 0 в игровой порт для запуска мультивибратора.♦) begin port($201):=0; end; (♦-Библиотека ресурсов № А16 (получение длительности периода одновибратора).-♦) Function interval game port(x:integer):integer; (♦x выбирает AX(x=1), AY(x=2), BX(x=3), BY(x=4).*) var timel, time2,dummy:integer; Procedure init 8253; (♦Настройка 8253.*) begin («Управляющее слово = b6h = 10110110b: 10= выбор счетчика 2; 11= сначала чтение/запись младшего байта, затем старшего; 011 = режим 3; 0 = шестнадцатибитовый двоичный счет.*) port($43):=$Ь6;(«Запись слова в управляющий регистр 8253.*) port($42):=255;(«Загрузка младшего байта.*) port($43):=255;(«Загрузка старшего байта.*) port($61) =port($61) or 1 («Выключение динамика *) port($43) =$80(*80h - команда фиксации для счетчика 3 *) end, Function read 8253 integer, («Считывание младшего и старшего байтов счетчика ♦) var low byte high byte byte, begin low byte =port($42), high byte =port($43), read 8253 =low byte+256«high byte, end, var l integer, begin imt 8253, for l =1 to 100 do l =i, l =0, dummy =bit weight(x), port($201) =0, timel =read 8253, repeat l =i+1 until (port($201) and dummy=0) or (i>=5000), time2 =read 8253, interval game port =time2-time1, if i>=5000 then interval game port =0, end, Библиотека ресурсов TPLIB2.PAS («Библиотека ресурсов ТР6 № 2 *) («Название библиотеки TPLIB2 PAS *) («Процедуры для управления графикой и чтения клавиатуры *) («Эта библиотека может быть включена в пользовательскую программу *) («-Библиотека ресурсов N1 01 (инициализация графического режима) -*) Procedure initialize graph, var gd.gm integer, radius integer, begin gd =detect, imtgraph(gd, gm, ), end, («-Библиотека ресурсов N1 02 (рисование светодиода) -*) procedure draw led(x,y integer, status byte) («X и Y - координаты центра Status - включено или выключено ») begin setcolor(red) setlinestyle(1 1 2), if status=1 then setfillstyle(1,red) else begin setcolor(white), setfillstyle(1,white) end, 0 ... 31 32 33 34 35 36 37 ... 105
|