В программах управления и контроля часто требуется реализовать временные задержки. Это удобно сделать с помощью таймеров. В микроконтроллерах семейства МК51 счетные импульсы на входы таймеров поступают от генератора тактовых импульсов через делитель на 12. Частота тактовых импульсов fclk равна частоте внешнего резонатора fxtal. Таким образом, частота счетных импульсов на входе таймера равна fсч = fclk/12 или fсч = fxtal/12. При типовой частоте резонатора 12 МГц тактовая частота равна 12 МГц, а частота счетных импульсов – 1 МГц. Соответственно период счетных импульсов равен 1 мкс. Для реализации временных задержек обычно используется режим 1. В этом режиме таймер – это 16-разрядный счетчик, который считает от 0 до 65535. Программно более удобно анализировать не текущее состояние таймера, а момент его переполнения, которое сигнализируется установкой флага переполнения TF и запросом прерывания. В этом случае таймер считает от 1 до 65536. При тактовой частоте fclk=12 Мгц время задержки может быть от 1 до 65536 мкс. Если требуемое время задержки меньше 65536 мкс, то в таймер при инициализации необходимо загрузить число, которое в сумме с задержкой даст 65536. Например, надо реализовать задержку на 50 мс. Тогда в таймер первоначально необходимо загрузить число 65536 – 50000 = 15536 = 3CB0H. Если требуемое время задержки больше 65536 мкс, то можно считать количество переполнений таймера, используя любой свободный регистр микроконтроллера.
3. Порядок выполнения работы
3.1. Рассмотрим методы формирования временной задержки с программным опросом флага переполнения таймера.
3.1.1. Допустим, что надо сформировать импульс низкого уровня длительностью 10 мс на выводе P1.7 микроконтроллера. Тактовая частота работы fclk = 12 МГц. Для формирования задержки используем таймер T/C0 в режиме 1. Число, которое необходимо загрузить в таймер при его инициализации:
65536 – 10000 = 55536 = D8F0H.
Программа формирования импульса может иметь вид:
TIMER_1: MOV TMOD,#01H ; Режим 1 для T/C0
MOV TH0,#0D8H ; Загрузить старший байт
MOV TL0,#0F0H ; Загрузить младший байт
CLR P1.7 ; Вывод P1.7 ß 0
SETB TR0 ; Запустить таймер
COUNT: JNB TF0,COUNT ; Ожидание переполнения таймера
SETB P1.7 ; Вывод P1.7 ß 1
CLR TR0 ; Остановить таймер
STOP: JMP STOP ; Зацикливание программы
END
Задание. В своем каталоге создайте файл с именем timer_1.asm. Запишите в него текст программы TIMER_1. Получите файлы timer_1.obj и timer_1.hex. Проверьте правильность работы программы с помощью отладчика AVSIM51. Обратите внимание, что после останова таймера флаг переполнения TF0 не сбрасывается.
Примечание. Остановить работу программы можно нажатием клавиши F1. Для повторного запуска программы необходимо произвести начальную установку регистров микроконтроллера. Эти действия удобно выполнить командами (выбираемыми из командной строки):
Reset à Cpu
3.1.2. Допустим, что надо сформировать импульс на выводе P1.7 длительностью 40 мс. Будем полагать, что таймер обеспечивает задержку на 10 мс. Для получения задержки на 40 мс необходимо 4 раза запускать и останавливать таймер.
Программа формирования импульса в этом случае имеет вид:
TIMER_2: MOV TMOD,#01H ; Режим 1 для T/C0
MOV R7,#4 ; Загрузить счетчик переполнений таймера
CLR P1.7 ; Вывод P1.7 ß 0
AGAIN: MOV TH0,#0D8H ; Загрузить старший байт
MOV TL0,#0F0H ; Загрузить младший байт
SETB TR0 ; Запустить таймер
COUNT: JNB TF0,COUNT ; Ожидание переполнения таймера
CLR TR0 ; Остановить таймер
CLR TF0 ; Сбросить флаг переполнения таймера
DJNZ R7,AGAIN ; Повторить цикл 4 раза
SETB P1.7 ; Вывести P1.7 ß 1
STOP: JMP STOP ; Зацикливание программы
END
Примечание. Конечно, выполнить задержку на 40 мс можно и без подсчета числа переполнений, так как таймер позволяет получить 65536 мкс за один проход. Программа TIMER_2 просто иллюстрирует метод получения больших задержек.
Задание.Получите файлы timer_2.asm, timer_2.obj, timer_2.hex. Проверьте правильность работы программы TIMER_2 с помощью отладчика AVSIM51. Наблюдайте за изменением содержимого регистра R7 и состояния вывода P1.7 порта в процессе работы программы.
Задание 1 для самостоятельной работы
Разработайте программу с именем TIMER_3, которая формирует на выводе порта P1.0 периодический сигнал с параметрами: длительность паузы (лог. 0) равна 30 мс, длительность импульса (лог. 1) равна 90 мс. Тактовая частота работы микроконтроллера – 12 МГц. Проверьте правильность работы программы с помощью отладчика.
3.2. Рассмотрим методы формирования временных задержек с использованием прерывания программы при переполнении таймера.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.