Формування сигналів керування й індикації, страница 4

            goto                 int_end           ; перехід на закінчення оброблювача

; оброблювач переривання від таймера

tmr_int

            bcf                  INTCON, T0IF           ; очищення прапорця переповнення TMR0

            call                  UрdаtеDіg      ; відновлення стану індикатора

            swapf              dig0, W           ; ініціалізація значення таймера

            andlw              0xF0

            movwf             TMR0

            movlw             b'00001000'    ; формування звукового сигналу

            xorwf              PORTA, F

int_end                       ; закінчення оброблювача переривання

            swapf              STATUS_TEMP, W  ; відновлення значень

            movwf            STATUS                     ; регістрів W і STATUS

            swapf              W_TEMP, F

            swapf              W_TEMP, W

            movlw             .100

            movwf             TMR0

            retfie               ; повернення з переривання

; підпрограма відновлення стану індикатора

UрdаtеDіg

            movlw             dig0     ; підготовка вмісту поточного розряду

            addwf              segment, W

            incf                 segment,1

            movwf             FSR

            movf               INDF, W

            call                  bcd_table        ; перетворення в 7-сегментний код

            movw  f          PORTB           ; вивід поточного розряду

            return

; підпрограма перетворення двійкового значення в 7-сегментний код

bcd_table

            andlw              0x0F

            addwf              PCL, F

            retlw               b'00000110'    ; 1

            retlw               b'01100110'    ; 4

            retlw               b'11111101'    ; Б.

            retlw               b'11110111'    ; A.

            retlw               b'10111001'    ; С.

; підпрограма ініціалізації мікроконтролера

Init

            bsf                   STATUS, RP0            ; вибір банку 1

            movlw            init_porta        ; ініціалізація регістра TRISA

            movwf             TRISA^80h

            movlw            init_portb       ; ініціалізація регістра TRISB

            movwf             TRISB^0x80

            movlw             init_option      ; ініціалізація регістра OPTION

            movwf             OPTION_REG^80h

            clrf                  STATUS         ; вибір банку 0

            clrf                  dig0     ; ініціалізація відображ. символу

            clrf                  dig1

            movlw 1

            movwf             dig2

            movlw 2

            movwf             dig3

            movlw 3

            movwf             dig4

            movlw 4

            movwf            dig5

            clrf                  segment

            movlw            init_intcon      ; ініціалізація регістра INTCON,    movwf INTCON            ; ;дозвіл переривань

            movwf             INTCON

            return

; основна програма

main

            call                  Init      ; ініціалізація мікроконтролера

            movlw            .92

            movwf            TMR0

m1       goto                m1

            end                  ; кінець програми

Висновок: За допомогою мікроконтролера PIC16F84A, можна формувати          сигнали керування й індикації, формувати звукові та світлові сигнали.