Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 6. Осваиваем все возможности микроконтроллера ATtiny231 3 389 бит системного сброса (WDE) и бит режима прерывания (WDIE) приоб ­ ретают фиксированные значения 1 и 0 соответственно. Для изменения режима работы сторожевого таймера нужно выпол ­ нить определенную последовательность действий. Такой прием позво ­ ляет избежать случайного изменения режима. Для сброса флага WDE и изменения коэффициента пересчета таймера необходимо выполнить следующее. Во-первых, одной командой установить в единицу разряд разреше ­ ния изменений (WDCE) и в бит WDE. Логическая единица в бит WDE должна записываться обязательно, даже если значение этого бита и так равно единице. Во-вторых, в течение следующих четырех циклов тактового генера ­ тора записать требуемое значение в бит WDE и биты установки коэффи ­ циента деления (WDP). Одновременно бит WDCE должен быть сброшен. Все эти три вида значений необходимо записывать одной операцией. В листингах 6.1 и 6.2 приведены два примера процедуры выключения сторожевого таймера. Одна процедура на Ассемблере, другая — на языке СИ. Примеры предполагают управление прерываниями (в данном случае путем глобального запрета прерываний) таким образом, чтобы ни одно прерывание не было вызвано во время работы данных процедур. Листинг 6.1. Пример на языке Ассемблер WDT_off: ; Глобальный запрет прерываний С11 ; Перезапуск охранного таймера wdr ; Очистка бита WDRF в регистре MCUSR ш г16, MCUSR andi г16, (Oxff & (0«WDRF)) out MCUSR, r16 ; Запись логической единицы в биты WDCE и WDE , Сохраните старые установки предделителя, чтобы предотвратить ; случайное срабатывание ш г 16, WDTCSR on г16, (1«WDCE) | (1«WDE) out WDTCSR, г16 ; Отключение охранного таймера ldi г16, (0«WDE) out WDTCSR, г16 ; Глобальное разрешение прерываний sei ret Листинг 6.2. Пример на языке СИ (Code Vision) «define WDRF 3 «define WDCE 4

RkJQdWJsaXNoZXIy MTExODQxMg==