Нет такой «инструкции». Однако нет никаких сомнений, по крайней мере, один периферийный аппаратный таймер (точный набор периферийных устройств зависит от того, какую именно часть вы используете). Получите таблицу данных / руководство пользователя для части, которую вы используете, и выясните, как запрограммировать таймер; затем вы можете опросить его или использовать прерывания. Обычно вы настраиваете таймер для генерации периодического прерывания, которое затем увеличивает переменную счетчика.
Две вещи, которые вы должны знать о прерываниях таймера: во-первых, если ваша переменная счетчика больше 8-битной, доступ к ней не будет атомарным, поэтому вне контекста прерывания вы должны либо временно отключить прерывания, чтобы прочитать его, либо прочитайте его дважды подряд с тем же значением, чтобы подтвердить его. Во-вторых, переменная счетчика таймера должна быть объявлена volatile
, чтобы компилятор не оптимизировал доступ к ней; это верно для всех переменных, общих для прерываний и потоков.
Другой альтернативой является использование режима сна с низким энергопотреблением, если он поддерживается; Вы устанавливаете таймер для пробуждения процессора после требуемого периода и запускаете необходимую инструкцию режима сна (это может быть предоставлено компилятором как «встроенное», или вас может контролировать периферийный регистр. Это общий совет, а не 8051, я не знаю, поддерживает ли ваша часть даже спящий режим.
В любом случае вам нужно пройтись по документации, относящейся к детали. Если бы вы могли сообщить нам точную часть, вы можете получить помощь с этим.
Третье решение - использовать специальное ядро RTOS 8051, которое обеспечит именно ту функцию периодической задержки, которую вы ищете, а также многопоточность и IPC.