;необходимая иницилизация ;Таймер TMR0 movlw 0x06 ;Установка начального значения таймера movwf TMR0 bsf STATUS,5 ;Входим в банк 1 movlw b'000010' ;Установка работы таймера movwf OPTION_REG ;Таймер запущен, прескалер 1:8 bcf STATUS,5 ;Входим в банк 0 bsf OPTION_REG,T0CS ;Нестандартная остановка таймера bsf INTCON,T0IE ;прерывание от таймера TMR0 разрешено ;Внешние прерывания bsf INTCON,4 bsf INTCON,6 ;прерывание от периферии разрешено ;Порт PORTB bsf STATUS,5 ;Входим в банк 2 movlw 0x03 ;Установка порта на вывод movwf TRISB bcf STATUS,5 ;Входим в банк 0 movlw 0xFF movwf PORTB ;и глобальные не забудте ;ниже обработчики прерываний ;Процедура обработки прерывания от INT INT_0: bcf INTCON,INTF ;Очищаем бит события прерывания bsf STATUS,5 ;Входим в банк 1 bcf OPTION_REG,T0CS ;запуск таймера TMR0 (нестандартно) bcf STATUS,5 ;Входим в банк 0 movlw 0x06 ;Установка начального значения таймера movwf TMR0 return ;Процедура обработки прерывания от TMR0 Timer_0: bsf STATUS,5 ;Входим в банк 1 bsf OPTION_REG,T0CS ;остановка таймера TMR0 (нестандартно) bcf STATUS,5 ;Входим в банк 0 bcf INTCON,T0IF ;Очищаем бит события прерывания movlw 0x06 ;Установка начального значения таймера movwf TMR0 btfsc PORTB,0 return btfsc PORTB,1 goto down up: incf volum,f ;здесь увеличиваем return down: decf volum,f ;здесь уменьшаем return