Раздел: Документация
0 ... 33 34 35 36 37 38 39 ... 105 (•-Библиотека ресурсов № A3 (считывание данных в компьютер) -*) Function Read status port(P address integer) integer, export, var bytel byte, begin bytel =port(P address+1),(«Считывание байта из регистра состояния *) bytel =byte1 and 120,(*01111000 (от старшего к младшему) and Odddd = OddddOOO «) Read status port =byte1 shr 3, («Сдвиг на 3 бита вправо, Read status port=0000hhhh «) end, (*- Библиотека ресурсов № А4 (запись в регистр данных) -*) Function Write data port(P address integer,port data integer) integer, export, («Биты регистра данных не инвертированы *) begin port(P address) =port data, («Ввод байта в регистр данных *) end («-Библиотека ресурсов № А5 (запись данных в регистр управления компьютера) -*) Function Write control port(P address integer, port data integer) integer, export, («Биты 0, 1 и 3 инвертированы Требуются преобразования над битами *) begin if port data and 1=1 then port data =port data and (255-1) else port data =port data or 1, if port data and 2=2 then port data =port data and (255-2) else port data =port data or 2 if port data and 8=8 then port data =port data and (255-8) else port data =port data or 8 port(P address+2) =port data, («Ввод байта данных в порт управления *) end («-Библиотека ресурсов № А6 (определение базовых адресов СОМ-портов) -*) Function RS232(x integer) integer, export, {Универсальное средство определения адресов СОМ-портов } (* $0000 $0400 содержит базовый адрес порта С0М1, $0000 $0402 содержит базовый адрес порта COM2, $0000 $0404 содержит базовый адрес порта COM3, $0000 $0406 содержит базовый адрес порта COM4, $0000 $0411 содержит количество СОМ-портов •) var number of C0M С0М1 COM2,COM3,COM4 integer, begin Number of C0M =mem($0000 $0411) («Считывание количества СОМ-портов ♦) Number of C0M =(Number of C0M and (8+4+2)) shr 1, C0M1 =0, COM2 =0, COM3 =0, COM4 =0, COM1 =memw($0000 $0400),(«Процедура считывания из памяти *) COM2 =memw($0000 $0402), COM3 =memw($0000 $0404), COM4 =memw($0000 $0406), Case х of
end; («-Библиотека ресурсов № А7 (запись в регистр разрешения прерываний).-») Function write interrupt enable(RS232 address, output byte:integer); export; begin port(RS232 address+1):=0utput byte; end; (♦-Библиотека ресурсов № A8 (чтение из регистра идентификации прерываний).-*) Function read interrupt identification(RS232 address:integer).-integer; export; begin read interrupt identification:=port(RS2132 address+2); end; (•-Библиотека ресурсов № A9 (запись в регистр формата данных).-*) Function Write data format(RS232 address, Baudx. Parity, Data bit, Stop bit:integer):integer; export; var bytel,byte2, output byte:byte; divisor:integer; baud:longint; begin baud:=baudx*100; divisor:=H5200 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 (запись данных в буферный регистр передатчика).-*) Function write transmit buffer(RS232 address,output byte:integer).integer; Export begin port(RS232 address):=output byte; end; (•-Библиотека ресурсов № A11 (запись данных в регистр состояния модема).-*) Function write modem status(RS232 address, RTS, DTR:integer):integer;export; (*RTS и DTR инвертируются с помощью MAX238 на экспериментальной плате.*) (*RTS=6ht 1, DTR=6ht 0 регистра управления модемом, смещение 04п.*) begin RTS:=1-RTS: DTR:=1-DTR; port(RS232 address+4):=RTS*2+DTR;(«Запись в регистр 04h.«) end; (♦-Библиотека ресурсов № А12 (чтение данных из буферного регистра приемника).-*) Function read receive buffer(RS232 address:integer):integer;export; begin read receive buffer:=port(RS232 address); end; (♦-Библиотека ресурсов № A13 (чтение данных из регистра состояния модема).-*) Function read modem status(RS232 address, х:integer):integer; export; («х=1 - выбор бита DCD, x=2 - выбор бита DSR, x=3 - выбор бита CTS.*) (*DCD=6ht 7, DSR=6ht 5, CTS=6ht 4 регистра состояния модема, смещение 06h.*) («Все биты инвертируются с помощью МАХ238 на экспериментальной плате.*) var input byte:byte; begin input byte:=port(RS232 address+6); case x of 1: Readjnodem status:=1-round((input byte and 128)/128); 2: Read modem status:=1-round((input byte and 32)/32); 3: Read modem status:=1-round((input byte and 16)/16); end; end; (•-Библиотека ресурсов № A14 (чтение регистра игрового порта).-*) Function read game port(bitx:integer):integer;export (•Адрес игрового порта: 201h. Bitx (1-8) выбирает состояние AX. AY, BX. BY, BA1, BA2, BB1 и BB2.*) var input byte:byte; begin input byte:=port($20l); read game port:=round((input byte and bit weight(bitx))/bit weight(bitx))); end; (•-Библиотека ресурсов № A15 (запись в регистр игрового порта).-*) Function write game port:integer; export; («Вводит 0 в игровой порт для запуска одновибратора.*) begin port($201):=0; end; (•-Библиотека ресурсов № А16 (получение длительности периода одновибратора).-*) Function interval game port(x:integer):integer; export; (*x выбирает AX(x=1), AY(x=2), BX(x=3), BY(x=4).*) var timel,time2,dummy:integer; Procedure init 8253; (•Настройка 8253.«) begin 0 ... 33 34 35 36 37 38 39 ... 105
|