Сообщение от 1230056
|
походу это самое сложное
|
Положительное значение температуры записывается в прямом коде, а отрицательная - в дополнительном.
Задача: пересчитать температуру в два разряда целых, и 0 или 5 после запятой (с точностью 0,5 град)
Результат: Т3 - знак ("плюс" - опускается),TermL - целые градусы, Т0 - дробные
Считано с DS18B20: TermH - старший байт температуры, TermL - младший.
rrf TermH,F ; сдвиг всего хозяйства вправо
rrf TermL,F ; выталкивая не нужные мне 1/16
rrf TermH,F ;
rrf TermL,F ; не нужные мне 1/8
rrf TermH,F ;
rrf TermL,F ; е нужные мне 1/4
movlw B'yyyyyyyy' ; y - 0 либо 1 для гашения всех сегментов(общий катод или анод)
movwf T3 ; подготовка байта для знака
btfss TermL, 7; в старшем разряде сейчас 1 - это "минус", 0 - "плюс"
goto Convert ; если 0 - переход
clrf TermH ; если 1 - очичаем остатки старшего байта (там - несколько единиц)
movlw B'xxxxxxxx' ; xxxxxxxx - семисегментный код знака "минус" для отображения
movwf T3 ;
comf TermL,F ; Преобразование дополнительного кода для правильного отображения
incf TermL ; (нужно все разряды инвертировать и прибавить 1)
Convert
movlw ,5 ; записываем в Т0 - 5
movwf T0 ;
btfss TermL, 0 ; если в младшем разряде - 0,
clrf T0 ; то очищаем
rrf TermH,F ; выталкиваем дробную часть
rrf TermL,F ;