Система переривань мікроконтролера PIC16F84. Власні оброблювачі переривань, страница 3

       nop                   ;пустая команда

       nop                   ;пустая команда

       nop                   ;пустая команда

       goto loop             ;зацикливаем программу

init   movlw b'01000000'     ;внешнее прерывание на RB0/INT

       OPTION                ;осуществляется по переднему фронту

       movlw b'11111111'     ;все разряды PORTB

       TRIS PORTB            ;на ввод

       movlw b'11111101'     ;все разряды PORTA кроме первого (RA1)

       TRIS PORTA            ;на ввод

       Return                ;вихід з підпрограми ініціалізації

obrob_INT                       ;обраболювач прерывания INT

       incfsz counter_l        ;инкремент младшего байта счетчика

        goto m1                 ;переход если нет переполнения

        incf counter_h          ;инкремент старшего байта счетчика

m1      movf counter_l,0

       bcf INTCON,INTF          ;сброс флага прерывания INT

       return                   ;вихід з підпрограми обраболювача прерывания

obrob_RB4                       ;обработчик прерывания от RB4  

       movf PORTB,0            ;чтение состаяния порта В

        xorwf oldportb,0        ;сравнение с предыдущем значением порта В

        movwf test              ;сохраняем результат сравнения

        btfss test,4            ;проверяем изминилось ли состояние RB4 

        goto notRB4             ;если нет переход на конец обработчика

                                ;если изминилось то формируем импульс на выводе RA1 (ti=7*tц)

       bcf PORTA,1           ;сброс RA1

       bsf PORTA,1           ;установка RA1

       nop                   ;пустая команда

       nop                   ;пустая команда

       nop                   ;пустая команда

        nop                   ;пустая команда

        nop                   ;пустая команда

        nop                   ;пустая команда

        nop                   ;пустая команда

       bcf PORTA,1           ;сброс RA1

notRB4 movf PORTB,0          ;чтение состаяния порта В

        movwf oldportb       ;сохранение для следубщего сравнения

        bcf INTCON,RBIF       ;сброс флага прерывания

       return                ;вихід з підпрограми обраболювача прерывания

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

Тект файлу лістинга цієї програми має наступний вигляд:

MPASM 02.20 Released             LAB5.ASM   5-4-2004  21:24:27         PAGE  1

LOC  OBJECT CODE     LINE SOURCE TEXT

 VALUE

                    00001         list p=16f84a           ;определение типа мк

                    00002         #include p16f84.inc     ;подключение файла p16f84a.inc

                    00001         LIST

                    00002 ; P16F84.INC  Standard Header File, Version 2.00    Microchip Technology, Inc.

                    00136         LIST

  0000000C          00003         counter_l EQU 0x0c

  0000000D          00004          oldportb EQU 0x0d

  0000000E          00005               T_W EQU 0x0e

  0000000F          00006          T_STATUS EQU 0x0f

  00000010          00007         counter_h EQU 0x10

  00000011          00008              test EQU 0x11

                    00009

0000 138B           00010         bcf INTCON, GIE         ;запрет прерываний

0001 2811           00011         goto start

                    00012        

0002                00013 int_point

0004                00014         org 0x04                ;начало вектора прерываний

0004 138B           00015         bcf INTCON, GIE         ;запрет прерываний

0005 008E           00016         movwf T_W               ;сохраняем значение W

0006 0E03           00017         swapf STATUS,W          ;сохранение регистра

0007 008F           00018         movwf T_STATUS          ;STATUS

0008 188B           00019         btfsc INTCON,INTF      ;ожидание появления сигнала на ножке INT