Порты ввода/вывода. Система управления МКЭВМ. Автономное использование МК-48. БИС расширителя ввода/вывода, страница 18

Обычно для подсчета времени используют режим 1 работы таймера. В этом режиме таймер – это 16-разрядный счетчик, который считает от 0 до 65536.

При fXTAL=12МГц

fCLK= fXTAL=12МГц у МК51 частота на входе равна тактовой частоте

n=от 1 до 65536 (при поступлении последовательных импульсов вырабатывается флаг переполнения)

tЗД=от 1мкс до 65536мкс

Пример: Необходимо сформировать импульс.

Будем использовать таймер-счетчик 0, режим 1

a.  С программным определением переполнения.

Метки

Мнемокод

Комментарии

CLR

ET0

Запретить прерывания от Т/С0

MOV

TMOD,#00000001B

Режим 1 для Т/С0

MOV

TL0,#0B0H

Загрузить число N

MOV

TH0,3CH

CLR

P1.0

P1.0ß0

SETB

TR0

Запустить Т/С0

COUNT

JNB

TF0,COUNT

Если TF0=0

CLR

TR0

Остановить Т/С0

SETB

P1.0

P1.0ß1

b.  С использованием прерывания от таймера-счетчика.

Метки

Мнемокод

Комментарии

SETB

EA

Разрешить прерывания

SETB

ET0

Разрешить прерывания от Т/С0

MOV

TMOD,#01H

Установить режим работы Т/С0

MOV

TL0,#0B0H

MOV

TH0,#3CH

CLR

P1,0

SETB

TR0

Запустить Т/С0

...

ORG

0008H

Вектор прерывания от Т/С0

CLR

TR0

Остановить Т/С0

SETB

P1.0

Р1.0ß1

RET

I

Возврат из прерывания

Рассмотрим программу формирования импульса tимп>65мс

Пример: сформировать импульс длительностью

a.  С программным опросом флага переполнения.

Метки

Мнемокод

Комментарии

CLR

ET0

MOV

TMOD,#01H

MOV

R7,#0

Обнулить счетчик переполнения

CLR

P1.0

P1.0ß0

MOV

TL0,#0B0H

MOV

TH0,#3CH

SETB

TR0

COUNT

JNB

TF0,COUNT

Определить переполнение

CLR

TF0

Сбросить TF0

CLR

TR0

INC

R7

CJNE

R7,#10,AGAIN

Если (R7) не равно 0

CLR

TR0

SETB

P1.0

P1.0ß1

b.  С использованием запроса прерывания по переполнению.