Понедельник, Сентябрь 21, 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
            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                             ДАЛЕЕ


Back to Top