;Все тоже самое-только программа другая)))
LIST P=16F628A
INCLUDE P16F628A.INC
__CONFIG _INTOSC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_ON&_MCLRE_OFF&_LVP_OFF
ERRORLEVEL -302
CBLOCK 20H
W_TEMP
STATUS_TEMP
J
K
COUNT
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
CLRF PORTB
CLRF PORTA
BANK1
MOVLW B'11110000'
MOVWF TRISA
MOVLW B'00000001'
MOVWF TRISB
BANK0
MOVLW B'00001111'
MOVWF PORTA
MAIN CLRF COUNT ;обнуляем счетчик
MLOOP MOVF COUNT,W ;берем число из счетчика
CALL TABLE ;вызываем таблицу
MOVWF PORTB ;после выхода из таблицы в W будет код цифры
CALL DELAY ;задержка
INCF COUNT,F ;увеличиваем счетчик на 1 и сохраняем результат в нем же
MOVF COUNT,W ;берем значение счетчика
SUBLW .10 ;и отнимаем от 10-ти
BTFSS STATUS,Z ;проверяем результат равен нулю?
GOTO MLOOP ;нет не равен
GOTO MAIN ;да равен
DELAY MOVLW .255
MOVWF J
JLOOP MOVLW .255
MOVWF K
KLOOP DECFSZ K,F
GOTO KLOOP
DECFSZ J,F
GOTO JLOOP
RETURN
;Таблица наших кодов цифр.PCL-это счетчик комманд,если мы попадаем в эту точку программы,
;то PCL равен этой точке,если мы прибавим какую нибудь цифру к нему то прыгнем на это расстояние
;от той точки программы к которой изначально пришли.Советую пройти всю программу в отладчике,чтобы понять.
TABLE ADDWF PCL,F
RETLW B'10000000'
RETLW B'11110010'
RETLW B'01001000'
RETLW B'01100000'
RETLW B'00110010'
RETLW B'00100100'
RETLW B'00000100'
RETLW B'11110000'
RETLW B'00000000'
RETLW B'00100000'
ISR MOVWF W_TEMP
SWAPF STATUS,W
BCF STATUS,RP0
MOVWF STATUS_TEMP
EXIT_ISR SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
END
НАЗАД Cи ATtiny2313 ASSEMBLER ATtiny2313 ДАЛЕЕ