Раздел: Документация
0 ... 22 23 24 25 26 27 28 ... 105 Windows (DLL) и впоследствии вызывать из любой программы для Windows, написанной на VB3, Visual С и т.д. Использование программ позволяет проследить основные операции ввода/вывода и провести простые эксперименты по сопряжению компьютера с внешними устройствами. 3.1. Программное обеспечение для экспериментальной платы параллельного порта В разделе представлены тексты программ управления экспериментальной платой параллельного порта и необходимые пояснения к ним. 3.1.1. Описание программы CENTEXP.PAS Программа выполняет следующие функции: О сообщает о количестве установленных на компьютере параллельных портов; О позволяет выбрать номер порта для дальнейшего использования; О изменяет состояние битов регистра данных (8 бит) и регистра управления (4 бита); О считывает данные из регистра состояния (4 бита). После запуска программы на экран выводится следующая информация: Number of LPT installed 2 Addresses for LPT1 to LPT4 888 632 0 0 Select LPT to be used (1,2,3 or 4) Первая строка показывает количество установленных на компьютере параллельных портов (в данном примере - два), вторая - их базовые адреса. Третья строка позволяет выбрать номер порта для дальнейшего использования, при этом на экран выводится виртуальная панель управления (рис. 3.1). На панели изображено 16 виртуальных светодиодов, соответствующих реальным светодиодам на экспериментальной плате. Восемь из них соотносятся с битами регистра данных, четыре - с битами регистра управления и оставшиеся четыре - с битами регистра состояния. Внизу экрана расположена панель помощи, на которой показаны клавиши управления программой с кратким описанием их функций: о [ARROW] (клавиши управления курсором) - выбор выходной линии; О [SPASE] (пробел) - изменение состояния выбранной линии; О [QJ или [q] - выход из программы. Нажимая на клавиши <- и -», можно указать одну из 12 линий, которые управляются компьютером. Выбранная линия помечается окружностью вокруг виртуального светодиода. Состояние светодиода изменяется нажатием на клавишу пробела; красный цвет свидетельствует о наличии высокого уровня. [ARROW]: Select a led[SPACE]: Change LED status[Q]: quit Key definition area Рис. 3.1. Виртуальная панель управления для экспериментальной платы параллельного порта Текст программы CENTEXP.PAS Р год ram Cent ronic Expe rimental Board. (•Программа управления экспериментальной платой параллельного порта *) uses graph,cit.dos: var l.led selected integer; ch char; status.array[1..18] of integer, key pressed:string[10]; (•Подключение двух библиотек: TLIB1 и TLIB2.») {$1 с \ioexp\tpliM.pas} {$1 с \ioexp\tplib2. pas} procedure Draw panel; («Рисование панели управления экспериментальной платой.*) begin (•Рисование 16 светодиодов на экране *) setbkcolor(cyan); for i:=1 to 16 do status[i]:=0; for i:=1 to 8 do draw led(30+i«30, 350, status[i]); for i:=1 to 8 do draw led(340+i*30, 350, status[8+i]); («Вывод названий.*) draw led(20,20,1); draw message(50,20,70,20, lightblue,LED ON,0,1,yellow); draw led(20,60,0); draw message(50,60,70,20,lightblue,LED OFF,0,1,yellow); draw message(50,390,230,20,blue, DATA PORT D1 - D8 ,0,1,yellow); draw message(360,390,110,20,blue, CONTROL D1 - D4 ,0,1,yellow); draw message(480,390,110,20,blue, STATUS D1 - D4 ,0,1,yellow); («Рисование панели помощи внизу.*) setfillstyle(1,magenta); bar(1,420,800,480); settextstyle(0,0,1); outtextxy(20,430,[ARROW]: Select a LED [SPACE]:Change LED status [0]:0uif); («Рисование центрального сообщения.*) draw message(60,200,500,50,blue,Centronic Experimental Board,0,1,yellow); («Инициализация выходов.*) write data port(p address,0); write control port(P address,0); end; Procedure 0utput lnput; («Процедура ввода/вывода.*) var output byte, input byte:byte; begin («Вычисление значения данных, передаваемых в порт данных.») output byte:=0; for i:=1 to 8 do output byte:=output byte+status[i]*bit weight(i); write data port(P address,output byte); («Вычисление значения данных, передаваемых в порт управления.») output byte:=0; for i:=9 to 12 do output byte:=output byte+status[i]*bit weight(i-8); write control port(P address,output byte); («Считывание данных из порта состояния и вычисление состояния светодиодов.*) input byte: = read status po rt(P add ress); for i:=1 to 4 do status[12+i]:=round((input byte and bit weight(i))/bit weight(i)); end; Procedure scan keyboard; («Опрос клавиатуры для обнаружения нажатия клавиши.*) var led selected old:integer; begin led selected old:=led selected; («Обнаружение нажатия клавиши.*) key pressed:=getkey; if key pressed=LEFT then led selected:=led selected-1; if key pressed=RIGHT then led selected:=led selected+1; if key pressed- then status[led selected]:=1-status[led selected]; («Показ виртуальных светодиодов и их состояния.*) setbkcolor(cyan): for i:=1 to 8 do draw led(30+i*30,350, status[i]); 0 ... 22 23 24 25 26 27 28 ... 105
|