programma-perecluchenya-svetodiodom-proteus+ 

;Если нажать на кнопку и отпустить,то загорится светодиод.Если повторно нажать и отпустить,то светодиод погаснет.
            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
            MOVLW       0            ;В WREG 0000 0000
            MOVWF       TRISA        ;PORTA на выход
            MOVLW       0xFF         ;В WREG 1111 1111
            MOVWF       TRISB        ;PORTB на вход
            MOVLW       0            ;Подключаем подтягивающие резисторы
            MOVWF       OPTION_REG   ;Таймер от внутреннего генератора
            BANK0                    ;Переход в Банк0
            MOVLW       .255         ;В WREG 1111 1111
            MOVWF       PORTA        ;Тушим светодиод
MAIN        MOVF        PORTB,W      ;Читаем PORTB
            BTFSC       PORTB,0      ;Проверяем бит 0 в PORTB
            GOTO        MAIN         ;Если кнопка нажата,то пропустим
            BTFSS       PORTA,0      ;Светодиод горит?
            GOTO        SETBIT       ;Да,выключем 1-цей
            BCF         PORTA,0      ;Нет,включим 0-ом
            GOTO        CHECK        ;Идём на проверку кнопки
SETBIT      BSF         PORTA,0      ;Сюда попадём если светодиод горит
CHECK       BTFSS       PORTB,0      ;Кнопка нажата,т.е. 0 или 1 на PORTB,0
            GOTO        CHECK        ;Если 0,то бесконечный цикл
            GOTO        MAIN         ;Если 1,то всё сначала
ISR                                  ;Начало программы прерывания
            RETFIE                   ;Выход из программы прерывания
            END                      ;Конец программы

 

 

 

НАЗАД                             ATtiny2313 Assembler                           ATtiny Си                              ДАЛЬШЕ