Составители:
34
В ходе нормального выполнения программы WDT периодически
обнуляют чтобы избежать ненужного перезапуска. Это можно сделать
командой CLRWDT.
Если произошло зацикливание или подвисание, то через
предусмотренный промежуток времени (зависит от значения коэффициента
деления пределителя) WDT подаст сигнал сброса и программа будет
выполняться заново. В нашем случае это можно использовать следующим
образом. В начале программы опрашиваем
RC-цепочку, выбираем нужную
скорость вращения шагового двигателя и запускаем бесконечный цикл подачи
меандров на соответствующие выводы микроконтроллера. По истечению
запланированного времени произойдет сброс. Программа опять будет
опрашивать RC-цепочку и т. д.
Подключение пределителя к WDT и задание коэффициента деления
осуществляется с помощью регистра OPTION. Он расположен по адресу 81h и
имеет следующую структуру:
7 6 5 4 3 2 1 0
Не рассматриваются в работе.
Равны 1
PSA PS2 PS1 PS0
Чтобы подключить пределитель к WDT, необходимо установить в
единицу бит PSA. Биты PS2, PS1, PS0 задают порог пределителя по следующей
таблице:
PS2, PS1, PS0 Коэфф. Деления
0 0 0 1
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128
Для вычисления задержки при выводе меандров на обмотки двигателя
понадобятся арифметические команды:
ADDWF f, d
SUBWF f, d
SUBWF вычитает из содержимого ячейки f значение аккумулятора и, в
зависимости от признака d, сохраняет результат в ячейку или в аккумулятор.
ADDWF складывает аккумулятор с содержимым ячейки f.
Существуют аналогичные команды для работы с литералами:
ADDLW k
SUBLW k