Главная страница
Навигация по странице:

  • Рассмотрим случай, когда была ошибка при передаче кода.

  • Рассмотрим случай, когда не было ошибки при передаче кода.

  • Рассмотрим случай, когда была одиночная ошибка при передаче кода.

  • Рассмотрим случай, когда была двойная ошибка при передаче кода.

  • Практическая работа №69. Элементарные приемы программирования (ветвления и циклы). Цель работы

  • Методические указания для практических занятий по дисциплине мдк. 02. 01


    Скачать 7.37 Mb.
    НазваниеМетодические указания для практических занятий по дисциплине мдк. 02. 01
    Дата09.09.2022
    Размер7.37 Mb.
    Формат файлаpdf
    Имя файлаMetod_Mikroprocessornye-sistemy_PZ_09.02.01_2020.pdf
    ТипМетодические указания
    #669073
    страница37 из 43
    1   ...   33   34   35   36   37   38   39   40   ...   43
    Рассмотрим случай, когда не было ошибки при передаче кода.
    Тогда точно такой же код принял приемник. Теперь приемник проверяет правильность передачи кода, вычисляя следующие выражения:
    С
    11
    =С
    1
    М
    1
    М
    2
    М
    4
    =0
    ⊕1⊕0⊕1=0;
    С
    12
    =С
    2
    М
    1
    М
    3
    М
    4
    =1
    ⊕1⊕1⊕1=0;
    С
    13
    =С
    3
    М
    2
    М
    3
    М
    4
    =0
    ⊕0⊕1⊕1=0.
    Поскольку значение, составленное из контрольных битов, равно нулю, ошибки нет, и код передается от приемника далее.
    Рассмотрим случай, когда была ошибка при передаче кода.
    Пусть ошибка произошла в третьем бите, т.е. принят код:
    M
    4
    M
    3
    M
    2
    C
    3
    M
    1
    C
    2
    C
    1

    307 4
    3 2
    3 1
    2 1
    1 1
    0 0
    0
    1 0
    Теперь приемник проверяет правильность передачи кода, вычисляя следующие выражения:
    С
    11
    =С
    1
    М
    1
    М
    2
    М
    4
    =0
    ⊕0⊕0⊕1=1;
    С
    12
    =С
    2
    М
    1
    М
    3
    М
    4
    =1
    ⊕0⊕1⊕1=1;
    С
    13
    =С
    3
    М
    2
    М
    3
    М
    4
    =0
    ⊕0⊕1⊕1=0.
    Поскольку, значение, составленное из контрольных разрядов, равно 011 2
    , ошибка в бите
    № 3. Приемник меняет значение этого бита на противоположное.
    Теперь рассмотрим код (11,7).
    Пример. В канал связи нужно передать следующий блок информации: 1101010 2
    Передатчик формирует код Хэмминга:
    M
    7
    M
    6
    M
    5
    C
    4
    M
    4
    M
    3
    M
    2
    C
    3
    M
    1
    C
    2
    C
    1 1
    1 0
    *
    1 0
    1
    *
    0
    *
    *
    С
    1
    =М
    1
    М
    2
    М
    4
    М
    5
    М
    7
    =0
    ⊕1⊕1⊕0⊕1=1;
    С
    2
    =М
    1
    М
    3
    М
    4
    М
    6
    М
    7
    =0
    ⊕0⊕1⊕1⊕1=1;
    С
    3
    =М
    2
    М
    3
    М
    4
    =1
    ⊕0⊕1=0;
    С
    4
    =М
    5
    М
    6
    М
    7
    =0
    ⊕1⊕1=0, тогда код, передаваемый в канал, будет:
    M
    7
    M
    6
    M
    5
    C
    4
    M
    4
    M
    3
    M
    2
    C
    3
    M
    1
    C
    2
    C
    1 1
    1 0
    0 1
    0 1
    0 0
    1 1
    Рассмотрим случай, когда не было ошибки при передаче кода.
    Тогда точно такой же код принял приемник. Теперь приемник проверяет правильность передачи кода, вычисляя следующие выражения:
    С
    11
    =С
    1
    М
    1
    М
    2
    М
    4
    М
    5
    М
    7
    =1
    ⊕0⊕1⊕1⊕0⊕1=0;
    С
    12
    =С
    2
    М
    1
    М
    3
    М
    4
    М
    6
    М
    7
    =1
    ⊕0⊕0⊕1⊕1⊕1=0;
    С
    13
    =С
    3
    М
    2
    М
    3
    М
    4
    =0
    ⊕1⊕0⊕1=0;
    С
    14
    =С
    4
    М
    5
    М
    6
    М
    7
    =0
    ⊕0⊕1⊕1=0.
    Поскольку значение, составленное из контрольных битов, равно нулю, ошибки нет, и код передается от приемника далее.
    Рассмотрим случай, когда была ошибка при передаче кода.
    Пусть ошибка произошла во втором бите, т.е. принят код:
    M
    7
    M
    6
    M
    5
    C
    4
    M
    4
    M
    3
    M
    2
    C
    3
    M
    1
    C
    2
    C
    1 1
    1 0
    0 1
    0 1
    0 0
    0
    1
    Теперь приемник проверяет правильность передачи кода, вычисляя следующие выражения:
    С
    11
    =С
    1
    М
    1
    М
    2
    М
    4
    М
    5
    М
    7
    =1
    ⊕0⊕1⊕1⊕0⊕1=0;
    С
    12
    =С
    2
    М
    1
    М
    3
    М
    4
    М
    6
    М
    7
    =0
    ⊕0⊕0⊕1⊕1⊕1=1;
    С
    13
    =С
    3
    М
    2
    М
    3
    М
    4
    =0
    ⊕1⊕0⊕1=0;
    С
    14
    =С
    4
    М
    5
    М
    6
    М
    7
    =0
    ⊕0⊕1⊕1=0.
    Поскольку значение, составленное из контрольных битов, равно 0010 2
    , ошибка во втором бите. Приемник меняет значение этого бита на противоположное.
    Код Хэмминга является равномерно защищенным, исправляет ошибки как в информационных, так и в контрольных битах. С его помощью возможно исправление одиночной и обнаружение двойной ошибки. Для того чтобы обнаружить двойную ошибку, в код Хэмминга

    308
    вводят дополнительный контрольный бит E
    0
    . Значение E
    0
    вычисляется как сумма по модулю 2 всех разрядов кода Хэмминга, т.е. он дополняет код Хэмминга по четности. На стороне приемника, кроме получения контрольных разрядов, которые определяют позицию с ошибкой, вычисляется контрольный разряд E
    10
    :
    E
    10
    =Е
    0
    ⊕<сложенные по модулю 2 все остальные биты принятого кода>.
    Если E
    10
    =0, то ошибок нет. Если значение, полученное из контрольных разрядов, не равно
    0 и E
    10
    =1, то имеет место одиночная ошибка, позиция которой определяется значением контрольных разрядов. Если значение С≠0 и E
    10
    =0 , то имеет место двойная ошибка.
    Рассмотрим пример для кода, исправляющего одиночную ошибку и обнаруживающего двойную.
    Для кода (11,7) формат блока информации:
    M
    7
    M
    6
    M
    5
    C
    4
    M
    4
    M
    3
    M
    2
    C
    3
    M
    1
    C
    2
    C
    1
    Е
    0
    Пример. В канал связи нужно передать следующий блок информации: 1101010 2
    Передатчик формирует код Хэмминга:
    M
    7
    M
    6
    M
    5
    C
    4
    M
    4
    M
    3
    M
    2
    C
    3
    M
    1
    C
    2
    C
    1
    Е
    0 1
    1 0
    *
    1 0
    1
    *
    0
    *
    *
    *
    С
    1
    =М
    1
    М
    2
    М
    4
    М
    5
    М
    7
    =0
    ⊕1⊕1⊕0⊕1=1;
    С
    2
    =М
    1
    М
    3
    М
    4
    М
    6
    М
    7
    =0
    ⊕0⊕1⊕1⊕1=1;
    С
    3
    =М
    2
    М
    3
    М
    4
    =1
    ⊕0⊕1=0;
    С
    4
    =М
    5
    М
    6
    М
    7
    =0
    ⊕1⊕1=0,
    Е
    0
    =С
    1
    С
    2
    М
    1
    С
    3
    М
    2
    М
    3
    М
    4
    С
    4
    М
    5
    М
    6
    М
    7
    =1
    ⊕1⊕0⊕0⊕1⊕0⊕⊕1⊕0⊕0⊕
    1
    ⊕1=0, тогда код, передаваемый в канал, будет:
    M
    7
    M
    6
    M
    5
    C
    4
    M
    4
    M
    3
    M
    2
    C
    3
    M
    1
    C
    2
    C
    1
    Е
    0 1
    1 0
    0 1
    0 1
    0 0
    1 1
    0
    Рассмотрим случай, когда не было ошибки при передаче кода.
    Тогда точно такой же код принял приемник. Теперь приемник проверяет правильность передачи кода, вычисляя следующие выражения:
    С
    11
    =С
    1
    М
    1
    М
    2
    М
    4
    М
    5
    М
    7
    =1
    ⊕0⊕1⊕1⊕0⊕1=0;
    С
    12
    =С
    2
    М
    1
    М
    3
    М
    4
    М
    6
    М
    7
    =1
    ⊕0⊕0⊕1⊕1⊕1=0;
    С
    13
    =С
    3
    М
    2
    М
    3
    М
    4
    =0
    ⊕1⊕0⊕1=0;
    С
    14
    =С
    4
    М
    5
    М
    6
    М
    7
    =0
    ⊕0⊕1⊕1=0,
    Е
    10
    = Е
    0
    С
    1
    С
    2
    М
    1
    С
    3
    М
    2
    М
    3
    М
    4
    С
    4
    М
    5
    М
    6
    М
    7
    =
    =0
    ⊕1⊕1⊕0⊕0⊕1⊕0⊕1⊕0⊕0⊕1⊕1=0.
    Поскольку значение, составленное из контрольных битов, равно 0, и Е
    10
    =0, ошибки нет, и код передается от приемника далее.
    Рассмотрим случай, когда была одиночная ошибка при передаче кода.
    Пусть ошибка произошла во втором бите (не считая Е
    0
    , т.е. в С
    2
    ) и принят код:
    M
    7
    M
    6
    M
    5
    C
    4
    M
    4
    M
    3
    M
    2
    C
    3
    M
    1
    C
    2
    C
    1
    Е
    0 1
    1 0
    0 1
    0 1
    0 0
    0
    1 0
    Теперь приемник проверяет правильность передачи кода, вычисляя следующие выражения:
    С
    11
    =С
    1
    М
    1
    М
    2
    М
    4
    М
    5
    М
    7
    =1
    ⊕0⊕1⊕1⊕0⊕1=0;
    С
    12
    =С
    2
    М
    1
    М
    3
    М
    4
    М
    6
    М
    7
    =0
    ⊕0⊕0⊕1⊕1⊕1=1;
    С
    13
    =С
    3
    М
    2
    М
    3
    М
    4
    =0
    ⊕1⊕0⊕1=0;
    С
    14
    =С
    4
    М
    5
    М
    6
    М
    7
    =0
    ⊕0⊕1⊕1=0,
    Е
    10
    = Е
    0
    С
    1
    С
    2
    М
    1
    С
    3
    М
    2
    М
    3
    М
    4
    С
    4
    М
    5
    М
    6
    М
    7
    =

    309
    =0
    ⊕1⊕0⊕0⊕0⊕1⊕0⊕1⊕0⊕0⊕1⊕1=1.
    Поскольку значение Е
    10
    =1 и значение, составленное из контрольных разрядов, равно
    0010 2
    , то ошибка во втором бите. Приемник меняет значение этого бита на противоположное.
    Рассмотрим случай, когда была двойная ошибка при передаче кода.
    Пусть ошибка произошла во втором (т.е. в С
    2
    ) и в пятом битах (т.е. М
    2
    ) и принят код:
    M
    7
    M
    6
    M
    5
    C
    4
    M
    4
    M
    3
    M
    2
    C
    3
    M
    1
    C
    2
    C
    1
    Е
    0 1
    1 0
    0 1
    0
    0
    0 0
    0
    1 0
    Теперь приемник проверяет правильность передачи кода, вычисляя следующие выражения:
    С
    11
    =С
    1
    М
    1
    М
    2
    М
    4
    М
    5
    М
    7
    =1
    ⊕0⊕0⊕1⊕0⊕1=1;
    С
    12
    =С
    2
    М
    1
    М
    3
    М
    4
    М
    6
    М
    7
    =0
    ⊕0⊕0⊕1⊕1⊕1=1;
    С
    13
    =С
    3
    М
    2
    М
    3
    М
    4
    =0
    ⊕0⊕0⊕1=1;
    С
    14
    =С
    4
    М
    5
    М
    6
    М
    7
    =0
    ⊕0⊕1⊕1=0,
    Е
    10
    = Е
    0
    С
    1
    С
    2
    М
    1
    С
    3
    М
    2
    М
    3
    М
    4
    С
    4
    М
    5
    М
    6
    М
    7
    =
    =0
    ⊕1⊕0⊕0⊕0⊕0⊕0⊕1⊕0⊕0⊕1⊕1=0.
    Поскольку значение Е
    10
    =0 и значение, составленное из контрольных разрядов, равно
    0111 2
    ≠0, то произошла двойная ошибка. Приемник не передает код далее, а запрашивает от источника повторную передачу этого блока информации.
    Практическая работа №69. Элементарные приемы программирования (ветвления и
    циклы).
    Цель работы: изучение принципов реализации типовых алгоритмических структур на примере ветвлений и циклических программ.
    Основные сведения.
    Любая процедура управления или обработки данных представляет собой совокупность некоторых алгоритмических структур, с помощью которых выполняются требуемые операции.
    Наиболее распространёнными алгоритмическими структурами являются ветвления (branching) и циклы (loop). Ветвления используются для выполнения различных частей программы
    (разделения ветвей алгоритма) в зависимости от некоторых условий. В циклах одна и та же операция выполняется над содержимым нескольких последовательно расположенных в памяти ячеек или элементов данных. Использование циклических программ целесообразно при обработке массивов, таблиц и подобных по структуре данных. Числом повторений цикла управляют счётчики, а обрабатываемый при данном проходе цикла элемент определяется с помощью индекса или указателя.
    В циклической программе можно выделить четыре основных блока.
    1. Блок инициализации (от лат. initium – начало), в котором производится присвоение начальных значений переменным, счётчикам, индексам и указателям. Указатели представляют собой адреса данных в памяти.
    2. Блок обработки, в котором выполняются требуемые вычисления, т. е. одинаковые повторяющиеся действия над различными последовательно расположенными в памяти данными.
    3. Блок управления циклом, в котором изменяются значения счётчиков и индексов
    (указателей) перед выполнением следующей повторяющейся операции, а также производится проверка условия выхода из цикла.
    4. Заключительный блок, в котором производится сохранение полученных результатов.
    Блоки 2 и 3 составляют тело цикла (loop body). Для повышения быстродействия и сокращения размера циклических программ следует разгружать тело цикла от операций, которые могут быть выполнены за его пределами.
    Для организации циклических программ, а также ветвлений в программах используются команды безусловных и условных переходов. Кроме того, для построения циклов могут

    310
    применяться специальные команды циклов, выполняющие несколько действий одновременно (в системе команд AVR- микроконтроллеров отсутствуют).
    Команды безусловных переходов JMP, RJMP, IJMP и EIJMP передают управление по указанному в команде адресу памяти программ.
    Команда JMP (Jump – переход) позволяет передавать управление внутри всего объёма памяти программ.
    Команда RJMP (Relative Jump – относительный переход) обеспечивает переход в пределах
    ±2К слов (±4К байт) относительно текущего содержимого программного счётчика.
    По команде IJMP (Indirect Jump – косвенный переход) выполняется косвенный переход по адресу, указанному регистром Z; максимальное смещение составляет 64К слов (128К байт).
    Команда EIJMP (Extended Indirect Jump – расширенный косвенный переход) обеспечивает косвенный переход по всему объёму памяти программ; для расширения программного счётчика используется регистр EIND.
    При выполнении команд безусловных переходов в программный счётчик загружается адрес ячейки памяти программ, на которую передаётся управление.
    Команды условных переходов передают управление по указанному адресу памяти программ в случае выполнения некоторых условий.
    Команды BRхх (Branch if … – перейти, если …) выполняют переход на расстояние –
    64…+63 слова относительно текущего содержимого программного счётчика по результатам проверки разрядов регистра состояния SREG (кодов или флагов условий).
    Регистр состояния SREG находится в адресном пространстве регистров ввода-вывода.
    Коды условий (C, Z, N, V, S, H) формируются в регистре состояния при выполнении арифметических, логических команд и команд работы с битами и представляют собой признаки результата операции.
    Разряд С (carry – перенос) устанавливается, если при выполнении команды был перенос из старшего разряда результата.
    Разряд Z (zero – нуль) устанавливается, если результат выполнения команды равен нулю.
    Разряд N (negative – отрицательный результат) устанавливается, если старший значащий разряд результата равен 1 (правильно показывает знак результата, если не было переполнения разрядной сетки числа со знаком).
    Разряд V (overflow – переполнение) устанавливается, если при выполнении команды произошло переполнение разрядной сетки числа со знаком.
    Разряд S = N
    ⊕ V (sign – знак) правильно показывает знак результата при переполнении разрядной сетки числа со знаком.
    Разряд H (half carry – полуперенос) устанавливается, если при выполнении команды был перенос из третьего разряда результата.
    Для организации ветвлений при сравнении операндов команды BRхх ис- пользуются совместно с командами CP (Compare) сравнения содержимого двух РОН, CPC (Compare with
    Carry) сравнения с учётом признака переноса и CPI (Compare with Immediate) сравнения с константой. Команды ветвления BRхх отличаются для операндов без знака и со знаком. Числа без знака представляются прямым кодом, числа со знаком – дополнительным кодом.
    Команды условных переходов, используемые для ветвлений при сравнении операндов, сведены в следующей таблице.

    311
    К командам условных переходов также относится команда CPSE (Compare and Skip if
    Equal – сравнить и пропустить, если равно), которая сравнивает содержимое двух РОН и пропускает следующую за ней команду, если содержимое одинаково.
    Команды SBRS, SBRC, SBIS, SBIC (Skip if Bit in Register [I/O Register] is Set [Cleared] – пропустить, если разряд в регистре общего назначения [ввода- вывода] установлен [сброшен]) пропускают следующую команду в случае выполнения соответствующего условия. При обработке массивов в циклических программах эффективно использование косвенной адресации памяти данных с предекрементом и постинкрементом, а также косвенной адресации памяти дан- ных со смещением. На рисунке ниже приведён фрагмент программы, в которой число 100 заносится в ячейки массива из пяти байт. Для проверки условия выхода из цикла и передачи управления используется команда BRNE. Предел повторений цикла равен 5, шаг равен –1, параметр цикла (счётчик) содержится в регистре R16.
    Практическая часть.
    1. Дополнить фрагмент программы необходимыми директивами. Изменить число, заносимое в ячейки массива, в соответствии с заданным вариантом. Выполнить программу в пошаговом режиме с помощью симулятора-отладчика.
    2. Произвести изменения в программе: заменить команды ADD (сложение) и SUB
    (вычитание) на INC (инкремент) и DEC (декремент) соответственно.

    312 3. В последнем варианте программы исключить команду INC за счёт использования косвенной адресации памяти данных с постинкрементом.
    4. Изменить порядок подсчёта числа проходов цикла, задав изменение параметра цикла
    (счётчика) не с предела, а с нуля.
    5. Составить программу пересылки массива из памяти программ в память данных. Массив в памяти программ задать в директиве .db; значения элементов массива взять из таблицы
    (Массив I) в соответствии с заданным вариантом.
    6. Составить программу суммирования элементов массива. Значения элементов массива задать аналогично п. 5.
    7. Составить программу поэлементного сложения двух массивов. Значения элементов массивов взять из таблицы (Массив I и Массив II) в соответствии с заданным вариантом.
    8. Составить программу слияния двух массивов, где в результате попарного сравнения двух элементов из разных массивов образуется новый массив из наибольших элементов.
    Значения элементов массивов взять аналогично п. 7.
    9. Оформить отчет. Отчёт должен содержать: титульный лист с указанием номера и названия работы, номера группы и фамилий выполнивших работу; цель работы; листинги трансляции программ в соответствии с заданием.
    1   ...   33   34   35   36   37   38   39   40   ...   43


    написать администратору сайта