69
Таким образом в регистр T1SC1 необходимо записать: T1SC1 = 0x40 |
0x10 | 0xC | 0x2 = 0x5E. Начальное значение регистра совпадения кодов
установим равным T1CH1=1. В обработчике прерывания оно будет линейно
увеличиваться до 200.
Соответствующий фрагмент программы инициализации таймера1 и
таймерного канала1 приведен на рис. 2.12.
ПРИМЕЧАНИЕ: В процессе изменения (перезагрузки) содержимого
регистра TxCHi, возможен пропуск момента совпадения. Если загружаемый в
TxCHi код Kc оказывается меньше, чем текущее содержимое счетчика
TxCNT в момент загрузки, то совпадение будет зафиксировано только в
следующем цикле работы счетчика (после его переполнения и сброса в
нулевое состояние). Таким образом, в течение текущего цикла работы
счетчика на выход TxCHi не будет выдан сигнал совпадения, а в случае
формирования ШИМ-сигналов возможен пропуск одного импульса.
Исключить такие ошибки можно путем настройки канала на работу в режиме
совпадения с буферизацией.
Режим совпадения с буферизацией включается при установке в
регистре TxSCi значения бита MSiB = 1 (табл.1.7). Для реализации этого
режима используются регистры данных TxCHi двух таймерных каналов
одновременно, поэтому каналы объединяются в пару 0-1. В паре канал с
номером 0 работает в режиме совпадения с буферизацией, используя регистр
данных канала с номером 1 в качестве буфера для загрузки нового кода Kc.
Регистр TxSC0 задает режим работы канала. Таким образом, для выдачи
сигналов совпадения или ШИМ-сигналов в этом режиме может
использоваться
только выход TxCH0.
Так как в лабораторном стенде светодиод подключен к выходу T1CH1,
режим с буферизацией не используется.
9.6.2 ФОРМИРОВАНИЕ СИГНАЛОВ ТОЧНОГО ВРЕМЕНИ
Как уже было рассчитано, прерывания по переполнению происходят с
частотой 38400Гц/400=96Гц. Поэтому в обработчике необходимо
отсчитывать с помощью вспомогательной переменной 96 прерываний и
увеличивать число секунд на 1. Отсчитав 60 секунд с помощью переменной
‘sec’ увеличиваем число минут (переменная ‘min’).
Соответствующий фрагмент программы с подпрограммами обработки
прерываний по переполнению таймера1 (TIM1_ovf) и совпадению кодов
таймерного канала1 (TIM1_cmp) приведен на рис. 2.13: