Перейти к содержанию

Алгоритм И Программа Преобразования Данных, Считываемых С Цифрового Термодатчика


Рекомендуемые сообщения

Здравствуйте! Ситуация такая: нужно разработать микропроцессорную систему измерения температуры с цифрового датчика tmp03 и передать результаты через UART. Подключил датчик, написал программу считывания:

0016 14 RDTMP: ;Подпрограмма чтения датчика

00B0 15 TMPIN bit P3.0;Порт связи с датчиком TMP03

0040 16 T1H data 40H;Определение места хранения старшего байта T1

0041 17 T1L data 41H;Определение места хранения младшего байта T1

0042 18 T2H data 42H;Определение места хранения старшего байта T2

0043 19 T2L data 43H;Определение места хранения младшего байта T2

0016 758911 20 mov TMOD,#11H;Задание 16-разрядного режима работы таймеров

0019 758C00 21 mov TH0,#0;Обнуление таймера 0

001C 758A00 22 mov TL0,#0;Обнуление таймера 0

001F 758D00 23 mov TH1,#0;Обнуление таймера 1

0022 758B00 24 mov TL1,#0;Обнуление таймера 1

0025 30B0FD 25 WT1: jnb TMPIN,WT1;Ожидание перехода входной величины

в высокое состояние (начала T1)

0028 D28C 26 setb tr0 ;Запуск таймера (для замера T1)

002A 20B0FD 27 WT2: jb TMPIN,WT2;Ожидание перехода входной величины в

низкое состояние (конец T1, начало T2)

002D C28C 28 clr tr0 ;Остановка таймера

002F D28E 29 setb tr1 ;Запуск таймера (для замера T2)

0031 30B0FD 30 WT2E:jnb TMPIN,WT2E;Ожидание перехода входной величины

в высокое состояние (конец T2)

0034 C28E 31 clr tr1 ;Остановка таймера

0036 22 32 ret ;Возврат из подпрограммы

Теперь мне нужно преобразовать считанные данные с датчика. Преподаватель сказал взять температуру 23 градуса для примера. Формула для рассчета температуры исходя из количества считываемых импульсов такая: T©=235-((400*T1)/T2). Нужно написать алгоритм и подпрограмму.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Код под тэг засуньте, а то ничерта не понятно.

Вообще говоря, умножение на 400 это сумма произведений на 256, 128 и 16 (400= 256+128+16). Т.е. применяем сдвиги влево и суммирование. Далее делим на Т2, по всей видимости целочисленно, простым вычитанием. Ну и под конец результат вычитаем из 235-ти.

Изменено пользователем солар

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Код под тэг засуньте, а то ничерта не понятно.

Вообще говоря, умножение на 400 это сумма произведений на 256, 128 и 16 (400= 256+128+16). Т.е. применяем сдвиги влево и суммирование. Далее делим на Т2, по всей видимости целочисленно, простым вычитанием. Ну и под конец результат вычитаем из 235-ти.

Спасибо, конечно, но это не совсем то, что нужно. В общем у меня есть написанная подпрограмма, теперь мне нужно разобраться, откуда здесь что берется. Может здесь мне кто-то, недалекому, поможет с этим ?

TRANS: ;Подпрограмма преобразования данных

S1 data 44H ;Единицы отображения

S10 data 45H ;Десятки отображания

S100 data 46H ;Сотни оотображения

SN bit 2FH.0 ;Знак числа

T1XH data 47H ;Старший байт результата 200*T1

T1XM data 48H ;Средний байт результата 200*T1

T1XL data 49H ;Младший байт результата 200*T1

call MULT ;Вызов подпрограммы умножения 200 на T1

;Сдвиг T2 на 1 разряд вправо (деление на 2), чтобы домножать надо не на 400(два байта) по спецификации, а на 200 (один байт)

;Поиск величины температуры в Кельвинах

HK data 4AH ;Переменная подбора текущей температуры в кельвин*2

mov HK,#254 ;Задание начальной величины цикла подбора температуры

NK: mov a,#254

clr c

subb a,HK

mov r2,a

mov r0,th1

mov r1,tl1

call MULT2X1

;Сравнение 200T1 и (254-K/2)T2

clr c

mov a,r5

subb a,T1XL

mov a,r4

subb a,T1XM

mov a,r3

subb a,T1XH

jnc FOUND ;если 200T1 стало меньше(254-K/2)T2, то температура найдена

djnz HK,NK

FOUND: clr c ;Сравнение HK c 273/2 (определение знака температуры)

mov a,#137

subb a,HK

jnc POS

NEG: setb SN ;Знак числа - минус

DCG data 4BH ;Градусы Цельсия (по модулю)

;Определение модуля температуры в гр.Цельсия при отрицательной температуре

mov a,#136

clr c

subb a,HK

rlc a

inc a

mov dcg,a

jmp NNN

POS: clr SN ;Знак числа - плюс

;Определение модуля температуры в гр.Цельсия при положительной температуре

mov a,HK

clr c

subb a,#136

rlc a

dec a

mov dcg,a

NNN: ;Выделение сотен, десятков, единиц

mov a,dcg ;Сотни

mov b,#100

div ab

mov S100,a

mov a,b ;Десятки

mov b,#10

div ab

mov S10,a

mov S1,b ;Единицы

ret ;Возврат из подпрограммы

MULT: ;Подпрограмма умножения на 200 на T1

mov r0,th0

mov r1,tl0

mov r2,#200 ;Подготовка множителя

call MULT2X1 ;Вызов подпрограммы множения 2байтового на однобайтовое число

mov T1XH,r3

mov T1XM,r4

mov T1XL,r5

ret

MULT2X1: ;Подпрограммы умножения 2байтового на однобайтовое число

;Первое число R0,R1 Второе число R3 Результат R4, R5, R6

mov a,r1

mov b,r2

mul ab

mov r5,a

mov r4,b

mov a,r0

mov b,r2

mul ab

mov r3,b

add a,r4

mov r4,a

mov a,r3

addc a,#0

mov r3,a

ret

Так вот, по этой подпрограмме у меня следующие вопросы:

-почему мы выбираем здесь начальную величину цикла подбора температуры в Кельвин, и почему именно 254 ?

-если начальная формула у нас 235-((400*T1)/T2), тогда откуда здесь появляется (254-K/2)T2 ?

-никак не пойму принцип построения данного алгоритма. Разъясните дураку :)post-180778-0-61594500-1398752838_thumb.jpg

Буду благодарен хоть какой нибудь помощи :)

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

В общем преподаватель сказал умножать и делить так как оно и есть. То есть сначала умножать 400 на Т1, затем все это поделить на Т2 и вычесть это дело из 235. Все подпрограммы нашел, не пойму, как написать алгоритм. Помогите, люди добрые :help:

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...