- •1. Паралельний і послідовний порти
- •Лабораторна робота №1 Тема: Управління об’ктами за допомогою lpt порта пк.
- •1.1. Паралельний порт
- •1.1.2. Внутрішній пристрій
- •Група даних
- •Група управління
- •Група стану
- •1.1.3. Програмне управління Отримання базової адреси паралельного порту
- •Ввід/вивід даних через паралельний порт
- •Команди принтера і процедури переривань bios
- •Безпосередній доступ до регістрів порту
- •Вага біта
- •Лабораторна робота №2 Тема: Управління об’ктами за допомогою сом порта пк.
- •1.2. Послідовний інтерфейс rs232
- •1.2.1. Послідовна передача даних
- •1.2.2. Роз'єм і кабель порту rs232
- •1.2.3. Внутрішня апаратна конструкція
- •Перетворювачі напруги
- •Базові адреси сом-портів
- •1.2.4. Програмне управління Отримання базової адреси послідовного порту
- •Ініціалізація сом-порта
- •Передача і приймання послідовних даних
- •Передача даних по лініях взаємодії
- •2.4. Експериментальні плати паралельного, послідовного та ігрового портів
- •2.4.1. Експериментальна плата паралельного порту
- •2.4.2. Експериментальна плата послідовного порту
- •3. Програми управління експериментальними платами
- •3.1. Програмне забезпечення для експериментальної плати паралельного порту
- •3.1.1. Опис програми centexp.Pas
- •Текст програми centexp.Pas
- •3.2. Програмне забезпечення для експериментальної плати послідовного порту
- •3.2.1. Опис програми rs232exp.Pas
- •Текст програми rs232exrpas
- •Лабораторна робота №3 Тема: Управління об’ктами за допомогою usb порта пк.
- •Функція
- •Механізм передачі даних
3.2. Програмне забезпечення для експериментальної плати послідовного порту
3.2.1. Опис програми rs232exp.Pas
Програма виконує наступні функції:
- повідомляє про кількість встановлених на комп'ютері послідовних портів;
- дозволяє вибрати послідовний порт (СОМ);
- настроює формат послідовних даних;
- вводить байт і передає послідовні дані;
- змінює стан ліній управління модемом (DTR і RTS);
- зчитує послідовні дані;
- зчитує стан ліній DSR, DCD і CTS.
Після запуску програми на екран виводиться наступна інформація:
Number of COM installed. 4
Addresses for C0M1 to COM4. 1016 760 1000 744
Select а COM to be used (1,2,3 or 4).
Перший рядок показує кількість встановлених СОМ-портів, друга - відображає їх базові адреси. Третій рядок дає можливість вибрати послідовний порт для його подальшого використання. Після того, як ви вкажете номер порту, на екрані з'явиться віртуальна панель управління (рис. 3.5).
Тут зображено сім віртуальних світлодіодів відповідно до їх кількості на експериментальній платі: три з них співвідносяться з трьома виходами, чотири - з чотирма входами. Внизу розміщується панель допомоги, де показані клавіші управління програмою з коротким описом їх функцій:
- [ARROW] (клавіші управління курсором) - вибір виходу;
- [Т] або [t] - вводу даних з клавіатури та їх передача;
- [SPASE] (пропуск) - зміна стану вибраної вихідної лінії;
- [С] або [с] - настройка формату послідовних даних;
- [Q] або [q] - вихід з програми.
За допомогою клавіш і можна вказати одну з вихідних ліній. Вибраний вихід позначається колом навколо зображення світлодіода. Для зміни стану виходу використовується клавіша пропуску. При натисненні на клавіші , або клавішу пропуску вхідні дані зчитуються і виводяться на екран. Для тестування порту потрібно з'єднати приймальну і передавальну лінії. Значення вхідних і вихідних послідовних даних повинні співпадати.
Текст програми rs232exrpas
Program RS232_tester;
(*Програма управління експериментальною платою послідовного порту *)
Uses graph,crt,dos;
var
l, led_selected Senal_input_byte, Baud_rate:byte;
data_Terigth_byte, STOP, length_byte, Раrity_byte:integer;
Serial_output_string, Serial_input_string, Old_serial_input_string: string[5];
ch:char;
status: arrayp [1..18] of integer;
key_pressed: string[10];
(*Завантаження двох бібліотек •)
{$1 c \ioexp\tplib1 pas}
{$1 c \ioexp\tphb2 pas}
procedure Draw_panel;
(*Малювання панелі управління експериментальною платою послідовного порту*)
begin
for i:=1 to 16 do
status[i]:=0;
setbkcolor(cyan);
for 1:=1 to 3 do
draw_led(80+i*50,350,status[i]);
for i:=4 to 7 do
draw_led(180+i*50,350,status[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);
setfillstyle(1,magenta);
bar(1,420,800,480);
settextstyle(0,0,1);
outtextxy(10,425,'[ARROW]:Select LED [T]transmitted data [Space]:Change Status');
outtextxy(10,440,'[C]:Configure RS232 [Q]:Quif');
draw_message(60,200,500,50,bluet,'RS232 experimental board',0,2,yellow);
draw_message(115,390,130,20,blue,'DTR TXD RTS',0,1,yellow);
draw_message(370,390,i80,20,blue,'RD DSR DCD CTS',0,1,yellow);
end;
procedure Output_input;
var
output_byte, input_byte:byte;
code:integer;
begin
(*Обчислення значення даних для передачі через регістр даних.*)
write_modem_status(RS232_address, status[3j, status[i]);
val(serial_output_string, output_byte, code);
status[5]:=read_modem_status(RS232_address,2);
status[6]:=read_modem_status(RS232_address,1);
status[7]:=read_modem_status(RS232_address,3);
if status[2]=1 then
begin
repeat
write_transmit_buffer(RS232_add ress,output_byte);
until keypressed;
status[2]:=0;
end;
delay(50);
serial_input_byte:=read_receive_buffer(RS232_address);
setcolor(magenta);
outtextxy(420,460, 'Input serial data:'+01d_serial_input_string);
setcolor(yellow);
str(serial_input_byte, serial_input_string);
outtextxy(420,460, 'Input serial data: '+serial_input_string);
O1d_serial_input_string:=serial_input_string;
setbkcolor(cyan);
end;
Procedure Scan_keyboard;
begin
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];
if (key_pressed='T') or (key_pressed='f) then
begin
setcolor(magenta);
outtextxy(30,460,'Output serial data:'+serial_output_string);
draw_roessage(100,290,100,60,cyan,'Input Serial data ', 0,1 yellow);
gotoxy(22,20);
readln(serial_output_string);
draw_roessage(100,290,100,60,cyan,'Input serial data ',0,1,blue);
setcolor(yellow);
outtextxy(30,460,'Output serial data:'+serial_output_string);
end;
if (key_pressed='C') or (key_pressed='c') then
begin
closegraph;
writeln('Configure RS232 port');
write('Input baud rate (115200-9600-4800-2400-1200):');
readln(baud_rate_byte);
write('Input parity (0=None, 1=Even, 3=0dd): ');
readln(Parity_byte);
write('Input data bit length (5, 6, 7, 8): ');
readln(Data_length_byte);
write('Input stop bit length (2, 1): ');
readln(Stop_length_byte);
write_data_format(RS232_address, Baud_rate_byte, Parity_byte, Data_length_byte, Stop_length_byte);
initialize_graph;
draw_panel;
led_selected:=1;
end;
end;
Procedure draw_led_status;
var
led_selected_old: integer;
begin
led_selected_old:=led_selected;
scan_keyboard;
for i:=1 to 3 do
draw_led(80+i*50,350,status[i]);
output_input;
for i:=4 to 7 do
draw_led(180+i*50,350,status[i]);
if led_selected>3 then led_selected:=3;
if led_selected<1 then led_selected:=1;
setlinestyle(0,0,3);
setcolor(cyan);
if led_selected_old<=3 then circle(80+50*led selected old,350,15);
setcolor(yellow);
if led_selected<=3 then circle(80+50*led selected,350,i5);
end;
(*Головна програма.*)
begin
COM_address;
initialize_graph;
draw_panel;
led_selected:=1;
repeat
draw_led_status;
until (key_pressed='Q') or (key_pressed='q');
closegraph; (*3акриття графічного режиму.*)
end.
Програма містить чотири процедури. Draw_panel використовується для малювання віртуальної панелі управління експериментальною платою. Output_input - процедура вводу/виводу даних через послідовний порт. Процедури і функції Write_modem_status(), write_transmit_buffer(), read_modem_port() і Read_receiver_buffer() записують і зчитують значення з регістрів порту; вони містяться в бібліотеці TPLIB1.PAS. Процедура scan_keyboard опитує клавіатуру, фіксуючи натиснення шести функціональних клавіш: , , клавіші пропуску,t, c і q.