3.2.1. Допустим, что надо сформировать импульс низкого уровня длительностью 10 мс на выводе P1.7 микроконтроллера. Тактовая частота работы fclk = 12 МГц. Для формирования задержки используем таймер T/C0 в режиме 1. Число, которое необходимо загрузить в таймер при его инициализации:
65536 – 10000 = 55536 = D8F0H.
Программа микроконтроллера с именем TIMER_4 будет состоять из основной программы MAIN и подпрограммы обработки прерывания. Начальный адрес подпрограммы имеет адрес 000BH.
Программа микроконтроллера имеет вид:
ORG 0000H
TIMER_4: JMP MAIN ; Переход на основную программу
ORG 000BH ; Вектор прерывания от таймера T/C0
JMP ISR ; Переход на программу обработки прерывания
ORG 0010H
MAIN: MOV SP,#70H ; Определить стек
MOV TMOD,#01H ; Режим 1 для T/C0
MOV TH0,#0D8H ; Загрузить старший байт
MOV TL0,#0F0H ; Загрузить младший байт
SETB ET0 ; Разрешить прерывания от T/C0
SETB EA ; Общее разрешение прерываний
CLR P1.7 ; Вывод P1.7 ß 0
SETB TR0 ; Запустить таймер
CYCLE: NOP ; Зацикливание основной программы
NOP
JMP CYCLE
ISR: CLR TR0 ; Остановить таймер
SETB P1.7 ; Вывод P1.7 ß 1
RETI ; Возврат из прерывания
END
Задание. Запишите программу TIMER_4 в файл timer_4.asm. Получите файлы timer_4.obj и timer_4.hex. Проверьте правильность работы программы с помощью отладчика AVSIM51. Наблюдайте за изменением состояния вывода P1.7 в процессе выполнения программы.
Примечание. Остановить работу программы можно нажатием клавиши F1. Для повторного запуска программы необходимо произвести начальную установку регистров микроконтроллера. Эти действия удобно выполнить командами (выбираемыми из командной строки):
Reset à Cpu
3.2.2. Допустим, что надо сформировать импульс на выводе P1.7 длительностью 40 мс. Будем полагать, что таймер обеспечивает задержку на 10 мс. Для получения задержки на 40 мс необходимо 4 раза запускать и останавливать таймер.
Программа микроконтроллера имеет вид:
ORG 0000H
TIMER_5: JMP MAIN
ORG 000BH ; Вектор прерывания от таймера T/C0
JMP ISR ; Переход на программу обработки прерывания
ORG 0010H
MAIN: MOV SP,#70H ; Определить стек
MOV TMOD,#01H ; Режим 1 для T/C0
MOV TH0,#0D8H
MOV TL0,#0F0H
MOV R7,#4 ; Загрузить счетчик переполнений
SETB ET0 ; Разрешить прерывание от T/C0
SETB EA ; Общее разрешение прерываний
CLR P1.7 ; Вывод P1.7 ß 0
SETB TR0 ; Запустить таймер
CYCLE: NOP ; Зацикливание основной программы
NOP
JMP CYCLE
ISR: CLR TR0 ; Остановить таймер
DJNZ R7,NEXT
SETB P1.7 ; Вывод P1.7 ß 1
CLR ET0 ; Запретить прерывания от таймера
RETI ; Возврат из прерывания
NEXT: MOV TH0,#0D8H
MOV TL0,#0F0H
SETB TR0 ; Запустить таймер
RETI ; Возврат из прерывания
END
Задание. Запишите программу TIMER_5 в файл timer_5.asm. Получите файлы timer_5.obj и timer_5.hex. Проверьте правильность работы программы с помощью отладчика AVSIM51. Наблюдайте за ходом выполнения программы по содержимому регистра R7 и состоянию вывода P1.7 порта.
Задание 2 для самостоятельной работы
Разработайте программу с именем TIMER_6, которая формирует на выводе порта P1.5 периодический сигнал с параметрами: длительность паузы (лог. 0) равна 20 мс, длительность импульса (лог. 1) равна 120 мс. Тактовая частота работы микроконтроллера – 12 МГц. Используйте прерывание программы при переполнении таймера T/C0. Проверьте правильность работы программы с помощью отладчика.
Задание 3 для самостоятельной работы
Разработайте подпрограмму с именем TIME1M, которая может вызываться из основной программы. Подпрограмма TIME1M обеспечивает задержку на 1 минуту при тактовой частоте микроконтроллера 12 МГц. Подпрограмма должна использовать таймер T/C0, а для подсчета переполнений - прерывания от таймера. При выходе из подпрограммы должен устанавливаться флаг F0 в регистре PSW. Это будет выходной параметр подпрограммы.
4. Содержание отчета
Наименование и цель работы. Тексты программ TIMER_3, TIMER_6, TIME1M к заданиям для самостоятельной работы. Файлы timer_3.hex и timer_6.hex для демонстрации работы программ.
Контрольные вопросы
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.