Раздел: Документация
0 ... 30 31 32 33 34 35 36 ... 105 Next 1 End Sub Sub 0ption1 Click(index As Integer) led selected=index+1 End Sub Sub 0ption1 MouseMove (index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Label6.Caption="Select No." & index+1 & "resistance input channel" End Sub Function resistance(ByVal period As Single) As Single dummy2=(interval R(led selected)-interval 0(led selected)) If Abs(dummy2)<.001 Then dummy2=1 dummy=Standard r(led selected)/dumrny2*(period-interval 0(led selected)) If Abs(dummy)>200 Then resistance=200 Else resistance=dummy End Function 3.4. Программные библиотеки ресурсов Ниже приведены тексты библиотек ресурсов ТР6 (TPLIB1.PAS и TPLIB2.PAS для DOS) и библиотеки динамической компоновки для Windows (WLIB.PAS). Подробные комментарии к процедурам и функциям даны в тексте. Библиотека ресурсов TP LIB 1. PAS («Библиотека ресурсов TP6 № 1.*) («Название библиотеки: TPLIB1.PAS.*) («Процедуры для управления параллельным, последовательным и игровым портами *) («Эта библиотека может быть включена в пользовательскую программу.*) var P address,RS232 address:integer; (♦-Библиотека ресурсов № А1 (определение базового адреса LPT) -*) Procedure Centronic Address (* $000:$0408 содержит базовый адрес для LPT1 :$040А содержит базовый адрес для LPT2 :$040С содержит базовый адрес для LPT3 :$040В содержит базовый адрес для LPT4 :$0411 содержит количество параллельных портов *) var lpt:array[1. .4] of integer; питЬе r of lpt,LPT number,code:integer; kbchar:char; begin clrscr; LPT number:=1;(Для установки принтера no умолчанию *) number of lpt:=mem($0000:$0411); («Считывание количества установленных параллельных портов *) number of lpt:=(nU(riber of lpt and (128+64)) shr 6,(«Битовые преобразования.») lpt[1]:=memw($0000:$0408) lpt[2]:=memw($0000:$040A) lpt[3]:=memw($0000:$040C) («Процедура считывания из памяти. lpt[4] =memw($0000 $040Е) textbackground(blue) clrscr, textcolor(yellow) textbackground(red), window(10,22,70,24), clrscr, wnteln( Number of LPT installed number of lpt 2), writeln( Addresses for LPT1 to LPT4 , lpt[1] 3, ,lpt[2] 3, ,lpt[3] 3 lpt[4] 3), write( Select LPT to be used(1,2,3,4) ), delay(1000), if number of lpt>1 then begin {Выбор порта, если установлено несколько портов } repeat kbchar =readkey,(«Считывание значения с вводимой клавиши «) val(kbchar, LPT number,code), («Преобразование символа в число *) until (LPT number>=1) and (LPT number<=4) and (lpt[LPT number]<>0), end, clrscr P address =lpt[LPTJumber], writeln( Your selected printer interface LPT",LPT number 1), write( LPT address ,RS232 address 3), delay(1000) textbackground(black) window(1 1 80,25), clrscr, end, («-Библиотека ресурсов № A2 (нахождение веса бита) -*) Function bit weight(bit byte) byte, var i,dummy integer begin if bit=1 then bit weight =1 else begin dummy =1 for i =1 to bit-1 do dummy =2*dummy, if dummy=0 then dummy =1, bit weight =dummy, end end («-Библиотека ресурсов № A3 (считывание данных в компьютер) -«) Function Read status port(P address integer) byte, 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 (запись данных в регистр данных компьютера) -*) Procedure Write data port(P address integer, port data byte), («Линии порта данных не инвертированы *) («Ввод байта в регистр данных.*) begin port(P address):=port data; end; (•-Библиотека ресурсов № А5 (запись данных в регистр управления).- Procedure Write control port(P address:integer; port data:byte); (*Биты 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; end; port(P address+2):=port data; (*Ввод байта данных в регистр управления.*) (♦-Библиотека ресурсов № А6 (определение базовых адресов СОМ-портов).-*) Procedure COM address; (* $0000:$0400 содержит базовый адрес порта С0М1, $0000 $0000 $0000 $0402 содержит базовый адрес порта COM2, $0404 содержит базовый адрес порта COM3, $0406 содержит базовый адрес порта COM4, $0411 содержит количество СОМ-портов.*) var СОМ:аггау[ 1. .4] of integer; C0M number,number of C0M,code:integer Kbchanchar; begin clrscr; C0M number:=1; Number.of C0M:=mem($0000:$0411); («Установка порта по умолчанию.*) («Считывание количества СОМ-портов.*) Number of C0M;=(Number of C0M and (8+4+2)) shr 1; С0М[1] С0М[2] С0М[3] С0М[4] =memw($0000 =memw($0000 =memw($0000 =memw($0000 $0400) $0402) $0404) $0406) («Процедура считывания из памяти.*) textbackground(blue); clrscr; textcolor(yellow); Textbackground(red); wmdow(l0,22,70,24); clrscr; writeln(Number of COM installed:, Number of C0M:2); writeln(Addresses for C0M1 to COM4:, C0M[1]:3, C0H[2]:3, C0M[3]:3, C0M[4]:3); wnte(Select COM to be used (1,2.3,4):); delay(lOOO); if number of C0M>1 then begin (*Выбор порта, если установлено несколько портов.*) repeat kbchar:=readkey;(«Считывание значения с вводимой клавиши.*) val(kbchar,C0M number,code); («Преобразование символа в число.*) until (C0M number>=1) and (C0M number<=4) and (C0M[C0M number]<>0); end; clrscr; RS232 address:=C0M[C0M number]; writeln("Your selected RS232 interface: COM, C0M number:1); write(RS232 address:, RS232 address:4); 0 ... 30 31 32 33 34 35 36 ... 105
|