;В схеме R1 - подтягивающий резистор PULLUP.Если кнопка не нажата на нём +5В,если кнопку нажать,то на резисторе будет 0В,и ток протекать будет через резистор очень маленький т.к. 5В делить на 10000 Ом = 0,0005А.
            LIST        P=16F628A
            INCLUDE     P16F628A.INC ;Включение файла .INC
            ;Конфигурация контроллера
            __CONFIG    _INTOSC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_ON&_MCLRE_OFF&_LVP_OFF
            ERRORLEVEL  -302         ;Чтобы небыло сообщения про банки
            CBLOCK      20H          ;С адреса 20Н начало Регистров Общего Назначения
            ENDC                     ;Конец блока Регистров Общего Назначения
BANK0       MACRO                    ;Макрос Банка0
            BCF         STATUS,RP0   ;Скидываем бит выбора банка
            BCF         STATUS,RP1   ;Скидываем бит выбора банка
            ENDM                     ;Конец макроса
BANK1       MACRO                    ;Макрос Банка1
            BSF         STATUS,RP0   ;Подымаем бит выбора банка
            BCF         STATUS,RP1   ;Скидываем бит выбора банка
            ENDM                     ;Конец макроса
            ORG         0            ;Адрес начала кода
            GOTO        START        ;Идём на 0
            ORG         4            ;Адрес начала подпрограммы прерывания
            GOTO        ISR          ;Идём на 4
START       MOVLW       7            ;В WREG 0000 0111
            MOVWF       CMCON        ;Отключаем компаратор
            BANK1                    ;Переход в Банк1
            BSF         TRISA,0      ;Бит 0 порта RA на вход
            BCF         TRISB,0      ;Бит 0 порта RB на выход
            BANK0                    ;Переход в Банк0
            BCF         PORTB,0      ;Выключаем светодиод
MAIN        BTFSC       PORTA,0      ;Проверяем на RA0 единица(кнопка нажата)?
            GOTO        MAIN         ;Нет бесконечный цикл
            BTFSS       PORTB,0      ;Проверяем светодиод включен?
            GOTO        SETBIT       ;Нет
            BCF         PORTB,0      ;Да.Выключаем светодиод
            GOTO        CHECK        ;На проверку кнопки
SETBIT      BSF         PORTB,0      ;Включаем светодиод
CHECK       BTFSS       PORTA,0      ;Кнопка нажата?
            GOTO        CHECK        ;Да
            GOTO        MAIN         ;Нет.Всё начинается сначала
            
ISR                                  ;Начало программы прерывания
            RETFIE                   ;Выход из программы прерывания
            END                      ;Конец программы

 

 

 

НАЗАД                  Assembler AVR                  Си AVR                  ДАЛЬШЕ