; брелок-нетеряйка ; GP0 - питание усилителя (в дежурном режиме - "1", в режиме ответа - "0") ; GP2 - питание усилителя (в дежурном режиме - "0", в режиме ответа - частота) ; GP1 - вход сигнала list p=12f675 #include __CONFIG 00184H ; Бит защиты выключен ; Сброс по снижению напр.питания ЗАПРЕЩЕН ; Используется внутренний сброс, вывод ; RA5/MCLR работает как вход ; Таймер включения питания РАБОТАЕТ ; WDT (СОБАКА) выключен ; Работает внутренний генератор ;--------------------------------------------------------------- ;---------------------------------------------------------- ; регистры общего назначения cblock 20h TEMP TEMP1 TEMP2 TEMP3 endc ;начало исполняемого кода ;ORG 00h GOTO START ;вектор прерывания ORG 04h GOTO PER ; начало программы ;ORG 010h INIT BSF STATUS, RP0 ; банк 1 CALL 3FFh ; калибруем внутр. генератор MOVFW OSCCAL MOVLW B'10000000' ; настройка OPTION MOVWF OPTION_REG ; подтягивающие резисторы отключены MOVLW B'10001000' MOVWF INTCON ; разрешаем глобальные прерывания и прерывания от портов MOVLW B'00000000' MOVWF PIE1 ; запрещаем прер. по периполн. таймера TMR1 CLRF ANSEL MOVLW B'00000010' ; порты 1 - на вход, остальные - на выход MOVWF TRISIO CLRF VRCON ; ВЫКЛЮЧИТЬ И.О.Н. BCF STATUS, RP0 ; банк 0 MOVLW B'00000000' ; MOVWF T1CON ; выкл. ТМR1 MOVLW B'00000111' MOVWF CMCON ; выключить компараторы CLRF PIR1 ; сброс всех прерываний clrf GPIO ; Сбросим порт return ; ВХОД В ПРЕРЫВАНИЕ ОТ ПОРТОВ PER MOVF GPIO,0 BCF INTCON,0 ; сбросим флаг прерывания от портов RETFIE START call INIT START_ BSF GPIO,0 ; УСТ. В "1" BCF GPIO,2 ; УСТ. В "0" BSF STATUS, RP0 ; банк 1 bsf IOCB,1 ; вкл. прервывание от GP1 BCF STATUS, RP0 ; банк 0 ;******************ОЖИДАНИЕ****************** SLEEP NOP ;********************ОТВЕТ******************* BSF STATUS, RP0 ; банк 1 bcf IOCB,1 ; выкл. прервывание от GP1 BCF STATUS, RP0 ; банк 0 BCF GPIO,0 ; УСТ. В "0" ;**********ЦИКЛ ПОВТОРА - 10 РАЗ*********** MOVLW .10 MOVWF TEMP3 ;**********СИГНАЛ 5000 Гц (200 mS)*********** MOVLW .9 MOVWF TEMP1 MOVLW .10 MOVWF TEMP2 MOVLW .30 MOVWF TEMP DECFSZ TEMP GOTO $-1 BTFSS GPIO,2 ; ЕСЛИ ПОРТ В "0" GOTO $+2 GOTO $+3 BSF GPIO,2 ; УСТ. В "1" GOTO $+2 BCF GPIO,2 ; УСТ. В "0" DECFSZ TEMP2 GOTO $-.11 DECFSZ TEMP1 GOTO $-.13 ;****************************************** ;*************ПАУЗА (100 mS)*************** MOVLW .200 MOVWF TEMP1 MOVLW .170 MOVWF TEMP2 DECFSZ TEMP2 GOTO $-1 DECFSZ TEMP1 GOTO $-5 ;****************************************** DECFSZ TEMP3 GOTO $-.27 NOP GOTO START_ END