********************************************************************************
****************
Сделал всё как советовали, вот что получается
Например приходит ответ
+csq: 24,0
OK
После выхода из прерывания у меня в регистрах находится
REG_1=0x32
REG_2=0x34
После возврата в программу я вычитаю из каждого числа 0x30,ответ в регистры
REG_1=2
REG_2=4
Умножаю первое число на 10 для перевода в старший разряд
и складываю оба числа, в итоге получается REG_SUMMA=24
всё правильно
Дальше у меня подпрограмма проверки попадания этого числа в диапазон 5...31
movf CSQ_SUMMA, w
addlw -.5 ; Сперва нормируем значение
addlw -(.31 - .5 + 1) ; Теперь сравниваем с диапазоном
btfsc STATUS,C
goto SKIP
;сюда попадаем если сумма входит в диапазон
SKIP : ;сюда попадаем если не попадает в диапазон
В MPLAB всё проходит отлично и правильно , а вот в запрограммированном устройстве почему-то вылетает в SKIP.
НИКАК НЕ ПОЙМУ В ЧЁМ ПРОБЛЕМА. МОЖЕТ ПОДСКАЖЕТЕ ?
*****************************************************************************
Второй вариант той же программы проверки попадания в диапазон 5.....31
movlw .5 ; Проверяем нижнюю границу МЕНЬШЕ < 5
bcf STATUS,C ;сбрасываем флаг С
subwf CSQ_SUMMA,W ;вычитаем содержимое W из CSQ_Reg,РЕЗУЛЬТАТ --> W
btfss STATUS,C ; проверяем БИТ 0 (C - CARRY-ПЕРЕНОС),ЕСЛИ 1 - ПЕРЕНОС ЕСТЬ, 0 - ПЕРЕНОСА НЕТ
goto SKIP ; Меньше минимума - выходим
movlw (.31 + 1) ; Проверяем верхнюю границу БОЛЬШЕ > 31
bcf STATUS,C ;сбрасываем флаг С
subwf CSQ_SUMMA,W ;результат в --> W
btfsc STATUS,C ;проверяем БИТ 0 (C - CARRY-ПЕРЕНОС),ЕСЛИ 1 - ПЕРЕНОС ЕСТЬ, 0 - ПЕРЕНОСА НЕТ
goto SKIP ; Больше максимума – выходим
В MPLAB также ВСЁ ПРОХОДИТ ПРАВИЛЬНО, В УСТРОЙСТВЕ - ТО ЖЕ САМОЕ
В ней первая половина программы проходит правильно, а вторая почему-то неправильно - вылетает в SKIP