Доброго времени всем, решил "замутить" и в дальнейшем реализовать ПИ регулятор. Вот только не могу справиться с количеством "нажматий" хочу 0+16 и -16, итого 16, (короче от нуля, без отрицательных чисел). В симуляторе гоняет регистр по кругу от 0 до 239 и наоборот (больше регистр не позволяет). Помогите чтобы первые 4 бита регистра VRCON не переполнить, при EF остановить и дальше не плюсовать, а при E0 не минусовать дальше.
Мой код:
;FOR PIC16F628A
;РАЗРАБОТАЛ ТЁМЫЧ
;RB0 КНОПА ПРИБАВИТЬ
;RB1 КНОПА УБАВИТЬ
;RA2 ВЫХОД (Vref)
;****************************************************************************
D_0 EQU 0X25 ;регистр ДАННЫЕ НА ВЫХОД
MAX EQU 0X27 ;регистр МАКСИМУМ 16
MIN EQU 0X28 ;регистр МИНИМУМ 0
T_0 EQU 0X29 ;ДЛЯ ЗАДЕРЖКИ
;============================================================================
Org 0X00
GOTO MAIN ;поехали
;Org 0X04
;GOTO TMR_0 ;ОБРАБОТКА ТАЙМЕРА
;***************************************************************************
MAIN: ; установка портов
CLRF PORTA
CLRF PORTB
CLRF STATUS
MOVLW B'00000010'
MOVWF CMCON
BSF STATUS, RP0
MOVLW B'11100000'
MOVWF VRCON
;BCF PCON, 3
MOVLW B'10000110' ;
MOVWF OPTION ;
MOVLW B'00011111'
MOVWF TRISA
MOVLW B'00000111'
MOVWF TRISB
MOVLW B'00000001'
MOVWF PIE1
BCF STATUS, RP0
MOVLW B'00110101'
MOVWF T1CON
MOVLW B'00100000'
MOVWF INTCON
CLRF D_0
BCF STATUS, Z
;===========================================================================
S_1: ;SV1 +
BTFSS PORTB, 0
GOTO S_11
CALL T0
BTFSS PORTB, 0
GOTO S_11
BTFSS STATUS, Z
CALL ID
BTFSS MAX, 3
CALL ID
GOTO S_11
S_11: ;SV2 -
BTFSS PORTB, 1
GOTO S_1
CALL T0
BTFSS PORTB, 1
GOTO S_1
BTFSS STATUS, Z
CALL DD
BTFSC MIN, 3
CALL DD
GOTO S_1
;===========================================================================
ID: ;INC
BCF STATUS, Z
INCF D_0, 1
MOVFW D_0
ADDLW B'11100000'
BCF STATUS, Z
BSF STATUS, RP0
MOVWF VRCON
MOVWF MAX
XORLW B'11101111'
BCF STATUS, RP0
RETURN
;--------------------------------------------------------------------------
DD: ;DEC
BCF STATUS, Z
DECF D_0, 1
MOVFW D_0
ADDLW B'11100000'
BSF STATUS, RP0
MOVWF VRCON
MOVWF MIN
XORLW B'11100000'
BCF STATUS, RP0
RETURN
;==========================================================================
;==================ЗАДЕРЖКА=ДРЕБЕЗГА=======================================
T0: ;МАЛАЯ ДЛЯ СИМУЛЯТОРА (ИНАЧЕ 255)
MOVLW .5
MOVWF T_0
T_00:
DECFSZ T_0, 1
GOTO T_00
RETURN
;==========================================================================
END