36 о конфигурации режимов тактирования. I²S



бет4/6
Дата20.05.2022
өлшемі0.52 Mb.
#458437
1   2   3   4   5   6
Микро 36-44

40 Переменная FID_Count. 41 Переменная FID_LastMode

БЫРГЕ,
Для работы программе необходимо две переменных. Переменная FID_Count занимает две ячейки памяти (2 байта) и хранит относительный угол поворота вала ФИД. Изначально она равна 32768 (0х8000). Тогда если величина FID_Count меньше 0х8000, то вал повернулся против часовой стрелки. А если больше – по часовой стрелке. Перемещение вала может составлять ±32768 шагов или ±8 оборотов, так как на один оборот вала ФИД приходится 4096 прерываний по изменению состояния выходных линий A, B. Переменная FID_LastMode используется для хранения предыдущего относительного состояния выходных линий (0, 1, 2, 3). Она необходима для определения направления поворота вала.



Основной частью программы является процедура обработки прерывания по изменению состояния выходных линий ФИД. Программа начинается с объявления таблицы векторов прерываний. Причем внешние прерывания INT0 и INT1 имеют одну подпрограмму обработки FID_IRQ. Она определяет направление поворота вала и соответственно инкрементирует или декрементирует счетчик FID_Count.


Программа начинается с вызова процедур инициализации FID_INIT, FID_CountClear, FID_CountEnable. Рассмотрим более подробно их назначение и структуру.

Процедура FID_INIT настраивает порты INT0(PD0), INT1(PD1) на ввод. По умолчанию все порты микроконтроллера настроены на ввод, но для повышения робастности проектируемого программного обеспечения необходимо в процедуре инициализации настраивать параметры всех используемых устройств ввода/вывода. Так же в процедуре FID_INIT устанавливаются биты ISCn0, ISCn1 определяющие момент возникновения прерывания. Как было отмечено выше, необходимо чтобы прерывания генерировались как по нарастающему, так и по спадающему фронту импульса на выходных линиях ФИД.

Процедура FID_CountEnable разрешает прерывания по изменению сигналов на выходах A, B ФИД. Для этого в регистре масок прерывания EIMSK устанавливаются соответствующие биты (INT0, INT1).

Процедура FID_CountDisable запрещает прерывания по изменению сигналов на выходах A, B ФИД.

Подпрограмма FID_CountClear устанавливает начальные параметры работы ФИД. Устанавливается значение счетчика импульсов датчика FID_Count. Изначально оно равняется 0х8000. Далее по текущему состоянию выходных линий ФИД определяется относительное положение (0, 1, 2, 3) которое присваивается в переменную FID_LastMode. Как было упомянуто выше, она используется для хранения информации о предыдущем относительном положении ФИД.


Основная программа начинается с запуска процедур FID_INIT, FID_CountClear, FID_CountEnable. В ходе их выполнения инициализируются прерывания и устанавливаются значения переменных.


Процедура FID_IRQ основной частью программы является процедура обработки внешних прерываний INT0 и INT1.

Рассмотрим алгоритм ее работы. Она начинается сохранением и заканчивается восстановлением используемого в ней контекста.

Далее в РОН r16 считывается состояние линий A, B. В РОН r17 считываем предыдущее состояние ФИД хранящееся в ячейке FID_LastMode.

Теперь нам необходимо определить в какую сторону повернулся вал ФИД. Для определения направления вращения вала ФИД (по часовой стрелке или против часовой) в памяти программ записана таблица состояний линий A, B - FID_AB_Status. Она хранит последовательность комбинаций линий A, B по относительным состояниям 3, 0, 1, 2, 3, 0. Данная таблица используется для определения предыдущего или следующего состояния линии. Интерпретация таблицы и схема ее использования для определения направления вращения представлены в таблице 11.1.
Так зная предыдущее относительное состояние, сформированное до прихода нового прерывания (храниться в ячейке FID_LastMode), мы имеем возможность получить коды состояния линий А и В до указанной комбинации и после нее.

Для этого к адресу таблицы FID_ABStatus прибавляем данные из РОН r17, в результате чего получаем адрес предыдущего относительного состояния. Адрес состояния, предшествующего этому коду, получается очевидно вычитанием из сформированного в регистровой паре ZH:ZL адреса 1. Далее информация считывается по указанному адресу из памяти программ и сохраняется в r18.

Далее сравниваем текущее состояние линии, хранящееся в r16 с r18. Если они равны, то вал ФИД повернулся против часовой стрелки и вызывается команда безусловного перехода на метку FID_AntiClockwiseRotation. В противном случае вал повернулся по часовой стрелке и вызывается команда безусловного перехода на метку FID_ClockwiseRotation. Соответственно эти метки формируют две ветви алгоритма. В ветви начинающейся меткой FID_AntiClockwiseRotation декрементируются предыдущее относительное состояние ФИД FID_LastMode и счетчик FID_Count. В ветви начинающейся меткой FID_ClockwiseRotation они инкрементируются.

Термин переменная может означать:



  • Переменная (программирование) — поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным и изменять значение в ходе выполнения программы.

  • Переменная величина в математике — символ, обозначающий какое-то число в алгебраическом выражении.

    • Независимая и зависимая переменные в статистике.

  • Переменная звезда — звезда, блеск которой изменяется со временем.





Достарыңызбен бөлісу:
1   2   3   4   5   6




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет