Суббота, Май 30, 2020

Программа переключения светодиода с использованием антидребезга PIC ASM

 

;Если нажать и отпустить кнопку, светодиод светится, если повторно нажать и отпустить кнопку, светодиод гаснет.
            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                  ДАЛЬШЕ


 


 

Back to Top