Реферат по предмету "Информатика, программирование"


Апаратно–програмний комплекс GSM-МТМ

МІНІСТЕРСТВО ОСВІТИ ІНАУКИ УКРАЇНИ
ЧЕРНІВЕЦЬКИЙ НАЦІОНАЛЬНИЙУНІВЕРСИТЕТ
ІМЕНІ ЮРІЯ ФЕДЬКОВИЧА
ФІЗИЧНИЙ ФАКУЛЬТЕТ
КАФЕДРА КСМ
7.0915.01 Комп’ютернісистеми та мережі
Апаратно–програмнийкомплекс GSM-МТМ
(дипломний проект)
2009

Анотація
В дипломномупроекті обґрунтовано побудову апаратно–програмного комплексу, вибір апаратнихта програмних засобів та введення комплексу в дію. Описані основні сервісніфункції мобільних телефонів стандарту GSM.
Такожстворена програма, що дозволяє вести статистику вхідних та вихідних дзвінків,статистику використання комплексу його абонентами.
Комплексстворено на базі комп’ютера IBM 486DX4 (100МГц). Програмна частина комплексупарцює під операційною системою DOS6.22 і написана на мові Borland C++3.1.Програма обробки інформації написана на Visual Basic 5.0 з використаннямMicrosoft Access 2000 і працює під OS Windows 98. На даний момент комплексперебуває на стадії тестування і розміщений на фірмі “New Com”.
Метою даногодипломного проекту є заощадження коштів організації де буде застосований цейдипломний проект.
Данийдипломний проект містить сторінок друкованого тексту, 6 – малюнків, 4 –додатки.
The summary
In the degreeproject the construction of a hardware-software complex, Realised choicehardware, software and proved the complex in action. The described basicservice functions of mobile telephones of the standard GSM.
Also createdprogram, which permits to conduct statistics of entrance and initial bells,statistics of use of a complex by his subscribers.
The complexis created on the basis of the computer IBM 486DX4 (100Мгц). The program partof a complex works under operational system DOS6.22 and written on languageBorland C ++ 3.1. The program witch processing the information written onVisual Basic 5.0 with use Microsoft Access 2000 and works under OS Windows 98.Now complex is at a stage of testing and placed on the " New Com "office.
The purposeof the given degree project is the saving the money of organization where thisdegree project will be applied.
The givendegree project contains 103 — pages of the printed text, 6 — figures, 4 — additions.

Зміст
Вступ
1.        Аналітичнийогляд
1.1      Аналоги, їхнедоліки та передумови розробки
1.2      Областьпризначення та застосування
1.3      Вибір програмноїта апаратної платформи
1.4      Технічніхарактеристики
2.        Теоретичнівідомості
2.1      Принципистільникового зв'язку
2.2      Система командкерування мобільним телефоном
2.3      Специфікапрограмування апаратних переривань на прикладі переривання від СОМ порта
2.4      Аналізелементної бази, інтерфейси комплексу
2.5      Алгоритм роботикомплексу
3.        Практичначастина
3.1      Підключеннякомпонентів та настроювання апаратної частини
3.2      Розробкадрайвера послідовного інтерфейсу
3.3      Розробкапрограми bridge для комплексу МТМ?GSM          
3.4      Програма обробкиінформації про дзвінки
3.5      Тестуваннякомплексу
6. Охорона праці
6.1      Загальніположення
6.2      Експлуатаціякомплексу у автономному режимі
6.3      Електромагнітневипромінювання та поля від ЕОМ
6.4      Шум, пов'язанийз ВДТ
6.5      Параметриосвітлення робочого місця та робочого приміщення
6.6      Температура івологість у приміщенні
6.7      Організаціяробочого місця
5.        Економічнийрозрахунок
5.1      Розрахунок економічноївигоди при використанні комплексу
5.2      Розрахуноксобівартості програмного комплексу
Висновки
Література
Додатки

Вступ
Одним зважливих атребутів ділової людини є його комунікабельність. Здатність швидкореагувати на зміни подій оточуючого світу. Ці умови послужили приводом длястворення цілих класів радіомереж різних типів. У нашому регіоні в умовахконкуренції визначилися наступні мережі:
з аналоговихмереж: NMT 450i, Алтай, мережа транкінгового зв’язку, мережі пейджинковімережі.
із цифровихмереж найефективнішим та широкодоступним виявився стандарт GSM. Зараз уЧернівцях діють мережі стандартів GSM900, GSM1800.
Перевагастандарту GSM полягає у веденні конфіденційних переговорів, та найменьшевипромінення абонентських терміналів, що безперечно має суттєве значення дляздоров’я людини. Проте за час розвитку GSM розвинулися і інші мережі зв’язку.Основна з них – міська телефонна мережа (МТМ). Вона не забезпечує мобільністьабонентів, проте розмова через мережу МТМ коштує значно дершевше ніж аналогічнарозмова між абонентами GSM.
Різні групинаселення користуються різними мережами, але деколи необхідно скористатисяпослугами двох мереж одночасно, тобто здійснити зв’язок між абонентами різнихмереж. Таку послугу мережі МТМ та GSM надають за невиправдано високою ціною.Тому зараз існує велика кількість персональних з’єднувачів (мостів) цих мереж.Вони призвані зменшити вартість розмови між абонентами різних мереж, дозагальної вартості розмови абонентів у кожній з мереж окремо. Кілька таких“мостів” вже сертифіковані на Україні та в Росії. Найвідоміший з них – це ЕССОМ Bridge. Але для колективного використання, наприклад в організаціях такі“мости” не пристосовані, оскільки в них не реалізовані функції колективноговикористання “мостів”. А саме: персональна тарифікація для кожного абонента,ведення журналу вхідних та вихідних дзвінків, незручне або неможливепідключення нових абонентів, обробка журналу дзвінків, не реалізована функціяздійснення дзвінка з МТМ в мережу GSM, не на всіх “мостах” реалізований захиствід несанкціонованого підключення. Інший суттєвий недолік вищевказаних “мостів”– їхня вартівсть. У проаналізованій мною літературі “мостів”, що бреалізовували вищевказані функціональні можливості, знайдено не було.
Отжерозроблений апаратно програмний комплекс (надалі комплекс), дозволяєвикористовувуючи один абонентський термінал мережі GSM та одину телефонну лініюмережі МТМ, зідйснювати дзівнки з однієї мережі в іншу в обох напрямках, вестижурнал дзвінків, надавати звіти по накопиченій інформації у вигляді таблиць тадіаграм, дозволяє вести персональну тарифікацю для вхідних та вихідних дзвінківа також здіснює захист від несанкціонованого підключення. Основне призначеннятакого комплексу–спільне використання комплексу в невеликих організаціях(кількість користувачів ≤ 100), де частина персоналу (директор, водії,агенти, та ін.) виконують свою роботу поза офісом, а інша частинапресоналу(секретарі, бугалтера, інший персонал організації) перебуває на своємупостійному робочому місці для підтримки зв’язку з офісом, та іншими абонентамимережі МТМ.

1.        Аналітичний огляд
 
1.1      Аналоги,їх недоліки та передумови розробки
Великоїпопулярності набули стільникові системи зв’язку. Основною з них є мережа GSM.Вона швидко розростається і популярна у багатьох країнах світу. Ця популярністьзумовлена зручністю мобільних телефонів, (малі розміри абонентських терміналів,мала вага, висока якість переговорів) та бажанням у довільний момент часу матиможливість спілкуватися з колегами та знайомими. Але ціна розмови, між різнимиабонентами мережі або навіть різними мережами не є однаковою. Тому на ринкуз’явилося багато додаткових пристроїв, які різними способами намагаютьсязменшити вартість розмови. Аналіз ринку таких пристроїв показав, що вониіснують у великій кількості, але більшість з них володіє основним недоліком:зв’язок здійснюється в одному напрямку (GSM®MTM), тобтозателефонувати з мобільного телефону на міський телефон можна, а навпаки ні. Авартість пристроїв, що здійснюють двосторонній зв'язок надто велика івиправдовує витрачні на неї кошти лише через тривалий період експлуатації.Інший, не менш важливий недолік, полягає у тому, що для таких “мостів” нереалізовані у повному обсязі функції колективного використання ресурсів(ведення статистики дзвінків, виділення абоненту ресурсів, інші.)
Одним зпредставників є ЕССОМ bridge [1] – односторонній міст. Він містить порівнянообмежений набір функцій. До числа таких функцій входять комутація мобільноготелефону GSM на міську телефонну мережу, пам’ять на 10 номерів та можливістьвикористання моста кількома людьми. Як видно з опису додаткові функціїколективного використання не реалізовані. Наприклад функції, які б враховувалинапрямок розмови, ведення обліку дзвінків, тарифікація для кожного абонентукомплексу, зняття інформації для аналізу вхідних та вихідних дзвінків,добавлення та знищення абонентів комплексу, захист комплексу віднесанкціонованого підключення та інші можливості, які необхідно використовуватипри експлуатації таких пристроїв в організаціях.
Томудоцільніше розробити власний апаратно–програмний комплекс МТМ↔GSM, якийбуло б зручно експлуатувати в невеликих організаціях та який задовільняв бикористувачів комплексу за своєю функціональністю.
1.2      Область призначення та застосування
Апаратно–програмнийкомплекс призначений для здійснення телефонних переговорів, між мобільнимителефонами системи GSM (Global System Position) та телефонами мережі МТМ(міська телефонна мережа), а також здійснює обробку вхідних та вихіднихдзвінків.
Дана розробкає актуальною для організацій, які ведуть переговори з мобільного телефону наміську телефонну мережу. Використовуючи міст МТМ↔GSM для дзвінків помісту, можна заощадити кошти організації.
Дана розробкає оригінальною в тому плані, що використовуючи прості, легкодоступні компонентита мови програмування високого різвня вдалося створити потужну систему, щопоєднує дві мережі зв'язку. Комплекс реалізує інтерфейс для його колективноговикористання в організаціях.
До перевагрозробки можна віднести:
Великукількість, у порівнянні з аналогами, абонентів комплексу (50 абонентів);
Зручнийінтерфейс;
Можливістьздійснення дзвінків у двох напрямках;
Можливістьобробки дзвінків;
Веденняжурналу вхідних та вихідних дзвінків;
Захист віднесанкціонованого підключення;
Персональнатарифікація для кожного абонента комплекса.
До недоліківможна віднести:
Порівняновеликі лінійні розміри, та вага комплексу;
Живленнякомплексу від мережі електроживлення.
Комплексможна застосовувати, як для особистих потреб, так і для невеликих організацій,яким потрібно підтримувати зв'язок з абонентами МТМ, та вести облік дзвінків.Застосування комплексу у великих організаціях є недоцільним, оскільки кількістьабонентів у таких організаціях надто велика (>50), а неможливістьпаралельної обробки кількох абонентів зменшує його ефективність. Якальтернативу цьому недоліку, можна використати кілька таких комплексів в однійорганізації.
1.3      Вибір програмної та апаратної платформи
Із розрахункуекономічності була вибрана ОС ДОС6.22 та мова програмування Assembler зкомпілятором Тasm 4.0 та мова Borland C++3.1
На мовіАсемблер зручно писати програми, які напряму звертаються до обладнання. МоваС++ підтримує взаємодію з модулями написаними на Асемблері, тому вона підходитьдля даної задачі, а зручний інтерфейс та ручне управління вільними ресурсамиробить її зручною для написання таких типів програм. Вибір програмної частиниздійснювався таким чином, щоб максимально ефективно та швидко реалізуватиалгоритм роботи комплексу.
Для аналізуінформації про дзвінки використовується програма написана на VBA у поєднанні зMicrosoft Access 2000, та Microsoft OutLook 2000.
Апаратнаплатформа складаєтсья з комп’ютера IBM 486 DX4, мікроконтроллера приймача DTMFM8870 фірми Motorola, узгоджувач інтерфейсів мікросхема MAX232, яка узгоджуєСОМ інтерфейс мобільного телефону, СОМ інтерфейс комп’ютера, та комутаційноїплати. У якості підсилювачів сигналу використовуються транзистори серії КТ3102.
Усе апаратнезабезпечення виготовлене сторонніми виробниками на замовлення.

1.4      Технічні характеристики
Основнітехнічні характеристики наведені в таблиці:Назва параметру Значення Вхідний опір для телефонної лінії в режимі розмови 600 ±120Ом Вхідний опір для телефонної лінії в режимі очікування не менше 10кОм
Трансгібридне затухання не меньше
(відносно 600 Омної телефонної лінії) 12 Дб
Коефіцієнт гармонік
(при рівні сигналу –10Дб,
частоті сигналу 1000Гц,
тоці шлейфу 25мА) 5% Максимальний рівень вихідного сигналу в лінії 2дБ Напруга живлення 12В, постійна Струм живлення

2.        Теоретичні відомості
 
2.1      Принципистільникового зв'язку
Історіястворення
У 1982 році Європейська Конфернція Адміністрацій Пошти таЕлектрозв’язку (СЕРТ) створила групу для розробки єдиного стандарту цифровогосотового зв’язку в діапазоні 900МГц. У результаті роботи цієї групи з’явивсястандрат GSM (Global System for Mobile Соммunісаtіоns — глобальна системарухливого зв'язку).
Доособливостей цього стандарту можна віднести менші, у порівнянні з аналоговимистандартами, розміри і вага телефонних апаратів; більший час роботи телефонівбез підзарядки акумулятора, та інші. В основному ці переваги досягаються зарахунок обладнання базової станції, що постійно аналізує рівень сигналу,прийнятого від телефону абонента. У тому випадку, коли рівень вище необхідного,автоматично знижується випромінювана потужність;
МережаGSM900. Основні характеристики:
Відносновисока ємність мережі;
Низькийрівень промислових перешкод у даному частотному діапазоні;
Максимальнийзахист від підслуховування і нелегального використання номера (вище захисттільки в GSM-1800), що досягається за рахунок використання алгоритмівшифрування з відкритим ключем;
Зв'язок навідстані до 35 км від найближчої базової станції;
Найнижчасеред стільникових стандартів потужність випромінювання абонентськихтерміналів.
У стандартіGSM-900 для максимального захисту від несанкціонованого підключеннязастосовується спеціальний модуль дійсності абонента — SIM-карта. Ця картка, ізвбудованою мікросхемою, в якій зберігається спеціальна інформація проконкретного абонента, вона видається абоненту при підключенні телефону і можебути використана з будь-якою моделлю мобільного телефону стандарту GSM. Щобвикрадач не зміг нею скористатися, в ній записаний спеціальний ідентифікаційнийномер (РІN-код), який потрібно набирати при кожному включенні телефону. Якщотри рази підряд неправильно набрати РІN-код, SIM-карта тимчасово заблокується.Використання SIM-карти також зручне тим, що при зміні абонентом телефону непотрібно змінювати свій мобільний номер, абонент просто переставляє карту, івсі збережені на ній дані (включаючи записну книжку) стають доступними у новомумобільному телфоні.
На сьогодні уЧернівцях є два оператори мережі GSM900: це УМЗ (Український Мобільний Зв'язок)та Київстар Дж. Ес. Ем.
Унікальноюможливістю GSM, яка не підтримується аналоговими системами зв’язку, єдвонаправлена передача коротких повідомлень SMS (Short Message Service), (до 160байт), переданих у режимі з проміжним збереженням даних. Адресату, що є абонентомGSM або користувачем Internet, можна послати повідомлення, після чоговідправнику надсилається підтвердження про одержання цього повідомлення.Короткі повідомлення можна використовувати в режимі широкомовлення, наприкладдля того, щоб сповістити абонентів про зміну умов дорожнього руху в регіоні,погодні умови, курси іноземних валют, тощо.
Поточніспецифікації, визначені ETSI (European Telecomunication Standarts Insitute)[1], у вигляді додаткових можливостей описують послуги по перенесеннюінформації і наданню послуг зв'язку (наприклад, перенаправлення виклику увипадку недосяжності або зайнятого мобільного телефону абонента GSM,автовідповідач, та ін.).
Незабаромочікується поява нових можливостей, таких як ідентифікація виклику, розміщеннявиклику в черзі, переговори одразу кількох абонентів та ін. Такий стандартрозробляється на основі GSM і стане третім стрибком у розвитку стільниковогозв’язку. Його назва UMTS (Universal Mobile Tyelecommunication System)
Відповідно довизначень ETSI, мережа GSM може надавати наступні типи послуг:
Послуги поперенесенні інформації (bearer services);
Висока якістьпередачі мовної інформації;
Низькавартість обладнання і послуг, що надаватимуться;
Можливістьпідтримки портативного обладнання користувача;
Підтримка міжнародногороумінгу;
Забезпеченняконфіденційності переговорів;
Сумісність зISDN.
СтандартGSM-1800 (DCS-1800) та його особливості.
GSM-1800(DCS-1800) — Global System for Mobile Соммunісаtіоns — глобальна системарухливого зв'язку. Це цифровий стандарт із діапазоном частот 1710-1880 МГц ємодифікацією стандарту GSM-900. До особливостей цього стандарту можна віднестинаступні характеристики:
Максимальнавипромінювальна потужність мобільних телефонів стандарту GSM-1800 – 1Вт (дляпорівняння в GSM-900 – 2Вт). Тобто найнижча випромінювальна потужність з усіхвідомих стільникових систем зв’язку;
Високийзахист від підслуховування і нелегального використання номера;
Високаємність мережі, що важливо для великих міст;
Максимальневіддалення абонента від базової станції — 5-6 кілометрів.
Системакодування сигналу PCM і використання SIM-карт аналогічна стандарту GSM-900. Насьогодні у Чернівцях мережа GSM-1800 реалізована оператором “УкраїнськийМобільний Зв'язок”
Збілшенняпопускної здатності та перспективи розвитку
Оскількирадіоспектр має обмежені ресурси, необхідно оптимально розподілити ширину смугиміж усіма можливими користувачами. Метод, застосований з цією метою в GSM, — цекомбінація методів множинного доступу TDMA і FDMA (Time and Frequency DivisionMultiple Access). Спочатку смуга частот у 25 Мгц поділяється на смуги в 200Кгц. Кожній станції відповідає своя смуга (чи кілька смуг). Абоненти кожноїокремої смуги розділені в часі. Кожному абоненту відповідає один кадр. Вісімкадрів поєднуються у фрейм. 26 фреймів, у свою чергу, утворять мультифрейм, якіповторюються циклічно. Довжина мультифрейма — 120 мілісекунд. На один кадрприходиться 1/208 мультифрейма, тобто близько 0.6 мілісекунди. Каналивизначаються числом і позицією відповідних їм циклічних кадрів, і вся палітраповторюється приблизно кожні 3 години. Вони поділяються на запропоновані канали(dedicated channels), або канали трафіку і загальні канали (common channels),або канали керування, які використовуються рухливими станціями в пасивному режимі.
GSM — системацифрова, тому вимагає оцифровування аналогових сигналів. Метод, щовикористовується існуючими телефонними системами і мережею ISDN длямультеплексування аналогових ліній на високошвидкісних каналах і оптичнихлініях, називається імпульсно-кодовою модуляцією PCM (Pulse Coded Modulation).Швидкість вихідного потоку в PCM 64 Кбіт/с занадто висока для передачі порадіоканалам системи GSM. Дослідницька група GSM вивчила кілька алгоритмівкодування, поки не зупинила свій вибір на схемі кодування RPE-LTP (RegularPulse Excitation-Long Term Prediction). Схема здійснює переклад мовного потоку,що надходить зі швидкістю 64 Кбіт/c, у потік зі швидкістю 13 Кбіт/с, і назад,зі збереженням якості переданого сигналу.
Номерабонента GSM прикріплений до географічного положення базової станції і зовсімне залежить від того в якій точці знаходиться абонент мережі.
Стандарт GSMсумісний у першу чергу з ISDN (Integrated Services Digital Network) та IN(Intelligent Network). Основні функціональні елементи GSM входять урозроблювальний зараз міжнародний стандарт глобальної системи рухливого зв'язкуUMTS (Universal Mobile Telecommunications System), яка у майбутньому замінитьGSM. У системі UMTS будуть використовуватися усі види множинного доступу. Тобтовона буде побудована таким чином, що використовуватиме TDMA, FDMA, CDMA.Основний напрямок цього стандарту буде зроблений на інтеграцію з іншимимережами, зокрема планують збільшити швидкість передачі даних по модемах з 9600до 115200, проте більшість параметрів та специфікацій вона успадкує від GSM.
2.2      Система команд керування мобільним телефоном
Стандарт GSM07.07, GSM 05.07 були прийнятий ETSI (European Telecommunication StandardsInstitute) 15.03.2000 року [4]
Вонискладаються з АТ команд, які використовуються при керуванні модемом, тарозширеного набору АТ команд, яким користуються для виконання специалізованихфункцій мобільного телефону.
В роботіприведемо лише ті АТ команди, які необхідні для коректної роботи комплексу:Позначення команди Результат виконання команди ATD#######; Набрати номер ####### ATA Підняти трубку ATZ Завантажити заводську конфігурацію трубки
Привикористанні розширених АТ команд більшість команд має три режими виконання:
“команда”=? –видає список параметрів, якщо мобільний телефон підтримує дану команду. Упротилежному випадку видає повідомлення про невірно введену команду;
“команда”=[,,]– задає значення для параметрів які передбачені даною командою. Для деякихкоманд неможливе виконання команди у цьому режимі;
“команда”? –виводить в СОМ порт значення параметрів команди

Приреалізації комплексу були задіяні натсупні розширені команди:Позначення команди Результат виконання команди AT+CLIP = 1 пересилає номер телефону на СОМ порт AT+CHUP Завершення телефонної розмови AT+CPAS?
Статус телефонної розмови:
0 – розмова завершилася
3 – встановлення зв’язку
4 – розмова ведеться AT+CCLK? Прочитати поточний час у форматі: YY.MM.DD,HH:MM:SS
Після обробкикоманди мобільний телефон обов’язково повертає код виконання команди:Код помилки Позначення помилки Пояснення OK Команда виконалася успішно 2 RING З мережі GSM надійшов дзвінок 3 NO CARRIER Немає несучої 4 ERROR Невизначена помилка. Для детального визначення помилки необхідно задати команду АТ+СМЕЕ= [4] 6 NO DIALTONE Станція у відповідь на дзвінок не видає сигнал 7 BUSY Віддалена станція перевантажена і не може обробити запит
2.3      Специфіка програмування апаратних переривань на прикладіпереривання від СОМ порта
ІніціалізаціяCOM-порта
СОМ портомуправляє мікросхема UART. Тому спочатку проведемо ініціалізацію UART. Cкидуєморегістри стану лінії, стану модему і даних. Це досягається простим зчитуваннямзначень цих регістрів:
; скидаєморегістр стану лінії
mov dx,LSR;LSR — адреса регістра стану лінії
in al,dx
jmp $+2;затримка
; скидаєморегістр стану модему
mov dx,MSR;де MSR — адреса регістра стану модему
in al,dx
jmp $+2;затримка
; скидаєморегістр даних
mov dx,DAT;де DAT — адреса регістра даних
in al,dx
jmp $+2;затримка
Ці регістринеобхідно скинути для того, щоб надалі не заважали старі значення, які моглизалишитися від роботи інших програм.
Після того якми скинули регістри UART, можна приступити власне до ініціалізації COM-порту.Під час ініціалізації задається формат даних — довжина слова, кількістьстопових бітів, наявність контролю по парності і швидкість обміну.
Для заданняшвидкості обміну даними треба перевести регістр даних і регістр керуванняперериваннями в режим уведення значення дільника частоти тактового генератора.Цей режим встановлюється записом одиниці в старший біт регістра керуваннялінією (LCR):
// переводиморегістр даних і регістр
// керуванняперериваннями у режим уведення
// значеннядільника частоти тактового генератора
ctl = inp(LCR);// LCR — адреса регістра керування
//установлюємо старший біт регістра
outp(LCR_N,ctl | 0x80);
// обчислюємозначення для дільника частоти
//(зміннаbaud визначає швидкість обміну,
// яку михочемо установити)
switch(baud){
case 110: div= 1040; break;
case 150: div= 768; break;
case 300: div= 384; break;
case 600: div= 192; break;
case 1200:div = 96; break;
case 2400:div = 48; break;
case 4800:div = 24; break;
case 9600:div = 12; break;
case 19200:div = 6; break;
case 38400:div = 3; break;
case 57600:div = 2; break;
case 115200:div =1; break;
default:return(-1); break;
}
// записуємозначення дільника частоти,
// молодшийбайт у регістр даних, старший –
// у регістркерування перериваннями
// ICR — адреса регістра керування перериваннями
outp(ICR,(div >> 8) & 0x00ff);
// DAT — адреса регістра даних
outp(DAT, div& 0x00ff);
// переводиморегістр даних і регістр
// керуванняперериваннями назад у звичайний
// для нихрежим
ctl =inp(LCR); // LCR — адреса регістра керування
//скидаємостарший біт регістра
outp(LCR, ctl& 0x7f);
Потім требавизначити формат даних. Для цього запишемо нове керуюче слово в регістр LCR:
// записуємонове керуюче слово
outp(LCR,00000011B);
// керуючеслово 00000011B встановлює довжину
// слова 8біт, один стоповий біт, скасовує перевірку
// напарність і скасовує режим фіксації парності
Останнімкроком в ініціалізації регістрів UART є ініціалізація регістра керуванняперериваннями. Ми повинні спеціально вказати послідовному адаптеру, коли вінповинен генерувати переривання.
Створенняпроцедури обробки переривання для СОМ порта
Послідовнийасинхронний адаптер можна запрограмувати таким чином, що кожний раз, коли вінприйме чи передасть черговий байт, буде згенероване відповідне переривання.Переривання можуть генеруватися асинхронним адаптером у таких випадках:
змінився станлінії приймача: відбулося переповнення приймача, відбулася помилка парності чисинхронізації, лінія перейшла в стан BREAK (розрив);
дані прийнятіі доступні для читання через регістр даних;
регістрпередавача порожній;
змінився станмодему: змінився стан ліній CTS, RI, DCD, DSR.
Існуєможливість окремо забороняти чи дозволяти певний тип переривання. Для цьогонеобхідно встановити відповідні біти в регістрі керування перериваннями.
КожномуCOM-порту відповідає, крім базової адреси його регістрів, лінія IRQ [3].Стандартний розподіл апаратних переривань такий:COM-порт IRQ Номер переривання COM1 IRQ4 INT 0Ch COM2 IRQ3 INT 0Bh COM3 IRQ4 INT 0Ch COM4 IRQ3 INT 0Bh

Длявстановлення власного оброблювача переривання від СОМ порту необхідно замінитипроцедуру обробки переривання, яка встановлена операційною системою або БІОСомна власну процедуру обробки переривання. Після цього дозволити переривання, якебуло встановлено.
Приреалізації процедури обробки переривання необхідно керуватися таким алгоритмом:
1.        Визначитипричину переривання
Для цьогопотрібно проаналізувати стан бітів D1 D2, які визначають причину переривання: Біти D2 D1 Причина переривання 00 переривання по лінії стану; 01 буфер передавача порожній; 10 дані прийняті; 11 змінився стан модему.
У залежностівід того, яке відбулося переривання, його треба відповідним чином обробити.
Алгоритмроботи для кожного типу переривання від СОМ порта:
Відбулосяпереривання по лінії стану
Прочитатирегістр стану лінії і конкретизувати причину переривання (дане перериванняскидається після читання регістра стану лінії). Якщо це необхідно, податиосновній програмі сигнал про помилку, що відбулася, з метою її усунення.Наприклад, у випадку розриву лінії (BREAK) (віддалений модем повісив трубку),можна було б спробувати відновити зв'язок.
Перериванняпо прийому даних
Черговийсимвол прийнятий, і його можна прочитати через регістр даних. Переривання скидаєтьсяпісля читання регістра даних. Прийнятий байт необхідно записати в прийомнийбуфер програми, з якого згодом його прочитає основна програма. Буфер приймачазручно організувати у виді черги.
Буферпередавача порожній
Перериваннявідбувається у випадку, якщо буфер передавача порожній і можна передатиCOM-порту черговий символ. Можна організувати буфер передавача програми, у якийпрограма буде записувати дані, призначені для відправки через COM-порт. У цьомувипадку, коли прийде переривання, треба прочитати черговий символ з програмногобуфера і записати його в регістр даних. Переривання скидається після записучергового символу в регістр даних UART. Якщо немає даних для передачі(програмний буфер передавача порожній), можна заборонити це переривання черезрегістр керування перериваннями.
Змінився станмодему
Перериваннявідбувається при зміні стану вхідних ліній CTS, RI, DCD, DSR. Стан цих лінійможна визначити, прочитавши регістр стану модему MSR. Це перериваннявикористовується для виявлення сигналу RING на телефонній лінії. Перериванняавтоматично скидається після читання регістра стану модему.
За час якийпереривання оброблялося може наступити нове переривання по ліній IRQ, томунеобхідно проаналізувати біт D0. У випадку коли переривання знову згенероване(біт D0 регістра ідентифікації переривань дорівнює одиниці). Тоді передзавершенням обробки переривання необхідно обробити наступне перериваннявідповідно до стану бітів D1, D2. Так варто робити до тих пір, поки не будутьоброблені всі переривання (біт D0 не буде рівний нулю).
Виконавши всівищевказані застереження та вимоги для виходу з процедури обробки перериваннянеобхідно передати контролеру переривань команду обробки кінця переривання. Дляцього посилається в порт з адресою 20h команда кінця переривання і здійснюєтьсявихід з процедури обробки переривання:
mov al,20h
out 20h,al
iret
Установкаоброблювача переривань
Необхідноустановити оброблювач переривань, змінивши відповідний елемент таблиці векторівпереривань. Адреса старого оброблювача зберігається в глобальних змінних.
Останнімкроком в ініціалізації регістрів UART є установка регістра керуванняперериваннями, у який записується занчення причин при настанні яких генеруютьсяпереривання. Наприклад, щоб дозволити генерацію переривань при надходженнічергового символу, треба записати значення для бітів D1,D2 відповідно 0 та 1 урегістрі керування перериваннями:
//установлюємо регістр керування перериваннями
//ICR — адреса регістра керування перериваннями
outp(port_adr+ICR,1);
На цьому етапініціалізації регістрів UART можна вважати закінченим. Тепер COM-порт готовийдо обміну через нього даними з мобільним телефоном.
Ініціалізаціямобільного телефону
Ініціалізаціямобільного телефону здійснюється через передачу мобільному телефону АТ команд,які реалізовані в стандарті 07.07, 05.07 міжнародної організації ETSI15.03.2000 року.
Дляініціалізації мобільного телефону завантажимо стандартну (заводську)конфігурацію параметрів стільникового термінального обладнання.
Для цьогопередамо мобільному телефону команду ATZ. Якщо ініціалізація пройшла успішномобільний телефно поверне “ОК”. Після цього задамо режим передачі номерутелефону на СОМ порт: АТ+CLIP = 1
Списокосновних команд приведений у пункці 2.2 цього розділу [4].
Післяініціалізації мобільного телефону, комплекс переходить у режим очікуваннядзвінків. Якщо у процесі роботи мобільний телефон повернув на СОМ порт команду, то команда розпізнана, виконана без помилок.
Завершенняпрограми
Длязавершення комунікаційної програми, що використовує переривання, необхідноскинути сигнали DTR і RTS і заборонити через контролер переривань перериваннявід COM-порту:
// зчитуємостан регістра маски переривань
mov dx,21h
in dx,al
//забороняємо переривання від порту COM1
or al,00010000b
// записуємонове значення в регістр
// маскипереривань
out dx,al
Потімпотрібно відновити старий вектор оброблювача переривань і вийти з програми.Якщо програму завершити некоректно, то при наступних завантаженнях драйвер СОМпорту буде працювати некоректно.
2.4      Аналіз елементної бази, інтерфейси комплексу
При виборіелементної бази враховувалась ціна деталей. Вибір зроблено на мобільномутелефоні Motorola який підтримує інтерфейс через СОМ порт на швидкості9600кбіт/с, Система команд управління мобільним телефоном схожа з системоюHYPES і визначена міжнародною організацією ETSI.
Дляуправління мобільним телефоном використовується інтерфейс RS232C через СОМ порткомп'ютера. Швидкість 9600 є відносно малою швидкістю обміну даними, тому ЕОМвикористовується малопотужна IBM PC 486DX4. Вона має менші габарити і вартість.Але за рахунок цього збільшились вимоги до часових характеристик програмногозабезпечення оскільки без втрат необхідно передати та прийняти дані змобільного телефону. Для того, щоб була можливість впевниного прийому–передачіданих необхідно використовувати буферизований ввід–вивід. Такий (буферизований)ввід–вивід досягаєтсья за допомогою використання апаратних переривань. Приреалізації апаратного буфера для мікроконтроллера UART16xxx без помилокреалізована лише мікросхема UART1685A, яка не використовується в комп'ютерахIBM PC486DX2, тому для виконання поставленого завдання потрібно реалізуватипрограмний буфер даних. Його можна реалізувати написавши додатковий драйвер СОМпорту. Тобто написати спеціальну програму, яка обслуговуватиме апаратнепереривання.
Використавшимікроконтроллер DTMF cерії M8870 фірми Motorola, та DTMF набір з телефонногоапарату комплекс реалізує інтерфейс між користувачем. У якості узгоджуючого пристроювикористовується мікросхема MAX232. У якості підсилювачів телефонного сигналувикористовуються підсилювачі на базі транзисторів серії КТ1023.
Длярозділення вхідних та вихідних сигналів, та узгодження НЧ сигналу з телефонноюлінією використовується узгоджуючий трансформатор.
Описінтерфейсів комплексу
Живлення
Комутуючаплата комплексу вмонтована вередину системного блоку комп’ютера IBM486DX4, томуїї живлення здійснюється безпосередньо від системного блоку живлення. Системнийбок живлення живиться від міської електромережі з напругою 220В, 50Гц.Потужність системного блоку з комутуючою платою
Роз‘єм RJ11
Дляпідключення тональної телефонної лінії або міні АТС у комплекс вмонтованийроз’єм RJ11. Структурна схема цього роз’єму приведена на рис 1.
/>
рис. 1Підключення телефонної лінії до роз’єму RJ11
Підключеннямобільного телефону до СОМ порту
/>
рис. 2.Стандартний роз’єм мобільного телефону
В мобільнийтелефон вмонтований роз’єм приведений на рис. 2. Позначення виводів цьогороз’єму приведене в таблиці 1.
Таблиця 1.Позначення та назви сигналів для мобілього телефону № Назва Функція Вхід/вихід 1 DC in DC для заряда батереї Вхід/вихід 2 Data in Прийом даних Вхід 3 DG Цифрова земля 4 Data out Відправка даних Вихід 5 Vcc +5V вихід Вихід 6 Test Ключ для виключення телефону підключивши +5V. Тест 7 Mute 0 — номрмальний, 1- музика при визові 8 Ext/Int Протативний / віддалений вхід 9 GND Аналогова земля 10 Accsessory Зв’язаний з мікрофоном / динаміком 11 BF in BF вхід Вхід 12 BF out BF вихід Вихід

Для СОМ таLPT портів приведені лише схематичні позначення, оскільки вони входять достандартного комплекту системного блоку IBM486DX4
Таблиця 2.  Позначеннявиводів для СОМ порта: № Назва Функція Вхід/вихід 1 DCD Детектор прийнятого з лінії сигналу(Data Carrier Detect, DCD) Вхід 2 RD Прийняті дані(Received Data, RD) Вхід 3 TD Передані дані(Transmitted Data, TD) Вихід 4 DTR Готовність вихідних даних(Data Terminal Ready, DTR) Вихід 5 SG Сигнальне заземлення(Signal Ground, SG) - 6 DSR Готовність даних(Data Set Ready, DSR) Вхід 7 RTS Запит для передачі(Request to send, RTS) Вихід 8 CTS Скидання для передачі(Clear to Send, CTS) Вхід 9 RI Індикатор виклику(Ring Indicator, RI) Вхід
Таблиця 3.  Позначеннявиводів для LPT порта:№ Назва Функція Вхід/вихід 9 D7 D7=1 підняти трубку в МТМ, D7=0 – опустити трубку в МТМ Вихід 10 ACK Четвертий розряд цифри ДТМФ декодера Вхід 11 BUSY Строб ДТМФ декодера Вхід 12 PE Третій розряд цифри ДТМФ декодера Вхід 13 SCLPT Другий розряд цифри ДТМФ декодера Вхід 15 ERROR Перший розряд цифри ДТМФ декодера Вхід 20 GND Сигнальна земля -
Інтерфейс зкомутуючою платою є внутрішній, але для розуміння алгоритму роботи комплексуприведемо позначення виводів на комутуючій платі
Таблиця 4.  Комутуючийпристрій№ Назва Функція Вхід/вихід 1 BF out Аналоговий вихід Вихід 2 BF in Аналоговий вхід Вхід 3 K1 Сигнал підняти Вхід 4 RI out Сигнал дзвінок з МТМ Вихід 5 DTMF STROBE Строб ДТМФ декодера Вихід 6 DTMF D1 Перший розряд цифри ДТМФ декодера Вихід 7 DTMF D2 Другий розряд цифри ДТМФ декодера Вихід 8 DTMF D3 Третій розряд цифри ДТМФ декодера Вихід 9 DTMF D4 Четвертий розряд цифри ДТМФ декодера Вихід 10 ком. МТМ D7=1 підняти трубку в МТМ, D7=0 – покласти трубку в МТМ Вихід
2.5      Алгоритм роботи комплексу
Алгоритмроботи комплексу приведений в альбомі схем. На функціональній блок-схемізображені:
А1       –блок генерування сигналу дзвінок, A2 – блок підняття та опускання трубки,A3–блок введення виведення та підсилення аналогових сигналів, A4– конвертор TTL/ RS232C, A5– DTMF контролер, A6    –живлення комплексу, A7 – зарядний та комутуючийпристрій, 1– кабель з’єднувальний мобільного телефону з комутуючою платою, 2           –кабель з’єднувальний комутуючої плати з СОМ портом, 3–кабель RJ11 з’єднуєтелефонну лінію з комутуючою платою, 4– кабель з’єднання комутуючої плати з LPTпортом.
Розглянемодва випадки:
Пристрійочікує дзвінка з міста;
У разінадходження дзвінка з міста, спрацьовує блок A2, після чого в ТЛ (телефонналінія) подається звуковий сигнал. Почувши звуковий сигнал (два коротких гудка)користувач повинен набрати код. Набір проводитися у тональному режимі забонентського телефону. При натисканні користувачем клавіші, спрацьовує DTMFконтролер (А5), який на LPT порт виводи подає розкодований двійковий коднабраної клавіші. Програма оборобки зчитує з LPT порту кілька таких сигналів,запам’ятовує їх. Після того як ідентифікаційний код користувача комплексунабраний програма переглядає таблицю всіх кодів абонентів комплексу і знаходитьзапис з даним кодом. У тому випадку, коли користувач не набрав код, або набравйого неправильно подається звуковий сигнал (три гудка), що сповіщає про те, щосистема відмовила користувачу в доступі. Після цього спрацьовує блок В, якийкладе трубку і система переходить у початковий стан. Якщо користувач набравправильний код, програма посилає в порт СОМ команду АТD###########; де########### — номер телефону, що відповідає набраному користувачем коду.Мобільний телефон одержавши таку команду з СОМ порта негайно починає їївиконувати. Тобто набирає номер телефону. Попередні установки мобільноготелефону настроєні таким чином, що після того, як номер телефону набранийнизкочастотні сигнали подаються з мобільного телефону у телефонну лінію мережіМТМ, тобто відбувається комутація. Програма обробки телефонних дзвінківперевіряє чи віддалений абонент відповів на телефонний дзвінок. У тому випадкуколи абонент відповів на телефонний дзвінок Якщо так, то відбуваєтсья телефоннарозмова двох абонентів. Після закінчення розмови мобільний телефон передаєкомплексу час початку та кінця розмови, і за допомогою комутуючого блока Вкомплекс кладе трубку МТМ. У мережі GSM мобільний телефон кладе слухавкуавтоматично.
Випадок колиабонент GSM телефонує в місто.
Мобільнийтелефон через інтерфейс RS232C та конвертор А4 надсилає програмі номер телефонукористувача. Програма аназалізує таблицю відповідності номерів телефонів. Утому випадку коли номер телефону прописаний у таблиці комутатор А2 піднімаєтрубку на лінії МТМ і користувачеві подається звуковий сигнал (два короткихгудки). Після цього користувач повинен набрати у форматі DTMF номер телефону,куди він хоче зателефонувати. Після того як мобільний телефон повідомить черезСОМ порт, що розмова завершилася комутатор A2 покладе трубку в мережі МТМ. Часрозмови також фіксується і відображений у log.txt файлі, куди записуються всівхідні та вихідні дзвінки у форматі:початок розмови. тривалість (сек) вартість (коп) номер телф. GSM Напрямок дзвінка DTMF набір

Такожведеться облік використаних користувачем комплексу грошей. У тому випадку колиавансова сума внесена користувачем вичерпана, комплекс автоматичновідмовляється обслуговувати такого користувача.

3.        Практична частина
 
3.1      Підключеннякомпонентів та настроювання апаратної частини
/>
Відладкаапаратної частини пристрою полягає у встановлені відповідності рівнів сигналівміж мобільним телефоном та СОМ портом.
Вонапроводиться при виготовленні комплексу один раз. Для цього використовуєтьсямікросхема MAX232 яка перетворює рівнень 5В у 12В і навпаки окремо для ліній Rxта Tх. Ця мікросхема являє собою генератор тактової частоти, помножувачнапруги, та перетворювач змінної напруги в постійну. Вона підключається застандартною схемою включення. Також необхідно встановити робочі режими напідсилюючих транзисторах, та використати стандартне включення DTMFмікроконтроллера.
Для того, щобпідключити роз'єм динаміка до телефонної лінії необхідно підключити його черезрезистор 100 Ом до напруги 5В а від резистора через конденсатор до телефонноїлінії. Схема зображена на рис. 1. Таке підключення зумовлене специфікоюпобудови PC Speakerа на материнській платі. Його вихід зроблено за схемою звідкритим колектором.
Перевіритиправильність підключення мобільного телефону до СОМ порта можна за допомогоюпрограми HiperTerminal.

3.2      Розробка драйвера послідовного інтерфейсу
Драйверповинен забезпечувати буферизований ввід-вивід з СОМ порта в програму. А післязакінчення роботи програми відновлювати старий контролер переривань.
Інтерфейсдрайвера з програмою складається з наступних функцій:
Іnstаllсом(comNo)– У залежності від номеру СОМ порту встановлює процедуру обробки апаратногопереривання
OpenCOM(speed:byte)– готує СОМ порт для роботи для порту визначеного в процедурі InstallCOMвизначає швидкість обміну даними, кількість стопових бітів, контроль передачі.Функція реалізує апаратний протокол встановлення зв'язку
Sread() –функція читає з програмного буфера символ, що надійшов, та видаляє його збуфера і передає програмі, що визвала цю функцію.
Swrite(b:byte)– процедура записує символ у програмний буфер для передачі його через СОМ порт,символ буде передано коли наступить переривання “буфер передавача порожній”.
CloseCOM() –закінчує роботу з СОМ портом на встановленій швидкості. Функція реалізуєапаратний протокол закінчення роботи DTE та DCE обладнання.
RestoreCOM()– процедура проводити заміну процедури обробки апаратних переривань. Відновлюєпопередні настроювання, що були до початку роботи програми.
IsRing():byte– перевіряє чи був виклик з МТМ і якщо був виклик з МТМ те функція повертаєчисло > 0 в іншому випадку функція повертає код 0.
Буфер дляпередачі має розмір 512 байт. Буфер для прийому даних має розмір 1024байти.Буферів з такими розмірами достатньо для забезпечення надійної передачі данихміж мобільним телефоном та СОМ портом.
Текстифункцій приведені в додатку 4

3.3      Розробка програми bridge для комплексу МТМ↔GSM
Програмавзаємодіє з драйвером і реалізує роботу комплексу. Текст програми приведений вдодатках. Програма складається з наступних процедур та функцій:
Voidmain(void) – основна процедура з якої починається виконання програми. У ційпроцедурі спочатку викликається завантаження поточної конфігурації процедураgetConfig() після чого проводитися ініціалізація мобільного телефону. Післяініціалізації програма переходить у режим очікування. У разі виклику зтелефонних мереж програма викликає функції Void           PhoneMobiline(),Void   PhoneCity().
Int       getUserID(int char) – ця функція визначає чи є код, який увів користувач МТМабо телефон, номер якого надійшов з GSM, у таблиці відповідності користувачівкомплексу. Процедура також перевіряє значення авансової суми внесеної абонентомкомплексу.
Void   PhoneMobiline() – у цій процедурі реалізований алгоритм роботи комплексу увипадку коли дзвінок надійшов з GSM.
Void   PhoneCity() – у цій процедурі реалізований алгоритм роботи пристрою у випадкуколи дзвінок надійшов з МТМ.
Void   StartToking() – продерура очікує коли встановиться зв‘язок з віддаленимабонентом, і інспектує час розмови. Після цього викликає функції SaveLog() таSaveMoney() для збереження інформації про розмову та авансовий внесок абонента.
Void   SaveLog() – ця процедура відкриває файл Log.txt та записує туди стрічкурезультату розмови в форматі:початок розмови. тривалість (сек) вартість (коп) номер телф. GSM Напрямок дзвінка DTMF набір

Void   SaveMoney() – Процедура записує нове значення кредиту абонента комплексу уфайлі Users.txt.
Формат файлу:код № тел. GSM
Вартість вхідного дзвінка з МТМ
(за 1 хв) Вартість вихідного дзвінки з GSM (за 1 хв)
Кредит наданий користувачеві комплексу в копійках
(макс. 99999 коп) Напрямок дзвінка
Void   getConfig() – Процедура занходить файл setup.cfg і завантажує з нього параметрипрограми. До параметрів входять:
Void   SendStr() – ця процедура надсилає до мобільного телефону стрічку сиволів, почерзі викликаючи функцію swrite(char ch).
Крім основнихфункцій у програмі реалізований інтерфейс з користувачем через телефонну лінію.Для того, щоб використати допоміжні функції, які реалізовані у комплексінеобхідно увести пароль, який записаний у файлі конфігурації setup.cfg. Длявикористання тієї чи іншої сервісної функції необхідно зателефонувати накомплекс з МТМ і після двох гудків увести значчення пароля. (пароль складаєтьсяз цифр від 0..9), у випадку коли пароль був введений вірно, комплекс відповістьдвома короткими гудками і буде очікувати вводу сервісної функції. При одержаннізначення (коду) сервісної функції комплекс одразу виконає її.
3.4      Програма обробки інформації про дзвінки
Приексплуатації комплексу групою людей, виникає потреба у аналізі різного родуінформації з подальшим представленням рахунку клієнтам для оплати. Для аналізутабличних даних зручно використати Microsoft Access 2000, який є сам по собіуніверсальним редактором баз даних і найкаще підходить для проектуванняневеликих баз даних.
Обробкарезультатів комплексу здійснюється за наступним алгоритмом:
Вставитичисту дисекту типу FDD 3,5’’ у дисковод на комплексі;
Зателефонуватина комплекс;
Післязапрошення (два коротких гудки) ввести пароль;
Післяпідтвердження (два коротких гудки) увести код сервісної функції. Якщо всезроблено правильно, то комплекс запише дані про користувачів та дзвінки надискету FDD 3,5’’
На коп’ютеріде всановлений Microsoft Accsess 2000 необхідно запустити програму GSM_MTM.mdbобробки телефонних дзвінків.
Призавантаженні програми з’явиться стартова форма.
/>
Програмаскладається з наступних підпрограм:
Підпрограмадруку та перегляду звітів
Підпрограмааналізу інформації
Підпрограмасервісних функцій
Також устартовій формі необхідно ввеси звітний період, тобто початкову та кінцеву датузвітного періоду.
Підпрограмасервісних функцій визивається при натисканні клавіші “Сервіс”. На екранівиводиться форма з сервісними функціями:
/>

До сервіснихфункцій входять:
Імпорт даниху програму обробки дзвінків;
При виборіцієї команди виконується імпорт даних з дискети FDD3,5’’ у програму обробки.При цьому вважається, що після імпорту, дані на дискеті знищуються.
Експорт файлукористувачів
Програмаобробки дзінків експортує таблицю з користувачами у зрозумілому для комплексуформаті у файлі users.txt.
Експорт файлупротоколу.
Ця функціяреалізує перенесення даних з БД Access 2000 у текстовий файл. Вона реалізованадля сусісності з майбутніми версіями та архівування даних. Програма експортуєдані про дзвінки у текстовий файл log.txt
Також у ційформі запам‘ятовується виконання сервісних функцій.
ФункціяАналіз
Післяімпортування даних необхідно вибрати у основній формі підопцію “Аналіз”.Завантажиться форма з наступними сервісними функціями:
1.        Показатикористувачів у яких завдаток менше за 3 грн.
На екранівідобразиться відповідний запит
2.        Показатифайл протоколу за звітній період (звітній період вводиться в основній формі)
Інколинеобхідно переглянути статистику або переконатися у правильній роботікомплексу. Тому зазвичай ця функція програми не використовується, але напрохання замовника не була видалена з робочої версії, оскільки комплекс працюєу режимі тестування.

/>
На формізображена статистика використання комплексу його абонентами. Червоним кольоромвідображено час розмови (сек), синім кольором показано (кількість грошей(коп)), що використані при розмовах через комплекс за звітній період.
Функціязвітів
/>
Третя формареалізує систему звітів, які необхідні при представлені рахунку за розмовикористувачам комплексу.
Звіт по поточномукористувачу. У цьому звіті представлена інформація з звітній період, (звітнійперіод вводиться у основній формі), та про конкретного користувача, який був утой момент активним. Звіт має наступний вигляд:

/>
Загальнийзвіт по імпортованій базі даних призначений для власника комплексу і надаєоперативну інформацію по всій базі даних за звітній період. Звіт має наступнийвигляд:
/>
Програманаписана на мові Visual Basic, що поставляється разом з Microsoft Access 2000 іє зручною мовою для написання скриптів, та застосування СОМ технології дляінтеграції з іншими офісними програмами [6].
Також упрограмі реалізована відправка SMS повідомлень через інтернет. Ця операціяреалізується за допомогою UMC шлюзу з адресою sms.umc.com.ua. Для відправленняSMS повідомлення абоненту GSM необхідно на адресу +3@umc.com.uaвідправити листа. Оператор, який здійснює обробку даних може в автоматичномурежимі надіслати користувачам повідомлення про те, що авансовий внесоквичерпано.
 
3.5      Тестуваннякомплексу
Настройкапараментрів комплексу знаходяться у файлі config.sys
InitializeAT+CLIP=1 // Ініціалізація мобільного телефону
DroplineAT+CHUP // покласти трубку на мобільному телефоні
DialPrefixATD        // команда набору номеру перфікс
DialSuffix;                 //команда набору номену суфікс
DeviceCOMCOM1 // номер COM порту. Базова адреса береться з БІОСа
CharDelay 0                         //затримка між переданими символами
Speed 9600                                    //швидкість передачі СОМ
StopBits 1                            //кількість стопових біт
LPT_ADDRESS888           //базова адреса LPT потру
tarifConnect16                 // тарифікація при з’єднанні
MaxTime 300                     //максимальний час розмови
NumDigits 3                        //кількість цифр при наборі коду
Післянастройки параметрів у файлі config.sys необіхдно запустити файл bridge.exeякий переведе систему у робочий режим. На цьому етапі система готова дозідйснення комутацій GSM«МТМ.
Як результатроботи комплексу приведемо уривок з файлу log.datДата Тривалість розмови Сума витрачених грошей коп. Номер абонента моста Напрям розмови 03/03/12,18:41:07 3 27 380674080486 з GSM 03/03/12,18:41:07 3 27 380674080486 з GSM 03/03/12,18:41:32 4 27 380674080486 з GSM 03/03/12,18:41:53 11 909 з MTM 03/03/12,18:42:38 4 28 80674080486 з MTM

Файлкористувачів комплексу має наступний вигляд:User.dat№код № телефону Тариф МТМ Тариф GSM Кредит Напрям Назва 000 380674080486 027 122 49918 MTGSM Петров 001 380672316643 027 122 50000 MTGSM Тетяна 002 380677136679 027 122 50000 MTGSM Данчук 010 380677755301 027 122 50000 MTGSM Наташа 999 8909 000 122 49958 MT Олег
 

4.        Економічнийрозрахунок
 
4.1      Розрахунокекономічної вигоди при використанні комплексу
Длярозрахунку економічної вигоди використаємо граничні тарифи радіомережоператорів УМЗ та Київстар:Вид пакету Напрям Вартість (1хв) без використання комплексу
Вартість (1хв)
послуг комплексу Київстар Економ GSM↔MTM 2,86 0,27 Економ MTM->GSM 2,86 1,22 BASE GSM->MTM 2,86 0,27 BASE MTM->GSM 2,86 1,22 Український мобільний зв‘язок Економ GSM->MTM 2,88 0,27 Економ MTM->GSM 1,44 1,22
Сумазаощаджена на дзвінках через комплекс виражається наступною формулою:
/>                         (1)
де       /> — заощаджена сума (грн)
/> — середній час розмовиза день
/> — кількість користувачівкомплексу
/>-кількість днів
/> — різниця між дзвінкомбез комплексу та з використанням комплексу (табличні дані)
Статистика,яка накопичена у результаті використання комплексу показує, що кожнийкористувач комплексу телефонує додому принаймі один раз на день, кількістькористувачів комплексу /> становить 30, тоді протягом місяця кількістьзаощаджених коштів становитиме у середньому
N = 30*1*30(2,88-1,28)= 1440 (грн/міс)
Зрозуміло, щопри підключенні до комплексу мобільного телефону з іншим стартовим пакетом,сума заощаджених коштів буде іншою.
5.2      Розрахунок собівартості програмного комплексу
Основнимзавданням техніко-економічного обгрунтування дипломного проекту є визначеннявеличини економічного ефекту від використання основних та другоряднихрезультатів, які одержані в даній дипломному проекті. Оцінка ефективностіприйнятого рішення повинна бути комплексною і враховувати всі його аспекти.
Проведемооцінку витрат праці на розробку програмного забезпечення для комплексу, прицьому виходимо з того, що розмір вихідного тексту запису алгоритму і даних восновному визначає затрати праці /> та час розробки /> програмного продукту:
/>
де /> — кількість вихіднихкоманд в тисячах.
В якостівихідної команди приймаємо рядок програми. Загальний об'єм вихідного текступрограм складає приблизно 1800 рядків. Тоді:
/>

Продуктивністьпраці розробників програмного забезпечення визначається наступним чином:
/>
Тоді миотримуємо, що продуктивність праці розробників:
277,8
Часнеобхідний для розробки програмного продукту, можна визначити за формулою:
/>
де /> — строк розробкипрограмного продукту;
/> — коефіцієнт вірностіпостановки завдання;
/> — час розробкиалгоритму;
/> — час настройки татестування;
/> — час на підготовкутексту;
/> — час на розробкудокументації.
Останнівеличини обчислюються по наступним формулам:
/>
/>
/>

/>
/>
/>
де К —залежить від ступеня підготовки програміста;
/> — кількістьрядків програми (в тис.).
Підставляємозначення в останні формули враховуючи, що К=0,8 (стаж роботи до 2-х років).
/>
/>
/>/>
/>
/>
/>

Тоді час,який необхідний для розробки програмного продукту дорівнює:
/>
Визначимособівартість години роботи ПК. Для цього розраховуються поточні витрати на експлуатаціюкомп'ютера. До їх складу включаються витрати на електроенергію і амортизаційнівідрахування на реновацію від вартості комп'ютера та інше.
Витрати наелектроенергію визначають множенням витрати електроенергії за одну годину навартість 1 кВт/год електроенергії і на час роботи комп'ютера за рік. Час роботикомп'ютера за рік визначається множенням кількості робочих днів у рік на часроботи комп'ютера за день:
/>
де /> — середня кількістьробочих днів у рік.
Середнякількість робочих днів у рік буде рівна:
/>
Тоді, часроботи ПК за рік дорівнює:
/>
Витратиенергії визначаються за формулою:
/>

де /> — витратиелектроенергії за одну годину;
/> — вартість 1 кВт/годелектроенергії;
/> — час роботи комп’ютераза рік.
Тоді витратиенергії складають:
/>
Амортизаційнівідрахування визначаються множенням вартості комплекса на норму амортизаційнихвідрахувань 10%:
/>
Річназаробітна плата обслуговуючого персоналу (бугалтера, що буде оброблятиінформацію про дзвінки 200 грн.) складає:
/>
Відрахуванняна соціальне страхування, складають 3% від загальної заробітної плати за рік:
/>
Вартістьвитрачених матеріалів складає 2% від вартості обчислювальної техніки:
/>

Утримання наремонт приміщень, в яких знаходяться засоби обчислювальної техніки, складає 3%від вартості обчислювальної техніки:
/>
Кількістькомплексів, що реалізовують зв’язок: />
Собівартістьгодини роботи на комп'ютері визначається наступним співвідношенням:
/>
Підставляємозначення в останню формулу й отримаємо:
/>
Рахуємо прямівитрати на виконання дипломної роботи, які визначаються наступним добутком:
/>
де /> — собівартість годинироботи на комп’ютері;
/> — час необхідний длярозробки програмного продукту.
Підставляємозначення й одержуємо:
/>

Накладнівитрати, що включають витрати на освітлення, опалення і т. п. приймаються врозмірі 40-50% від суми прямих витрат:
/>
Загальнівитрати на виконання дипломної роботи:
/>
Підставляємодані й одержуємо:
/>
Визначенняціни на програмний продукт визначається наступним співвідношенням:
/>
де В —витрати на виконання дипломного проекту;
P — рівеньрентабельності, в нашому випадку P = 30;
K —коефіцієнт, що залежить від науково-технічного рівня, в нашому випадку К = 1,1.
Підставляємоці значення й отримаємо ціну програмного продукту, яка дорівнює:
/>

Річнийекономічний ефект від програми обробки дзвінків визначається за наступноюформулою:
/>
де: /> — витрати нарозв’язання задачі традиційними методами;
/> — періодичністьрозв’язку задачі, для нашого випадку T = 12;
/> — приведені витрати.
Длявизначення параметру /> використовуєтьсянаступна формула:
/>
де: /> — трудомісткість наобробки дзвінків з комплексу, вимірюється в годинах;
/> — заробітна платавиконавця за одну годину.
Підставляємозначення в останню формулу й одержуємо:
/>
Длявизначення параметру /> використовуєтьсянаступна формула:
/>
де: /> — загальний об’ємвихідного тексту програмного додатка;
/> — собівартість годинироботи на комп’ютері;
/> — продуктивність працірозробників програмного забезпечення;
/> — нормативно-галузевийкоефіцієнт (/>).
/> — ціна програмногопродукту.
Отжеприведені витрати дорівнюють:
/>
Тоді річнийекономічний ефект дорівнює:
/>

6. Охорона праці
 
6.1      Загальні положення
Охорона праці– система законодавчих актів, соціально-економічних, організаційно-технічних,гігієнічних і лікувально-профілактичних заходів та засобів, що забезпечуютьбезпеку, збереження здоров’я та працездатність людини в процесі роботи.
Всерізноманіття нормативних документів, що включають поняття охорони праці, заяких виключено або значно послаблено вплив на працюючих шкідливих танебезпечних факторів трудового середовища.
6.2      Експлуатація комплексу у автономному режимі
Вмістшкідливих речовин, не попвинен перевищувати концентрацій, вказаних у переліку“Предельно допустимых концентраций загрязняющих веществ в атмосферном воздухенаселенных мест” №3086-84 від 27.08.84р. Для озону концентрація не повиннаперевищувати 0.03 мг/м3. Температурні норми повинні бути від 100 до 250.Приміщення де експлуатується комплекс не повинно бути запилене, вологістьповітря не більше 55%. Комплекс необхідно розміщувати щонайменьше за два метривід робочого місця оператора, або в окремій кімнаті.
6.3      Електромагнітне випромінювання та поля від ЕОМ
ЕОМ змоніторами на основі електронно-променевих трубок є джерелом кількох видівелектромагнітного випромінювання, зокрема мікрохвиль нетеплової інтенсивності.Види випромінювання:
рентгенівськевипромінювання;
оптичновипромінювання;
високочастотніелектромагнітні поля;
низькочастотніелектромагнітні поля;
електростатичніполя (ГОСТ 12.1045-84);
іонізуючевипромінювання;
випромінюваннята поля радіочастотного діапазону (регламентуються ГОСТ 12.1.006.-84).
6.4      Шум, пов’язаний з ВДТ
ЕОМ єпотенційним джерелом цілого ряду звуків, що містять як коливання, які можнапочути, так і коливання ультразвукового діапазону. Цей шум справляє негативнийвплив на функціональний стан користувача.
Відомо, щошум несприятливо діє на людину, особливо, при довготривалому впливі. Укористувача, діяльність якого пов’язана з переробкою інформації, що частосупроводжується елементами творчості, це виражається у зниженні розумовоїпрацездатності (наприклад, швидкість обробки тексту зменшується на 10-15%,зростає кількість помилок), у прискореному розвитку зорового стомлення,підвищенні витрати енергії (на 17%), появі головного болю, розвитку безсоння,послаблення уваги та ін.
Вимірюванняшуму на робочих місцях здійснюється згідно ГОСТ 12.1.050-86 та ГОСТ 23941-79.
Згідно ГОСТ12.1.003-83 шум у приміщенні, де виконують роботу, пов’язану з виробленнямконцепцій, створення нових програм, творчістю, не повинен перевищувати 40 дБА.Під час виконання операторської та близької до неї діяльності рівень шуму неповинен перевищувати 65 дБА.
6.5      Параметри освітлення робочого місця та робочогоприміщення
Невикористовуванерентгенівське випромінювання, а також випромінювання в ультрафіолетовому,інфрачервоному та радіочастотному діапазонах повинні відповідати гігієнічнимнормам згідно з ГОСТ 12.2.003-74, ГОСТ 12.3.002-75, ГОСТ 12.1.006-84.
Згідно зтимчасовими санітарними нормами і правилами для працівників обчислювальнихцентрів № 4559-88 освітлення в приміщення з ЕОМ має бути змішаним (природним іштучним). Доцільно, щоб орієнтація світлових отворів для приміщень з ЕОМ булана північ. Природне освітлення повинно здійснюватись у вигляді бічногоосвітлення і відповідати нормальним рівням за санітарними нормами і правилами11-4-79 “Природне і штучне освітлення. Норми проектування”.
6.6      Температура і вологість у приміщенні
Як оптимальнімікрокліматичні параметри прийнято вважати такі, що при тривалому тасистематичному впливі на людину забезпечують збереження нормальногофункціонального та теплового стану організму без напруження реакційтерморегуляції, створюють відчуття теплового комфорту та є передумовоюзбереження високого рівня працездатності.
За данимиВООЗ, оптимальні значення температури повітря у приміщенні становлять 19-23% ˚С.Рекомендується відносна вологість повітря 55%. Швидкість руху повітря неповинна перевищувати на рівні обличчя 0.1 м/с.
6.7      Організація робочого місця
Робоче місце(РМ) — це обладнаний технічними засобами (засобами відображення інформації,органами управління, допоміжним обладнанням) простір, де здійснюєтьсядіяльність виконавця (або групи виконавців).
Удосконаленняорганізації РМ є однією з умов, що сприяють підвищенню продуктивності праці,тому питанню організації РМ необхідно приділити особливу увагу. Залітературними даними, при правильній організації РМ продуктивність праці,операторів ЕОМ від 8 до 20%.
Основнимобладнанням робочого місця користувача ЕОМ є монітор, клавіатура, робочий стіл,стілець (крісло); допоміжним — пюпітр, підставка для ніг, шафи, полиці та ін.Вимоги до них відображені у нормативних документах: ВСПиПРВЦ; ГОСТ 12.2.032-78;ГОСТ 22269-76.
Робочі місцяз ЕОМ повинні розташовуватися на відстані не менше як 1.5 м від стіни звіконними прорізами, від інших стін — на відстані 1м, між собою на відстані неменше 1.5 м. При розміщенні робочих місць необхідно виключити можливістьпрямого засвічування екрана джерелом природного освітлення. Джерело природногоосвітлення (вікно) не повинно також потрапляти в зону прямого спостереженнякористувача.
Прирозміщенні ЕОМ на робочому місці потрібно забезпечити простір для користувачавеличиною не менше як 850 мм з урахуванням виступаючих частин обладнання тазастосування (при необхідності) спецодягу. Для стіп має бути передбаченопростір по глибині та висоті не менше 150 мм, по ширині — не менше як 530 мм.
Прирозміщенні робочих місць з відеотерміналами та персональними ЕОМ необхіднозабезпечити виконання наступних вимог:
робочі місцяз відеотерміналами та персональними ЕОМ розміщуються на відстані не менше 1 мвід стін зі світловими прорізами;
відстань міжбічними поверхнями відеотерміналів має бути не меншою за 1,2 м;
відстань міжтильною поверхнею одного відеотермінала та екраном іншого не повинна бутименшою 2,5 м;
прохід міжрядами робочих місць має бути не меншим 1 м.
Вимоги цьогопункту щодо відстані між бічними поверхнями відеотерміналів та відстані міжтильною поверхнею одного відеотерміналу та екраном іншого враховуються такожпри розміщенні робочих місць з відеотерміналами та персональними ЕОМ в суміжнихприміщеннях, з урахуванням конструктивних особливостей стін та перегородок.
Конструкціяробочого місця користувача відеотерміналу (при роботі сидячи) має забезпечуватипідтримання оптимальної робочої пози з такими ергономічними характеристиками:ступні ніг — на підлозі або на підставці для ніг; стегна — в горизонтальнійплощині; передпліччя — вертикально; лікті — під кутом 70 — 90 град. довертикальної площини; зап'ястя зігнуті під кутом не більше 20 град. відносногоризонтальної площини, нахил голови — 15 — 20 град. відносно вертикальноїплощини.
Якщокористування відеотерміналом та персональною ЕОМ є основним видом діяльності,то вказане обладнання розміщується на основному робочому столі, як правило, злівого боку.
Якщовикористання відеотерміналу та персональної ЕОМ є періодичним, то устаткування,як правило, розміщується на приставному столі, переважно з лівого боку відосновного робочого столу. Кут між поздовжніми осями основного та приставногостолів має бути 90—140 град.
Висотаробочої поверхні столу для відеотерміналу має бути в межах 680—800 мм, а ширина— забезпечувати можливість виконання операцій в зоні досяжності моторного поля.
Рекомендованірозміри столу: висота — 725 мм, ширина — 600—1400 мм, глибина — 800 — 1000 мм.
Робочий стілдля відеотерміналу повинен мати простір для ніг висотою не менше 600 мм,шириною не менше 500 мм, глибиною на рівні колін не менше 450 мм, на рівнівитягнутої ноги — не менше 650 мм.
Робочий стілдля відеотерміналу, як правило, має бути обладнаним підставкою для ніг шириноюне менше 300 мм та глибиною не менше 400 мм, з можливістю регулювання по висотів межах 150 мм та кута нахилу опорної поверхні — в межах 20 град. Підставкаповинна мати рифлену поверхню та бортик на передньому краї заввишки 10 мм.
Робочесидіння (сидіння, стілець, крісло) користувача відеотерміналу та персональноїЕОМ повинно мати такі основні елементи: сидіння, спинку та стаціонарні абознімні підлокітники.
У конструкціюсидіння можуть бути введені додаткові елементи, що не є обов'язковими:підголовник та підставка для ніг.
Робочесидіння користувача відеотерміналу та персональної ЕОМ повинно бути підйомно-поворотним,таким, що регулюється за висотою, кутом нахилу сидіння та спинки, за відстаннюспинки до переднього краю сидіння, висотою підлокітників.
Ширина таглибина сидіння повинні бути не меншими за 400 мм. Висота поверхні сидіння маєрегулюватися в межах 400—500 мм, а кут нахилу поверхні — від 15 град. вперед до5 град. назад.
Висота спинкисидіння має становити 300±20 мм, ширина — не менше 380 мм, радіус кривизни вгоризонтальній площині — 400 мм. Кут нахилу спинки повинен регулюватися в межах0—30 град. відносно вертикального положення. Відстань від спинки до передньогокраю сидіння повинна регулюватись у межах 260 — 400 мм.
Для зниженнястатичного напруження м'язів рук необхідно застосовувати стаціонарні або знімніпідлокітники довжиною не менше 250 мм, шириною — 50—70 мм, що регулюються повисоті над сидінням у межах 230±30 мм та по відстані між підлокітниками в межах350 — 500 мм.
Поверхнясидіння, спинки та підлокітників має бути напівм'якою, з неслизьким,ненаелектризовуючим, повітронепроникним покриттям та забезпечувати можливістьчищення від бруду.
Екранвідеотермінала та клавіатура мають розташовуватися на оптимальній відстані відочей користувача, але не ближче 600 мм, з урахуванням розміруалфавітно-цифрових знаків та символів.
Розташовувативідеотермінал на робочому столі необхідно так, щоб поверхня екрана знаходиласяна відстані 400-700 мм від очей користувача. Розташування екрану відеотерміналумає забезпечувати зручність зорового спостереження у вертикальній площині підкутом ±30 град. від лінії зору працівника.
Клавіатуруслід розміщувати на поверхні столу або на спеціальній, регульованій за висотою,робочій поверхні окремо від столу на відстані 100 — 300 мм від краю, ближчогодо працівника. Кут нахилу клавіатури має бути в межах 5 — 15 град.
Розміщенняпринтера або іншого пристрою введення-виведення інформації на робочому місцімає забезпечувати добру видимість екрану відеотермінала, зручність ручногокерування пристроєм введення-виведення інформації в зоні досяжності моторногополя: по висоті 900 — 1300 мм, по глибині 400 — 500 мм.
При потребівисокої концентрації уваги під час виконання робіт з високим рівнемнапруженості суміжні робочі місця з відеотерміналами та персональними ЕОМнеобхідно відділяти одне від одного перегородками висотою 1,5 — 2 м.
Рекомендуєтьсярозміщувати елементи робочого місця таким чином, щоб витримувалася однаковавідстань очей користувача від екрана, клавіатури, тримача документів.
Принтер требарозташувати так, щоб доступ до нього користувача та його колег був зручним.

Висновки
Результатомданого дипломного проекту є спроектований та впроводжений апаратно-програмнийкомплекс GSM↔MTM. Реалізована можливість двостороннього зв’язку міжмережами GSM та MTM, комплекс реалізує персональну тарифікацію для кожногоабонента та напрямки куди абонент може телефонувати, реалізований захист віднесанкціонованого підключення, розроблений зручний інтерфейс для добавлення тазнищення абонентів комплексу, а також швидка і надійна обробка статистичнихданих, друк звітів, функції пошуку та редагування. А також при наявностіInternet підключення, функція оперативного повідомлення абонентів про зміни.
Тестуваннякомплексу підтвердило те, що зідйсненні дзвінки через комплекс по тарифам, дляабонентів комплексу значно дешевші ніж при зідйсненні дзвінків на телефонмережі МТМ. Підтримуєсться достатньо висока якість переговорів, завдякиреалізації додаткових засобів, забезпечується висока надійність тавідмовостійкість.
Апаратно–програмнийкомплекс введений в дію (у режимі тестування) на фірмі “New Com”. Вінвикористовує всі вище описані функції та режими. Скарг, щодо роботи комплексуне надходило.
У загальномуапаратно–програмний комплекс GSM↔MTM показав себе в роботі, якконкурентноспроможній продукт.
У процесіроботи над дипломним проектом мною була підготовлена і прочитана доповідь на 9міжнародній конференції, що проводилася на території Технічного університетуПоділля. Під час створення дипломного проекту були використані знання, одержаніпід час навчання.

Література
1.               СамуйловК.Е., Нікітіна М. В. “Как устроена сеть GSM”, www.udn.msk.su/gsm/index.htm, e-mail:ksam@udn.msk.su
2.               АлександрФролов, Григорий Фролов       “Программирование модемов“ Том 4, М.:Диалог-МИФИ, 1993, 236 стр.
3.               АлександрФролов, “Язык СИ”, М: «Питер», 1999г, 450с., ил.
4.               http://www.simens.com/index.htm Система командмобільного телефону (англ.) s25modCom.pdf, 52 Kb.
5.               ECCOMbridge руководство по експлуатации, 1996г.,, ECCOM_BRIDGE.PDF, 491Kb
6.               Справкапо Visual Basic 5.0, %Program files%Microsoft Exchange/office/1049/vbaoff9.chm
7.               Cправкапо Microsoft Outlook 2000, %program files%MicrosoftExchange/Office/1049/vbaoutl9.chm
8.               Справкапо Microsoft Access 2000, %windir%help/Access.chm
9.               МаннЕнтони.
10.          М23   VisualBasic 5. Руководство разработчика.:
11.          Пер.с англ. – К.: Диалектика, 1997–705с.: ил. – Парал. тит. англ.
12.          ISDN966–506–115–1 (рус)
13.          Конспекслекцій по Access, Мунтяну Р.П. викладач кафедри КСМ, ЧернівецькогоНаціонального Університету 2001 рік
14.          ГОСТ19.001-77 ЕСПД. Общие положения.
15.          ГОСТ19.101 -77 ЕСПД, Виды программ и программных документов.
16.          ГОСТ19.104-78 ЕСПД. Основные надписи.
17.          ГОСТ19.105-78 ЕСПД. Общие требования к программным документам.
18.          ГОСТ19,401-78 ЕСПД. Текст программы.
19.          ГОСТ19.402-78 ЕСПД. Описание программы.

ДОДАТОК 1
Затверджено
Л.ФФ.57149-ТП12 01-1
“ПРОГРАМНО-АПАРАТНИЙКОМПЛЕКС MTM↔GSM”
ПРОГРАМАОБРОБКИ ДЗВІНКІВ
ТЕКСТПРОГРАМИ
Анотація
Опис програмиЛ.ФФ.57149-ТП 12 01-1 містить текст програми bridge.c. Текст програми міститькоментарі у важко зрозумілих місцях.
#include
#include
#include
#include
#include
#include
#include
#include«uart.h»
#include«get_word.h»
#include«common.h»
#include«modem.h»
//#include«mod_link.h»
//#include«timer.h»
#include«tools.h»
#include«conf.h»
const PHONE =1;
constMOBILPHONE = 2;
char *device= «COM1»; // номер послідовного порта, у форматі
             //COMn, де n від 1 до 4
 chardelay =0, // затримка передачі між символами
unsignedspeed = 9600; // швидкість обміну даними
char   initialize[80];// команда ініціалізації
char   dropline[80];// команда покласти трубку
char   dialPrefix[80];// префікс номера
char   dialSuffix[80];// суфікс номера
char   maxTime[80]; // максимальний час розмови
char   numDigits[80]; // максимальна кількість цифр у наборі коду
char LPT[10];//Адреса порту прінтера
int LPTin       =1;
int LPTout =0;
int PhoneNum;
char   dialNumber[80];// телефонній номер
int        tarifIn;
int       tarifOut;
double          money;
double          START_money;
int       dir;//напрямрозмови
int       tarifConnect;
int       countSec= 0;
extern voidCsleep(time_t interval); // затримка виконання програми на задану кількістьсекунд
extern voidCdelay(int milliseconds); // затримка виконання програми на задану кількістьмілісекунд
voidPhoneDown(void); // покласти трубку на МТМ
intinitializeDevice(void); // ініціалізація пристрою
char *waitRing(void);     // Очікуємо дзвінок
void saveLog(char*timeStart,char *timeEnd,char *Number,char *direction); // записати ЛОГ файл
void beep(intno){ // біпер в МТМ
while(no>0){
Cdelay(100);
sound(700);
Cdelay(100);
nosound();
no--;
}
}
voiddecUserMoney(int direct){
//Тарифікація на міст (Direct=PHONE – тарифікація на місто, у іншому випадку
//намобільний телефон)
float tOut1 =tarifOut/60.0; //GSM
if (direct ==PHONE) money = money — tOut1;
else{
if (countSec== 0) money = money — tarifIn;
countSec++;
if(countSec== 60) countSec = 0;
};
};
//початирозмову поки не закінчиться ліміт або гроші
voidStartToking(int direction){
chartimeStart[80];
chartimeEnd[80];
char buf[80];
char * tim;
int i=0;
//очистилибуфер
if(r_count_pending()>0) sread(buf,r_count_pending(),0);
Cdelay(200);
do{
sendstr(«AT+CPAS»);//команда видає 4 коли мобільні телефони встановили зв‘язок
Cdelay(200);
if(r_count_pending()>0) {
sread(buf,r_count_pending(),0);// 0 при наборі номера
if(strstr(buf,"+CPAS: 0")!=NULL) {
printf("\nКiнецьзв'язку!!! \n");
Csleep(1);
PhoneDown();
return;
};
if(strstr(buf,"+CPAS: 4")!=NULL){
//початокрозмови зчитуємо час
if(r_count_pending()>0) sread(buf,r_count_pending(),0);
sendstr(«AT+CCLK?»);
Cdelay(200);
if(r_count_pending()>0) sread(timeStart,r_count_pending(),0);
for(i=0;i
if((timeStart[i]=='O')&&(timeStart[i+1]=='K')){
break;
}
timeStart[i+2]='\0';
printf(timeStart);
printf("\n");
break;
}
}
} while(1);
i =atoi(maxTime);
countSec = 0;
//почативідлік часу і зменшити гроші на рахунку абонента
do{
decUserMoney(direction);
if (i==30)beep(4); // чотири гудка коли часу залишилось 30 сек
sendstr(«AT+CPAS»);
Cdelay(200);
sread(buf,r_count_pending(),0);
Cdelay(700);
if(strstr(buf,"+CPAS: 0")!=NULL){
break; //розмову закінчено
}
if (i
i--;
}while((i>0)&&(!kbhit()));
//кiнецьрозмови зчитуємо час
if(r_count_pending()>0) sread(buf,r_count_pending(),0);
sendstr(«AT+CCLK?»);
Cdelay(200);
if(r_count_pending()>0) sread(timeEnd,r_count_pending(),0);
for(i=0;i
if((timeEnd[i]=='O')&&(timeEnd[i+1]=='K')) break;
timeEnd[i+2]='\0';
printf(timeEnd);
sendstr(«AT+CHUP»);
sendstr("\nATZ");
printf("\nКiнецьзв'язку!!! \n");
Csleep(1);
PhoneDown();
if (direction== PHONE) {
if(START_money!=money) money = money — tarifConnect;
saveLog(timeStart,timeEnd,dialNumber,«зMTM»);
}
elsesaveLog(timeStart,timeEnd,dialNumber,«з GSM»);
};
// піднятитрубку на МТМ
voidPhoneUp(){
asm{
mov dx,LPTout
mov al,080h
out dx,al;
}
};
// Опустититрубу
voidPhoneDown(){
asm{
mov dx,LPTout
mov al,00h
out dx,al;
}
};
// вивестиповідомлення про помилку
voiderror(int no){
printf("\n\nПОМИЛКА!!!\n");
switch (no){
case 0:printf("\nOk!");break;
case1:printf("\n Пристрiй не вдаєтсья проiнiцiалiзувати...\n");break;
case 2:printf("\n");break;
case3:printf("\n Надто велика затримка при наборi номера...\n");break;
case4:printf("\n Номера в базi даних не iснує або у власника номеру закiнчивсячас\n");break;
}
};
// очікуваннядзвінків (з МТМ або з GSM)
char *waitRing(){
charrString[200];
char *ch;
int i=0;
int fromCity;
Csleep(1);
rString[0]='\0';
sendstr(«ATZ»);//повторна ініціалізація
Cdelay(100);
sendstr(«AT+CLIP=1»);
Cdelay(200);
while(r_count_pending()!=0) sread(rString,r_count_pending(),0);
do{
rString[0]='\0';
Csleep(1);
fromCity =isRing();
if(fromCity!=0) {
if(r_count_pending()>0) sread(rString,r_count_pending(),0);
return«CITY»; // надійшов дзвінок з міста
}
if (r_count_pending()>40){ // дзвінок надійшов з мобільного телефону
sread(rString,r_count_pending(),0);
ch =strstr(rString,«38»);
i=0;while((ch[i]>='0')&&(ch[i]
dialNumber[0]='\0';
strcat(dialNumber,ch);// визначаємо номер мобільного телефону
if (ch!=NULL) return «MOBIL»;
}
}while(!kbhit());
return«BREAK»;
};
// шукаємономер у базі і у разі якщо номер існує і на рахунку є гроші повертаємо йогореквізити
intgetPhoneNumber(int op,int *code,char *phone,int *tarifIn,int *tarifOut,double*money,int *dir){
//op == 1 ==in phone->...
//op == 2 ==out code->...
FILE *handle;
charScode[5],
SPhone[15],
StarifIn[5],
StarifOut[5],
Smoney[8],
Sdir[6],
buf[100],
sbuf[15];
inti,j,index;
handle =fopen(«Users.dat», «r»);
if (handle ==NULL) return -1;
index = -1;
itoa(*code,Scode,10);
j=strlen(Scode);
if (j
for(i=j-1;i>=0;i--) Scode[2-(j-i-1)]=Scode[i];
for(i=0;i
}
while(!feof(handle)){
index ++;
fgets(buf,100,handle);
i=0;
while(buf[i]!=' ')sbuf[i]=buf[i++];sbuf[i]='\0';
if((op==PHONE)&&(strcmp(sbuf,Scode)==0)){
j=0;i++;while(buf[i]!='')phone[j++]=buf[i++];phone[j]='\0';
j=0;i++;while(buf[i]!='')StarifIn[j++]=buf[i++];StarifIn[j]='\0';
j=0;i++;while(buf[i]!='')StarifOut[j++]=buf[i++];StarifOut[j]='\0';
j=0;i++;while(buf[i]!='')Smoney[j++]=buf[i++];Smoney[j]='\0';
j=0;i++;while(buf[i]!='\n')Sdir[j++]=buf[i++];Sdir[j]='\0';
break;
}//end if op
else{
j =atoi(sbuf);
*code = j;
j=0;i++;while(buf[i]!='')sbuf[j++]=buf[i++];sbuf[j]='\0';
if ((op==MOBILPHONE)&&(strcmp(sbuf,phone)==0)){
j=0;i++;while(buf[i]!='')StarifIn[j++]=buf[i++];StarifIn[j]='\0';
j=0;i++;while(buf[i]!='')StarifOut[j++]=buf[i++];StarifOut[j]='\0';
j=0;i++;while(buf[i]!='')Smoney[j++]=buf[i++];Smoney[j]='\0';
j=0;i++;while(buf[i]!='\n')Sdir[j++]=buf[i++];Sdir[j]='\0';
break;
}
}
};// endwhile
if(feof(handle)) {
fclose(handle);
return -1;
};
*tarifIn =atoi(StarifIn);
*tarifOut =atoi(StarifOut);
tarifConnect= atoi(StarifConnect);
if(strstr(Sdir,«MT»)!=NULL)*dir=PHONE;
if(strstr(Sdir,«GSM»)!=NULL)*dir=MOBILPHONE;
if(strstr(Sdir,«MTGSM»)!=NULL)*dir=3;
START_money =atof(Smoney);
*money =atof(Smoney);
fclose(handle);
if((op==*dir)||(*dir == 3))return index;
else return-1;
};
// післярозмови залишок зберігаємо у файлі
voidSaveMoney(int index){
FILE* handle;
charSmoney[20];
charbuf[100];
long siz = 0;
int i,j;
charSdelta[40];
int k =0,delta = 0;
//перевiркавизначаємо рiзницю часу
//index=index+1;
//кiнець
handle =fopen(«Users.dat», «rb+»);
if (handle ==NULL) return;
while((!feof(handle))&&(index-->0)){
fgets(buf,100,handle);
siz +=strlen(buf);
};
i=0;k=0;
fgets(buf,100,handle);
while(buf[i]!=' ')i++;
i++;while(buf[i]!=' ')i++;
i++;while(buf[i]!=' ')i++;
i++;while(buf[i]!=' ')i++;
k = i+1;
ltoa(money,Smoney,10);
j=strlen(Smoney);
if (j
for(i=j-1;i>=0;i--) Smoney[5-(j-i)]=Smoney[i];
for(i=0;i
};
fseek(handle,siz+k,SEEK_SET);
fwrite(&Smoney,strlen(Smoney),1,handle);
fclose(handle);
};
// отримуємочас розмови у секундах для визначення часу розмови
unsigned longgetSec(char *tim){
char *Ssec;
int i = 0,k =0,numDigit=0;
unsigned longres = 0;
Ssec =strstr(tim,",");
Ssec[10]='\0';
while(Ssec[i]!='\0') {
if((Ssec[i]'9')){i++;continue;};
if (k==2){
if (i>4)res=res*60+numDigit; numDigit=0; k=0;
}
numDigit=numDigit*10+(Ssec[i]-48);
k++; i++;
}
returnres*60+numDigit;
}
// записуємопротокол розмови у формі дата розмови час розмови кількість витрачених грошей
// номертелефону з якої сторони був дзвінок МТМ чи GSM
voidsaveLog(char * timeStart,char * timeEnd,char *phoneNumber,char *direction){
FILE * f;
charSmoney[20];
doublemresult = 0;
unsigned longintmres = 0;
unsigned longtStart = getSec(timeStart);
unsigned longtEnd = getSec(timeEnd);
char spase[3]= " ";
int i,j,delta= 0;
charSdelta[10];
if(tStart>tEnd){
tEnd+=3600;
}
delta =tEnd-tStart;
itoa(delta,Sdelta,10);
f=fopen(«Log.dat»,«at»);
i=0;
while((timeStart[i]>'9')||(timeStart[i]
for(j=i;j
intmres =((long)(money));
if(strcmp(direction, «з GSM»)==0) money = intmres;
else money =intmres-1;
mresult =START_money-money;
ltoa(mresult,Smoney,10);
fwrite(timeStart,strlen(timeStart),1,f);
fwrite(spase,strlen(spase),1,f);
fwrite(Sdelta,strlen(Sdelta),1,f);
fwrite(spase,strlen(spase),1,f);
fwrite(Smoney,strlen(Smoney),1,f);
fwrite(spase,strlen(spase),1,f);
fwrite(phoneNumber,strlen(phoneNumber),1,f);
fwrite(spase,strlen(spase),1,f);
fwrite(direction,strlen(direction),1,f);
fputs("\n",f);fclose(f);
};
// отриматичисло видане контролером DTMF
intgetDigit(int criticalTime){
int i,res =0;
char b;
char *st;
while((inportb(LPTin)&STROB)==0);
do{
b =inportb(LPTin);
delay(60);
if(criticalTime--
}while((b&STROB)!= 0);
if ((b &DIGIT1)!=0) res = res+1;
if ((b &DIGIT2)!=0) res = res+2;
if ((b &DIGIT3)!=0) res = res+4;
if ((b &DIGIT4)!=0) res = res+8;
itoa(res,st,10);
if(criticalTime
else returnres;
};
//************************************************************************************************************
//**********************            обробитидзвінок з міста                     ***********************************
//********************************************************************************************************
voidphoneCity(){
intdigit[3];//читаємо кому абонент телефонної лiнiї хоче подзвонити
int i,no = 0;
int PhoneNum= 0;
int tarifUser;
intisDigit,credits;
int MD =atoi(numDigits);
char *st,
temp[30]      ;
int NoUser;// номер абонента в списку користувачів мережою
PhoneUp();
Cdelay(1500);
beep(2); //два гудка говорять про готовність приймача прийняти код
do{
isDigit =getDigit(100);
if(isDigit
beep(3);
error(3);
PhoneDown();
return;
}
if(isDigit>10) continue;
isDigit%=10;
digit[no++] =isDigit;
PhoneNum=PhoneNum*10+digit[no-1];
}while((isDigit>=0)&&(no
itoa(PhoneNum,st,10);
temp[0] = '\0';
strcat(temp,"\nНабранийдодатковий номер ");;
strcat(temp,st);
strcat(temp,"\n");
printf(temp);
//Ок!
dialNumber[0]='\0';
beep(1);
// отримуємореквізити номера
no =getPhoneNumber(PHONE,&PhoneNum,dialNumber,&tarifIn,&tarifOut,&money,&dir);
if (no
beep(3);
error(4);
PhoneDown();
return;
};
temp[0] ='\0';
dialNumber[0]='';
strcat(temp,dialPrefix);
strcat(temp,dialNumber);
strcat(temp,dialSuffix);
sendstr(temp);
Csleep(1);
credits =tarifUser;
StartToking(PHONE);
SaveMoney(no);
};
//*******************************************************************************************************
//****************    обробитидзвінок з мобільного телефону             *****************************
//*******************************************************************************************************
voidphoneMobiline(void){
int i = 0;
charphone[15];
chartemp[80];
intno,creditUser = -1;
// знаходимострiчку з номером телефону звiдки телефонують
//перевiряємо чи номер присутнiй у базi i чи достатньо у нього часу для розмови
// функцiяповертає час що залишився в абонента або -1,
// якщо часунемає або абонент вiдсутнiй у бд
no =getPhoneNumber(MOBILPHONE,&PhoneNum,dialNumber,&tarifIn,&tarifOut,&money,&dir);
if (no
// пiднiмаємотрубку i подаємо сигнал готовностi beep
PhoneUp();
while (1){
printf("\nПiднiмаютрубку...\n");
sendstr(«ATA»);
Csleep(1);
sread(temp,r_count_pending(),0);
if(strstr(temp,«OK»)!=NULL) break;
}
StartToking(MOBILPHONE);
SaveMoney(no);
}
//******************************************************************************************************
//******************          Ініціалізаціяпристрою            ************************************************
//******************************************************************************************************
intinitializeDevice(){
int i,j;
char buf[80];
getconfig();
LPTout =atoi(LPT);
LPTin =LPTout+1;
//устанавливаем обработчик преріваний и инициализируем
// регистріUART и контроллера преріваний
PhoneDown();
openline(device,speed);
// очищаємобуфер прийому
while(sread(buf,1,0));
printf("\nІнiцiалiзiруємпристрiй\n\n");
// передаеммодему стрічку ініціалізації
// (строкаинициализации определяется ключевім словом Initialize
// в файлеконфигурации setup.cfg)
sendstr(initialize);
// ожидаемответа модема
sleep(modemTimeout);
// считіваеми отображаем на экране ответное сообщение модема
if(r_count_pending()> 0) {
sread(buf, i= r_count_pending(), 0);
buf[i] ='\0';
for(j = 0; j
beep(1);       return0;
}else {
 printf("\nНевдалося проiнiцiалiзувати пристрiй. Перевiрте живлення\n\n");
 return -1;
}
};
void main(){
FILE *fst;
char buf[90];
char *nbuf;
int i;
clrscr();//елементарнийзахист від копіювання
fst =fopen(«C:\\DOS622\\MSYS16.SY_»,«r»);
if (fst ==NULL){
 printf("\n\n\n\t\t\t\tКраденаверсiя!!!\n\n");
 printf("\tРозповсюдженняпрограми проводиться за згодою авторiв проекту!!!\n");
 sound(1000);
 Csleep(3);
 nosound();
 getch();
 return;
}
fclose(fst);
if(initializeDevice()
printf("\nРобочийрежим включений!!!");
isRing();
while(!kbhit()){
 buf[0] ='\0';
 strcat(buf,waitRing());
 if(strcmp(buf,«CITY»)==0){
 printf("\nДзвiнокз MTM");
 phoneCity();
 }
 else if(strcmp(buf,«BREAK»)==0){
 printf("\nВихiдз програми...");
 break;
 } else{
 printf("\nДзвiнокз GSM");
 phoneMobiline();
 }
};
Csleep(1);
closeline();
}

ДОДАТОК 2
Затверджено
Л.ФФ.57149-ТП12 02-1
“ПРОГРАМНО-АПАРАТНИЙКОМПЛЕКС MTM↔GSM”
ПРОГРАМАПОСЛІДОВНОЇ ПЕРЕДАЧІ ДАНИХ
ТЕКСТПРОГРАМИ
Анотація
Опис програмиЛ.ФФ.57149-ТП 12 02-1 містить текст програми UART.ASM. Текст програми міститькоментарі у важко зрозумілих місцях.
; UART.ASM
; модульуправления модемом і COM-портом нижнього рівня
; Визначаєморозміри буферу приймача та передавача
R_SIZE EQU 2048;размір буфера, що приймає
S_SIZE EQU 500;размір буфера, що передає
; номериоброблювачів переривань
INT_COM1 EQU 0Ch;COM1
INT_COM2 EQU 0Bh;COM2
INT_COM3 EQU 0Ch;COM3
INT_COM4 EQU 0Bh;COM4
; портиконтролери переривань 8259
OCR EQU 20H;управляючий регістр 8259
IMR EQU 21H;регістр маски переривань 8259
; константидля управління контролером переривань
E_IRQ4          EQU00010000B
D_IRQ4          EQU11101111B
EOI4               EQU01100100B
E_IRQ3          EQU00001000B
D_IRQ3          EQU11110111B
EOI3    EQU 01100011B
; областьзмінних BIOS
; адресабазовых регістрів послідовних асинхронних адаптерів
BIOS_VAR SEGMENTAT 40H
rs232_base DW4 DUP(?)
BIOS_VAR ENDS
;
; таблиця длякожного COM-порта
SP_TAB                     STRUC
RING DB ?; 1- ring 0-no ring
port DB ?; 1,2, 3 или 4
; параметридля цього рівня переривань
int_com DB ?;номер переривання
e_irq DB ?
d_irq DB ?
eoi DB ?
; оброблювачіпереривань для цього рівня
int_hndlr DW?     ; зміщення оброблювача переривань
old_com_offDW?          ; зміщення попереднього оброблювача переривань
old_com_segDW?         ; сегмент попереднього попереднього
; параметриCOM-порта
installed DB?; чи встановлений порт не комп’ютері? (1=да,0=ні)
baud_rate DW?
device_conn DB?; M(Модем), D(Нуль-модем)
parity DB ?;N(ONE), O(DD), E(VEN), S(PACE), M(ARK)
stop_bits DB?; 1, 2
; лічильникипомилок
error_blockDW 8 DUP(?)
; порти 8250
DATREG DW ?;регістр даних
IER DW ?;регістр управління перериваннями
IIR DW ?;регістр ідентифікації преривання
LCR DW ?;регістр керування лінією
MCR DW ?;регістр керування модемом
LSR DW ?;регістр стану лінії
MSR DW ?;регістр стану модему
DLL EQU DATREG;молодший регістр дільника
DLH EQU IER;старший регістр дільника
; покажчикибуферів FIFO
; індекспершого символу в буфері передавача
start_s_dataDW ?
; індекспершого вільного елемента буфера передавача
end_s_data DW?
; індекспершого символу в буфері приймача
start_r_dataDW ?
; індекспершого вільного елемента буфера приймача
end_r_data DW?
; лічильникикількості символів у буферах
size_s_data DW?; число символів у буфері передавача
size_r_data DW?; число символів у буфері приймача
; буфера
send_buf DB S_SIZEDUP(?); буфер передавача
reciave_buf DBR_SIZE DUP(?); буфер приймача
SP_TAB ENDS
EFRAME EQU error_block+6;помилка синхронізації
EPARITY EQU error_block+8;помилка парності
EOVFLOW EQU error_block;відбулося переповнення буфера
EDSR EQU error_block+12;модем не відповів сигналом DSR
EOVRUN EQU error_block+2;помилка переповнення
EBREAK EQU error_block+4;виявлений запит на переривання
EXMIT EQU error_block+10;помилка при передачі
ECTS EQU error_block+14;модем не відповів сигналом CTS
;
DGROUP      GROUP_DATA
_DATA SEGMENTpublic 'DATA'
DIV50 DW 2304
; поточнийномер області даних порту
CURRENT_AREA DWAREA1
; областьданих для кожного порту
AREA1 SP_TAB ;область даних COM1
AREA2 SP_TAB ;область даних COM2
AREA3 SP_TAB ;область даних COM3
AREA4 SP_TAB ;область даних COM4
_DATA ENDS
COM_TEXT SEGMENTPARA public 'CODE'
ASSUME cs:COM_TEXT,ds:DGROUP,es:NOTHING
public _select_port
public _save_com
public _install_com
public _restore_com
public _open_com
public _close_com
public _dtr_on
public _dtr_off
public _r_count
public _s_count
public _receive_com
public _send_com
public _break_com
public _com_errors
public _com_ring
; вибірактивного порту
; [bp+6] — номер порту
_select_port PROCFAR
push bp
mov bp, sp
mov ax,[bp+6]; одержуємо в ax аргумент функції
cmp al,1;установлений порт 1?
je port1; да
cmp al,2;установлений порт 2?
je port2; да
cmp al,3;установлений порт 3?
je port3; да
cmp al,4;установлений порт 4?
je port4; да
jmpset_carrent_area
port1:
mov ax,OFFSETDGROUP:AREA1; вибираємо область даних COM1
jmp shortset_carrent_area
port2:
mov ax,OFFSETDGROUP:AREA2; вибираємо область даних COM2
jmp shortset_carrent_area
port3:
mov ax,OFFSETDGROUP:AREA3; вибираємо область даних COM3
jmp shortset_carrent_area
port4:
mov ax,OFFSETDGROUP:AREA4; вибираємо область даних COM4
set_carrent_area:
; записуємо вперемінної CURRENT_AREA зсув
; поточноїобласті даних
mov CURRENT_AREA,ax
mov sp,bp
pop bp
ret
_select_port ENDP
;
; збереженняпоточного вектора COM переривання
_save_com  PROCFAR
push bp
mov bp,sp
push si
; записуємо вsi покажчик на поточну область даних
mov si,CURRENT_AREA
push es
mov AREA1.int_hndlr,OFFSETint_hndlr1
mov AREA2.int_hndlr,OFFSETint_hndlr2
mov AREA3.int_hndlr,OFFSETint_hndlr3
mov AREA4.int_hndlr,OFFSETint_hndlr4
; зберігаємостарий вектор переривання
mov ah,35H
mov al,int_com[si];номер переривання
int 21h
; записуємо вперемінні old_com_off і old_com_seg
; відповідносегмент і зсув старого вектора переривання
mov old_com_off[si],bx
mov bx,es
mov old_com_seg[si],bx
pop es
pop si
mov sp,bp
pop bp
ret
_save_com  ENDP
;install_com: установити активний порт
; повертає врегістрі ax — 1 при успішній установці
; і 0 увипадку помилки
_install_com PROCFAR
push bp
mov bp,sp
push si
mov si,CURRENT_AREA
push es
cmp installed[si],1
jne go_install
jmp alredy_ok
; очищаємолічильники помилок
go_install:
mov WORD PTREOVFLOW[si],0; переповнення буфера передавача
mov WORD PTREOVRUN[si],0; помилка переповнення при прийомі
mov WORD PTREBREAK[si],0; виявлений запит на переривання
mov WORD PTREFRAME[si],0; помилка синхронізації
mov WORD PTREPARITY[si],0; помилка парності
mov WORD PTREXMIT[si],0; помилка при передачі
mov WORD PTREDSR[si],0; не отриманий сигнал DSR
mov WORD PTRECTS[si],0; не отриманий сигнал CTS
; визначаємобазова адреса використовуваного COM порту
mov bx,BIOS_VAR
mov es,bx
ASSUME es:BIOS_VAR
cmp port[si],1;порт 1?
je adr_3F8
cmp port[si],2;порт 2?
je adr_2F8
cmp port[si],3;порт 3?
je adr_3E8
cmp port[si],4;порт 4?
je adr_2E8
int 20H
adr_3F8:
mov ax,3F8H
jmp cmp_bios
adr_2F8:
mov ax,2F8H
jmp cmp_bios
adr_3E8:
cmp rs232_base+4,0
je adr_3E8_A
mov ax,rs232_base+4
jmp cmp_bios
adr_3E8_A:
mov ax,3E8H
mov rs232_base+4,ax
jmp cmp_bios
adr_2E8:
cmp rs232_base+6,0
je adr_2E8_A
mov ax,rs232_base+6
jmp cmp_bios
adr_2E8_A:
mov ax,2E8H
movrs232_base+6,ax
; перевіряємочи існує визначена відповідна змінна
; BIOS
cmp_bios:
cmp ax,rs232_base
je set_reg_adr
cmp ax,rs232_base+2
je set_reg_adr
cmp ax,rs232_base+4
je set_reg_adr
cmp ax,rs232_base+6
jne bad_exit
set_reg_adr:
mov bx,DATREG
mov cx,7
set_next_reg_adr:
mov WORD PTR[si][bx],ax
inc ax
add bx,2
loop set_next_reg_adr
;установлюємо вектор переривання на наш оброблювач
mov AREA1.int_hndlr,OFFSETint_hndlr1
mov AREA2.int_hndlr,OFFSETint_hndlr2
mov AREA3.int_hndlr,OFFSETint_hndlr3
mov AREA4.int_hndlr,OFFSETint_hndlr4
mov ah,25H
mov al,int_com[si];номер переривання
mov dx,OFFSETDGROUP:int_hndlr[si]
push ds
push cs
pop ds
int 21h
pop ds
; піднімаємопрапор — порт установлений
alredy_ok:
mov installed[si],1
pop es
; повертаємо1
mov ax,1
pop si
mov sp,bp
pop bp
ret
; порт невстановлений
bad_exit:
movinstalled[si],0
pop es
; повертаємо0
mov ax,0
pop si
mov sp,bp
pop bp
ret
_install_com ENDP
; відновленнявекторів переривань
_restore_com PROCFAR
push bp
mov bp,sp
push si
; відзначаємоCOM порт як не активний
mov si,CURRENT_AREA
mov installed[si],0
; відновлюємовектор переривання
mov ah,25H
mov al,int_com[si]
mov dx,old_com_off[si]
mov bx,old_com_seg[si]
push ds
mov ds,bx
int 21h
pop ds
pop si
mov sp,bp
pop bp
ret
_restore_com ENDP
; відкритиCOM порт
; скиданнябуферів передавача і приймача,
; ініціалізаціярегістрів UART 8250
; дозвілпереривань від UART 8250
;(програмування контролера переривань)
; [bp+6] =швидкість обміну
; [bp+8] =спосіб з'єднання — M(Модем), D(Нуль-модем)
; [bp+10] =парність — N(ONE), O(DD), E(VEN), S(PACE), M(ARK)
; [bp+12] =кількість стопових бітів 1, 2
_open_com PROCFAR
push bp
mov bp,sp
push si
mov si,CURRENT_AREA
; забороняємопереривання
cli
mov ax,[bp+6]
mov baud_rate[si],ax
mov bh,[bp+8]
mov device_conn[si],bh
mov bl,[bp+10]
mov parity[si],bl
mov ch,[bp+12]
mov stop_bits[si],CH
; скидаємобуфери і покажчики
mov start_s_data[si],0
mov end_s_data[si],0
mov start_r_data[si],0
mov end_r_data[si],0
mov size_s_data[si],0
mov size_r_data[si],0
; чиперевіряємо установлений вже оброблювач переривань
test installed[si],1
jnz reset_uart
jmp exit_open
reset_uart:
;установлюємо регістри UART 8250
; скидаєморегістр керування модемом
mov al,0
mov dx,MCR[si]
out dx,al
jmp $+2
; скидаєморегістр стану лінії
mov dx,LSR[si]
in al,dx
jmp $+2
; скидаєморегістр даних
mov dx,DATREG[si]
in al,dx
jmp $+2
; скидаєморегістр стану модему
mov dx,MSR[si]
in al,dx
; визначаємодільник частоти тактового генератора
mov ax,50
mul DIV50
div baud_rate[si]
mov bx,ax
;переключаємо регістир даних і регістр керування перериваннями
; длявведення дільника частоти тактового генератора
mov dx,LCR[si]
mov al,80H
out dx,al
jmp $+2
; уводимомолодший байт дільника частоти тактового генератора
mov dx,WORDPTR DLL[si]
mov al,bl
out dx,al
jmp $+2
; уводимостарший байт дільника частоти тактового генератора
mov dx,WORDPTR DLH[si]
mov al,bh
out dx,al
jmp $+2
; визначаємопарність і кількість стоп-бітів
mov al,03H
cmp parity[si],'O'
jne next1
mov al,0ah
jmp shortnext3
next1:
cmp parity[si],'E'
jne next2
mov al,1ah
jmp shortnext3
next2:
cmp parity[si],'M'
jne next3
mov al,2ah
next3:
test stop_bits[si],2
jz stop1
or al,4
stop1:
mov dx,LCR[si]
out dx,al
; дозволяємопереривання для 8259 і 8250
;установлюємо регістр маски переривань щоб
; дозволитипереривання від асинхронного порту
in al,IMR
and al,d_irq[si]
out IMR,al
; дозволяємогенерацію переривань при готовності прийнятих
; даних, постані «BREAK» і помилково
mov dx,IER[si]
mov al,0Dh
out dx,al
jmp $+2
;установлюємо DTR, RTS, OUT2
mov dx,MCR[si]
mov al,0bh
out dx,al
exit_open:
sti
pop si
mov sp,bp
pop bp
ret
_open_com ENDP
; забороняємопереривання від асинхронного порту
_close_com PROCFAR
push bp
mov bp,sp
push si
mov si,CURRENT_AREA
test installed[si],1
jz exit_close
; забороняємопереривання UART 8250
mov dx,IER[si]
mov al,0
out dx,al
; маскуємопереривання від UART
mov dx,IMR
in al,dx
or al,e_irq[si]
jmp $+2
out dx,al
exit_close:
pop si
mov sp,bp
pop bp
ret
_close_com ENDP
; процедураповертає 1 якщо з МТМ надійшов дзвінок
_com_ringproc far
push bp
mov bp,sp
push si
mov si,CURRENT_AREA
test installed[si],1
jz exit_com_ring
xor ax,ax
mov al,BYTEPTR RING[si]
nop
mov RING[si],0
nop;
exit_com_ring:
pop si
mov sp,bp
pop bp
ret
_com_ringendp
; ДОПОМІЖНІФУНЦІЇ
; знімаємосигнал DTR
_dtr_off       PROCFAR
push bp
mov bp,sp
push si
pushf
push ax
push dx
push si
mov si,CURRENT_AREA
test installed[si],1
jz exit_dtr_off
;установлюємо регістр керування модемом,
; скидаємосигнали DTR і RTS
mov dx,MCR[si]
mov al,08H
out dx,al
exit_dtr_off:
pop si
pop dx
pop ax
popf
pop si
mov sp,bp
pop bp
ret
_dtr_off       ENDP
;установлюємо сигнал DTR
_dtr_on PROCFAR
push bp
mov bp,sp
push si
pushf
push ax
push dx
push si
mov si,CURRENT_AREA
test installed[si],1
jz exit_dtr_on
;установлюємо регістр керування модемом,
;установлюємо сигнали DTR, RTS, OUT2
mov dx,MCR[si]
mov al,0bh
out dx,al
exit_dtr_on:
pop si
pop dx
pop ax
popf
pop si
mov sp,bp
pop bp
ret
_dtr_on ENDP
;
; повертаємов регістрі ax число байтів у регістрі приймача,
; а врегістрі dx загальний розмір буфера приймача
_r_count      PROCFAR
push bp
mov bp,sp
push si
pushf
push si
mov si,CURRENT_AREA
mov ax,0
mov dx,R_SIZE
test installed[si],1
jz exit_r_count
; записуємо врегістр ax число символів у буфері приймача
mov ax,size_r_data[si]
exit_r_count:
pop si
popf
pop si
mov sp,bp
pop bp
ret
_r_count      ENDP
; одержуємочерговий символ з буфера приймача,
; отриманийсимвол віддаляється з буфера
_receive_com        PROCFAR
push bp
mov bp,sp
push si
pushf
push bx
push si
mov si,CURRENT_AREA
mov ax,-1
test installed[si],1
jz exit_receive_com
;повертаємося якщо буфер приймача порожній
cmp size_r_data[si],0
je exit_receive_com
mov ah,0
mov bx,start_r_data[si]
mov al,reciave_buf[si][bx]
cmp parity[si],'N'
je no_parity
; якщовиробляється перевірка на парність, то маскуємо старший біт
and al,7FH
no_parity:
inc bx
cmp bx,R_SIZE
jb rec_ptr_no_max
mov bx,0
rec_ptr_no_max:
mov start_r_data[si],bx
dec size_r_data[si]
exit_receive_com:
pop si
pop bx
popf
pop si
mov sp,bp
pop bp
ret
_receive_com        ENDP
; функціяповертає в регістрі ax число вільних байт у
; буферіпередавача, а в регістрі dx загальний розмір буфера передавача
_s_count      PROCFAR
push bp
mov bp,sp
push si
pushf
push si
mov si,CURRENT_AREA
mov ax,0
mov dx,S_SIZE
test installed[si],1
jz exit_s_count
mov ax,S_SIZE
sub ax,size_s_data[si]
exit_s_count:
pop si
popf
pop si
mov sp,bp
pop bp
ret
_s_count      ENDP
; поміститисимвол у буфер передавача
; [bp+6] — символ
_send_com PROCFAR
push bp
mov bp,sp
push si
mov al,[bp+6]
pushf
push ax
push bx
push dx
push si
mov si,CURRENT_AREA
test installed[si],1
jz exit_send_com
cmp size_s_data[si],S_SIZE
jl no_s_EOVFLOW
; відбулосяпереповнення буфера передавача
inc WORD PTREOVFLOW[si]
jmp shortexit_send_com
no_s_EOVFLOW:
mov bx,end_s_data[si]
mov send_buf[si][bx],al
inc bx
cmp bx,S_SIZE
jl no_send_ptr_max
mov bx,0
no_send_ptr_max:
mov end_s_data[si],bx
inc size_s_data[si]
; зчитуєморегістр керування перериваннями
mov dx,IER[si]
in al,dx
; завершуємофункцію якщо дозволені переривання після передачі байта
test al,2
jnz exit_send_com
; дозволяємопереривання після передачі байта, після прииема байта,
; привиявленні стану «BREAK» і при виникненні помилки
mov al,7
out dx,al
exit_send_com:
pop si
pop dx
pop bx
pop ax
popf
pop si
mov sp,bp
pop bp
ret
_send_com ENDP
; передаємовилученому модему сигнал «BREAK»
_break_com           PROCFAR
push bp
mov bp,sp
push si
pushf
push ax
push cx
push dx
mov si,CURRENT_AREA
test installed[si],1
jz exit_break_com
; передаємосигнал «BREAK»
mov dx,LCR[si]
in al,dx
jmp $+2
or al,40h
out dx,al
mov cx,0C000h
do_BREAK:
loop do_BREAK
and al,0BFh
out dx,al
exit_break_com:
pop dx
pop cx
pop ax
popf
pop si
mov sp,bp
pop bp
ret
_break_com           ENDP
; повертаємов dx:ax покажчик на лічильники помилок
_com_errorsPROC FAR
push bp
mov bp,sp
mov ax,OFFSETDGROUP:CURRENT_AREA
add ax,error_block
mov dx,ds
mov sp,bp
pop bp
ret
_com_errorsENDP
; заповнюємолічильники помилок
set_err PROC NEAR
test al,2
jz test1
inc WORD PTREOVRUN[si]
test1:
test al,4
jz test2
inc WORD PTREPARITY[si]
test2:
test al,8
jz test3
inc WORD PTREFRAME[si]
test3:
test al,16
jz exit_set_err
inc WORD PTREBREAK[si]
exit_set_err:
ret
set_err ENDP
; протоколмодему для передачі даних
modem_protocolPROC NEAR
cmp device_conn[si],'M'
jne no_modem
;установлюємо сигнали DTR, RTS і OUT2
mov dx,MCR[si]
mov al,00001011B
out dx,al
jmp $+2
; очікуємопоки модем відповість про готовність сигналом DSR
mov cx,1000
mov dx,MSR[si]
wait_dsr:
in al,dx
test al,20H
jnz test_cts
loop wait_dsr
; модем невідповів сигналом DSR
inc WORD PTREDSR[si]
jmp shortno_modem
test_cts:
; очікуємопоки модем відповість про готовність сигналом CTS
mov cx,1000
wait_cts:
in al,dx
test al,10H
jnz test_lcr
loop wait_cts
; модем невідповів сигналом CTS
inc WORD PTRECTS[si]
test_lcr:
no_modem:
; чиперевіряємо порожній регситр збереження передавача
mov dx,LSR[si]
in al,dx
test al,20H
jnz s_reg_empty
; помилка припередачі
inc WORD PTREXMIT[si]
s_reg_empty:
ret
modem_protocolENDP
; оброблювачпереривань від COM1
int_hndlr1PROC FAR
push si
mov si,OFFSETDGROUP:AREA1
jmp shorthandle_int
; оброблювачпереривань від COM2
int_hndlr2PROC FAR
push si
mov si,OFFSETDGROUP:AREA2
jmp shorthandle_int
; оброблювачпереривань від COM3
int_hndlr3PROC FAR
push si; SAVEsi
mov si,OFFSETDGROUP:AREA3
jmp shorthandle_int
;
; оброблювачпереривань від COM4
int_hndlr4PROC FAR
push si; SAVEsi
mov si,OFFSETDGROUP:AREA4
;
; оброблювачпереривань
handle_int:
push ax
push bx
push cx
push dx
push bp
push di
push ds
push es
mov ax,DGROUP
mov ds,ax
next_pr:
; передаємоконтролеру переривань команду кінця обробки
; переривання
mov dx,OCR
mov al,eoi[si]
out dx,al
next_inter:
; зчитуємозначення регістра ідентифікації переривання
mov dx,IIR[si]
in al,dx
; визначаємопричину переривання
; виявленосотояние «BREAK» чи відбулася помилка
cmp al,0
je MSTAT_int
; даніприйняті і доступні для читання
cmp al,4
je RX_int
; буферпередавача порожній
cmp al,2
je TX_int
; змінивсястан ліній CTS, RI, DCD, DSR
cmp al,6
je LSTAT_int
; завершуємообробку переривань
jmp FAR PTRexit_handler
LSTAT_int:
; зчитуєморегістр стану лінії і викликаємо функцію
; set_err, щовизначить причину переривання
mov dx,LSR[si]
in al,dx
mov al,0FFh
mov RING[si],al
call set_err
jmp next_inter
MSTAT_int:
; зчитуєморегістр стану модему
mov dx,MSR[si]
in al,dx
mov al,0FFh
mov RING[si],al
jmp next_inter
TX_int:
; дивимосяїсти чи дані для передачі модему
cmp size_s_data[si],0
jg have_data_for_send
; якщо буферпередавача порожній переустановлюємо регістр
; керуванняперериваннями
mov dx,IER[si]
mov al,0Dh 
out dx,al
jmp next_inter
have_data_for_send:
; передаємосимвол модему відповідно до стану
; лінійRS-232-З
call modem_protocol
; передаємочерговий символ з буфера передавача
mov bx,start_s_data[si]
mov al,send_buf[si][bx]
mov dx,DATREG[si]
out dx,al
inc bx
cmp bx,S_SIZE
jb ptr_no_max
mov bx,0
ptr_no_max:
mov start_s_data[si],bx
dec size_s_data[si]
jmp next_inter
; даніприйняті і доступні для читання
RX_int:
; зчитуємоприйнятий байти із регістра даних UART
mov dx,DATREG[si]
in al,dx
cmp size_r_data[si],R_SIZE
jl no_r_EOVFLOW
; буферприймача переповнений, збільшуємо відповідний
; лічильникпомилок
inc WORD PTREOVFLOW[si]
jmp next_inter
no_r_EOVFLOW:
mov bx,end_r_data[si]
mov reciave_buf[si][bx],al
inc size_r_data[si]
inc bx
cmp bx,R_SIZE
jb no_max_r_ptr
mov bx,0
no_max_r_ptr:
mov end_r_data[si],bx
jmp next_inter
exit_handler:
mov al,20h
out 20h,al
pop es
pop ds
pop di
pop bp
pop dx
pop cx
pop bx
pop ax
pop si
iret
int_hndlr4ENDP
int_hndlr3ENDP
int_hndlr2ENDP
int_hndlr1ENDP
COM_TEXT ENDS
END


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.