Верифікація ПОСЛІДОВНОГО ПОРТА
(курсоваробота)
АНОТАЦІЯ
Опис програмимістить загальний опис алгоритмів головної програми та процедур запису ізчитування повідомлень на рівні блок-схем, а також більш детальний описрозробленої програми на рівні програмного коду.
ЗМІСТ
ВСТУП
1.Опис процедур запису і зчитування повідомлень
1.1 Опис процедури записуповідомлення Write_Message
1.2 Опис процедури зчитуванняповідомлення Read_Message
2. Опис процедури відображення стану регістрів
3. ОПИС ЕКРАННИХ ФОРМПРОГРАМИ
Висновки
Списоквикористаної літератури
ВСТУП
Метою розробленоїпрограми є ознайомлення з принципами і форматами прийому та передачі данихчерез послідовний порт. Оскільки аналізувати стан бітів даних при реальнійпередачі через послідовний порт є досить складною задачею, тому доцільновикористати програмне моделювання обміну даними.
Програма створенав середовищі Delphi і дозволяє моделювати процеси запису та зчитування даних,при цьому процес обміну інформацією відбувається не з послідовним портом, а зфайлами. Процедура виводу даних повинна записувати інформацію у текстовий файл,а процедура вводу – зчитувати дані з файлу.
1. Опис процедур запису і зчитування повідомлень
1.1Опис процедури запису повідомлення Write_Message
Розглянемо блок –схему алгоритму процедуриWrite_Message (рис. 1.1) для кодування повідомлень. Після зчитування символів з форми визначаютьсяїх коди (масив mCod_bit). Далікоди символів mCod_bitперетворюються у масив бітів mBit. Значення кожного біту з масиву mBitперетворюються в аналогову напругу сигналу mU, а значення напруги записуються втекстовий файл.
/>/>
Рис.1.1.Блок-схема процедури Write_Message
Розглянемопроцес запису повідомлення у файл на рівні програмного коду. Спочаткузчитується з форми текст повідомлення
Str:=Edit1.Text;
та опціїСОМ-порта
caseForm5.RadioGroup2.ItemIndex of //Визначення довжини слова
0:DovjSlova:=7;
1:DovjSlova:=8;
end;
case Form5.RadioGroup3.ItemIndexof //Визначення к-сті стопових бітів
0:KilStopBit:=1;
1:KilStopBit:=2;
end;
Далі в циклізнаходяться коди розміром 1 байт (цілі числа від 0 до 255) для всіх символів,які записуються у масив mCod
for i:=1 tolength(Str) do
begin
mCod[i]:=ord(Str[i]);
Edit3.Text:=Edit3.Text+IntToStr(mCod[i])+”;
end;
Отримані кодисимволів відображаються на формі в компоненті Edit3. Код кожного символа перетворюється у двійкове представленняза допомогою процедури наступного коду програми, який перетворює байт у масив з8 біт. Отримане бітове представлення записується у масив mCod_bit.
repeat
n:=Data div 2;
mCod_bit[i,ii]:=Datamod 2;
Data:=n;
dec(ii);
until Data
mCod_bit[i,ii]:=Data;
Найскладнішачастина процедури – перетворити бітове представлення символів у послідовнеповідомлення. Згідно з форматом послідовної передачі даних перед кожним байтомданих потрібно вставити біти паузи (1-10 бітів) і старт-біт, а після бітівданих (кодів символів з масиву mCod_bit) – біт контролю і стоп-біт. Довжина інформаційногослова, кількість стопових бітів, парність та швидкість передачі данихвстановлюється у пункті меню “Опції СОМ-порта”( Рис. 1.2).
/>
Рис. 1.2. Формаопцій СОМ-порта
for i:=1 to length(Str) do
begin
iii:=random(9)+1; //Діапазон бітів паузи: 1-10
ii:=iii+DovjSlova;
Data:=mCod[i];
Parnist:=0;
repeat //Перетворення у 2-ву СЧ
n:=Data div 2;
mCod_bit[i,ii]:=Datamod 2;
ifmCod_bit[i,ii]=1 then //Підрахунок одиниць
Parnist:=Parnist+1;
Data:=n;
dec(ii);
untilData
mCod_bit[i,ii]:=Data;
ifmCod_bit[i,ii]=1 then //Підрахунок одиниць
Parnist:=Parnist+1;
n:=iii+DovjSlova+KilStopBit;
ifForm5.RadioGroup5.ItemIndex0 then //Якщо є біт парності, то n+1
inc(n);
ii:=0;
repeat
if ii
mCod_bit[i,ii]:=1;//Запис бітів паузи
if ii=iii then
mCod_bit[i,ii]:=0;//Запис біту старту
if ii=(n-KilStopBit)then //Запис біту парності
begin
caseForm5.RadioGroup5.ItemIndex of
1:begin //непарна
if (Parnistmod 2)0 then
mCod_bit[i,ii]:=0
else mCod_bit[i,ii]:=1;
end;
2:begin //парна
if (Parnistmod 2)=0 then
mCod_bit[i,ii]:=0
elsemCod_bit[i,ii]:=1;
end;
3:mCod_bit[i,ii]:=1;//постійно 1
4:mCod_bit[i,ii]:=0;//постійно 0
end;
end;
if ii=(n-KilStopBit)+1then //Запис бітів стопу
begin
for j:=1 toKilStopBit do
begin
mCod_bit[i,ii]:=1;
inc(ii);
end;
end;
inc(ii);
until ii>n;
end;
Відповідно дорівнів напруги для логічних 0 та 1 на основі масиву mBit потрібно отриматимасив напруг mU та побудувати графік залежності напруги від номеру біту наоснові масиву mU (компонент DBChart). Для моделювання шумової складової напруги використано функціюRandom, наприклад: mU[n]:=8.5+(Random-0.5)*2.
n:=1;
Str2:=”;
Memo1.Clear;
for i:=1 tolength(Str) do
begin
iii:=21;
repeat
dec(iii);
ifmCod_bit[i,iii]=1 then
break;
until 1=2;
for ii:=0 to iiido
begin
Str2:=Str2+IntToStr(mCod_bit[i,ii]);//Запис до Str2 масиву mCod_bit
ifmCod_bit[i,ii]=0 then
begin
mU[n]:=8.5+(Random-0.5)*2;
inc(n);
end
else begin
mU[n]:=-8.5+(Random-0.5)*2;
inc(n);
end;
end;
end;
Отриманапослідовність бітів відображається на формі
Memo1.Lines.Add(Str2); //Запис у поле mBit
Масив напругвідображається у вигляді діаграми і записується у файл.
DBChart1.Series[0].Clear;//Очистка графіка
for i:=1 ton-1 do //Побудова графіка
DBChart1.Series[0].Add(mU[i],IntToStr(i),clRed);
ifSaveDialog1.Execute then //Запис у файл
begin
AssignFile(f,SaveDialog1.FileName);
Rewrite(f);
for i:=1 ton-1 do
writeln(f,mU[i]:3:1);
CloseFile(f);
end;
/>
Рис. 1.3. Форма організації обміну даними черезпослідовний порт
1.2Опис процедури зчитування повідомлення Read_Message
Розглянемо процедуру Read_Message длядекодування повідомлень (зчитування з файлу). Спочатку значення аналоговоїнапруги сигналу mU зчитується з текстового файлу і відображаються у виглядідіаграми (рис.4). Значення аналогової напруги сигналу mU перетворюються у масивбітів mBit, а на основі масиву бітів визначаються коди символів mCod_bit. За кодами символів визначаютьсясамі символи, тобто текст повідомлення.
Розглянемо процесзчитування повідомлення з файлу на рівні програмного коду. Спочатку потрібновідкрити один з попередньо створених файлів і зчитати значення напруги в масивmU. На основі масиву mU будується графік залежності напруги від номеру біту.
Відповідно дорівнів напруги для логічних 0 та 1 на основі масиву напруг mU отримується масивлогічних значень mBit.
for i:=1 to n-1do
begin
if(mU[i]>=5)and(mU[i]
mBit[i-1]:=0;
if (mU[i]=-12)then
mBit[i-1]:=1;
Str2:=Str2+FloatToStr(mBit[i-1]);
end;
Значенняелементів масиву mBit відображаються на формі:
Memo1.Lines.Add(Str2);
Згідно з форматомпослідовної передачі даних декодуються значення масиву mBit, тобтопослідовність бітів розділяється на байти, видаляються службові біти, азначення бітів даних записуються в масив mCod_bit. Для цього проводитьсяпослідовний аналіз усіх бітів масиву mBit. Згідно з фор-матом передачі данихпослідовність бітів починається з паузи, після якої слідує старт-біт. Закінчуєтьсяпослідовність бітів даних бітом контролю і стоп-бітом.
j:=1;
fori:=1 to KilSymv do //Відокремлення службових бітів
begin
repeat
ifStr2[j]=’0′ then //Після 0 йдуть інформаційні символи
begin
foriii:=0 to DovjSlova-1 do
begin
inc(j);
mCod_bit[i,iii]:=StrToInt(Str2[j]);
end;
j:=j+KilStopBit;//Стрибок на біт паузи наступного повідомлення
ifForm5.RadioGroup5.ItemIndex0 then
inc(j);
break;
end
elseinc(j);
until1=2;
end;
На основі бітівданих (масив mCod_bit) для кожного символу отримується його код (масив mCod),перетворенням набору з 8 біт у десяткове число. Коди символів відображаються наформі.
for i:=1 to KilSymv do //Перетворення у 10-ве число
begin
mCod[i]:=0;
for ii:=0 toDovjSlova-1 do
mCod[i]:=mCod[i]+mCod_bit[i,ii]*trunc(power(2,(DovjSlova-1)-ii));
end;
Edit3.Clear;
for i:=1 toKilSymv do
Edit3.Text:=Edit3.Text+IntToStr(mCod[i])+”; //Запис коду символів у поле mCod
Значення байтівданих (код символу з mCod) перетворюються у сим-воли повідомлення (Message_In –зчитування з файлу), яке й відображається на формі.
for i:=1 to KilSymv do //Перетворення коду у символ
begin
Str2:=chr(mCod[i]);
Str:=Str+Str2;
end;
Edit2.Text:=Str;//Запис у поле Message_In
/>/>
Рис. 1.4. Блок-схема процедури Read_Message
2. Опис процедури відображення стану регістрів
/>/>/>
/>
Рис. 2.1. Блок-схема процедури відображеннястану регістрів
/>/>
Продовженнярис. 2.1.
Роботу процедурипоказу стану регістрів можна прослідкувати використовуючи, наприклад, регістрформату даних.
За допомогоюцього регістра можна сконфігурувати параметри СОМ-порта, а саме: дозвіл на встановлення швидкості,паритет, довжину інформаційного слова та кількість біт паузи.
Даний регістрбуде змінювати числове значення своїх бітів тоді, коли будуть конфігуруватисяопції СОМ-порта. Наприклад, нехай в регістрі буде записано число 11011010. Вданому випадку нас цікавлять останні два біти. Зараз вони рівні 10. Це означає,що довжина інформаційного повідомлення рівна 7. Вибравши довжину слова рівною 8біт, ми тим самим змінимо значення регістру на наступне: 11011011.
3. ОПИС ЕКРАННИХФОРМ ПРОГРАМИ
/>
Рис. 3.1.Комп’ютерне моделювання роботи послідовного порта
На рис. 3.1.показана головна форма програми. У меню даної екранної форми є лише один пункт,обробник якого викликає та показує інформацію про розробника даної програми.
/>
Рис. 3.2.Інформація про автора
На головній форміможна здійснити виклик двох обробників різних за суттю операцій.TForm1.Button1Click – викличе метод Form4.Show,тобто здійснить виклик форми “Організація обміну даними через послідовний порт”.Її вигляд можна побачити на рис. 1.3 TForm1.Button2Click – застосує метод Form2.Show, для здійснення показуінформативного відносно користувача зображення, яке матиме наступний вигляд:
/>
Рис. 3.3. Форма блок-схеми UART
На представленійекранній формі (рис. 3.3.) також є меню. Але воно вже на відміну відпопередньої виконуватиме дві дії:
1) покажедовідку відносно користування блок-схемою (рис. 3.5.);
2) здійснитьвихід.
Ну а заразпотрібно згадати про рис. 1.3, а точніше трошки розтлумачити принцип його дії.
Основною задачеюданої програми є емулювання роботи послідовного порта. За допомогою цьоговікна, виклик якого можна здійснити на головній формі, можна передати чиприйняти інформаційне повідомлення. Принцип прийому та передачі викладенийвище.
Меню складаєтьсяз трьох пунктів:
1) опціїСОМ-порта(викликає вікно конфігурування порта(рис. 1.2));
2) довідка(показуєдовідку по коректній експлуатації даної форми екрану(рис. 3.4.));
3) закрити(виконуєзакриття активного вікна).
/>
Рис. 3.4. Довідкапо експлуатації форми “Організація обміну даними через послідовний порт”
/>
Рис. 3.5. Довідкапо формі блок-схеми UART
Висновки
В описі програмирозглянуто алгоритм процедур запису і зчитування повідомлень на рівніблок-схеми та на рівні програмного коду. Програма має простий інтерфейс, алевиконує складні задачі. Однією з її головних задач є запис/зчитування даних через послідовнийпорт. Дивлячись на текст програми, можна сказати, що послідовний порт маєдоволі складний формат даних, які передаються/приймаються, але все ж таки плюси СОМ-порта дещо виділяютьйого з-поміж інших і тому він є досить поширеним.
Список використаної літератури
1. Гофман В.Э.,Хомоненко А.Д.Delphi 6. СПб.: БХВ-Петербург, 2001. – 1135 с.
2. АгуровП.В. Последовательные интерфейсы ПК. Практика программирования. –СПб.: БХВ-Петербург, 2004.– 496 с.