Исследование таймеров/счетчиков микроконтроллера МК51. Программа формирования импульса, страница 3

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 для демонстрации работы программ.

                                         Контрольные вопросы

  1. Как программируется режим работы таймера/счетчика МК51?
  2. Как производится запуск и останов таймера?
  3. Как можно разрешить и запретить прерывания от T/C0 и T/C1?
  4. Как можно реализовать большие задержки (секунды и минуты) с помощью таймеров в МК51?