Программа 11х1_гс5.243

Программа 11x1_RC5.s43 использует два регистра. Регистр IRData (R6) принимает ИК пакеты, а регистр IRBit (R7) используется как временный счет­чик, отслеживающий биты ИК данных как они были получены. Выбор регис­тров R6 и R7 был сделан произвольно, вместо них могут использоваться лю­бые другие регистры или ячейки памяти ОЗУ. В программе определены две константы: Bit_50 - константа, соответствующая половине длительности бита, и Bit_75 - константа, соответствующая трем четвертям длительности бита. Поскольку для формирования синхросигнала ACLK используется кварцевый резонатор с частотой 32 768 Гц, то константы BIT_50 и Bit_75 будут иметь сле­дующие значения:

Bit_50 equ 2 9 ; 8 90 мкс при частоте ACLK

; 327 68 Гц

Bit_75 equ 44 ; 1348 мкс при частоте ACLK

; 327 68 Гц

Подпрограмма IR_Ready позволяет CCR1 захватывать счетчик таймера Timer_A3 (TAR) и запрашивать прерывание по срезам сигнала на выходе ИК приемника. TAR захватывается по спадающему фронту и автоматически со­храняется в CCR1, при этом происходит формирование запроса на прерывание TA1JSR. В Подпрограмма обработки прерывания TA1JSR определяет было ли вызвано прерывание захватом или сравнением. Если прерывание было вы­звано захватом, то BIT_75 (3/4 длины бита) добавляется непосредственно в CCR1, который хранит точное время спадающего фронта импульса на выходе ИК приемника в середине перового бита. Так как захват данных произошел в середине первого бита, то добавление 3/4 длительности бита приведет к смещению CCR1 в середину первой половины следующего бита. Теперь CCR1 настроен на работу в режиме сравнения данных. Следующее прерывание от CCR1 теперь установлено в середине первой половины второго стартового бита. В соответствии с настройками, в режиме сравнения CCR1 происходит сохранение присутствующего на входе Р1.2 логического уровня в защелке