Раздел: Документация
0 ... 25 26 27 28 29 30 31 ... 105 [ARROW!:Select • ledo [T]:Transmitted Data[SPACE]:Change statue - [C]:Configure HS232[a] Quit , ;;0uu€iserial/data::;128 , . .-r.> Input, serial: data: -0 Рис. 3.5. Виртуальная панель управления для экспериментальной платы последовательного порта Посредством клавиш «~ и -» можно указать одну из выходных линий. Выбранный выход помечается окружностью вокруг изображения светодиода. Для изменения состояния выхода используется клавиша пробела. При нажатии на клавиши 4~ или клавишу пробела входные данные считываются и выводятся на экран. Для тестирования порта нужно соединить приемную и передающую линии. Значения входных и выходных последовательных данных должны совпадать. Текст программы RS232EXP.PAS Program RS232 tester («Программа управления экспериментальной платой последовательного порта *) uses graph crt.dos, var l,led selected Serial input byte,Baud rate byte data length byte,Stop length byte,Parity byte integer Serial output string,Serial input string 01d serial input stnng string[5] ch char, status array[1 18] of integer, key pressed string[10] («Загрузка двух библиотек *) {$1 с \ioexp\tpliM pas} {$1 с \ioexp\tplib2 pas} procedure Draw.panel; («Рисование панели управления экспериментальной платой последовательного порта.*) begin for i:=1 to 16 do status[i]:=0; setbkcolor(cyan); for i:=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]:Quit); draw message(60,200,500,50,blue, RS232 experimental board,0,2,yellow); draw message(115, 390,130,20,blue,DTRTXD RTS,0,1,yellow); draw message(370,390,180,20,blue,RD DSR DCD CTS,0,1,yellow); end; procedure 0utput input; var output byte,input byte:byte; code-.integer; begifi (•Вычисление значения данных для передачи через регистр данных.*) write modem status(RS232 address, status[3], status[l]); val(serial output string,output byte,code); status[5]:=read modem status(RS232 address,2); status[6]:=read modem status(RS232 address,1); statust7]:=read modem status(RS232 add ress,3); if status[2]=1 then begin repeat write transmit buffer(RS232 address,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); 01d serial input string;=serial input string; setbkcolor(cyan); end; Procedure Scan keyboard; begin key p ressed:=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 raessage(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"); writeCInput 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 forroat (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,15); end; («Главная программа.*) begin C0M address; initialize graph; draw panel; led selected:=1; repeat draw led status; until (key pressed=Q) or (key pressed=q); closegraph; («Закрытие графического режима.*) end. 0 ... 25 26 27 28 29 30 31 ... 105
|