Реализация функций времени. Измерение временных интервалов

Страницы работы

4 страницы (Word-файл)

Содержание работы

Выполнил:

Студент группы ЭС-41

Матылицкий И. В.

Лабораторная работа № 5

Реализация функций времени. Измерение временных интервалов

Цель работы: Изучить возможности реализации функций времени (измерение временных интервалов), предоставляемые архитектурой MCS-51.

Индивидуальное задание.

Вариант 2: подсчёт до 3 с.

Временные диаграммы и описание работы таймера в выбранном режиме.

Таймер 0 работает в режиме 1 (16-разрядный таймер), с внутренней синхронизацией. Счёт разрешён, когда INT0=1 и TR0=1. Прерывание по INT0 происходит по срезу сигнала.


Схема электрическая принципиальная.

Листинг составленной программы

FINISH_EVENT_FLAG SET B.0

TIMER_EX_REG SET R0 ;регистр дополнительного байта времени

TIMER_L_STORE SET R1 ;регистр старшего байта времени

TIMER_H_STORE SET R2 ;регистр младшего байта времени

ORG 0100h

main:

 call init_devices ;инициализация устройств и регистров

 main_cycle:                      ;запись во внешние защёлки

                                  ;байтов отсчётов времени

                        mov P2, TIMER_L_STORE

                        setb P1.3             ;такт на защёлку 0 (запись)

                        clr P1.3

                        mov P2, TIMER_H_STORE

                        setb P1.4             ;... 1

                        clr P1.4

                        mov P2, TIMER_EX_REG

                        setb P1.5             ;... 2

                        clr P1.5

            jb P3.3, l_timer_call ;проверка бита режима

               call prog_count ;программный подсчёт длительности

 jmp main_cycle

            l_timer_call:call timer_count ;аппаратный подсчёт длительности

 jmp main_cycle

init_devices:

 clr EA ;глобальный запрет прерываний

 mov P3, #0FFh ;задействовать альтернативные функции порта 3

 mov P1, #00h ;все остальные порты - выходные

 mov P0, #00h

 mov P2, #00h

 mov TMOD, #00001001b ;таймер 0, как 16-разрядный,

                        ;с разрешением счёта высоким состоянием INT0

 mov TCON, #00000001b ;прерывание 0 - по срезу сигнала

 mov IE, #00000011b ;разрешение прерывания

                    ;таймера 0 и линии INT0

 mov IP, #00000001b ;более приоритетно INT0

 mov TIMER_EX_REG, #00h ;обнуление времени

 mov TIMER_L_STORE, #00h

 mov TIMER_H_STORE, #00h

 mov P1, #00000111b ;прекращение сброса защёлок

 ret

timer_count:

 mov TIMER_EX_REG, #00h ;сброс дополнительного байта времени

 clr FINISH_EVENT_FLAG ;сброс флага завершения

 mov TH0, #00h ;сброс регистров таймера

 mov TL0, #00h

 setb TR0 ;разрешить подсчёт длительности

 setb EA ;разрешить прерывания

 l_wait_finish:jnb FINISH_EVENT_FLAG, l_wait_finish ;ожидание подсчёта

 mov TIMER_L_STORE, TL0 ;сохранение значений регистров таймера

 mov TIMER_H_STORE, TH0

 clr TR0 ;запрещение подсчёта длительности

 clr EA ;запрет прерываний

 ret

prog_count:

 mov TIMER_L_STORE, #00h ;обнуление байтов времени

 mov TIMER_H_STORE, #00h

 mov TIMER_EX_REG, #00h

 l_wait_for_high:jnb P3.2, l_wait_for_high ;ожидание высокого состояния

            l_count_cycle:jnb P3.2, l_finish_count ;2 цикла выход из цикла

                                                   ;по низкому состоянию P3.2

                                     mov A, TIMER_L_STORE     ;1 цикл

                                                     ;инкремент байта времени

                                     add A, #01h              ;1 цикл

                                     mov TIMER_L_STORE, A     ;1 цикл

                    jnc l_count_cycle        ;2 цикла

                  mov A, TIMER_H_STORE       ;1 цикл

                  add A, #01h                ;1 цикл

                  mov TIMER_H_STORE, A       ;1 цикл

                  jnc l_count_cycle          ;2 цикла

                mov A, TIMER_EX_REG          ;1 цикл

                add A, #01h                  ;1 цикл

                mov TIMER_EX_REG, A          ;1 цикл

                jnc l_count_cycle            ;2 цикла

 l_finish_count:ret

timer_int_handler:

 inc TIMER_EX_REG ;при переполнении таймера -

                  ;инкремент дополнительного байта времени

 reti

ex_int_handler:

 setb FINISH_EVENT_FLAG ;при срезе INT0 -

                        ;установка флага окончания подсчёта

 reti

ORG 0003h

 jmp ex_int_handler

ORG 000Bh

 jmp timer_int_handler

ORG 0000h

 jmp main

END

Выводы: отличительной особенностью программной реализации измерения временных интервалов является необходимость расчёта времени выполнения всех команд цикла с учётом тактовой частоты тактового генератора и последующей калибровки, однако программная реализация не требует инициализации никаких модулей и может быть выполнена в любой микропроцессорной системе; достоинством реализации измерения с помощью таймера является возможность использования внешних прецизионных устройств, либо устройств со сложной логикой действия, выполнение операции в асинхронном по отношению к основной программе режиме.

Похожие материалы

Информация о работе