регистрация / вход

Разработка микропроцессорной системы АОНа на базе микроконтроллера

Описание Автоматического Определителя Номера (АОНа). Характеристики микроконтроллера Z86E0812PSC, ЖК индикатора PANAPHONE. Ассемблирование и разработка алгоритма работы устройства. Управление АОН и описание функциональных узлов МПС, принципиальная схема.

РЕФЕРАТ

Цель работы: произвести разработку микропроцессорной системы АОНа на базе микроконтроллера.

Содержание работы: в работе выполнено построение структурной схемы, построение функциональной схемы, выбор элементной базы, оптимальной для реализации поставленных задач по диапазону характеристик, разработана программа, разработана принципиальная схема устройства, соответствующая стандартам эксплуатации телефонных сетей Украины.

Содержание

Введение

1. Описание объекта и функциональная спецификация

2. Описание структуры системы

3. Описание ресурсов МК

3.1 Характеристики микроконтроллера Z86E0812PSC

3.2 ЖК индикатор PANAPHONE

4. Ассемблирование и разработка алгоритма работы устройства

5. Программирование микроконтроллера

6. Управление АОН и описание функциональных узлов МПС

7. Технические характеристики АОН

8. Описание выбора элементной базы и работы принципиальной схемы

Заключение

Список использованных источников

Приложение А

Приложение Б

ВВЕДЕНИЕ

Современную микроэлектронику трудно представить без такой важной составляющей, как микроконтроллеры. Микроконтроллеры незаметно завоевали весь мир. Микроконтроллерные технологии очень эффективны. Одно и то же устройство, которое раньше собиралось на традиционных элементах, будучи собрано с применением микроконтроллеров, становится проще, не требует регулировки и меньше по размерам. С применением микроконтроллеров появляются практически безграничные возможности по добавлению новых потребительских функций и возможностей к уже существующим устройствам. Для этого достаточно просто изменить программу.

Однокристальные (однокорпусные) микроконтроллеры представляют собой приборы, конструктивно выполненные в виде БИС и включающие в себя следующие составные части: микропроцессор, память программ и память данных, а также программируемые интерфейсные схемы для связи с внешней средой.

Мировая промышленность выпускает огромную номенклатуру микроконтроллеров. По области применения их можно разделить на два класса: специализированные, предназначенные для применения в какой-либо одной конкретной области (контроллер для телевизора, контроллер для модема, контроллер для компьютерной мышки ) и универсальные, которые не имеют конкретной специализации и могут применяться в самых различных областях микроэлектроники, с помощью которых можно создать как любое из перечисленных выше устройств, так и принципиально новое устройство.

В данном курсовом проекте производится разработка микропроцессорной системы АОНа на базе микроконтроллера.

1. Описание объекта и функциональная спецификация

АОН – Автоматический Определитель Номера.

АОН определяет номер звонящего абонента, благодаря устройствам, смонтированным на телефонных станциях. Прямое назначение АОН, определение номера звонящего абонента, для включения тарификатора.

АОН, который мы будем рассматривать, предназначен для встраивания в телефоны производства юго-восточных стран и известных под названиями «Panasoanic», «Panaphone» и др. и которые имеют в наличии ЖК индикатор.

Функциональная спецификация

1. Входы

a. 15 кнопок

b. Телефонная линия

c. Дополнительное питание от адаптера или другого источника

2. Выходы

a. Жидкокристаллический индикатор

b. 2 светодиода («Удержание», «Громкая связь»)

c. Звуковой динамик излучатель

3. Функции

а. Определение номера звонящего абонента после поднятия трубки на собственном аппарате или на параллельном телефоне

b. Занесение определившегося номера в список с емкостью до 9-и номеров

c. Определение номера набираемого на параллельном телефоне пульсовым методом

d. Просмотр номеров из списка с помощью двух кнопок CLOCK и SET.

e. Выбор представления выводимых из списка номеров.

f. Сохранение возможности настройки времени у часов с помощью кнопок CLOCK и SET и сохранение всех функций телефона в который встраивается АОН.

2. Описание структуры системы

После определения входов и выходов устройства разработана структурная схема устройства.

Структурная схема телефона.

3. Описание ресурсов МК

3.1 Характеристики микроконтроллера Z86E0812PSC

Микроконтроллер Z86E0812PSC примененный в данной разработке имеет следующие характеристики:

· разрядность 8бит;

· корпус DIP18;

· рабочее напряжение от 3.0 до 5.5 В;

· потребляемая мощность (типовая) 50мВт;

· время выполнения инструкции типа регистр-регистр 1мкс;

· два режима пониженного энергопотребления STOP и HALT;

· 14 линий ввода/вывода;

· однократно электрически программируемое ПЗУ ёмкостью 2 Кбайта;

· 124 байтарегистрового ОЗУ;

· два 8-и битных программируемых таймера/счетчика с 6-битными программируемыми делителями;

· 6-и векторная система прерываний с программируемой 6-уровневой приоритетностью;

· внешняя тактовая частота 12 МГц;

· система Watch-Dog и сброс по включению питания без внешних цепей;

· два встроеных компаратора;

· температура эксплуатации 0о C-70 о C

Расположение выводов и общий вид микроконтроллера имеет вид изображенный на рис. 1.


Рис. 1 - Общий вид микроконтроллера Z86E0812PSC

Вспомогательным элементом АОН служит ЖК индикатор PANAPHONE.

3.2 ЖК индикатор PANAPHONE

Назначение выводов ЖК индикатора:

· 12/24H - лог.0 поддерживает 24-х часовой счет времени лог.1 поддерживает 12-и часовой счет времени

· KEYCLOCK - подключение клавиши CLOCK (лог.0-выкл., лог.1-вкл.) вход в режим коррекции времени

· KEYSET - подключение клавиши SET (лог.0 - выкл., лог.1 -вкл.) перебор значений часов и минут в режиме коррекции времени

· RESET - подключение клавиши RESET (лог.0-выкл., лог.1-вкл.) первое включение переводит индикатор в режим измерения временного интервала с начальным обнулением счетчика второе нажатие останавливает счет и через 10 сек индикатор переходит в режим счета времени.

· SEL –сигнал выбора контроллера (лог.0) индикатор доступен для ввода информации, ввод производится сдвигом информации на одно знакоместо влево с появлением в крайнем правом знакоместе нового символа.

· DATA - линия передачи данных.

CLK - линия стробирования данных, минимальный период следования сигнала - 4 мкс.

4. Ассемблирование и разработка алгоритма работы устройства

Для ассемблирования спользуется макpоассемблеp MPASM, он содеpжит все необходимые нам возможности. MPASMвходит в пакет программ Microchip MPLAB фирмы Microchip Technology.

В pезультате pаботы ассемблеpа создаются файлы со следующими pасшиpениями:* HEX - объектный файл* LST - файл листинга* ERR - файл ошибок и пpедупpеждений* COD Объектный файл создается в 16-pичном фоpмате и содеpжит код, котоpый должен быть записан в микpосхему. Файл листинга содеpжит полный листинг пpогpаммы вместе с загpузочным кодом. В файл ошибок и пpедупpеждений записываются все ошибки и пpедупpеждения, возникающие в пpоцессе ассемблиpования. Они также пpисутствуют и в файле листинга.После обpаботки нашей пpогpаммы ассемблеp должен был выдать сообщение "Assembly Successful", означающее, что ошибок обнаpужено не было. Файл ошибок не должен был создаться.

Листинг программы и объектный файл приведен в Приложении А.


5. Программирование микроконтроллера

После ассемблирования имеется объектный файл EXAMPLE.HEX, котоpый должен быть записан в микpосхему. Запись осуществляется пpи помощи пpогpамматоpа и пpогpаммы Pic-prog. Микросхему микроконтроллера вставляется в панель программатора. Программатор подключается к порту LPT1. Необходимо запустить программу Pic_prog.exe.

Подать питание на программатор. Выполнить команду «ЗАПИСАТЬ / ПАМЯТЬ ПРОГРАММ». В течении следующих нескольких секунд будит выполняться процесс программирования, а затем проверка правильности записанных в микроконтроллер данных.


6. Управление АОН и описание функциональных узлов МПС

Используя клавиши CLOCK и SET пользователь может просмотреть список номеров звонивших абонентов а также установить удобный для себя образ представления номеров на индикаторе. Просмотр списка возможен когда не производятся операция вода времени и набора номера. По нажатию клавиши SET на индикаторе появляется номер из первой ячейки списка, нажимая клавишу CLOCK пользователь может просматривать следующие номера из списка, после девятого номера происходит возврат к первому номеру из списка. Номера в список записываются в порядке поступления, последний поступивший номер хранится в первой ячейке списка. Нажатие клавиши SET в режиме просмотра списка приводит к выходу из этого режима и восстановлению режима счета времени. В режиме счета времени может производится счет текущего времени или счет времени разговора, что означает занятость или незанятость телефонной линии соответственно. Счет времени разговора начинается с нуля после каждого выхода из режима просмотра списка. С целью экономии энерго потребления в режиме просмотра списка и режиме установок после отсутствия нажатия клавиш CLOCK и SET более 10 с индикатор переходит в режим счета времени разговора, следующее нажатие клавиши обновляет информацию на индикаторе. В случаях когда пользователь поднимает трубку, нажимает клавишу «SP-PHONE», поднимают трубку на параллельном телефоне или идет звонок, производится автоматический выход из режимов просмотра списка, установок, ввода времени и на индикатор выводится счет времени разговора. При освобождении телефонной линии абонентом на индикаторе возобновляется счет текущего времени. В связи с присутствием специфической информации вномерах абонентов принимаемых АОН пользователь может исключить ее индикацию при просмотре списка. Исключатся может индикация категории абонента и седьмой цифры номера АТС звонящего абонента. Вслучае междугородного звонка 7-я цифра будет индицироваться если она не совпадает с маской в веденной в установках. В режим установки входят из режима просмотра списка последовательно нажимая CLOCK и не отпуская SET. На индикаторе должны появится две цифры первая из которых выделена кавычками. Изменение значения цифры производится клавишей CLOCK переход к следующей цифре клавишей SET, третье нажатие SET приводит к выходу в режим просмотра списка. Первая цифра в установках принимает значения 0 и 1, что означает: 0 - показ категории абонента, 1 - запрет показа категории абонента, категория абонента выводится в 8-ом знакоместе справа в режиме просмотра списка. Вторая цифра в установках является маской 7-ой цифры номера абонента она принимает значения 0, 1,..., 9, пробел. В случае совпадения 7-ой цифры с маской первая не индицируется. В случае когда маска имеет значение «пробел» 7-я цифра номера будет всегда выводится на индикацию. Для быстрого выхода из любого режима пользователь может поднять и опустить трубку. Следует отметить что, когда выход из режима просмотра списка производится при поднятой трубке на своем или параллельном аппарате возможна задержка обновления информации на индикаторе на 10 с.

7. Технические характеристики АОН

Таблица 1 - Технические характеристики АОН

напряжение питания схемы 3.5-6.5 В
потребляемый схемой ток в активном режиме < 1.1 мА
ток потребляемый схемой от телефонной линии < 300 мкА
длительность вызывного сигнала АОН 0.2 сек
максимальное количество повторов запроса сигнала АОН АТС 4
необходимый уровень напряжения звонка (пиковое значение) 100 В
необходимый уровень сигнала ответа АТС при отношении сигнал/шум 12дБ > 30мВ
необходимое напряжение линии при положенной трубке 25-65В

8 . Описание выбора элементной базы и работы принципиальной схемы

Схема работает по принципу активизации процессора в момент внешнего воздействия и пребывания его в режиме пониженного энергопотребления (режим STOP) в остальных случаях. Для вывода процессора из режима STOP служит сигнал логического 0 на выводе P2.7. Если на этом выводе сохраняется логический 0, то процессор не переходит в режим STOP. Активизация процессора вызывается следующими ситуациями: нажатие клавиши CLOCK или SET, падение напряжения в линии ниже уровня 20 В. Таким образом процессор активизируется после поступления звонка, при снятии трубки или просто при отключении от линии, вследствии чего при питании от батарей телефон не следует оставлять надолго отключенным от линии из-за достаточно большого тока потребления в активном режиме. Датчиком напряжения линии служит цепь собранная на элементах VD1, VD2, VD3, R1, R2, VD4, VD5, VD24. На элементах R21, VD21, VD22, VD23 собрано логическое.

И по активизации процессора от разных событий. Цепь C1, R5 служит для передачи аналогового сигнала на вход компаратора процессора AN1. На элементах VD6, VD7, R3, R4, VD8, C4, R7 собран датчик звонка формирующий напряжение на входе второго компаратора AN2. Элементы C5, R8, R9 формируют опорное напряжение для компараторов. Запросный сигнал синусоидальной формы формируется схемой на элементах R17, C8, C9. Для формирования запросного сигнала использован принцип дельта-модуляции с частотой дискретизации около 44 КГц. Исходная цифровая последовательность проходя интегрирующую цепь R17, C8 приобретает синусоидальную форму. Для передачи сигнала в линию используется схема на элементах R18, VT3, R19, R20, VT4, VD19, VD20. Для подстройки амплитуды сигнала изменяется сопротивление резистора R18. Режим по постоянному току задается резистором R20. Включение запросной цепи производится ключом DD3. Замыкание перемычкой контактов B2 и B3 приводит к выключению функции определения набора номера с параллельного телефона, что может понадобиться на блокированных линиях. Замыкание перемычкой контактов B2 и B1 включает функцию определения набора номера с параллельного телефона. Оставлять контакт B2 неподключеным нельзя. Цепи на VT1 и VT2 предназначены для перехвата сигналов нажатия клавиш SET и CLOCK. Через диоды VD15, VD16, VD17 процессор получает доступ к управлению ЖКИ параллельно с управляющей микросхемой телефона. Через резистор R11 и диод VD14 схема получает питание с разговорной части телефона. Через резистор R10 и диод VD12 схема получает питание от батареи которой снабжен телефон.

Подключение контактов. K1 - Подключение к плюсу диодного моста на плате телефона, выпрямляющего напряжение линии. K2 - Подключение +4,5 В от батареи питания телефона. K3 - свободный.

K4 - подключается к сигналу DATA ЖКИ.

K5 - подключается к сигналу CLK ЖКИ. K6 - подключается к сигналу SEL ЖКИ. K7 - подключается к сигналу KEYCLOCK ЖКИ. K8 - подключается к сигналу KEYSET ЖКИ. K9 - подключается после ключа включающего разговорную часть, но до сглаживающего дросселя. K10 и K11 подключаются непосредственно к двум проводам телефонной линии. K12 - подключается к общему проводу телефона.

Схема принципиальная электрическая АОН разработанная в Accel EDA представлена на рис. 2.

Номера записанные в память телефона для быстрого набора никак не связаны с номерами хранящимися в списке АОН и манипуляции с одними не отражаются на других.


Рис. 2 - Принципиальная схема АОНав AccelEDA

Принципиальная схема АОНаприведена в Приложении Б.

Спецификация элементов приведена в Приложении В.

ЗАКЛЮЧЕНИЕ

В данном курсовом проекте разработано устройство - Автоматический Определитель Номера. Разработана схема электрическая принципиальная этого устройства и программа для микроконтроллера. В результате ассемблирования получена прошивка программы для памяти микроконтроллера. Применение микроконтроллера позволило упростить принципиальную схему и расширить функциональные возможности микроконтроллера, так как для изменения функций устройства достаточно внести изменения в программу микроконтроллера. Существенно сократились размеры устройства, относительно аналогичных, собранных на базе п/п элементов и соответственно сократилось энергопотребление.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Техническая документация на микроконтроллеры Z86E0812PSC компании MicrochipTechnologyIncorporated ООО«Микро-Чип», Москва, 2002.-184 с.

2. Проектирование цифровых устройств на однокристальных микроконтроллерах / В.В. Сташин [ и др.]. – М.: Энергоатомиздат, 1990. – 224 с.

3. Евстифеев А.В. Микроконтроллеры Microchip: практическое руководство/А.В.Евстифеев. – М.: Горячая линия – Телеком, 2002. – 296 с.

4. Ульрих В.А. Микроконтроллеры PIC16х\17хx / В.А. Ульрих. Изд. 2-е, перераб. и доп. – СПб.: Наука и техника, 2002. – 320 с.

5. Александр Елисеев (E-mail: ea@eunet.lt)


ПРИЛОЖЕНИЕ А

Листинг программы и объектный файл

TITLE Программа АОН "Panaphone"Z8REGDEFS; Назначение символических именTIM_BL_H = 10H; Таймер звонкаTIM_BL_L = 11H; Таймер звонкаN_RECORD = 12H; Номер записи в спискеBLC_CLOCK = 13H; Счетчик блокировки по нажатию клавиши CLOCKCNT_SET = 14H; Счетчикнажатия SETCNT_CLOCK = 15H; Счетчикнажатия CLOCKCNT_TWIX = 16H; Счетчик нажатия обоих клавишF_KEYS = 17H; XXXXXXXX Флаги клавишCONST_KEY = 10; Константа минимального количества тактов между нажатиямиCONST_BELL = 1000; Константа звонкаTET1 = 18H; 1-я ячейка тетрадыTET2 = 19H; 2-я ячейка тетрадыTET3 = 1AH; 3-я ячейка тетрадыTET4 = 1BH; 4-я ячейка тетрадыTET1_ = R8; 1-я ячейка тетрадыTET2_ = R9; 2-я ячейка тетрадыTET3_ = R10; 3-я ячейка тетрадыTET4_ = R11; 4-я ячейка тетрадыCNT_ONL = 18H; Счетчик низкой линииPRE_N = 1CH; Предыдущая цифраCNT_REP = 1DH; Счетчик повторов цифрыCOND = 1EH; Состояние линииMASK1 = 1FH; Маска первой цифры номераBUF_NUM = 20H; Начало буфера номераBEG_ST = 40H; Начало стекаBEG_COD = 40H; Начало области записи принятого кодаBEG_LST = 59H; Начало спискаEND_LST = 7CH; Конец спискаBFLAG = 7FH; XXXXXXXX; ¦¦¦¦¦¦¦¦; ¦¦¦¦¦¦¦+------; ¦¦¦¦¦¦+-------; ¦¦¦¦¦+-------- Флаг неопределившегося номера; ¦¦¦¦+--------- флаг блокировки звонка; ¦¦¦+---------- флаг индикации категории; ¦¦+----------- Флаг активности своего телефона; ¦+------------ Флаг 1-й цифры; +------------- Флаг звонкаTESTB = 7EH; Тест-байт целостности информацииCNT_B = 7DH; Счетчик длительности сигнала звонка;+------------------------------------------------------------------+;¦ Начало программного блока ¦;+------------------------------------------------------------------+CODEGLOBALABSORG 0Область хранения векторов прерыванийWORDINT_P3_2L;P3.2 F-edgeWORD INT_P3_3L;P3.3 F-edgeWORD INT_P3_1L;P3.1 F-edgeWORD INT_P3_2H;P3.2 R-edgeWORD INT_T0;T0WORD Sample;T1; После сброса: Счетчики запрещены; Прерывания запрещены; Приоритеты не определены; Указатель стека не определён; Регистровый указатель = 0; Порт 2 открытый сток,все входы; Порт 3 цифровой; Порт 0 входINT_P3_2L:INT_P3_3L:INT_P3_1L:INT_P3_2H:START:; LD RP,#0FH; Активизация управления по P2.7; LD 0BH,#00010100B; для эмулятораLD RP,#00LD P01M,#00000100B; Порт P0 - выходLD P3M,#00000011B; P2 - Pull-Ups Activ; P3 - AnalogLD P2, #11111111B; Вывод в порт 2; ¦¦¦¦¦¦¦¦; ¦¦¦¦¦¦¦+------ Вход клавиши SET; ¦¦¦¦¦¦+------- Вход клавиши CLOCK; ¦¦¦¦¦+-------- -; ¦¦¦¦+--------- -; ¦¦¦+---------- Датчик активности телефона; ¦¦+----------- Управление ключом; ¦+------------ Датчик линии; +------------- Вход прерываний;LD P2M,#11001111B; Определение направления выводов порта P2LD P0,#00000111B;LD PRE0,#11001001B; Коэффицент деления 50LD TMR,#00001011B; Разрешение обоих таймеров T0 с загрузкойLD T0,#150; Переполнение таймера каждые 5 мсLD IMR,#10010000B; Разрешение T0 и запрещение T1BEGIN:LD SPL,#BEG_STEICP TESTB,#55H; Проверка целостности информацииJR Z,NOT_CLEAR_RAM;LD R4,#5CLEAR_RAM:; Очистка ОЗУ контроллераLD @R4,#0INC R4CP R4,#127JR C,CLEAR_RAMLD TESTB,#55HLD MASK1,#2; Выставить маску первой цифры номераLD CNT_B,#0NOT_CLEAR_RAM:AND BFLAG,#00000111B; Сброс флага звонка,определения; пульсового набора,набранной цыфры и; очистки буфераCALL GO_HALT;;------------------------------------------------------------------------; Основнойблок;------------------------------------------------------------------------MAIN:TCM P2,#00000011BJP NZ,M1M2_2:TM P2,#01000000BJR Z,M2TM P3,#00000100BJR NZ,M2LD P2M,#11001111BNOPSTOPM2:LD R4,#10LD CNT_ONL,#0M2_0: CALL GO_HALTINC CNT_ONL; СчетчикнизкойлинииTM P2,#01000000BJR Z,M2_1LD CNT_ONL,#0M2_1:DJNZ R4,M2_0CP CNT_ONL,#8JR UGE,M3; Переход если трубку снялиTM BFLAG,#10000000BJR NZ,M2JR M2_2M3:AND BFLAG,#10110011BTM BFLAG,#10000000BJR Z,M4AND P0,#11111110B; Захват LCDPUSH IMRCALL ID_NUMOR P2,#00100000BPOP IMRLD R7,#BUF_NUM; Выводномерана LCDLD R6,#0LD R8,#8CALL SEND_BYTECALL SEND_BYTEM3_1: LD R6,@R7CALL SEND_BYTEINC R7DJNZR8,M3_1TM BFLAG,#00000100B; Не сохранять номер если он не определилсяJR NZ,M4LD R7,#END_LST; Сдвиг списка на одну записьLD R8,#END_LST-4M3_2: LD R4,@R8LD @R7,R4DEC R7DEC R8CP R8,#BEG_LSTJR UGE,M3_2LD R7,#BEG_LST; Упаковка номера в списокLD R8,#BUF_NUMLD R9,#4M3_3: LD R4,@R8SWAP R4AND R4,#0F0HINC R8AND @R8,#0FHOR R4,@R8LD @R7,R4INC R8INC R7DJNZ R9,M3_3OR P0,#00000001B; Снять захват LCDM4: AND BFLAG,#00110011BLD BLC_CLOCK,#0TM P2,#00000100BJR NZ,M4_1AND P0,#11111110B; Захват LCDM4_1:CALL GO_HALTTM P2,#01000000B; Проверка тока в линииJR Z,M5; Переход если нет импульса в линииLD R9,#0; Счетчик цыфрыMN4_1: LD R4,#20; Счетчик импульсаMN4_2: CALL GO_HALTTM P2,#01000000B; Проверка тока в линииJR Z,MN4_3; Переход если прервался импульсDJNZ R4,MN4_2; Выход если импульс слишком длинныйOR P0,#00000001B; Снять захват LCDLD P2M,#11001111BNOPSTOPMN4_3:LD R4,#12; СчетчикпаузыINC R9MN4_4: CALL GO_HALTTMP2,#01000000B; Проверка тока в линииJRNZ,MN4_1; Переход если прервалась паузаDJNZ R4,MN4_4TM P2,#00000100BJR NZ,M5MN4_6: TM BFLAG,#01000000B; Проверить флаг первой цифрыJR NZ,MN4_7LD R6,#00LD R8,#10MN4_8:CALL SEND_BYTEDJNZ R8,MN4_8OR BFLAG,#01000000B; Выставить флаг первой цифрыMN4_7: LD R6,R9CALL SEND_BYTEM5:TM F_KEYS,#00001000B; Проверка клавиши SETJR Z,M4_1AND F_KEYS,#11110111B;CALL LISTJR M4M1:TM F_KEYS,#00010000B; Проверкаклавиши CLOCKJR Z,M1_1AND F_KEYS,#11101111B; Сбросфлагаклавиши CLOCKCP BLC_CLOCK,#00; Пуст ли счетчик нажатий клавиши CLOCKJR NZ,M1_0LD BLC_CLOCK,#2JR M1_1M1_0: DEC BLC_CLOCKM1_1: TM F_KEYS,#00001000B; Проверка клавиши SETJP Z,MAIN;; Режим просмотра списка;AND F_KEYS,#11110111BCALL LISTJP MAIN;+----------------------------------------------------------------------+;¦ Режим просмотра списка ¦;+----------------------------------------------------------------------+LIST:AND F_KEYS,#11110111BCP BLC_CLOCK,#00JP Z,LIST1RETLIST1: AND P0,#11111110B; Захват LCDLD R4,#10LIST2: CALL GO_HALTDJNZ R4,LIST2LIST3: LD N_RECORD,#1LIST4: LD R6,N_RECORDCALL SEND_BYTE; Выводна LCD номеразаписиLD R6,#0FH; '-'CALL SEND_BYTELD R7,N_RECORD; Вычисление адреса записиDEC R7RL R7; Умножить на 4 (длину записи)RL R7ADD R7,#BEG_LST; Получить адрес начала записиLD R8,#2;; Вывод номера;LIST5:LD R6,@R7; Вывод 8-и байтов номераSWAP R6AND R6,#0FH;TM BFLAG,#00010000B; Проверить флаг индикации категорииJP NZ,LIST6LD R6,#0; Не показывать категорию если не выставленLIST6:; флагCALL SEND_BYTELD R6,@R7; Вывод первой цифры номераAND R6,#0FHCP R6,MASK1JP NZ,LIST7LD R6,#0LIST7:CALLSEND_BYTEINCR7; Вывод второй цифры номераLD R6,@R7SWAP R6CALL SEND_BYTESWAP R6; Вывод третьей цифры номераCALL SEND_BYTELIST8:INC R7; ВыводостальныхцифрномераLD R6,@R7SWAP R6CALL SEND_BYTESWAP R6CALL SEND_BYTEDJNZ R8,LIST8LIST9: TM F_KEYS,#00100000B; Проверкаодновременногонажатия CLOCK,SETJR Z,LIST10AND F_KEYS,#11000111B;JR LIST12LIST10: TM F_KEYS,#00010000B; Проверкаклавиши CLOCKJR Z,LIST11AND F_KEYS,#11101111B;INC N_RECORDCP N_RECORD,#9JR UGT,LIST3JR LIST4LIST11: TM F_KEYS,#00001000B; Проверкаклавиши SETJP Z,LIST23AND F_KEYS,#11110111B;OR P0,#00000001BCALL GO_HALTCALL SEND_BYTERET;; Режимустановок;LIST12:; Установка флага показа категорииLD R6,#0CHCALL SEND_BYTETM BFLAG,#00010000B; Проверить флаг индикации категорииLD R6,#0AHJP Z,LIST13; Показать флаг индикации категорииLD R6,#01HLIST13:CALL SEND_BYTELD R6,#0DHCALL SEND_BYTELD R6,#0CALL SEND_BYTECALL SEND_BYTELD R6,MASK1CALL SEND_BYTELD R6,#0CALL SEND_BYTECALL SEND_BYTECALL SEND_BYTECALL SEND_BYTELIST14:TMF_KEYS,#00001000B; Проверка клавиши SETJR Z,LIST15AND F_KEYS,#11110111B;JP LIST17LIST15:TM F_KEYS,#00010000B; Проверкаклавиши CLOCKJR Z,LIST16AND F_KEYS,#11101111B;XOR BFLAG,#00010000B;JP LIST12LIST16: CALL GO_HALTJP NZ,BEGINJR LIST14LIST17:; Установка маски первой цифрыLD R6,#00HCALL SEND_BYTETM BFLAG,#00010000B; Проверить флаг индикации категорииLD R6,#0AHJP Z,LIST18; Показать флаг индикации категорииLD R6,#01HLIST18:CALL SEND_BYTELD R6,#00HCALL SEND_BYTECALL SEND_BYTELD R6,#0CHCALL SEND_BYTELD R6,MASK1CALL SEND_BYTELD R6,#0DHCALL SEND_BYTELD R6,#00HCALL SEND_BYTECALL SEND_BYTECALL SEND_BYTELIST19:TMF_KEYS,#00001000B; Проверка клавиши SETJR Z,LIST20AND F_KEYS,#11110111B;JP LIST4LIST20:TM F_KEYS,#00010000B; Проверкаклавиши CLOCKJR Z,LIST22AND F_KEYS,#11101111B;INC MASK1CP MASK1,#0AHJR ULE,LIST21LD MASK1,#00LIST21:JP LIST17LIST22: CALL GO_HALTJP NZ,BEGINJR LIST19;;;LIST23: CALL GO_HALTJP NZ,BEGINJP LIST9;;----------------------------------------------------------------------; END LIST;+--------------------------------------------+;¦ Подпрограмма HALT режима¦;+--------------------------------------------+GO_HALT:PUSH R4NOPHALTEXIT_STOP:;; Поддержкаклавиши SET;TM P2,#00000001B;JR NZ,K1;TM F_KEYS,#00000001B;JR NZ,K3;OR F_KEYS,#00001001B;JR K3;K1: AND F_KEYS,#11110110B;;; Поддержкаклавиши CLOCK;K3:;TM P2,#00000010B;JR NZ,K4;TM F_KEYS,#00000010B;JR NZ,K5;OR F_KEYS,#00010010B;JR K5;K4: AND F_KEYS,#11101101B;;; Поддержка клавиш CLOCK+SET;K5:;TCM F_KEYS,#00000011B;JR NZ,K6;TM F_KEYS,#00000100B;JR NZ,K7;OR F_KEYS,#00100100B;JR K7;K6: AND F_KEYS,#11011011B;K7:;;; Отслеживание звонка;TM BFLAG,#00001000B; Проверить блокировку звонкаJR NZ,K12TM P3,#00000100BJR Z,K10INC CNT_BCP CNT_B,#60; 0.3 секдлязвонкаJP ULT,K12OR BFLAG,#10000000BLD TIM_BL_H,#^hb(CONST_BELL)LD TIM_BL_L,#^lb(CONST_BELL)JR K12K10:CLR CNT_BLD R4,TIM_BL_HOR R4,TIM_BL_LJR NZ,K11AND BFLAG,#01111111BJR K12K11: DECW TIM_BL_HK12:LD R4,COND; Сравнить предыдущее и настоящее состоянияLD COND,P2; линииXOR R4,COND; Z - если состояния одинаковыAND R4,#01000000B; NZ - если состояния разныеPOP R4RET;+----------------------------------------------------------------------+;¦ Определение номера звонящего абонента ¦;+----------------------------------------------------------------------¦;¦ Выход: флаг C = 0 - определение произведено ¦;¦ C = 1 - сбой определения ¦;¦ ¦;+----------------------------------------------------------------------+ID_NUM:LD TET1,0FFH; Заполнение тетрадыLD TET2,0FFH; кодом неопределенностиLD TET3,0FFHLD TET4,0FFHCALL INIT_T1_500LD IMR,#10100000B; Разрешение T1 и запрещение T0LD R5,#4; Число запросов 3AND BFLAG,#01111111B; Сброс звонкаLD TIM_BL_H,#0; Сбросить таймер звонкаLD TIM_BL_L,#0; Сбросить таймер звонкаAND P2,#11011111B; Занять линию;---------------------------------------------------------------------------; Запрос 500 Гц;REQ0:CALL INIT_T1_44117EILD IMR,#10100000B; Разрешение T1 и запрещение T0LOOP1:LD R9,#0; 6LD R11,#BEG_CODLOOP1_0:LD R12,#^hb(BIT_MAP); 6LD R13,#^lb(BIT_MAP); 6ADD R13,R9; 6ADC R12,#0; 10LDC R10,@RR12; 12LD @R11,R10INC R11INC R9; 6CP R9,#11; 10JP ULT,LOOP1_0; 12/10 MAX = 131LD R10,#100LOOP4:LD R11,#BEG_COD; 6LOOP4_0:LD R8,#8; 6LOOP3:LD R12,@R11; 10AND R12,#11011111BLD R2,R12RL @R11; 10NOP; 6HALT; 7LOOP2: DJNZ R8,LOOP3; 12/10INC R11; 6CP R11,#BEG_COD+11; 10JP ULT,LOOP4_0; 12/10 MAX = 131; JP LOOP4DJNZ R10,LOOP4; 12;----------------------------------------------------------------------------TM P2,#00000100B; Снять захват линии если активен свой телефонJR Z,ID_NUM0;OR P2,#00100000B;ID_NUM0:LD R4,#20ID_NUM1:PUSH R4; Ожидать ответа 0.2 секPUSH R5CALL AON_processorPOP R5POP R4CP R8,#30JP NC,ID_NUM2DJNZ R4,ID_NUM1DJNZ R5,REQ0ID_NUM2:LD CNT_REP,#0; Обнулить счетчик повторовLD PRE_N,#0FFH; Предыдущая цифра не определенаLD R4,#25; Количество принимаемых кодовLD R5,#BEG_COD; Адрес буфера принимаемых цифрLD TET1,R9; Запись в тетраду первого кодаID_NUM3:PUSH R4PUSH R5CALL AON_processorPOP R5POP R4;; Вписать цифру в тетраду;LD RP,#10H; Сменить банк регистровLD TET4_,TET3_; Сместить цыфры в тетрадеLD TET3_,TET2_;LD TET2_,TET1_;LD TET1_,9; Записать текущую цифру;; Обработка тетрады;LD 9,TET1_CP 9,TET2_JP Z,ID_NUM4LD 9,TET2_CP 9,TET3_JP Z,ID_NUM4LD 9,TET3_CP 9,TET4_JP Z,ID_NUM4LD 9,#0FFHID_NUM4:LD RP,#00CP PRE_N,R9; Цифра равна предыдущей ?JP Z,ID_NUM6CP CNT_REP,#00; Записывать цифру только после второгоJP Z,ID_NUM6; повтораID_NUM5:LD @R5,R9LD PRE_N,R9; Сохранить текущую цифруINC R5LD CNT_REP,#00; Обнулить счетчик повторовDJNZ R4,ID_NUM3; Продолжать ввод пока не будет записаноJR ID_NUM8_; 25 цифрID_NUM6:INC CNT_REP;; CP R9,#0FFH; Не повторять запись цифр отличных от 0FFH; JR NZ,ID_NUM3;CP CNT_REP,#7;JP UGT,ID_NUM5;JR ID_NUM3;; Сборканомера;ID_NUM8_:LDR4,#BEG_CODLD R5,#6; Поиск двух кодов 0AH в области принятыхID_NUM9:; кодовCP @R4,#0AH; Адрес первого хранится в рег. R6JR NZ,ID_NUM7; второго в рег. R7LD @R5,R4;INC R5;CP R5,#8;JR UGE,ID_NUM8;ID_NUM7:;INC R4;CP R4,#BEG_COD+25JR ULT,ID_NUM9ID_NUM8:CP R5,#8JR Z,ID_NUM10CP R5,#7JR Z,ID_NUM11;; Заполнение буфера кодом неопределенности если не найдено ни одного; кода 0AH;LDR4,#BUF_NUMLDR5,#8ID_NUM12:LD @R4,#0FHINC R4DJNZ R5,ID_NUM12JP ID_NUM_ERRID_NUM10:LDR8,R6LD R9,R7JR ID_NUM13ID_NUM11:LD R8,R6LD R9,R8; ADD R9,#9ID_NUM13:LDR4,#8LD R10,#BUF_NUMDEC R8DEC R9ID_NUM20:CP R8,#BEG_CODJR ULT,ID_NUM14CP R8,#BEG_COD+24JR UGE,ID_NUM14LDR6,@R8JR ID_NUM15ID_NUM14:LD R6,#0FFHID_NUM15:CP R9,#BEG_CODJR ULT,ID_NUM16CP R9,#BEG_COD+24JR UGE,ID_NUM16LDR7,@R9JR ID_NUM17ID_NUM16:LD R7,#0FFHID_NUM17:CP R7,#0FFHJR Z,ID_NUM18LD @R10,R7JR ID_NUM19ID_NUM18:LD @R10,R6ID_NUM19:DEC R8DEC R9INC R10DJNZ R4,ID_NUM20;; Удаление повторов и нулейLD R4,#BUF_NUMLD R5,@R4LD R6,#8ID_NUM22:CP @R4,#0BHJR NZ,ID_NUM21LD @R4,R5ID_NUM21:CP @R4,#0JR NZ,ID_NUM23LD @R4,#10ID_NUM23:LDR5,@R4INC R4DJNZ R6,ID_NUM22; Циклический сдвиг на одну позицию вправоLD R4,#BUF_NUM+7LD R5,#BUF_NUM+6LD R8,@R4LD R7,#7ID_NUM24:LD R6,@R5LD @R4,R6DEC R4DEC R5DJNZ R7,ID_NUM24LD @R4,R8RCFRETID_NUM_ERR:OR BFLAG,#00000100B; Флаг неопределенияRET;+-------------------------------------------------+;¦ Подпрограмма инициализации T1 на 500 ¦;+-------------------------------------------------+INIT_T1_500:LD PRE1,#11110011B; Коэффицент деления 60LD TMR,#00001110B; Разрешение обоих таймеров T1 с загрузкойLD T1,#50; Переполнение таймера каждые 2 мсRET;+-------------------------------------------------+;¦ Подпрограмма инициализации T1 на 44117 Гц ¦;+-------------------------------------------------+INIT_T1_44117:LD PRE1,#01000111B; Коэффицент деления 17LD TMR,#00001110B; Разрешение обоих таймеров T1 с загрузкойLD T1,#2; Переполнение таймера каждуюRET;+-------------------------------------------------+;¦ Подпрограмма вывода байта на ЖКИ 'Panasoanic' ¦;¦ Ввод: R6 - выводимый байт ¦;¦ ¦;¦ Изменяются R4,R5 ¦;+-------------------------------------------------+SEND_BYTE:SWAP R6LD R5,#4SB1: RL R6JPC,SB2; Передача 1ANDP0,#11111011B; Передача 0JR SB3SB2: OR P0,#00000100BSB3:LD R4,#15DJNZ R4,$AND P0,#11111101B; ПередачастробаLD R4,#15DJNZ R4,$OR P0,#00000010BLD R4,#15DJNZ R4,$OR P0,#00000100B; СнятиесигналаLD R4,#15DJNZ R4,$DJNZ R5,SB1RET;+-------------------------------------------------------------------------+;¦ Подпрограмма ввода информации АОН ¦;+-------------------------------------------------------------------------+Fr1_1 = 20HFr1_2 = 21HFr2_1 = 22HFr2_2 = 23HFr3_1 = 24HFr3_2 = 25HFr4_1 = 26HFr4_2 = 27HFr5_1 = 28HFr5_2 = 29HFr6_1 = 2AHFr6_2 = 2BHAON_processor:LD PRE1,#00010111B; Коэфф. дел. =5LD TMR,#00001110BLD T1,#15; Коэфф. дел. =15; При частоте 12 МГц период счетчика 50 мксLD IMR,#10100000B; Разрешение T1 запрещение T0; Производится 200 отсчетов; На каждую эпюру отводится в таблице 25 байтLD R4,#Fr1_1LD R6,#0LD R7,#6LD R8,#8LD R14,#^hb(TABLE); @RR14 - АдрестаблицыэпюрLD R15,#^lb(TABLE);LD R12,#^hb(NUM_TABLE); @RR12 - Адрестаблицысумм; Формирование первого байта отсчетовAONp2: NOPHALT;7 Ожидание времени отсчетаSCF;6TM P3,#00000010B;10JR NZ,AONp0;10CCF;6AONp0: RLC R6;6 Формирование байта отсчетовCP R7,#0;10JR Z,AONp1;10LD @R4,#0;10INC R4;6LD @R4,#0;10INC R4;6DEC R7;6AONp1:DJNZR8,AONp2;12 -> 103 T. 17.17 мкс; Прием и обработка следующих байтов отсчетовLD R11,#25;10AONp5:LD R4,#Fr1_1;10 Адрес буфера идентификаторовLD R7,#6;10 Счетчик принимаемых битLD R8,#8;10 Счетчик циклов вводаLD R9,R6;6 Сохранить предыдущий байт отсчетовLD R6,#0;10 Байт отсчетовAONp4: NOPHALT;7SCF;6TM P3,#00000010B;10JRNZ,AONp6;10CCF;6ONp6: RLCR6;6 Формирование байта отсчетовCP R7,#00;10JR Z,AONp3;10LDC R13,@RR14;12XOR R13,R9;6LDC R10,@RR12;12ADD R10,@R4;6LD @R4,R10;10INCW RR14;10INC R4;6LDC R13,@RR14;12XOR R13,R9;6LDC R10,@RR12;12ADD R10,@R4;6LD @R4,R10;10INCW RR14;10INC R4;6DEC R7;6AONp3:DJNZ R8,AONp4;12 ->207 Продолжение цикла ввода байта; отсчетовDJNZ R11,AONp5;12 ->275 Продолжение ввода байтов отсчетов; Приведение массива идентификаторов к нормальной формеLD R13,#01LD R14,#00LD R15,#00LD R4,#Fr1_1;10 Адрес буфера идентификаторовLD R6,#6;10 Счетчик нормальных идентификаторовLD R7,#00AONp11:SUB @R4,#101JR NC,AONp7COM @R4AONp7: LD R5,@R4INC R4SUB @R4,#101JR NC,AONp8COM @R4AONp8: ADD R5,@R4; Получение нормального идентификатораINC R4; Определение пары максимальных идентификаторовCP R8,R5JR NC,AONp9LD R7,R8LD R8,R5LD R14,R15LD R15,R13JR AONp10AONp9: CP R7,R5JR NC,AONp10LD R7,R5LD R14,R13AONp10: RL R13DJNZ R6,AONp11; ВычислениецифрыOR R14,R15LD R9,#12AONp13:LD R12,#^hb(TABLE_NUM_AON-1)LD R13,#^lb(TABLE_NUM_AON-1)ADD R13,R9ADC R12,#0LDC R10,@RR12CP R14,R10JR Z,AONp12DJNZ R9,AONp13AONp12: DEC R9DIRET;Выход *****************************; R8 - величина первого идентификатора; R7 - величина второго идентификатора; R9 - принятая цифра {0..Bh}, если R9=FFh то цифра не определена;***********************************;; Последовательность цифр в посылке:; 1. Категория абонента; 2. Единицы номера; 3. Десятки номера; 4. Сотни номера; 5. Тысячи номера; 6. 3-я цифра индекса станции; 7. 2-я цифра индекса станции; 8. 1-я цифра индекса станции; 9. Начало/конец передачи; 10. Категория абонента;----------------------------; Подпрограмма ввода выборки;----------------------------Sample:IRETINT_T0:IRET;----------------------------TABLE_NUM_AON:;усл.номерцифра.BYTE 18H; 0.BYTE 03H; 1.BYTE 05H; 2.BYTE 06H; 3.BYTE 09H; 4.BYTE 0AH; 5.BYTE 0CH; 6.BYTE 11H; 7.BYTE 12H; 8.BYTE 14H; 9.BYTE 24H; 0AH - код начала/конца.BYTE 28H; 0BH - код повтораBIT_MAP:.BYTE 11111111B.BYTE 01111111B.BYTE 01111101B.BYTE 00101010B.BYTE 00001000B.BYTE 00000000B.BYTE 00000000B.BYTE 00000010B.BYTE 01110100B.BYTE 11110110B.BYTE 11111110B.ORG 05D4H;----------------------------; ТаблицаАОНTABLE:.BYTE 0FFH,0FFH,0FFH,0FCH,0FFH,0F8H,0FFH,0F0H,0FEH,0F0H,0FCH,0E0H.BYTE 0FEH,000H,0F0H,000H,0C0H,003H,000H,00FH,003H,01FH,00FH,07EH.BYTE 000H,003H,001H,07FH,01FH,0FEH,0FFH,0F0H,0F8H,080H,0C0H,007H.BYTE 007H,0FFH,0FFH,0F0H,0F0H,000H,001H,01FH,01FH,0FEH,0FCH,0E0H.BYTE 0FFH,0F0H,0C0H,001H,007H,0FFH,0FEH,0E0H,0C0H,007H,00FH,07EH.BYTE 0E0H,000H,007H,0FFH,0FCH,080H,001H,01FH,07EH,0F0H,0C0H,007H.BYTE 000H,01FH,0FFH,0E0H,001H,01FH,0FCH,0E0H,003H,01FH,0F8H,0E0H.BYTE 03FH,0FFH,000H,003H,0FFH,0F0H,003H,03FH,0F8H,080H,01FH,0FCH.BYTE 0FFH,080H,01FH,0FFH,000H,007H,0FCH,0C0H,01FH,0FEH,081H,00FH.BYTE 000H,001H,0FCH,080H,07FH,0FCH,007H,03FH,0C0H,007H,0F8H,0C0H.BYTE 003H,0FFH,000H,00FH,0C0H,001H,0F8H,080H,07EH,0F0H,01FH,0FCH.BYTE 0FFH,0F8H,07FH,0FEH,01FH,0FFH,007H,07FH,003H,01FH,081H,00FH.BYTE 0F8H,000H,0F8H,000H,0F8H,000H,0F8H,080H,0F8H,080H,0F8H,0C1H.BYTE 000H,00FH,000H,03FH,003H,07FH,00FH,0FFH,01FH,0FEH,03FH,0F8H.BYTE 01FH,0FFH,0FFH,0F8H,0FEH,0C0H,0F0H,000H,0C0H,007H,003H,01FH.BYTE 0FFH,0C0H,0E0H,000H,000H,01FH,00FH,0FEH,07EH,0F0H,0F0H,081H.BYTE 080H,000H,003H,0FFH,0FFH,0F0H,0E0H,001H,003H,01FH,03FH,0F8H.BYTE 001H,0FFH,0FFH,0E0H,080H,007H,01FH,0FEH,0F8H,080H,003H,01FH.BYTE 0FFH,0FEH,080H,001H,03FH,0FEH,0E0H,001H,01FH,0FEH,0F0H,081H.BYTE 0FCH,000H,00FH,0FFH,0E0H,000H,03FH,0FCH,0C0H,007H,03EH,0F0H.BYTE 000H,007H,0FEH,0C0H,00FH,0FFH,0C0H,003H,07EH,0F0H,007H,03FH.BYTE 00FH,0FFH,000H,007H,0F8H,080H,03FH,0FCH,003H,01FH,0E0H,003H.BYTE 0FFH,0E0H,03FH,0FFH,003H,03FH,0C0H,007H,0F8H,080H,07EH,0F0H.BYTE 0C0H,000H,0F8H,000H,0FFH,0E0H,07FH,0F8H,01FH,0FEH,007H,03FH.BYTE 000H,07FH,000H,01FH,000H,00FH,080H,007H,0C0H,007H,0E0H,003H.ORG 700H;; ТАБЛИЦА СООТВЕТСТВИЯ БАЙТА И КОЛИЧЕСТВА; ЕДИНИЦ В НЕМNUM_TABLE:.BYTE 00H,01H,01H,02H,01H,02H,02H,03H,01H,02H,02H,03H,02H,03H,03H,04H.BYTE 01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H.BYTE 01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H.BYTE 01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H.BYTE 02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H.BYTE 03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H.BYTE 03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H.BYTE 04H,05H,05H,06H,05H,06H,06H,07H,05H,06H,06H,07H,06H,07H,07H,08H.END

Приложение Б

Схема принципиальная электрическая АОН

ОТКРЫТЬ САМ ДОКУМЕНТ В НОВОМ ОКНЕ

ДОБАВИТЬ КОММЕНТАРИЙ [можно без регистрации]

Ваше имя:

Комментарий

Все материалы в разделе "Коммуникации и связь"