Реализация устройства контроля переданной информации с использованием модифицированного кода Хемминга
p align="left">3.9 Индикатор цифровой АЛС324АРис.3.11 Индикатор цифровой АЛС324А. Выводит на экран цифры в зависимости от сигналов на входах в семисегментном коде. Состоит из семи светодиодов. Единица, пришедшая на вход, приводит к свечению соответствующего сегмента. 4. КАРТА ПАМЯТИ |
Адрес | Назначение адреса | | 0000h - 07D0h | ПЗУ | | 0000h - 0083 | область ПЗУ, занимаемая программой | | В000h - В7D0h | ОЗУ | | |
5. ПРИНЦИП РАБОТЫ ПРОГРАММЫ Принцип работы программы основан на том, что с использованием модифицированного кода Хемминга можно проводить проверку считанной информации на наличие ошибок. Существует возможность исправить однократные ошибки и обнаружить двойные. Программа управляет считыванием информации с порта, затем заносит их в оперативную память. По нажатию кнопки начинается проверка содержимого на наличие ошибок. На основе маскирования определенных бит и контроля четности формируется четырехбитная характеристическая комбинация, каждому значению которой соответствует свое решение. Таких решений в результате получается четыре: 1. Нет ошибки. Программа просто начинает проверку следующего байта данных, занесенных в ОЗУ. 2. Есть двойная ошибка, тогда выводится сообщение о двойной ошибке в виде адреса, где она зафиксирована, но только с тем различием, что у выводимого адреса будут обнулены четыре старших бита. То есть такое сообщение об ошибке будет иметь вид 0ххх. Программа ждет нажатия кнопки для дальнейшей работы. 3. Ошибка в контрольном бите. Исправляется с помощью заданной маски. Номер ячейки выводится на индикаторы. Программа ждет нажатия кнопки для дальнейшей работы. 3. Есть одиночная ошибка. Ее исправление начинается с формирования маски, в которой все биты будут установлены в ноль и лишь один в единицу. Как раз тот, что должен будет быть исправлен. Далее, с помощью операции XOR (Исключающее ИЛИ) над содержимым ячейки памяти и маской ошибка будет исправлена. Номер ячейки, в которой была ошибка, выводится на индикаторы. Программа ждет нажатия кнопки для дальнейшей работы. 6. ЛИСТИНГ ПРОГРАММЫ |
Адрес | Мнемонический код | Код | Комментарии | | 0000 | MVI A, 89h | 3E | заносим упр. слово в аккумулятор | | 0001 | | 89 | | | 0002 | OUT 3h | D3 | отправляем 89 (10001001) в РУС | | 0003 | | 03 | | | 0004 | LXI D,B000h | 11 | Задаем начальное значение регистровой паре, содержащей адрес ячейки памяти | | 0005 | | 00 | | | 0006 | | B0 | | | 0007 | LXI B,7D0h | 01 | Задаем начальное значение регистровой паре, содержащей счетчик | | 0008 | | D0 | | | 0009 | | 07 | | | 000A | IN 2h | DB | Прием сигнала от кнопки для начала записи последовательности байт в ОЗУ | | 000B | | 02 | | | 000C | m1: IN A5h | DB | Начало цикла, записывающего в ОЗУ принимаемую с порта информацию | | 000D | | A5 | | | 000E | STAX D | 12 | Запись содержимого аккумулятора в ячейку памяти, адрес которой хранится в DE | | 000F | INX D | 13 | Выбираем адрес следующей ячейки | | 0010 | DCX B | 0B | Счетчик записанных байт уменьшаем | | 0011 | JNZ m1 | C2 | Если записаны не все 2000 байт, то переходим на следующий оборот цикла | | 0012 | | 0C | | | 0013 | | 00 | | | 0014 | LXI D, AFFFh | 11 | Задаем начальное значение регистровой паре, содержащей адрес ячейки памяти | | 0015 | | FF | | | 0016 | | AF | | | 0017 | LXI B,7D1h | 01 | Задаем начальное значение регистровой паре, содержащей счетчик | | 0018 | | D1 | | | 0019 | | 07 | | | 001A | m2: IN 2h | DB | Прием сигнала от кнопки для начала проверки | | 001B | | 02 | | | 001C | m7: DCX B | 0B | Уменьшаем регистр-счетчик | | 001D | JZ m11 | CA | Если обработаны все занесенные в память байты, то переход на завершение программы | | 001E | | 83 | | | 001F | | 00 | | | 0020 | INX D | 13 | Выбор следующей ячейки памяти изменением регистра, содержащего адрес | | 0021 | LDAX D | 1A | Запись байта информации в аккумулятор из ячейки по адресу из DE | | 0022 | ANI 78h | E6 | Используем маску для отделения бит, важных для составления и анализа первого синдрома | | 0023 | | 78 | | | 0024 | JPO m3 | E2 | Если количество бит, выставленных в единицу - четное, то ошибки в анализируемых битах нет | | 0025 | | 29 | | | 0026 | | 00 | | | 0027 | MVI Н,4h | 26 | Выполняется только тогда, когда есть ошибка. Запись в Н 100b | | 0028 | | 04 | | | 0029 | m3:LDAX D | 1A | Запись байта информации в аккумулятор из ячейки по адресу из DE | | 002A | ANI 66h | E6 | Используем маску для отделения бит, важных для составления и анализа второго синдрома | | 002B | | 66 | | | 002C | JPO m4 | E2 | Если количество бит, выставленных в единицу - четное, то ошибки в анализируемых битах нет | | 002D | | 33 | | | 002E | | 00 | | | 002F | MVI A, 2h | 3E | Начало участка, выполняемого только тогда, когда есть ошибка. Запись в (А) 10b | | 0030 | | 02 | | | 0031 | ADD H | 84 | Прибавляем регистр H к (А) | | 0032 | MOV H,A | 67 | Заносим в регистр Н результат суммирования. Т.е. в Н оказывается х10b | | 0033 | m4:LDAX D | 1A | Запись байта информации в аккумулятор из ячейки по адресу из DE | | 0034 | ANI 55h | E6 | Используем маску для отделения бит, важных для составления и анализа третьего синдрома | | 0035 | | 55 | | | 0036 | JPO m5 | E2 | Если количество бит, выставленных в единицу - четное, то ошибки в анализируемых битах нет | | 0037 | | 3D | | | 0038 | | 00 | | | 0039 | MVI A, 1h | 3E | Начало участка, выполняемого только тогда, когда есть ошибка. Запись в (А) 1b | | 003A | | 01 | | | 003B | ADD H | 84 | Прибавляем регистр H к (А) | | 003C | MOV H,A | 67 | Заносим в регистр Н результат суммирования. Т.е. в Н оказывается хх1b | | 003D | m5:LDAX D | 1A | Запись байта информации в аккумулятор из ячейки по адресу из DE | | 003E | ANI FFh | E6 | Операция И по результатам которой производится проверка четности. Реализация проверки по контрольному биту | | 003F | | FF | | | 0040 | JPO m6 | E2 | Если количество бит, выставленных в единицу - четное, то ошибки в анализируемых битах нет | | 0041 | | 47 | | | 0042 | | 00 | | | 0043 | MVI A, 8h | 3E | Начало участка, выполняемого только тогда, когда есть ошибка. Запись в (А) 1000b | | 0044 | | 08 | | | 0045 | ADD H | 84 | Прибавляем регистр H к (А) | | 0046 | MOV H,A | 67 | Заносим в регистр Н результат суммирования. Т.е. в Н оказывается 1хххb | | 0047 | m6: MOV A, H | 7C | Заносим в регистр А результат предыдущих проверок. | | 0048 | CPI 0h | FE | Сравнение с нулем. В регистре Н может оказаться 0 только, если ошибки нет | | 0049 | | 00 | | | 004A | JZ m7 | CA | Если ошибки нет, то переход на анализ следующего байта | | 004B | | 1C | | | 004C | | 00 | | | 004D | CPI 8h | FE | Значение регистра Н от 1h до 7h говорит, что зафиксирована двойная ошибка | | 004E | | 08 | | | 004F | JP m8 | F2 | Если в ходе сравнения вычитанием получилось положительное число, значит двойной ошибки нет. Переход к исправлению одинарной. | | 0050 | | 5D | | | 0051 | | 00 | | | 0052 | MOV A,D | 7A | Заносим в регистр А старший байт адреса | | 0053 | ANI 0Fh | E6 | С помощью операции И обнуляем четыре старших бита | | 0054 | | 0F | | | 0055 | OUT 0h | D3 | Вывод содержимого А на индикаторы, предназначенные для отображения старшей части адреса | | 0056 | | 00 | | | 0057 | MOV A,E | 7B | Заносим в регистр А младший байт адреса | | 0058 | OUT 1h | D3 | Вывод содержимого А на индикаторы, предназначенные для отображения младшей части адреса | | 0059 | | 01 | | | 005A | JMP m2 | C3 | Переход на запрос продолжения обработки данных, поступивших в ОЗУ | | 005B | | 1A | | | 005C | | 00 | | | 005D | m8: CPI 8h | FE | Значение регистра Н 1000b говорит, что зафиксирована ошибка в контрольном бите | | 005E | | 08 | | | 005F | JNZ m9 | C2 | Если ошибка не в контрольном бите, то одинарная ошибка в одном из оставшихся семи битах. Переход к его исправлению | | 0060 | | 6D | | | 0061 | | 00 | | | 0062 | XRI 80h | EE | Исправление в контрольном бите | | 0063 | | 80 | | | 0064 | MOV A,D | 7A | Заносим в регистр А старший байт адреса | | 0065 | OUT 0h | D3 | Вывод на индикаторы старшего байта адреса | | 0066 | | 00 | | | 0067 | MOV A,E | 7B | Заносим в регистр А младший байт адреса | | 0068 | OUT 1h | D3 | Вывод на индикаторы младшего байта адреса | | 0069 | | 01 | | | 006A | JMP m2 | C3 | Переход на запрос продолжения обработки данных, поступивших в ОЗУ | | 006B | | 1A | | | 006C | | 00 | | | 006D | m9: SUI 8h | D6 | Вычитая 1000b, преобразуем содержимое регистра к номеру бита, где зафиксирована ошибка | | 006E | | 08 | | | 006F | MOV H,A | 67 | Содержимое аккумулятора переносим в Н | | 0070 | MVI A, 80h | 3E | Записываем в А байт, который будет использоваться для коррекции ошибки | | 0071 | | 80 | | | 0072 | m10: RAL | 17 | Сдвигаем единицу столько раз, сколько указано в Н | | 0073 | DCR H | 25 | | | 0074 | JNZ m10 | C2 | | | 0075 | | 72 | | | 0076 | | 00 | | | 0077 | MOV H,A | 67 | Переносим в Н получившуюся маску для исправления ошибки | | 0078 | LDAX D | 1A | Заносим в А подлежащий исправлению байт | | 0079 | XRA H | AC | С помощью операции XOR исправляем ошибку | | 007A | MOV A,D | 7A | Заносим в регистр А старший байт адреса | | 007B | OUT 0h | D3 | Вывод на индикаторы старшего байта адреса | | 007C | | 00 | | | 007D | MOV A,E | 7B | Заносим в регистр А младший байт адреса | | 007E | OUT 1h | D3 | Вывод на индикаторы младшего байта адреса | | 007F | | 01 | | | 0080 | JMP m2 | C3 | Переход на запрос продолжения обработки данных, поступивших в ОЗУ | | 0081 | | 1A | | | 0082 | | 00 | | | 0083 | m11: NOP | 00 | Конец программы | | 0084 | | | | | 0085 | | | | | 0086 | | | | | 0087 | | | | | 0088 | | | | | 0089 | | | | | 008A | | | | | 008B | | | | | 008C | | | | | 008D | | | | | 008E | | | | | 008F | | | | | 0090 | | | | | |
ЗАКЛЮЧЕНИЕ В ходе данной работы была спроектирована микропроцессорная система для контроля переданной информации использованием модифицированного кода Хемминга. Эта система собрана на базе микропроцессорного комплекта КР580, а также некоторого числа дополнительных элементов. Была разработана как аппаратная, так и программная часть системы. Так как система состоит из интегральных микросхем, то она отличается малыми размерами и высокой надежностью. СПИСОК СПРАВОЧНОЙ ЛИТЕРАТУРЫ 1. Абрайтис В.Б. Микропроцессоры и микропроцессорные комплекты интегральных микросхем: Справочник. В 2 т. / Абрайтис В.Б., Аверьянов Н.Н., Белоус А.И. и др.; Под ред. В.А. Шахнова. - М.: Радио и связь, 1988. - 368 с. 2. Горбунов В.Л. Справочное пособие по микропроцессорам и микроЭВМ / В.Л. Горбунов, Д.И. Панфилов, Д.Л. Преснухин. - М.: Высш. шк., 1988 . - 272 с.: ил. 3. Калабеков Б. А. Микропроцессоры и их применение в системах передачи и обработки сигналов: Учеб. Пособие для ВУЗов. -- М.: Радио и связь, 1988. 4. Угрюмов Е. Цифровая схемотехника / Е. Угрюмов - БХВ Санкт-Петербург, 2000 - 528с.
Страницы: 1, 2, 3
|
|