Пятница, Сентябрь 18, 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
            K
            REG
            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
            BSF         TRISA,0 
            MOVLW       0
            MOVWF       TRISB
            BANK0
MAIN        BTFSC       PORTA,0  ;Кнопка нажата?
            GOTO        RIGHT    ;Нет.
            MOVLW       1        ;Закидываем в REG 00000001
            MOVWF       REG
LEFT        MOVF        REG,W    ;В порт Б то что в REG.
            MOVWF       PORTB    
            CALL        DELAY    ;Здержка
            BCF         STATUS,C ;На всякий случай сбросим
            RLF         REG,F    ;Сдвиг бита влево
            BTFSS       STATUS,C ;Вылез бит за рамки байта?
            GOTO        LEFT     ;Ешо нет.
            GOTO        MAIN     ;Бит вышел за пределы байта.
RIGHT       MOVLW       0x80     ;Сюда попадаем если кнопка не нажата
            MOVWF       REG      ;В REG 10000000
RLOOP       MOVF        REG,W    ;История повторяется только наоборот.
            MOVWF       PORTB
            CALL        DELAY
            BCF         STATUS,C
            RRF         REG,F
            BTFSS       STATUS,C
            GOTO        RLOOP
            GOTO        MAIN
DELAY       MOVLW       .100
            MOVWF       J
JLOOP       MOVLW       .255
            MOVWF       K
KLOOP       DECFSZ      K,F
            GOTO        KLOOP
            DECFSZ      J,F
            GOTO        JLOOP
            RETURN
ISR         
            RETFIE
            END




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

Back to Top