LIST        P=16F628A
            INCLUDE     P16F628A.INC
            __CONFIG    _INTOSC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_ON&_MCLRE_OFF&_LVP_OFF&_CP_OFF
            ERRORLEVEL  -302
            CBLOCK      20H
            CCP1TMPL
            CCP1TMPH
            W_TEMP
            STATUS_TEMP
            ENDC
BANK0       MACRO
            BCF         STATUS,RP0
            BCF         STATUS,RP1
            ENDM
BANK1       MACRO
            BSF         STATUS,RP0
            BCF         STATUS,RP1
            ENDM
            ORG         0
            GOTO        START
            ORG         4
            GOTO        ISR
START       MOVLW       7
            MOVWF       CMCON
            CLRF        PORTB
            CLRF        PORTA
            BANK1
            CLRW
            MOVWF       TRISB
            BANK0
            MOVLW       B'11111111'
            MOVWF       CCP1TMPL
            MOVLW       B'11111111'
            MOVWF       CCP1TMPH
            CLRF        TMR1L
            CLRF        TMR1H
            MOVLW       B'00110001'
            MOVWF       T1CON
            MOVLW       B'00001000'
            MOVWF       CCP1CON
            
MAIN
LOOP        BTFSS       PIR1,CCP1IF
            GOTO        LOOP
            BTFSC       PORTB,3
            GOTO        CLEAR
            CLRF        CCP1CON
            MOVFW       CCP1TMPL
            MOVWF       CCPR1L
            MOVFW       CCP1TMPH
            MOVWF       CCPR1H
            MOVLW       B'00001000'
            MOVWF       CCP1CON
            CLRF        TMR1H
            CLRF        TMR1L
            BCF         PIR1,CCP1IF
            GOTO        MAIN
            
CLEAR       CLRF        CCP1CON
            MOVFW       CCP1TMPL
            MOVWF       CCPR1L
            MOVFW       CCP1TMPH
            MOVWF       CCPR1H
            MOVLW       B'00001001'
            MOVWF       CCP1CON
            CLRF        TMR1H
            CLRF        TMR1L
            BCF         PIR1,CCP1IF
            GOTO        MAIN
                   
ISR         MOVWF       W_TEMP
            SWAPF       STATUS,W
            BCF         STATUS,RP0
            MOVWF       STATUS_TEMP   
                     
EXIT_ISR    SWAPF       STATUS_TEMP,W
            MOVWF       STATUS
            SWAPF       W_TEMP,F
            SWAPF       W_TEMP,W
            RETFIE
TABLE       ADDWF       PCL,F
            RETLW       0
            END

 

 

 

 

 ;Генератор с кнопкой на RA4

            LIST        P=16F628A
            INCLUDE     P16F628A.INC
            __CONFIG    _INTOSC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_ON&_MCLRE_OFF&_LVP_OFF&_CP_OFF
            ERRORLEVEL  -302
            CBLOCK      20H
            CCP1TMPL
            CCP1TMPH
            TMP
            J
            K
            ENDC
BANK0       MACRO
            BCF         STATUS,RP0
            BCF         STATUS,RP1
            ENDM
BANK1       MACRO
            BSF         STATUS,RP0
            BCF         STATUS,RP1
            ENDM
            ORG         0
            GOTO        START
START       MOVLW       7
            MOVWF       CMCON
            CLRF        PORTB
            CLRF        PORTA
            BANK1
            CLRW
            MOVWF       TRISB
            BSF         TRISA,4               ;кнопка
            BANK0
            MOVLW       B'11111111'
            MOVWF       CCP1TMPL
            MOVLW       B'11111111'
            MOVWF       CCP1TMPH
            CLRF        TMR1L
            CLRF        TMR1H
            MOVLW       B'00110001'
            MOVWF       T1CON                    ;настройка таймера 1
            MOVLW       B'00001000'      ;настройка блока сравнения и совпадения курим даташит
            MOVWF       CCP1CON

;############################## осносной цикл программы #######################
MAIN        
            CALL        LOOP
            BTFSS       PORTA,4                 ;кнопка нажата?
            CALL        BUTTON
            GOTO        MAIN     

;############################################################################

LOOP        BTFSS       PIR1,CCP1IF        ;было совпадение?
            GOTO        LOOP
            BTFSC       PORTB,3                  ;на выходе 0 или 1?
            GOTO        CLEAR
            CLRF        CCP1CON
            MOVFW       CCP1TMPL
            MOVWF       CCPR1L
            MOVFW       CCP1TMPH
            MOVWF       CCPR1H
            MOVLW       B'00001000'
            MOVWF       CCP1CON
            CLRF        TMR1H
            CLRF        TMR1L
            BCF         PIR1,CCP1IF
            RETURN
            
CLEAR       CLRF        CCP1CON
            MOVFW       CCP1TMPL
            MOVWF       CCPR1L
            MOVFW       CCP1TMPH
            MOVWF       CCPR1H
            MOVLW       B'00001001'
            MOVWF       CCP1CON
            CLRF        TMR1H
            CLRF        TMR1L
            BCF         PIR1,CCP1IF
            RETURN
            
BUTTON      CALL        DELAY
            MOVFW       CCP1TMPH
            MOVWF       TMP
            MOVLW       7
            SUBWF       TMP,F
            BTFSC       STATUS,Z
            GOTO        NEXT
            MOVFW       CCP1TMPH
            MOVWF       TMP
            MOVLW       0
            SUBWF       TMP,F
            BTFSC       STATUS,Z
            GOTO        NEXT
            MOVLW       .62                     ;отнимаем от регистра CCPR1H тем самым сокращаем время импульса
            SUBWF       CCP1TMPH,F    ;можно организовать таблицу данных и загружать их в регистр сравнения
            GOTO        EXIT
NEXT        CLRW
            MOVWF       CCP1TMPH
            MOVLW       .15
            SUBWF       CCP1TMPL,F
            MOVFW       CCP1TMPL
            MOVWF       TMP
            CLRW
            SUBWF       TMP,F
            BTFSC       STATUS,Z
            GOTO        RESET_ALL
            GOTO        EXIT
RESET_ALL   MOVLW       0FFH
            MOVWF       CCP1TMPL
            MOVWF       CCP1TMPH
EXIT       
            BTFSS       PORTA,4
            GOTO        EXIT
            RETURN
            
DELAY       MOVLW       .40
            MOVWF       J
JLOOP       MOVLW       .255
            MOVWF       K
KLOOP       DECFSZ      K,F
            GOTO        KLOOP
            DECFSZ      J,F
            GOTO        JLOOP
            RETURN
            END