Реализация устройства контроля переданной информации с использованием модифицированного кода Хемминга

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?. Программа ждет нажатия кнопки для дальнейшей работы.

3. Ошибка в контрольном бите. Исправляется с помощью заданной маски. Номер ячейки выводится на индикаторы. Программа ждет нажатия кнопки для дальнейшей работы.

3. Есть одиночная ошибка. Ее исправление начинается с формирования маски, в которой все биты будут установлены в ноль и лишь один в единицу. Как раз тот, что должен будет быть исправлен. Далее, с помощью операции XOR (Исключающее ИЛИ) над содержимым ячейки памяти и маской ошибка будет исправлена. Номер ячейки, в которой была ошибка, выводится на индикаторы. Программа ждет нажатия кнопки для дальнейшей работы.

 

6. ЛИСТИНГ ПРОГРАММЫ

 

АдресМнемонический кодКодКомментарии0000MVI A, 89h3Eзаносим упр. слово в аккумулятор0001890002OUT 3hD3отправляем 89 (10001001) в РУС0003030004LXI D,B000h11Задаем начальное значение регистровой паре, содержащей адрес ячейки памяти0005000006B00007LXI B,7D0h01Задаем начальное значение регистровой паре, содержащей счетчик0008D0000907000AIN 2hDBПрием сигнала от кнопки для начала записи последовательности байт в ОЗУ000B02000Cm1: IN A5hDBНачало цикла, записывающего в ОЗУ принимаемую с порта информацию000DA5000ESTAX D12Запись содержимого аккумулятора в ячейку памяти, адрес которой хранится в DE000FINX D13Выбираем адрес следующей ячейки0010DCX B0BСчетчик записанных байт уменьшаем0011JNZ m1C2Если записаны не все 2000 байт, то переходим на следующий оборот цикла00120C0013000014LXI D, AFFFh11Задаем начальное значение регистровой паре, содержащей адрес ячейки памяти0015FF0016AF0017LXI B,7D1h01Задаем начальное значение регистровой паре, содержащей счетчик0018D1001907001Am2: IN 2hDBПрием сигнала от кнопки для начала проверки001B02001Cm7: DCX B0BУменьшаем регистр-счетчик001DJZ m11CAЕсли обработаны все занесенные в память байты, то переход на завершение программы001E83001F000020INX D13Выбор следующей ячейки памяти изменением регистра, содержащего адрес0021LDAX D1AЗапись байта информации в аккумулятор из ячейки по адресу из DE0022ANI 78hE6Используем маску для отделения бит, важных для составления и анализа первого синдрома0023780024JPO m3E2Если количество бит, выставленных в единицу четное, то ошибки в анализируемых битах нет0025290026000027MVI Н,4h26Выполняется только тогда, когда есть ошибка. Запись в Н 100b0028040029m3:LDAX D1AЗапись байта информации в аккумулятор из ячейки по адресу из DE002AANI 66hE6Используем маску для отделения бит, важных для составления и анализа второго синдрома002B66002CJPO m4E2Если количество бит, выставленных в единицу четное, то ошибки в анализируемых битах нет002D33002E00002FMVI A, 2h3EНачало участка, выполняемого только тогда, когда есть ошибка. Запись в (А) 10b0030020031ADD H84Прибавляем регистр H к (А)0032MOV H,A67Заносим в регистр Н результат суммирования. Т.е. в Н оказывается х10b0033m4:LDAX D1AЗапись байта информации в аккумулятор из ячейки по адресу из DE0034ANI 55hE6Используем маску для отделения бит, важных для составления и анализа третьего синдрома0035550036JPO m5E2Если количество бит, выставленных в единицу четное, то ошибки в анализируемых битах нет00373D0038000039MVI A, 1h3EНачало участка, выполняемого только тогда, когда есть ошибка. Запись в (А) 1b003A01003BADD H84Прибавляем регистр H к (А)003CMOV H,A67Заносим в регистр Н результат суммирования. Т.е. в Н оказывается хх1b003Dm5:LDAX D1AЗапись байта информации в аккумулятор из ячейки по адресу из DE003EANI FFhE6Операция И по результатам которой производится проверка четности. Реализация проверки по контрольному биту003FFF0040JPO m6E2Если количество бит, выставленных в единицу четное, то ошибки в анализируемых битах нет0041470042000043MVI A, 8h3EНачало участка, выполняемого только тогда, когда есть ошибка. Запись в (А) 1000b0044080045ADD H84Прибавляем регистр H к (А)0046MOV H,A67Заносим в регистр Н результат суммирования. Т.е. в Н оказывается 1хххb0047m6: MOV A, H7CЗаносим в регистр А результат предыдущих проверок.0048CPI 0hFEСравнение с нулем. В регистре Н может оказаться 0 только, если ошибки нет004900004AJZ m7CAЕсли ошибки нет, то переход на анализ следующего байта004B1C004C00004DCPI 8hFEЗначение регистра Н от 1h до 7h говорит, что зафиксирована двойная ошибка004E08004FJP m8F2Если в ходе сравнения вычитанием получилось положительное число, значит двойной ошибки нет. Переход к исправлению одинарной.00505D0051000052MOV A,D7AЗаносим в регистр А старший байт адреса0053ANI 0FhE6С помощью операции И обнуляем четыре старших бита00540F0055OUT 0hD3Вывод содержимого А на индикаторы, предназначенные для отображения старшей части адреса0056000057MOV A,E7BЗаносим в регистр А младший байт адреса0058OUT 1hD3Вывод содержимого А на индикаторы, предназначенные для отображения младшей части адреса005901005AJMP m2C3Переход на запрос продолжения обработки данных, поступивших в ОЗУ005B1A005C00005Dm8: CPI 8hFEЗначение регистра Н 1000b говорит, что зафиксирована ошибка в контрольном бите005E08005FJNZ m9C2Если ошибка не в контрольном бите, то одинарная ошибка в одном из оставшихся семи битах. Переход к его исправлению00606D0061000062XRI 80hEEИсправление в контрольном бите0063800064MOV A,D7AЗаносим в регистр А старший байт адреса0065OUT 0hD3Вывод на индикаторы старшего байта адреса0066000067MOV A,E7BЗаносим в регистр А младший байт адреса0068OUT 1hD3Вывод на индикаторы младшего байта адреса006901006AJMP m2C3Переход на запрос продолжения обработки данных, поступивших в ОЗУ006B1A006C00006Dm9: SUI 8hD6Вычитая 1000b, преобразуем содержимое регистра к номеру бита, где зафиксирована ошибка006E08006FMOV H,A67Содержимое аккумулятора переносим в Н0070MVI A, 80h3EЗаписываем в А байт, который будет использоваться для коррекции ошибки0071800072m10: RAL17Сдвигаем единицу столько раз, сколько указано в Н0073DCR H250074JNZ m10C20075720076000077MOV H,A67Переносим в Н получившуюся маску для исправления ошибки0078LDAX D1AЗаносим в А подлежащий исправлению байт0079XRA HACС помощью операции XOR исправляем ошибку007AMOV A,D7AЗаносим в регистр А старший байт адреса007BOUT 0hD3Вывод на индикаторы стар