Обычно для подсчета времени используют режим 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. С использованием запроса прерывания по переполнению.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.