скачать рефераты

скачать рефераты

 
 
скачать рефераты скачать рефераты

Меню

Измеритель расхода топлива скачать рефераты

p align="left">RAZD: JC DEL1 ; увеличивается на 2. А если остаток равен

JNC DEL2 ; 3, то - на 1. Получен новый делитель.

DEL1: INC 52h

INC 52h

SJMP RETURN ; Переход в метку RETURN.

DEL2: INC 52h

RETURN: MOV A, 55h ; Остаток от деления числителя формул

MOV B, 52h ; (4) или (6) делится на новый делитель.

DIV AB

MOV 41h, B ; Остаток от деления на новый делитель.

MOV B, #3h ; Умножение целой части от деления на

MUL AB ; новый делитель на 3.

MOV 57h, A ; В результате получены десятые доли

; деление старшего байта произведения.

MOV A, 41h ; Умножение остатка от деления на новый

MOV B, #3h ; делитель на 3.

MUL AB

MOV B, 52h ; Результат этого умножения снова делится

DIV AB ; на новый делитель и целая часть этого

ADD A, 57h ; деления складывается с десятыми долями

MOV 57h, A ; деления старшего байта произведения.

MOV 56h, 52h

MOV 42h, B ; Остаток последнего деления фиксируется.

SJMP VPERED ; Переход к нахождения сотых долей.

D_0: MOV A, 55h ; Если целая часть от деления делителя на

MOV B, #0Ah ; 10 равна нулю, то остаток от деления

MUL AB ; числителя формул (4) или (6) умножается

MOV B, 53h ; на 10 и делится на значение скорости.

DIV AB

MOV 56h, 53h ; Делитель не меняется(значение скорости).

MOV 57h, A ; В результате получены десятые доли

; деления старшего байта произведения.

MOV 42h, B ; Остаток последнего деления фиксируется.

SJMP VPERED ; Переход к нахождения сотых долей.

DALEE: MOV A, #5h ; Остаток от деления делителя на 10

CJNE A, 57h, RAZD2 ; равен 0, 1 или 9. В случае если остаток

RAZD2: JC DEL3 ; равен 9, то целая часть от деления

SJMP RETURN1 ; увеличивается на 1. В противном случае

DEL3: INC 56h ; она не меняется.

RETURN1: MOV A, 55h ; Остаток от деления числителя формул

MOV B, 56h ; (4) или (6) делится на новый делитель.

DIV AB

MOV 57h, A ; В результате получены десятые доли

; деления старшего байта произведения.

MOV 42h, B ; Остаток последнего деления фиксируется.

VPERED: MOV A, #0Ah ; Для нахождения сотых долей деления

MOV B, 42h ; старшего байта произведения, остаток

MUL AB ; предыдущего деления умножается на 10.

MOV 42h, A

MOV A, #0h ; Если данное произведение выходит за

CJNE A, B, OSH ; рамки одного байта, то в целях

OSH: JC OSH1 ; уменьшения погрешности конечного

MOV 58h, #0h ; результата, этот факт учитывается как

SJMP DALSE ; 5 сотых долей.

OSH1: MOV 58h, #5h

DALSE: MOV A, 42h ; Полученное произведение делится на

MOV B, 56h ; делитель.

DIV AB

ADD A, 58h ; Учет 5 сотых (если они есть).

MOV 58h, A ; В результате получены сотые доли

; деления старшего байта произведения.

MOV A, #0Ah ; Для нахождения тысячных долей деления

MUL AB ; старшего байта произведения, остаток

MOV 42h, A ; от деления снова умножается на 10.

MOV A, #0h

CJNE A, B, OSH2 ; Аналогичный способ уменьшения

OSH2: JC OSH4 ; погрешности в результате.

MOV 58h, #0h

SJMP DALSE2

OSH4: MOV 59h, #5h

DALSE2: MOV A, 42h ; Полученное произведение делится на

MOV B, 56h ; делитель.

DIV AB

ADD A, 59h ; Учет 5 тысячных (если они есть).

MOV 59h, A ; В результате получены тысячные доли

; деления старшего байта произведения.

MOV A, 54h ; Умножение полученного частного от

; деления старшего байта произведения

MOV B, #0FFh ; на 256 (т.к. старший байт).

MUL AB ; Сначала умножается, целая часть от

ADD A, 54h ; деления старшего байта произведения.

JC PER

SJMP NPER

PER: INC B

NPER: MOV 60h, B ; Старший байт конечного результата.

MOV 61h, A ; Младший байт конечного результата.

MOV A, 57h ; Умножаются десятые доли на 25,6 и

MOV B, #19h ; результат суммируется с младшим байтом

MUL AB ; конечного результата.

ADD A, 61h

MOV 61h, A

MOV A, 57h

MOV B, #6h

MUL AB

MOV B, #0Ah

DIV AB

ADD A, 61h

MOV 61h, A

MOV A, #4h ; Округление результата. Если остаток

CJNE A, B, OKR1 ; больше 4, то значение увеличивается на 1.

OKR1: JC OKR2

SJMP DALEE1

OKR2: INC 61h

DALEE1: MOV A, 58h ; Умножаются сотые доли на 2,6 и

MOV B, #2h ; результат суммируется с младшим

MUL AB ; байтом конечного результата.

ADD A, 61h

MOV 61h, A

MOV A, 58h

MOV B, #6h

MUL AB

MOV B, #0Ah

DIV AB

ADD A, 61h

MOV 61h, A

MOV A, #4h ; Округление результата.

CJNE A, B, OKR3

OKR3: JC OKR4

SJMP DALEE2

OKR4: INC 61h

DALEE2: MOV A, 59h ; Умножаются тысячные доли на 0,2 и

MOV B, #3h ; результат суммируется с младшим

MUL AB ; байтом конечного результата.

MOV B, #0Ah

DIV AB

ADD A, 61h

JC PER1

SJMP NPER1

PER1: INC 60h

NPER1: MOV 61h, A

MOV A, #4h ; Округление результата.

CJNE A, B, OKR5

OKR5 JC OKR6

SJMP DALE

OKR6: INC 61h

DALE: MOV A, 50h ; Деление младшего байта произведения

MOV B, 53h ; на значение скорости или на 100.

DIV AB

ADD A, 61h ; Результат суммируется с младшим

; байтом конечного результата.

JC PER2

SJMP NPER2

PER2: INC 60h

NPER2: MOV 61h, A ; Для уменьшения погрешности

MOV A, B ; конечного результата остаток от

MOV B, #2h ; деления младшего байта участвует

MUL AB ; в округлении.

MOV B, 53h

DIV AB

MOV B, A

MOV A, #0h

CJNE A, B, OK

OK: JC OK1

SJMP DALEE3

OK1: INC 61h

; Преобразование в десятичную форму записи

DALEE3: MOV A, 61h ; Разбиваем наше 16-разрядное значение

CLR ACC.7 ; на 3 4-разрядных.

CLR ACC.6

CLR ACC.5

CLR ACC.4

MOV 42h, A ; Младшее 4-разрядное значение.

MOV A, 61h

CLR ACC.3

CLR ACC.2

CLR ACC.1

CLR ACC.0

SWAP A

MOV 41h, A ; Среднее 4-разрядное значение.

MOV 40h, 60h ; Старшее 4-разрядное значение.

MOV A, 41h ; Среднее 4-разрядное значение

MOV B, #06h ; умножается на 6.

MUL AB

MOV B, #0Ah ; Затем делится на 10. Целая часть - число

DIV AB ; десятков, остаток - число единиц.

MOV 45h, A ; Число десятков.

MOV 46h, B ; Число единиц.

MOV A, 40h ; Старшее 4-разрядное значение

MOV B, #06h ; умножается на 6.

MUL AB

ADD A, 46h ; Результат складывается с числом единиц.

ADD A, 42h

MOV B, #0Ah ; Потом делится на 10.

DIV AB

ADD A, 45h ; Целая часть от деления складывается с

MOV 45h, A ; числом десятков.

MOV 46h, B ; Остаток - окончательное число единиц.

MOV A, 40h ; Старшее 4-разрядное значение

MOV B, #5h ; умножается на 5.

MUL AB

ADD A, 41h ; Результат складывается с числом десятков

ADD A, 45h

MOV B, #0Ah ; Потом делится на 10.

DIV AB

MOV 44h, A ; Число сотен.

MOV 45h, B ; Окончательное число десятков.

MOV A, 40h ; Старшее 4-разрядное значение

MOV B, #2h ; умножается на 2.

MUL AB

ADD A, 44h ; Результат складывается с числом сотен

MOV 44h, A ; Окончательное число сотен.

; Вывод результата на трехразрядный семисегментный индикатор

MOV 60h, #11000000b ; Цифра 0.

MOV 61h, #11111001b ; Цифра 1.

MOV 62h, #10100100b ; Цифра 2.

MOV 63h, #10110000b ; Цифра 3.

MOV 64h, #10011001b ; Цифра 4.

MOV 65h, #10010010b ; Цифра 5.

MOV 66h, #10000010b ; Цифра 6.

MOV 67h, #11111000b ; Цифра 7.

MOV 68h, #10000000b ; Цифра 8.

MOV 69h, #10010000b ; Цифра 9.

; Определение выводимых на индикатор цифр (т.е. двоичных комбинаций)

MOV R0, #60h ; Номер ячейки памяти с цифрой 0.

MOV A, 44h ; Число сотен записывается в аккумулятор

OPRED: MOV 5Ah, @R0 ; Текущая цифра.

JZ OPRED1 ; Если аккумулятор равен 0, то переход на

; следующий этап с сохранением текущей

; цифры, показывающей число сотен.

DEC A ; Уменьшение числа сотен на 1.

INC R0 ; Изменение текущей цифры (следующая).

SJMP OPRED ; Переход в начало (метку OPRED).

OPRED1: MOV R0, #60h ; Номер ячейки памяти с цифрой 0.

MOV A, 45h ; Число десятков пишется в аккумулятор

OPR: MOV 5Bh, @R0 ; Текущая цифра.

JZ OPRED2 ; Если аккумулятор равен 0, то переход на

; следующий этап с сохранением текущей

; цифры, показывающей число десятков.

DEC A ; Уменьшение числа десятков на 1.

INC R0 ; Изменение текущей цифры (следующая).

SJMP OPR ; Переход в начало (метку OPR).

OPRED2: MOV R0, #60h ; Номер ячейки памяти с цифрой 0.

MOV A, 46h ; Число единиц пишется в аккумулятор.

OPR1: MOV 5Ch, @R0 ; Текущая цифра.

JZ INDIC ; Если аккумулятор равен 0, то переход на

; следующий этап с сохранением текущей

; цифры, показывающей число единиц.

DEC A ; Уменьшение числа единиц на 1.

INC R0 ; Изменение текущей цифры (следующая).

SJMP OPR1 ; Переход в начало (метку OPR1).

; Вывод цифр на индикатор

INDIC: MOV R0, #5Ah ; Номер ячейки памяти с нужной цифрой.

MOV R1, #0h ; Значение регистра 1 необходимое для

; перехода к нужной метке c выводом.

MOV R2, #32h ; Число повторений вывода на индикаторы

; равно 50 (около 120Гц).

MOV R3, #1h ; Значение регистра необходимое для

; перехода к метке START.

; Обработчик прерываний

SELECTOR: MOV A, R3 ; Если R3 равен 0, то переход к метке

JZ ST ; ST.

MOV B, R1 ; Если R1 равен 0, то переход к выводу

MOV A, B ; третьего разряда (числа сотен).

JZ VUVOD_1

DEC B ; Если R1 равен 1, то переход к выводу

MOV A, B ; второго разряда (числа десятков).

JZ VUVOD_2

DEC B ; Если R1 равен 2, то переход к выводу

MOV A, B ; первого разряда (числа единиц).

JZ VUVOD_3

DEC B ; Если R1 равен 3, то переход к метке

MOV A, B ; BIG_ZADERG.

JZ BIG_ZADERG

ST: JMP START ; Переход к метке START.

VUVOD_1: MOV P2, @R0 ; Передача цифры на порт 2 (число сотен).

SETB P0.4 ; Разрешение работы дешифратора.

CLR P0.2 ; Вывод на первый индикатор.

CLR P0.5

SETB P0.3 ; Строб записи в регистр.

CLR P0.3

INC R0 ; Переход к следующей нужной цифре.

INC R1 ; Увеличение регистра перехода к

; следующей метке вывода.

MOV TH1, #0F8h ; Задается значение таймера для задержки

MOV TL1, #02Fh ; на 2мс.

RETI ; Возврат из прерывания.

VUVOD_2: MOV P2, @R0 ; Вывод на второй индикатор числа

SETB P0.4 ; десятков.

SETB P0.2

CLR P0.5

SETB P0.3 ; Строб записи

CLR P0.3

INC R0 ; Переход к следующей нужной цифре.

INC R1 ; Увеличение регистра перехода к

; следующей метке вывода.

MOV TH1, #0F8h ; Задается значение таймера для задержки

MOV TL1, #02Fh ; на 2мс.

RETI ; Возврат из прерывания.

VUVOD_3: MOV P2, @R0 ; Вывод на третий индикатор числа

SETB P0.4 ; единиц.

CLR P0.2

SETB P0.5

SETB P0.3 ; Строб записи.

CLR P0.3

INC R0

INC R1 ; Увеличение регистра перехода к

; следующей метке вывода.

MOV TH1, #0F8h ; Задается значение таймера для задержки

MOV TL1, #02Fh ; на 2мс.

RETI ; Возврат из прерывания.

BIG_ZADERG: DEC R2 ; Уменьшение числа повторений вывода

; на индикаторы на 1.

MOV A, #0h ; Проверка числа повторений на

MOV B, R2 ; равенство 0.

CJNE A, B, D1

D1: MOV R0, #5Ah ; Возврат регистра 0 к первоначальному

; значению 5А.

MOV R1, #0h ; Возврат регистра 1 к первоначальному

; значению 0.

JC D2 ; Если число повторений не равно 0, то

JNC D3 ; вывод на индикатор повторяется.

; В противном случае переход в

D2: MOV TH1, #0FFh ; бесконечный цикл и ожидание

MOV TL1, #0FFh ; прерывания (все повторяется заново).

RETI ; Возврат из прерывания.

D3: MOV R3, #0h

MOV TH1, #0FFh

MOV TL1, #0FFh

RETI ; Возврат из прерывания.

END

4. Разработка принципиальной электрической схемы

4.1 Выбор элементов

Базовым элементом схемы является микроконтроллер. Выберем его исходя из следующих параметров: четыре двунаправленных побитно настраиваемых восьмиразрядных порта ввода-вывода, наличие таймеров/счетчиков, возможность перепрограммирования ПЗУ. Данным требованиям удовлетворяет микроконтроллер АТ89C51 фирмы Atmel. Его основные параметры:

- 4K , Flash ПЗУ;

- ОЗУ 128 байт;

- 2 таймера/счетчика;

- Корпус PDIP40;

- Рабочее напряжение 5,0 В;

- Рабочая частота 12 МГц.

Для преобразования аналоговых сигналов, несущих информацию о скорости и расходе топлива, используются АЦП. Воспользуемся АЦП AD7819 фирмы Analog Devices. AD7819 является быстродействующим, микропроцессорно-совместимым, 8-ми разрядным АЦП с максимальной производительностью 200 К выборок/с. Преобразователь питается от однополярного источника с напряжением от 2.7 В до 5.5 В и содержит АЦП последовательного приближения с временем преобразования 4.5 мкс, встроенную систему выборки/хранения, встроенный тактовый генератор и 8-ми разрядный параллельный интерфейс. Параллельный интерфейс предназначен для удобства согласования с микропроцессорами. АЦП выпускается в малогабаритном, пластиковом корпусе типа 16-lead DIP (ширина 0.3 дюйма), а также в корпусах 16-lead SOIC и 16-lead TSSOP.

На рисунке 3 приведена временная диаграмма работы АЦП, согласно которой на АЦП подаются сигналы начала преобразования (), разрешения работы () и чтения () от микроконтроллера, а затем принимаются данные обработки.

Рисунок 3 - Временная диаграмма работы АЦП

Все эти сигналы были реализованы при разработке программы.

В качестве регистра для передачи данных к индикаторам используем регистр К555ИР27, его параметры:

Для активации встроенного тактового генератора микроконтроллера к его выводам BQ1 и BQ2 подключим кварцевый резонатор РК169МА с тактовой частотой 12 мГц.

В качестве дешифратора используем схему К155ИД4 со следующими па-метрами:

В качестве семисегментных индикаторов используются индикаторы красного цвета АЛС333Б с общим анодом, ток сегмента которых 20 мА, а падение напряжения на сегменте 2В. Высота знака индикатора 11 мм.

Транзисторы для реализации ключей в схеме выбираются так, чтобы ток коллектора транзистора превосходил ток свечения семи сегментов индикатора (Iк 140 мА). Так как схема включения используемого индикатора - с общим анодом, и активным является низкий уровень сигнала, то должен использоваться p-n-p транзистор. Исходя из этих условий используются транзисторы KT502А.

Номиналы конденсаторов в цепи питания АЦП указаны в документации производителем (емкости С1 и С2 по 10 мкФ, емкости С3 и С4 по 0,1 мкФ).

Для снижения помех источника питания используем электролитический конденсатор K53-18-32В ёмкостью 47 мкФ (конденсаторы С7,С8 и С9).

Для данного микроконтроллера автоматический сброс при включении питания UCC может быть реализован подключением входа RST к UCC через конденсатор С12 емкостью 10 мкФ и к шине 0 В через резистор 8,2 кОм.

В качестве конденсаторов C10 и С11 выберем керамические K10-17а-М47 емкостью 30пФ, в качестве блокировочных С5, С6, С13-С15 подойдут также керамические, но другой группы ТКЕ K10-17а-H90 емкостью 0.1 мкФ.

Так как по заданию входное напряжения 10 В, а входное напряжение АЦП может достигать только 5В, поэтому на входе АЦП устанавливается резистивный делитель, уменьшающий входное напряжение вдвое. Для этой цели используются два одинаковых резистора сопротивлением 100 кОм. Номиналы резисторов выбираются из условия, что они должны быть много меньше входного сопротивления АЦП, которое составляет 10 МОм.

Сопротивления R6 - R13 рассчитываются следующим образом. Так как напряжение насыщения коллектор-эмиттер транзистора равно 0,5 В, а падение напряжения на светодиоде - 2 В, падение напряжения на всей цепи 5В и ток светодиода равен 20 мА, то

=125 Ом

Таким образом, номиналы сопротивлений R6 - R13 имеют стандартное значение 120 Ом.

Расчет сопротивлений в цепи транзисторного ключа представлен ниже.

Рисунок 2 - Схема ключа

Так как ток коллектора должен составлять 140 мА для нормального свечения сегментов индикатора, то с учетом транзистора равного 69 имеем ток базы

мА.

В случае если Uвх=U0 (напряжение низкого уровня - 0,4 В) транзисторный ключ открыт (Uбэ=UR2=0,7 В). Тогда напряжение на R1

UR1=5 - Uбэ - U0=5 - 0,7 - 0,4=3,9 В, (1)

a ток через R1

IR1=Iб + IR2. (2)

В случае если Uвх=U1 (напряжение высокого уровня - 4,5 В) транзисторный ключ закрыт (Uбэ=UR2 < 0,4 В), и ток через него не протекает. В этом случае должно выполняться условие

= = (3)

Чтобы найти R1 и R2, необходимо совместно рассмотреть условия (1), (2) и (3), из которых можно получить два условия: (4) подставлением (1) в (2) и (3):

(4)

Из условий (3) и (4) получены номиналы сопротивлений R1 и R2, равные 1,8 кОм и 6,8 кОм соответственно.

Номиналы сопротивлений R14, R16, R18 равны 1,8 кОм, а сопротивлений R15, R17, R19 6,8 КОм.

Заключение

В результате курсового проектирования были выполнены все поставленные в техническом задании требования к устройству. Спроектированный на базе 8-разрядного микроконтроллера измеритель расхода топлива, используя оцифрованные аналого-цифровыми преобразователями сигналы, обрабатывает их и выводит результат на семисегментные индикаторы. Причем данные на индикаторах быстро обновляются, что позволяет непрерывно следить за всей динамикой изменения расхода топлива.

На языке ассемблер написана программа, описывающая весь алгоритм работы устройства, и разработана принципиальная электрическая схема измерителя. Структура программы позволили не использовать никаких дополнительных дешифраторов в схеме для вывода данных на индикаторы.

Литература

1. Бродин В. Б., Шагурин М. И. Микроконтроллеры: архитектура, программ-мирование, интерфейс. - М.: ЭКОМ,1999.-398 c.

2. Домрачев В. Г., Иванов С. Н., Романов А.Ф. Одноплатные микроЭВМ. - М.: Энергоатомиздат,1988.-128 с.

3. Партала О.Н. Цифровая электроника: СПб.: Наука и техника, 2000. - 208с.

4. Федорков Б.Г., Телец В.А. Микросхемы ЦАП и АЦП: функционирование, параметры, применение.-М.: Энергоатомиздат,1990.-319 с.

Страницы: 1, 2