Цитата(Redguy @ Jul 20 2014, 21:45)

В терминале отображается формат ASCII, где цифры представляются в виде 0x30-0x39 (0-9).
Соответственно, если надо получить нужно число, то надо сначала проверить принятые байты на этот диапазон, а потом из каждого байта вычесть 0x30 (48), тогда получатся значения разрядов десятков и единиц. Далее первое полученное число умножить на 0x0A (10) и прибавить к этому второе, то получится значение в одном байте, а уж дальше формат преставления зависит только от вас, как вам больше нравится.
В терминале у вас приходят a=0x32 и b=0x34, тогда
a = a - 0x30 --> a = 2
b = b - 0x30 --> b = 4
с = a * 10 + b --> с = 24
или
с = a * 0x0A + b --> с = 0x18 (dec 24)
Такой вариант тоже вполне подходит, ведь если отбросить старшую тетраду, на конечное значение цифры это никак не повлияет, но тут если нет предварительной проверки на допустимый диапазон, то можно на символы 'C' (0x43) и 'S' (0x53) подумать ту же самую '3' (0x33).
не уверен, что сразу после сложения двух байт, которые содержат значения меньше h'10' (после операции 'И' c B'00001111'), получится значение h'24'
Как написать на ассемблере подумать можно, но что-то я подзабывать его стал. Хотя по формату команды похоже на PIC16
********************************************************************************
****************
Сделал всё как советовали, вот что получается
Например приходит ответ
+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