;При включении питания контроллера светодиод двигается в одну сторону.Если нажать кнопку,светодиод будет двигаться в другую сторону.
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