; ПО СТРОЧНЫМ СИ !!! ; изменена задержка на си и добавлены NOPы ; улучшилось срабатывание при переключении каналов и устойчивость ; РАБОЧАЯ ВЕРСИЯ НЕ ПРАВИТЬ !!! ; КВАРЦ - 20 МГц ; GPIO,0 - вход СИ ; GPIO,1 - ключ инверсии ; GPIO,2 - индикатор инверсии list p=12f629 #include __CONFIG 00102H ; Бит защиты выключен ; Сброс по снижению напр.питания ЗАПРЕЩЕН ; Используется внутренний сброс, вывод ; RA5/MCLR работает как вход ; Таймер включения питания РАБОТАЕТ ; WDT (СОБАКА) выключен ; Работает внешний генератор ;--------------------------------------------------------------- ;---------------------------------------------------------- ; регистры общего назначения cblock 20h TEMP CI endc ;начало исполняемого кода ORG 00h GOTO START ;вектор прерывания ORG 04h GOTO PER ; начало программы ORG 010h INIT BSF STATUS, RP0 ; банк 1 MOVLW B'10000111' ; настройка OPTION MOVWF OPTION_REG ; настройка делителя ТМ0 - 1:256, дискретность 13107.2 мкс MOVLW B'10100000' MOVWF INTCON ; разр. прер. по периполн. таймера CLRF PIE1 ; прер. от периферии запр. MOVLW B'00000001' ; порт 0 - на вход остальные - на выход MOVWF TRISIO CLRF VRCON ; ВЫКЛЮЧИТЬ И.О.Н. BCF STATUS, RP0 ; банк 0 MOVLW B'00000111' MOVWF CMCON ; выключить компараторы CLRF PIR1 ; сброс всех прерываний clrf GPIO ; Сбросим порт return ; ВХОД В ПРЕРЫВАНИЕ ПО ПЕРЕПОЛНЕНИЮ ТАЙМЕРА 13107.2 МКС ; ЗА ЭТО ВРЕМЯ ПРОГРАММА ДОЛЖНА БЫЛА ОБНАРУЖИТЬ N - СИЛИЧЕСТВО ССИ ; ЕСЛИ ФАЗА СИГНАЛА ПРЯМАЯ - КОЛИЧЕСТВО ССИ ДОЛЖНО БЫТЬ ОКОЛО 204 ; ЕСЛИ ФАЗА СИГНАЛА ИНВЕРСНАЯ - КОЛИЧЕСТВО ССИ НАМНОГО МЕНЬШЕ 204 PER BCF INTCON,2 BCF STATUS, C ; ...сбросить С MOVF CI, W ; вычесть константу SUBLW .150 ; было 200, 50 BTFSC STATUS, C ; если результат <0... CALL INV CLRF CI CLRF TMR0 RETFIE INV BTFSS GPIO,1 ; ЕСЛИ ПОРТ В "0" GOTO $+2 GOTO $+3 BSF GPIO,1 ; УСТ. В "1" GOTO $+2 BCF GPIO,1 ; УСТ. В "0" BTFSS GPIO,2 ; ЕСЛИ ПОРТ В "0" GOTO $+2 GOTO $+3 BSF GPIO,2 ; УСТ. В "1" GOTO $+2 BCF GPIO,2 ; УСТ. В "0" RETURN START call INIT CLRF CI bcf GPIO,1 bcf GPIO,2 CLRF TMR0 BCF INTCON,2 BSF INTCON,7 ;---------ОЖИДАНИЕ СИНХРОИМПУЛЬСА------------- QQQ BTFSC GPIO,0 ; ОЖИДАНИЕ 0 GOTO $-1 BTFSS GPIO,0 ; ОЖИДАНИЕ 1 GOTO $-1 ;--------------------------------------------- MOVLW .3 ; для сси - 4, для кси - 7 MOVWF TEMP ; при 4 наблюдаются несрабатывания ; при переключении каналов nop nop nop nop nop ;nop BTFSS GPIO,0 ; НЕТ СИ GOTO QQQ ; ВЕРНУТЬСЯ В НАЧАЛО DECFSZ TEMP GOTO $-3 INCF CI GOTO QQQ END