Напишите подпрограмму, размещаемую по адресу h’050’ памяти программ, которая будет управлять перемещением ротора. В подпрограмму будет передаваться количество шагов от 1 до 256. Предполагается, что выводы порта A RA[3:0] подключены к обмоткам А, В, С, D соответственно. Скорость вращения должна быть равна 100 шагам в секунду, что обеспечивается 10-мс задержкой. Подпрограмма формирования этой задержки должна быть написана таким образом, чтобы в минимальной степени зависеть от тактовой частоты микроконтроллера. Последняя указывается программистом в виде константы FREQ, являющейся множителем 100 кГц, т. е. для 4-МГц резонатора FREQ = d’40’.
Решение
Прежде всего, нам потребуется составить таблицу, содержащую коды управления обмотками шагового двигателя для всех восьми возможных направлений магнитного поля (см. Табл. 11.2).
Код, приведенный в Программе 11.7, состоит из трех подпрограмм.
MOTOR
Это основная подпрограмма, которая просто инкрементирует по модулю 8 переменную, хранящую номер вектора направления магнитного поля. Чтобы после числа 7 счет снова начинался с 0, результат обычного инкрементирования логически умножается (AND) на константу Ь’00000111’. Затем номер вектора преобразуется в соответствующий код, который после 10-мс задержки выдается на выводы управления двигателем. Процесс повторяется до тех пор, пока декрементируемый регистр STEP не станет равным 0; если он изначально был нулевым, то будет сделано 256 шагов.
PATTERN
Эта подпрограмма возвращает один из восьми кодов в соответствии с Табл. 11.2. Принцип реализации подобных таблиц был описан в Программе 6.6 (стр. 184). Поскольку подпрограммы располагаются в памяти, начиная с адреса h’050’, операция 8-битного сложения номера шаблона со счетчиком команд не вызовет перехода через границу страницы памяти программ.