END
JMP START
STOP TCNT
DIS I
EN I
STRT T
EN TCNTI
CPL F1
CLR F1
MOV T,A
ORG 7
ORG 3
JMP START
ORG 0
END
STRT T
EN TCNTI
CLR F1
MOV T,A
ORG 7
JMP START
ORG 0
DJNZ R5,TEAM0; (2)
CLR F1; (1)
TEAM0:RETR; (2)
START:MOV A,#235
MOV R5,#48
M1: JF1 M1; (2)
STOP TCNT; (1)
От команды STRT T до команды STOP TCNT пройдет время равное 20480*48 + 21*80 +время на выполнение команд, отмеченных в комментариях цифрами. Цифры обозначают количество тактов, их сумма равна 8, а время выполнения равно 8*2,5=20 мкс. Таким образом данная программа реализует временную выдержку, равную 20480*48 + 21*80 + 20 = 1000004 мкс, т. е. на 4 мкс больше необходимой. Очевидно, что такая погрешность допустима.
Импульсы, частота которых измеряется, поступают на вывод /INT. Подсчет этих импульсов ведется в подпрограмме обработки внешнего прерывания. Учитывая это запишем программу полностью.
JMP INT;(2)
DJNZ R5,TEAM0;(2)
CLR F1;(1)
TEAM0:RETR;(2)
INT: MOV A,#1;(2)
|
|
ADD A,R6;(1)
MOV R6,A;(1)
MOV A,#0;(2)
ADDC A,R7;(1)
MOV R7,A;(1)
RETR;(2)
START:MOV R6,#0
MOV R7,#0
MOV A,#235
MOV R5,#48
M1: JF1 M1
Данная программа предъявляет ограничения на параметры входного импульса.
Ограничение на длительность импульса. Должно выполняться условие: tимп < tINT означает, что длительность импульса должна быть меньше времени выполнения подпрограммы INT.
Если в момент окончания подпрограммы INT сигнал на входе INT имеет еще нулевое значение, то подпрограмма будет выполняться еще один раз, а это значит, что вместо одного импульса будут зафиксированы два. Если же в момент окончания подпрограммы INT уровень сигнала на входе INT будет равным 1, то все нормально. Так как время выполнения подпрограммы INT равно 35 мкс, то tимп < 35 мкс. Это ограничение для длительности импульса сверху. Существует ограничение для длительности импульса снизу. Так как сигнал на входе INT проверяется в каждом машинном цикле, то для того, чтобы сигнал не был пропущен, его длительность должна быть больше 2,5 мкс. Тогда можно записать 2,5мкс < tимп < 35мкс.
Из вышеприведенного рисунка видно, что должны быть ограничения и на период входных импульсов. Если период входных импульсов так мал, что он укладывается по времени в интервал действия подпрограммы INT, то какие – то импульсы будут пропущены. Следовательно должно быть Тимп > tINT. Здесь надо учитывать то, что начало подпрограммы INT может быть задержано, если в момент прихода импульса (уровень 0) выполняется подпрограмма обработки прерывания от таймера. Время выполнения этой подпрограммы равно 15 мкс, значит ограничение на длительность периода входного сигнала выглядит так: Tимп > tINT +15 мкс или Тимп> 50 мкс.
|
|