Чтобы перейти к обсуждению непосредственно программы измерителя, нам нужно решить еще один принципиальный вопрос. Передаточная характеристика любого измерителя температуры, показывающего ее в градусах Цельсия, должна «ломаться» в нуле — ниже и выше абсолютные значения показаний возрастают. Так как мы тут действуем в области положительных напряжений, то этот вопрос придется решать самостоятельно (в АЦП типа 572ПВ2, напомним, определение абсолютной величины и индикация знака производилась автоматически).
Это несложно сделать, если представить формулу пересчета значений температуры в виде уравнения:
N = К∙(х — Z),
где
Чтобы величина по данной формуле всегда получалась положительная, нам придется сначала определять, что больше —
…
;вычисление знака:
ср AregL,KoeffL ;сравниваем х и Z
срс AregH,KoeffH
brsh Ь0
;если х меньше Z
sub KoeffL,AregL
sbc КоеffH,AregH
mov AregL,KoeffL ;меняем местами, чтобы температура
mov AregH,KoeffH ;оказалась опять в AregH: AregL
sbi PortD,7 ;знак -
rjmp m0
Ь0: ;если x больше Z
sub AregL,KoeffL
sbc AregH,KоеffH
cbi PortD,7 ;знак +
m0:
<умножение на коэффициент К>
…
Здесь разряд 7 порта D (вывод
Давление занимает только положительную область значений, поэтому там такой сложной процедуры не понадобится. Если вы посмотрите на характеристику датчика в фирменном описании, то выясните, что он работает не с начала шкалы — нулевому напряжению на выходе (и, соответственно, нулевому коду АЦП) будет соответствовать некоторое значение давления. В результате можно ожидать, что в формуле пересчета значений давления, представленной в виде
N = К∙(х + Z),
все величины будут находиться в положительной области.
Физический смысл коэффициента
Теперь можно окинуть взглядом собственно программу, которая целиком приведена в
В каждом цикле сначала проверяется счетчик cRazr, который отсчитывает разряды индикаторов (от 0 до 5). В соответствии с его значением происходит формирование кода индицируемого знака (по алгоритму вызова константы-маски знака, описанному в