Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OKIU / методичка_ОКІУ.doc
Скачиваний:
22
Добавлен:
16.02.2016
Размер:
1.11 Mб
Скачать

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.

Соседние файлы в папке OKIU