курсовой проект / PIC16F84-- / РАЗДЕЛ 5
.doc
5 РАЗРАБОТКА УПРАВЛЯЮЩЕЙ ПРОГРАММЫ
Разработанная блок-схема алгоритма управляющей программы работы кабельного пробника представлена в приложении А.
После запуска программы и инициализации регистров обнуляется регистр десятков. Его значение переписывается в порт А для коммутации мультиплексоров. Далее разрешаются прерывания, и по двоичному числу десятков находится его десятичное значение, которое прибавляется к константе первого выхода. Константа (К) выхода определяется его номером: у первого она равна 1, у второго — 2, у десятого — 10. При нулевом значении десятков на каждом выходе появляется число импульсов, равное номеру выхода.
Далее программа проверяет регистр К на наличие нуля. Если его нет, из регистра вычитается единица, что сопровождается переключением выхода в единичное состояние. Затем выдерживается пауза продолжительностью 24 мкс, и выход переводится в нулевое состояние, которое длится 30 мкс (т. е. период колебаний равен 54 мкс). После этого программа проверяет регистр на ноль. Если регистр пустой, она переходит в режим ожидания прерывания, а если его значение не равно нулю, весь цикл формирования импульса на выходе повторяется. Таким образом, на выходе формируется число импульсов, которое было записано в регистр К.
После инициализации регистров включаются предделитель с коэффициентом деления 32 и таймер с коэффициентом деления, равным 137(256- 119). При частоте кварцевого резонатора 4 МГц прерывание по переполнению таймера должно происходить примерно через 4,38 мс (32 137 = 4384 мкс), но возврат из прерывания выполняется командой без разрешения прерывания. К этому времени прибавляется время циклов до разрешения прерывания и, собственно, время на само выполнение прерывания (общая средняя продолжительность этого времени равна 16 циклам). Кроме этого, предделитель обнуляется при каждой установке таймера, поэтому пауза между прерываниями составляет 4,4 мс. Как не трудно подсчитать, 80 периодов колебаний будут длиться 4,32 мс (54 мкс х 80 = 4320 мкс), т. е. это время укладывается в промежуток между прерываниями.
После переполнения таймера выполняется обычная процедура сохранения значений регистров при прерывании и прибавляется (возможно и вычитание) единица в счетчик прерываний. Значения этого счетчика не используются программой, а сам счетчик необходим для выполнения прерывания. Но его удобно использовать при отладке программы. После восстановления значений регистров разрешается прерывание для формирования импульсов со следующего выхода.
После того как сформированы импульсы на десятом выходе, регистр десятков увеличивается на единицу и весь цикл повторяется с команды записи двоичного кода десятков в порт А. В новом цикле число сформированных импульсов на каждом выходе увеличивается на десять. Когда значение десятков станет равно восьми, цикл формирования импульсов начнется с обнуления регистра десятков. Таким образом, максимальное значение десятков равно семи, а максимальное число импульсов будет на десятом выходе (10 + 70 = 80). Все 80 циклов прерываний длятся 0,352 с (4,4 мс х 80). Это время определяет гарантированную длительность паузы между выдачей импульсов на каждом выходе. Для одиночного импульса на первом выходе длительность паузы будет увеличена почти на время, равное времени между прерываниями, а для 80 импульсов на десятом выходе пауза между импульсами будет равна 0,352 с. Это необходимо отметить, чтобы лучше понять работу приемной части пробника.