Генератор кода Морзе



18

 

              Министерство образования РБ             

 

Белорусский государственный университет информатики и радиоэлектроники

 

Кафедра ЭВС

 

 

                                                                                              К защите допускаю

 

“    “ _________ 2001 г.

 

Руководитель работы

  Качинский М.В.

 

 

 

 

 

Пояснительная записка

к курсовому проекту на тему:

“Генератор кода Морзе”

 

 

 

 

 

 

 

 

 

 

 

Выполнил:              Проверил:

студент гр. 810703

Майер Р.А.              Качинский М.В.

 

 

 

 

 

 

 

 

 

 

 

Минск 2001 г.


Содержание

 

 

1   Введение              4

2   Анализ задачи              5

2.1  Функциональная спецификация системы              6

3   Предварительное проектирование системы              7

3.1  Разбиение системы на модули и выбор соотношения между аппаратными и программными средствами              7

3.2  Построение структурной схемы аппаратной части системы. Описание структурной схемы              8

4   Проектирование аппаратных средств системы. Разработка и принципиальной схемы системы. Описание работы системы по принципиальной схеме              9

5   Проектирование программного обеспечения. Разработка схемы алгоритма работы системы и программы. Описание алгоритма работы системы и программы              13

6   Заключение              15

7   Литература              16

Приложение А — Листинг управляющей программы              17

 


1 Введение

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

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

В данном курсовом проекте необходимо разработать генератор кода Морзе на базе микропроцессора 8086. Генератор должен принимать сообщения из параллельного порта компьютера и выдавать на входную линию звукового генератора комбинацию точек и тире, соответствующую входному сообщению. Входящие сообщения поступают в коде ASCII. Проектируемая система должна быть проста в обращении, удобна в эксплуатации, соответствовать требованиям и нормам настоящего времени. Здесь немаловажную роль играют стоимостные показатели. Генератор кода Морзе должен быть более дешевым по сравнению с такой же системой, реализованной на дискретных элементах. Весьма важными являются и геометрические размеры проектируемой системы.

Эти требования должны лечь в основу проектируемого устройства.


2 Анализ задачи.

Из исходных данных к курсовому проекту можно выделить следующие основные функциональные действия, которые должна выполнять проектируемая система:

1)     считывать из параллельного порта компьютера сообщения в коде ASCII;

Данная функция реализуется применением контроллера параллельного порта, который принимает данные по сигналу стробирования и вырабатывает сигнал подтверждения при считывании данных микропроцессором;

2)     преобразование символа ASCII в код Морзе;

Эта функция реализуется программно самим микропроцессором. В памяти программ по таблице преобразования каждому символу ASCII ставится в соответствие символ в коде Морзе. Таблица преобразования состоит из последовательности символов в коде Морзе, в которой по коду символу ASCII в качестве индекса находится нужный код Морзе.

3)     выдерживать заданную длительность точки;

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

4)     выдерживать заданную длительность тире, интервалов между точкой и тире, между символами и между словами;

Требуемая длительность обеспечивается соответствующим кодированием кодов Морзе и алгоритмом вывода кода в выходную линию.

Кодирование одного символа одним байтом позволит за одну операцию чтения получить из параллельного порта сразу весь символ.

 

 

2.1 Функциональная спецификация системы

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

1)     список функций выполняемых системой;

2)     описание интерфейса между системой и пользователем.

При  анализе действий проектируемой системы можно выделить следующие основные функции:

   приём 8-ми разрядного символа сообщения из параллельного порта компьютера;

   преобразование полученного символа в последовательность точек и тире (код Морзе);

   последовательный вывод кода Морзе;

   выдержка заданной длительности точки.

Так как генератор всегда однозначно преобразует поступивший на вход код, для него не требуется организация интерфейса с пользователем в виде внешних органов управления кроме кнопки “Сброс”.


3 Предварительное проектирование системы.

3.1 Разбиение системы на модули и выбор соотношения между аппаратными и программными средствами

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

   модуль ввода;

   модуль преобразования кода;

   модуль обеспечения нужной длительности точки;

   модуль обеспечения нужной длительности между элементами кода Морзе и самими кодами Морзе;

   модуль вывода.

Из приведённого списка модулей аппаратной реализации потребуют модуль ввода и модуль вывода, так как здесь ведётся взаимодействие с интерфейсом параллельного порта и выходной линии системы.

Модуль преобразования кода проще реализовать программно на микропроцессоре 8086, так как его использование оговорено в задании к курсовому проекту.

Модуль обеспечения нужной длительности между элементами кода Морзе и самими кодами Морзе также удобнее реализовать программно.

Модуль обеспечения нужной длительности точки реализуется на программируемом таймере.

3.2 Построение структурной схемы аппаратной части системы. Описание структурной схемы

Структурная схема аппаратной части системы приведена на чертеже БГУИ.ХХХХХХ.001Э1. Для построения системы необходимы все упомянутые выше узлы, а также дополнительно генератор тактовых импульсов (ГТИ).

Проектируемая система состоит из следующих блоков:

   генератора тактовых импульсов (ГТИ);

   микропроцессора (МП);

   ПЗУ;

   программируемого таймера (ПТ);

   контроллера параллельного порта (КПП);

   выходного порта.

Далее приведено описание функций каждого блока.

ГТИ предназначен для формирования тактовых импульсов заданной частоты, которые затем поступают на МП и ПТ.

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

ПЗУ хранит код исполняемой МП программы и таблицу преобразования символа ASCII в код Морзе.

ПТ служит для выдержки временных интервалов фрагментов кода Морзе.

Выходной порт предназначен для развязки выходной линии от системной магистрали (хранение последнего фрагмента кода Морзе).


4 Проектирование аппаратных средств системы. Разработка и принципиальной схемы системы. Описание работы системы по принципиальной схеме

В задании к курсовому проекту оговорен тип микропроцессора, на базе которого нужно спроектировать систему — 8086. Отечественным аналогом данного микропроцессора является КР1810ВМ86 [4], [6] — он является полным функциональным аналогом 8086 и широко распространён в нашей стране, поэтому для построения проектируемой системы целесообразно использовать именно его.

Серия КР1810, в которую входит выбранный микропроцессор, содержит ряд микросхем предназначенных для работы с ним, существенно облегчающих построение системы. Недостающие элементы будут заимствованы из других серий.

Схема электрическая принципиальная проектируемой системы приведена на чертеже БГУИ.ХХХХХХ.001Э3.

Тактовая частота работы микропроцессора составляет 5МГц. Для её формирования используется генератор тактовых импульсов DD2 (КР1810ГФ84 [4]), ко входам которого X1, X2 подключен кварцевый резонатор ZQ1 на частоту 15МГц (которая на выходе делится на 3). Через генератор подаётся также сигнал сброса системы (через цепь сброса) и готовности контроллера параллельного порта DD6 (КР580ВВ55А [5]). Так как шина данных микропроцессора совмещена с младшими разрядами адреса, необходимо их разделить, подключив шинные формирователи DD8 и DD9 (КР1810ВА86 [4]) для развязки шины данных и регистры DD10 и DD11 КР1810ИР82 [4] для запоминания адреса.

В качестве микросхемы памяти программ выбрана КР556РТ6 [1]. Это однократно программируемое ПЗУ организацией  2Кбайта х 8 с ТТЛ-выходами и временем доступа 80нс. Для подключения к 16 разрядной шине данных нужно использовать 2 микросхемы — одну для чётного (DD13), а другую для нечётного (DD14) адреса. На адресные входы подаются разряды А1 – А11 шины адреса. Линии А0 и не используются, так как микропроцессор сам выбирает нужный байт или всё слово с шины данных. На вход обоих микросхем подаётся сигнал , а на входы CS — сигнал , обеспечивая, таким образом, выбор микросхемы при чтении микропроцессором данных из памяти.

Из справочных данных [4] видно, что длительность сигнала на заданной частоте работы микропроцессора составляет 335нс, а время доступа микросхем памяти — 80нс, т. е. память способна работать на заданной частоте.

Все внешние устройства подключены к адресному пространству портов ввода/вывода. Для их адресации используется дешифратор DD14 (КР1533ИД4 [2]) на адресные входы которого подаются разряды А2, А3 шины адреса, а на входы разрешения выхода — сигнал .

Для сопряжения системы с параллельным портом ЭВМ [7] выбран контроллер параллельного порта КР580ВВ55А (DD6). Он содержит 3 восьми­­разрядных двунаправленных канала (ВА, ВВ и ВС) и способен работать в 3-х режимах. Режим 1, в котором используется контроллер, соответствует режиму работы параллельного порта ЭВМ. В этом режиме порт ВА настраивается на приём данных, линия ВС4 подключается к сигналу строба параллельного порта ЭВМ, а линия ВС5 формирует сигнал подтверждения приёма данных ASK. Длительность сигнала строба параллельного порта ЭВМ составляет не менее 0,5мкс [7], а для контроллера этот сигнал должен быть также не менее 0,5мкс [5], т. е. возможно их прямое соединение. Длительность сигнала подтверждения приёма данных параллельного порта ЭВМ должна быть не менее 5мкс [7], в то время как при самых неблагоприятных условиях на выходе контроллер параллельного порта его длительность может составить 119 + 125 = 244нс, чего явно недостаточно. Это требует увеличения его длительности, для чего используется одновибратор DD7 (КР1533АГ3 [2]). К его времязадающим входам подключена RC-цепь и длительность импульса на выходе определяется по формуле [9]:

Твых = 0,45·R·C = 0,45·15000·1000·10-9 = 0,00000675с = 6,75мкс

Запускается одновибратор по сигналу готовности от контроллера параллельного порта ВС5. С этим же сигналом он объединяется по ИЛИ и через инвертор поступает на разъем XP1. Таким образом, обеспечивается нужная длительность сигнала подтверждения приёма данных.

Выход контроллера ВС5 через генератор DD2 подаётся на вход READY микропроцессора, работая, таким образом, в режиме “нормально неготового устройства”. При чтении микропроцессором данных из контроллера параллельного порта сигнал READY будет активен только в том случае, если данные из параллельного порта ЭВМ уже приняты, в противном случае сигнал READY будет отсутствовать, и микропроцессор будет вводить такты ожидания до тех пор, пока не поступят данные от ЭВМ.

Вход выбора контроллера DD6 подключен к выходу дешифратора DD15, задавая тем самым базовый адрес микросхемы 0h в адресном пространстве портов ввода/вывода микропроцессора. Адресные входы А0, А1 подключены соответственно к линиям А0, А1 шины адреса. При таком подключении можно адресоваться ко всем внутренним регистрам контроллера относительно его базового адреса.

В качестве таймера используется микросхема КР1810ВИ54 [4] (DD6). Это программируемый таймер, который содержит три независимых 16 разрядных таймера с возможностью работы в различных режимах. На его вход выбора подаётся сигнал с выхода дешифратора DD15, задавая тем самым базовый адрес микросхемы 04h в адресном пространстве портов ввода/вывода микропроцессора. Адресные входы А0, А1 подключены к соответствующим линиям шины адреса. При таком подключении можно адресоваться ко всем внутренним регистрам программируемого таймера относительно его базового адреса.

Программируемый таймер используется для выдержки длительности точки (принята равной 0,3с), поэтому он должен разделить входную частоту 5МГц до ≈ 3,3Гц. Коэффициент деления должен составить:

КД = 5·106 /3,3 = 1515152

Что намного больше коэффициента деления 16 разрядного таймера, равного 65535, поэтому необходимо задействовать два таймера — 0 и 1. Таймеры необходимо включить последовательно, образуя 32 разрядный делитель входной частоты. Таймер 0 программируется для работы в режиме 2 (импульсный генератор с автозагрузкой) и является младшей частью делителя, таймер 1 программируется для работы в режиме 0 (прерывание терминального счёта) и является старшей частью делителя, его выход OUT1 через инвертор подаётся на вход микропроцессора для анализа в программе командой WAIT. Так как счёт таймером 0 должен быть всегда разрешён, на его вход разрешения G0 нужно подать уровень логической 1. Таймер 1 должен декрементироваться только после окончания счета таймером 0, для этого его вход разрешения счёта G1 нужно соединить через инвертор с выходом таймера 0 (OUT0). Для корректной работы схемы тактовые импульсы на входы таймеров нужно подавать в противофазе.

И, наконец, выходной порт представляет собой обычный триггер-защёлку (DD12.1), а точнее микросхему КР1533ТМ2 [3], включающую в себя два D-триггера с входами сброса и установки. При записи данных микропроцессором в порт по адресу 08h по фронту сигнала состояние линии D0 шины данных заносится в триггер, откуда поступает на разъём выходной линии XS2.


5 Проектирование программного обеспечения. Разработка схемы алгоритма работы системы и программы. Описание алгоритма работы системы и программы

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

Первая команда управляющей программы располагается по адресу 07Fh, так как после снятия сигнала сброса микропроцессор обращается за первой командой по адресу 0FFFF0h. Но в системе используется постоянная память объёмом 2Кслова, поэтому на адресных линия ПЗУ появляется адрес 07Fh.

Блок-схема алгоритма управляющей программы приведена БГУИ.ХХХХХХ.001. Первым действием программы после сброса (блок 2) является инициализация контроллера параллельного порта (КПП) путём записи в его регистр управляющего слова (РУС) 0BBh. Этим канал А КПП настраивается на приём байта от параллельного порта ЭВМ.

В блоке 3 производится чтение кода символа ASCII из канала А КПП. Если к этому моменту КПП не принял байт, вырабатывается сигнал отсутствия готовности и микропроцессор вводит такты ожидания до тех пор, пока в КПП не поступит байт от параллельного порта ЭВМ.

В блоке 4 из принятого кода символа ASCII вычитается константа 32, так как в коде Морзе отсутствуют символы ASCII с 0 по 31. Этой операцией получается индекс кода Морзе в таблице преобразования символа ASCII в код Морзе. Далее (блок 5) из таблицы преобразования по полученному индексу считывается длинна символа кода Морзе. Если получен символ ASCII, для которого не существует кода Морзе, его длинна будет равна нулю в таблице преобразования, и в блоке 6 произойдет переход на команду чтения следующего символа ASCII (блок 3). В противном случае  в блоке 7 будет прочитан следующий байт кода Морзе, а в блоке 8 он сдвинется влево через флаг переноса (cf) и в блоке 9 cf будет выведен в выходной порт, откуда поступит в выходную линию. В блоке 10 канал 1 программируемого таймера (ПТ) переводится в режим 0, записью байта 34h в РУС, а в блоке 11 канал 0 ПТ переводится в режим 2, записью байта 70h в РУС. Далее в оба канала ПТ записываются соответствующие константы счёта (блоки 12 и 13) в результате чего происходит запуск таймеров обоих каналов. В блоке 14 микропроцессор ожидает, когда таймер канала 0 завершит счет, т. е. выдержится нужная длительность элемента кода Морзе. Затем, в блоке 15, проверяется полностью ли выведен в выходную линию код Морзе, и если да — считывается следующий символ ASCII (переход к блоку 3). Иначе проверяется, полностью ли выведен текущий байт (блок 16) и если да, то считывается следующий байт (переход к блоку 7), в противном случае выводится следующий бит текущего байта кода Морзе (переход к блоку 8).

Листинг управляющей программы приведён в приложении А.


6 Заключение

В результате работы над курсовым проектом были вспомнены, закреплены, а местами углублены и заново изучены навыки разработки цифровых систем на интегральных микросхемах с использованием микропроцессора. Разработано простое цифровое устройство на базе 16 разрядного микропроцессора, функции которого в давние времена (а где-то и по сей день) выполнялись аппаратами, построенными только на дискретных элементах.

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


7 Литература

1.      Лебедев В.И. Микросхемы памяти и их применение: Справочник. М.: Радио и связь, 1990.

2.      Логические ИС КР1533, КР1554: Справочник. В 2 ч. Под ред. И.И. Петровский, А.Ф. Прибыльский, А.А.Троян, В.С. Чувулев. — М.: Бином, 1993. — Ч. 1.

3.      Логические ИС КР1533, КР1554: Справочник. В 2 ч. Под ред. И.И. Петровский, А.Ф. Прибыльский, А.А.Троян, В.С. Чувулев. — М.: Бином, 1993. — Ч. 2.

4.      Микропроцессорный комплект К1810: Структура, программирование, применение: Справочная книга. Под ред. Ю.М. Казаринова. — М.: Высшая школа, 1990.

5.      Микропроцессоры и микропроцессорные комплекты интегральных микросхем: Справочник. В 2 т. Под ред. В.А. Шахнова. — М.: Радио и связь, 1988. — Т. 1.

6.      Микропроцессоры и микропроцессорные комплекты интегральных микросхем: Справочник. В 2 т. Под ред. В.А. Шахнова. — М.: Радио и связь, 1988. — Т. 2.

7.      Руководство по архитектуре IBM PC AT. Под ред. М.Л. Мархасина. — Мн. ООО “Консул”, 1992.

8.      Фигурнов В.Э. IBM PC для пользователя. Изд. 6-е, перераб. и доп. — М.: ИНФРА–М, 1995.

9.      Цифровые интегральные микросхемы: Справочник. /М.И. Богданович, И.Н. Грель и др. — Мн.: Беларусь, 1991.


 

 

 

 

 

 

 

 

Приложение А

(справочное)

Листинг управляющей программы


                .code

 

                org              07f0h

                mov     ax, offset TableMorze

                mov     ds, ax                  ;инициализация ds

               mov     al, 10111011b

                out     01h, al                 ;инициализация ВВ55А

GetSymbol:

                in      al, 00h                 ;чтение символа из ВВ55А

                sub     al, 32          ;отнять номер первого исп. символа в таблице ASCII

                xor     bh, bh

                mov     bl, al

                mov     cl, 2

                shl     bx, cl                  ;умножение номера символа на его размер (4)

                mov     ah, ds:[bx]             ;чтение размера символа

                cmp     ah, 0

                jz      GetSymbol               ;если размер символа = 0, получить следующий

GetNextByte:

    inc     bx

                mov     dl, ds:[bx]             ;чтение байта символа

                mov     ch, 8                   ;длинна байта

OutNextBit:
     rol     dl, 1

                mov     al, 0

                jnc     OutLowLevel

                mov     al, 1

OutLowLevel:

    out     08h, al                 ;вывод сдвинутого бита в триггер

                mov     al, 00110100b

                out     07h, al                 ;установка режима 2 для таймера 0

                mov     al, 01110000b

                out     07h, al                 ;установка режима 0 для таймера 1

                mov     al, cs:BYTE PTR TimerConst + 1

                out     05h, al                 ;загрузка младшего байта в таймер 1

                mov     al, cs:BYTE PTR TimerConst

                out     05h, al                 ;загрузка старшего байта в таймер 1

                mov     al, cs:BYTE PTR TimerConst + 3

                out     04h, al                 ;загрузка младшего байта в таймер 0

                mov     al, cs:BYTE PTR TimerConst + 2

                out     04h, al                 ;загрузка старшего байта в таймер 0

                wait                            ;ждать окончания интервала

                dec     ah                                     

                jz      GetSymbol

                dec     ch

                jz      GetNextByte

                jmp     OutNextBit

 

 

TimerConst:    dd      1515152

                ;таблица сопоставления символам ASCII кодов Морзе (длинна в интервалах)

TableMorze:     db      5,  00000000b, 00000000b, 00000000b     ;' ', №32 ASCII, длинна 5

                dd      2 dup(0)                                ;№№33-34 ASCII, длинна 0

                db      16, 11101010b, 11101000b, 00000000b     ;'№', №35 ASCII, длинна 16

                dd      10 dup(0)                               ;№№36-45 ASCII, длинна 0

               db      14, 10101010b, 10100000b, 00000000b     ;'.', №46 ASCII, длинна 14

                dd      1 dup(0)                                ; №47 ASCII, длинна 0

                db      22, 11101110b, 11101110b, 11100000b     ;'0', №48 ASCII, длинна 22

                db      20, 10111011b, 10111011b, 10000000b     ;'1', №49 ASCII, длинна 20

                db      18, 10101110b, 11101110b, 00000000b     ;'2', №50 ASCII, длинна 18

                db      16, 10101011b, 10111000b, 00000000b     ;'3', №51 ASCII, длинна 16

                db      14, 10101010b, 11100000b, 00000000b     ;'4', №52 ASCII, длинна 14

                db      12, 10101010b, 10000000b, 00000000b     ;'5', №52 ASCII, длинна 12

                db      14, 11101010b, 10100000b, 00000000b     ;'6', №54 ASCII, длинна 14

                db      16, 11101110b, 10101000b, 00000000b     ;'7', №55 ASCII, длинна 16

                db      18, 11101110b, 11101010b, 00000000b     ;'8', №56 ASCII, длинна 18

                db      20, 11101110b, 11101110b, 10000000b     ;'9', №57 ASCII, длинна 20

                dd      5 dup(0)                                ;№№58-62 ASCII, длинна 0

                db      18, 10101110b, 11101010b, 00000000b     ;'?', №63 ASCII, длинна 18

                dd      64 dup(0)                               ;№№64-127 ASCII, длинна 0

                db      8,  10111000b, 00000000b, 00000000b     ;'А', №128 ASCII, длинна 8

                db      12, 11101010b, 10000000b, 00000000b     ;Б'', №129 ASCII, длинна 12

                db      12, 10111011b, 10000000b, 00000000b     ;В'', №130 ASCII, длинна 12

                db      12, 11101110b, 10000000b, 00000000b     ;'Г', №131 ASCII, длинна 12

                db      10, 11101010b, 00000000b, 00000000b     ;'Д', №132 ASCII, длинна 10

                db      4,  10000000b, 00000000b, 00000000b     ;'Е', №133 ASCII, длинна 4

                db      8,  10101000b, 00000000b, 00000000b     ;'Ж', №134 ASCII, длинна 8

                db      14, 11101110b, 10100000b, 00000000b     ;'З', №135 ASCII, длинна 14

                db      6,  10100000b, 00000000b, 00000000b     ;'И', №136 ASCII, длинна 6

                db      16, 10111011b, 10111000b, 00000000b     ;'Й', №137 ASCII, длинна 16

                db      12, 11101011b, 10000000b, 00000000b     ;'К', №138 ASCII, длинна 12

                db      12, 10111010b, 10000000b, 00000000b     ;'Л', №139 ASCII, длинна 12

                db      10, 11101110b, 00000000b, 00000000b     ;'М', №140 ASCII, длинна 10

                db      8,  11101000b, 00000000b, 00000000b     ;'Н', №141 ASCII, длинна 8

                db      14, 11101110b, 11100000b, 00000000b     ;'О', №142 ASCII, длинна 14

                db      14, 10111011b, 10100000b, 00000000b     ;'П', №143 ASCII, длинна 14

                db      10, 10111010b, 00000000b, 00000000b     ;'Р', №144 ASCII, длинна 10

                db      8,  10101000b, 00000000b, 00000000b     ;'С', №145 ASCII, длинна 8

                db      6,  11100000b, 00000000b, 00000000b     ;'Т', №146 ASCII, длинна 6

                db      10, 10101110b, 00000000b, 00000000b     ;'У', №147 ASCII, длинна 10

                db      12, 10101110b, 10000000b, 00000000b     ;'Ф', №148 ASCII, длинна 12

                db      10, 10101010b, 00000000b, 00000000b     ;'Х', №149 ASCII, длинна 10

                db      14, 11101011b, 10100000b, 00000000b     ;'Ц', №150 ASCII, длинна 14

                db      16, 11101110b, 11101000b, 00000000b     ;'Ч', №151 ASCII, длинна 16

                db      18, 11101110b, 11101110b, 00000000b     ;'Ш', №152 ASCII, длинна 18

                db      16, 11101110b, 10111000b, 00000000b     ;'Щ', №153 ASCII, длинна 16

                db      14, 11101010b, 11100000b, 00000000b     ;'Ь', №154 ASCII, длинна 14

                db      16, 11101011b, 10111000b, 00000000b     ;'Ы', №155 ASCII, длинна 16

                db      14, 11101010b, 11100000b, 00000000b     ;'Ъ', №156 ASCII, длинна 14

                db      14, 10101110b, 10100000b, 00000000b     ;'Э', №157 ASCII, длинна 14

                db      14, 10101110b, 11100000b, 00000000b     ;'Ю', №158 ASCII, длинна 14

                db      14, 10111010b, 11100000b, 00000000b     ;'Я', №159 ASCII, длинна 14

                end



Генератор кода Морзе