Лекция: Модуль РСА как измеритель длительности импульсов.
При обнаруджении фронта или спада на внешнем выводе СУЧт в этом режиме осуществляется запись значения PCA таймера-счетчика в регистры CCAPnH CCAPnL. Этот режим рекомендуется использовать при измерении длительности импульсов(режим захвата). Установка битов CAPPn и/или CAPNn в регистре CCAPMn определяет перепад(0-1 или 1-0), по которому будет осуществляться завхват.
11h = 00010001b – конец импульса
21h = 00100001b – начало импульса
DSEG
P_W EQU 30h
CAPTRE EQU 32h //сохранить первое значение времени
FLAG BIT 00h //привязывает следующую команду жестко к памяти
CSEG
ORG 0000h
AJMP MAIN
ORG 0033h
AJMP PCA_IR0
ORG 0100h
MAIN: //настройка и запуск
MOV CMOD, #00h; // WDTE =0 clock=fosc\12
MOV CL, #00h; //обнуляем регистр режима и счетчик
MOV CH, #00h;
MOV CCAPM0, #21h; (11h – для паузы) //настроить модуль 0, разрешение прерывания (2 бита в 1: 0010 0001 – позитив + фиксация событий)
CLR FLAG;
SETB IE.6; //разрешить прерывание от PCA массива
SETB IE.7; //отключить блокировку прерываний
SETB CCON.6; //установить CR
ORG 0200h
НАЧАЛО
PCA_ISR:
CLR CCF0; // Флаг прерывания модуля 0. Сбрасывается программно.
JBC FLAG, SECOND; // Переходим на метку если бит установлен и сбрасываем его.
FIRST:
MOV CAPTURE, CCAP0L; // запись в CAPTURE значения времени из CCAP0L
MOV (CAPTURE+1), CCAP0H; // запись по адресу CAPTURE+1 значения CCAP0H (фиксируем время наступления)
SETB FLAG; // Flag = 1
MOV CCAPM0, #11h; (или 21h; 21h для паузы) (11h- для импульса (конец импульса) (*) (перенастройка модуля меняет по отрицательному перепаду)
RETI; //разрешение прерывания этого уровня
SECOND:
PUSH PSW;….// выталкивает из стека последнюю затолкнутую переменную ( сохранить признаки
PUSH ACC; //и значения результата)
CLR C; //очистка бита переноса
MOV A, CCAP0L; // запись в ACC значения времени из CCAP0L
SUBB A, CAPTURE; // Вычитание из A – CAPTURE -C Вычитаем младшие байты времени поступления двух событий
MOV P_W, A (Pulse_WIDTH)
MOV A, CCAP0H
SUBB A, (CAPTURE+1) //аналогично старшие байты
MOV (P_W +1), A
POP ACC; // закидывает значение в стек //чтоб не испортить текущих значений
POP PSW;
MOV CCAPM0, #21h(начало импульса); (11h — для паузы)
CLR FLAG;
RETI;
4. Режимы работы, orl pcon,#02h
PCON.1 принимает значение “1”, — Включается режим пониженной мощности.
Вариант 2I