
Рис 3.7 Постоянное запоминающее устройство КР556РТ7
Микросхема представляет собой однократно программируемое постоянное запоминающее устройство ёмкостью 16 к (2к
8) с тремя состояниями на выходе. Предназначено для хранения программы работы устройства и констант.
Таблица 3.61. Таблица истинности
| Наличие перемычки в матрице | Состояние входа | Состояние выхода | Операция | ||
| ESE1 | ESE2 | ESE3 | |||
| Есть | 0 | 1 | 1 | 0 | Чтение |
| Независимо от наличия | Любая другая комбинация | Z | Хранение | ||
| Нет | 0 | 1 | 1 | 1 | Чтение |
Таблица 3.62. Назначение выводов микросхемы
| Вывод | Обозначение | Тип вывода | Функциональное назначение выводов |
| 1,2,3,4,5,6,7,8, 21,22,23 | A0,A1,A2,A3,A4, A5,A6,A7,A8, A9,A10 | Входы | Адресные входы |
| 9,10,11,13,14, 15,16,17, | D0,D1,D2,D3,D4, D5,D6,D7 | Выходы | Выходы данных |
| 12 | GND | - | Общий |
| 18,19,20 | ESE3, ESE2,
| Входы | Входы разрешения выборки |
| 24 | Ucc | - | Напряжение питания |
Оперативное запоминающее устройство КР537РУ8А

Рис 3.8 Оперативное запоминающее устройство КР537РУ8А
Микросхема представляет собой статическое оперативное запоминающее устройство ёмкостью 16 кбит (2к
8). Предназначено для хранения стека и переменных величин.
Таблица 3.71. Таблица истинности
| Вход | Вход/выход | Режим работы | ||
| CS1 | CS2 | WR/RD | ||
| 1 | 1 | X | Третье состояние | Хранение |
| 0 | 1 | X | Третье состояние | Хранение |
| 1 | 0 | X | Третье состояние | Хранение |
| 0 | 0 | 1 | Выход | Считывание |
| 0 | 0 | 0 | Вход | Запись |
Таблица 3.72. Назначение выводов микросхемы
| Вывод | Обозначение | Тип вывода | Функциональное назначение выводов |
| 1-8,19,22,23 | A7,A6,A5,A4,A3, A2,A1,A0,A10, A9,A8 | Входы | Адресные входы |
| 9-17 | D0,D1,D2,D3,D4, D5,D6,D7 | Выходы | Выходы данных |
| 12 | GND | - | Общий |
| 18,20 |
| Входы | Входы выборки кристалла |
| 21 | WR/WD | Входы | Вход разрешения записи считывания |
| 24 | Ucc | - | Напряжение питаания |
Дешифратор возбуждения одноразрядного семисегментного цифрового светодиодного индикатора АЛС324А

Рис 3.10 Дешифратор возбуждения одноразрядного семисегментного цифрового светодиодного индикатора АЛС324А
Микросхема состоит из 7 узлов, формирующих управляющий сигнал для одного из семи сегментов индикатора.
Таблица 3.81. Назначение выводов микросхемы
| Выход | Обозначение | Тип вывода | Функциональное назначение выводов |
| 2, 3, 4, 5 | A2, A1,A3, A0 | Входы | Входы BCD чисел |
| 6 | DF | Вход | |
| 8 | GND | - | Общий |
| 9-14,15 | a, b, c, d, e, f,g | Выходы | Семисегментные выходы “a”, “b”, “c”, “d”, “e” “f”, “g” |
| 1 | DF0 | Выход | |
| 16 | Ucc | Напряжение питания |
Таблица 3.82. Таблица истинности
| Входы | Выходы | |||||||||
| 5 | 3 | 2 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
| 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
| 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 |
| 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
| 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Индикатор цифровой АЛС324А
Рис.3.11 Индикатор цифровой АЛС324А.
Выводит на экран цифры в зависимости от сигналов на входах в семисегментном коде. Состоит из семи светодиодов. Единица, пришедшая на вход, приводит к свечению соответствующего сегмента.
КАРТА ПАМЯТИ
| Адрес | Назначение адреса |
| 0000h – 07D0h | ПЗУ |
| 0000h – 0083 | область ПЗУ, занимаемая программой |
| В000h – В7D0h | ОЗУ |
ПРИНЦИП РАБОТЫ ПРОГРАММЫ
Принцип работы программы основан на том, что с использованием модифицированного кода Хемминга можно проводить проверку считанной информации на наличие ошибок. Существует возможность исправить однократные ошибки и обнаружить двойные. Программа управляет считыванием информации с порта, затем заносит их в оперативную память. По нажатию кнопки начинается проверка содержимого на наличие ошибок. На основе маскирования определенных бит и контроля четности формируется четырехбитная характеристическая комбинация, каждому значению которой соответствует свое решение. Таких решений в результате получается четыре:
1. Нет ошибки. Программа просто начинает проверку следующего байта данных, занесенных в ОЗУ.
2. Есть двойная ошибка, тогда выводится сообщение о двойной ошибке в виде адреса, где она зафиксирована, но только с тем различием, что у выводимого адреса будут обнулены четыре старших бита. То есть такое сообщение об ошибке будет иметь вид 0ххх. Программа ждет нажатия кнопки для дальнейшей работы.
3. Ошибка в контрольном бите. Исправляется с помощью заданной маски. Номер ячейки выводится на индикаторы. Программа ждет нажатия кнопки для дальнейшей работы.
3. Есть одиночная ошибка. Ее исправление начинается с формирования маски, в которой все биты будут установлены в ноль и лишь один в единицу. Как раз тот, что должен будет быть исправлен. Далее, с помощью операции XOR (Исключающее ИЛИ) над содержимым ячейки памяти и маской ошибка будет исправлена. Номер ячейки, в которой была ошибка, выводится на индикаторы. Программа ждет нажатия кнопки для дальнейшей работы.
ЛИСТИНГ ПРОГРАММЫ
| Адрес | Мнемонический код | Код | Комментарии |
| 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, а также некоторого числа дополнительных элементов. Была разработана как аппаратная, так и программная часть системы. Так как система состоит из интегральных микросхем, то она отличается малыми размерами и высокой надежностью.
Дата: 2019-12-22, просмотров: 320.