;Если нажать и отпустить кнопку, светодиод светится, если повторно нажать и отпустить кнопку, светодиод гаснет.
LIST P=16F628A
INCLUDE P16F628A.INC
__CONFIG _INTOSC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_ON&_MCLRE_OFF&_LVP_OFF
ERRORLEVEL -302
CBLOCK 20H
J
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
BANK1
MOVLW 0
MOVWF TRISA ;PORTA на выход.
MOVLW 0FFH
MOVWF TRISB ;PORTB на вход.
BCF OPTION_REG,NOT_RBPU ;Вкл. PULLUP резисторы.
BANK0
BSF PORTA,0 ;Выключаем светодиод.
MAIN BTFSC PORTB,0 ;Кнопка нажата?
GOTO MAIN ;Нет.
CALL DELAY ;Подажём 200 с чемто тактов.
BTFSS PORTA,0 ;Светодиод горит?
GOTO SETBIT ;Нет.
BCF PORTA,0 ;Да.Потушим светодиод.
GOTO CHECK ;На проверку кнопки.
SETBIT BSF PORTA,0 ;Включим светодиод.
CHECK BTFSS PORTB,0 ;Кнопка нажата?
GOTO CHECK ;Да.Проверяем снова.
CALL DELAY ;Задержка.
GOTO MAIN ;Всё сначала.
DELAY MOVLW .100 ;Функция задержки.
MOVWF J
LOOPJ DECFSZ J,F ;Отнимаем 1-цу и проверяем на 0.
GOTO LOOPJ
RETURN ;Возврат по адресу в стеке.
ISR
RETFIE
END
НАЗАД Assembler AVR Си AVR ДАЛЬШЕ