Цитата(Hellka @ Dec 21 2006, 13:37)

делаю бортовой компьютер на пике
снимаю ацп значения с датчиков, соответственно в регистре adres остаются какие-то значения, мне нужно сопоставить эти значения с реальными показателями датчиков. делаю это следующим образом:
делаю АЦП преобразование, а дальше - сравнение:
Код
skipped
датчиков у меня 4 и код оч громоздкий, каким образом можно оптимизировать код? препод что-то говорил про таблицу, а не пойму, пробовал с помощью PCL - не выходит
Смущает весьма нелинейная характеристика датчика давления:
0 - 152
1 - 156
2 - 163
3 - 174
4 - 183
5 - 189
6 - 192
7 - 210
Про вероятные неточности в алгоритме Вам уже сказали - по-видимому, предполагалось, что строки
Код
movlw .210
subwf davl, 0
btfss STATUS, 0
movlw .7
movwf dav_vivod
...
будут выглядеть примерно так:
Код
movlw .210
subwf davl, w
movlw .7
btfsc STATUS, 0
goto cmp_dav_done
movlw .192
subwf davl, w
movlw .6
btfsc STATUS, 0
goto cmp_dav_done
...
movlw .156
subwf davl, w
movlw .1
btfss STATUS, 0
movlw .0
cmp_dav_done:
movwf data
...
Указывать приемник "w" или "f" ей-ей нагляднее, чем "0" или "1".
Если же характеристика датчика все-таки достаточно линейна (т.е. с достаточной точностью может быть описана выражением "dav_vivod = a*davl + b"), то задача сведется к нахождению на листе бумаги коэффициентов a и b и реализации соответствующего алгоритма.
Хинт: в вычисления с плавающей запятой здесь впадАть не стОит

.