MOVA, 44h; Число сотен записывается в аккумулятор
OPRED: MOV 5Ah, @R0 ; Текущаяцифра.
JZOPRED1 ; Если аккумулятор равен 0, то переход на
; следующий этап с сохранением текущей
; цифры, показывающей число сотен.
DECA; Уменьшение числа сотен на 1.
INCR0 ; Изменение текущей цифры (следующая).
SJMPOPRED; Переход в начало (метку OPRED).
OPRED1: MOVR0, #60h; Номер ячейки памяти с цифрой 0.
MOVA, 45h; Число десятков пишется в аккумулятор
OPR: MOV 5Bh, @R0 ; Текущая цифра.
JZOPRED2 ; Если аккумулятор равен 0, то переход на
; следующий этап с сохранением текущей
; цифры, показывающей число десятков.
DECA; Уменьшение числа десятков на 1.
INCR0 ; Изменение текущей цифры (следующая).
SJMPOPR; Переход в начало (метку OPR).
OPRED2: MOVR0, #60h; Номер ячейки памяти с цифрой 0.
MOVA, 46h; Число единиц пишется в аккумулятор.
OPR1: MOV 5Ch, @R0 ; Текущая цифра.
JZINDIC; Если аккумулятор равен 0, то переход на
; следующий этап с сохранением текущей
; цифры, показывающей число единиц.
DECA; Уменьшение числа единиц на 1.
INCR0 ; Изменение текущей цифры (следующая).
SJMP OPR1 ; Переход в начало (метку OPR1).
; Вывод цифр на индикатор
INDIC: MOV R0, #5Ah ; Номер ячейки памяти с нужной цифрой.
MOVR1, #0h; Значение регистра 1 необходимое для
; перехода к нужной метке c выводом.
MOVR2, #32h; Число повторений вывода на индикаторы
; равно 50 (около 120Гц).
MOVR3, #1h; Значение регистра необходимое для
; перехода к метке START.
; Обработчик прерываний
SELECTOR: MOVA, R3 ; Если R3 равен 0, то переход к метке
JZST; ST.
MOVB, R1 ; Если R1 равен 0, то переход к выводу
MOVA, B; третьего разряда (числа сотен).
JZVUVOD_1
DECB; Если R1 равен 1, то переход к выводу
MOVA, B; второго разряда (числа десятков).
JZVUVOD_2
DECB; Если R1 равен 2, то переход к выводу
MOVA, B; первого разряда (числа единиц).
JZVUVOD_3
DECB; Если R1 равен 3, то переход к метке
MOV A, B ; BIG_ZADERG.
JZ BIG_ZADERG
ST: JMP START ; ПереходкметкеSTART.
VUVOD_1: MOVP2, @R0 ; Передача цифры на порт 2 (число сотен).
SETBP0.4 ; Разрешение работы дешифратора.
CLRP0.2 ; Вывод на первый индикатор.
CLRP0.5
SETBP0.3 ; Строб записи в регистр.
CLRP0.3
INCR0 ; Переход к следующей нужной цифре.
INCR1 ; Увеличение регистра перехода к
; следующей метке вывода.
MOVTH1, #0F8h; Задается значение таймера для задержки
MOVTL1, #02Fh; на 2мс.
RETI; Возврат из прерывания.
VUVOD_2: MOVP2, @R0 ; Вывод на второй индикатор числа
SETBP0.4 ; десятков.
SETBP0.2
CLRP0.5
SETBP0.3 ; Строб записи
CLRP0.3
INCR0 ; Переход к следующей нужной цифре.
INCR1 ; Увеличение регистра перехода к
; следующей метке вывода.
MOVTH1, #0F8h; Задается значение таймера для задержки
MOVTL1, #02Fh; на 2мс.
RETI; Возврат из прерывания.
VUVOD_3: MOVP2, @R0 ; Вывод на третий индикатор числа
SETBP0.4 ; единиц.
CLRP0.2
SETBP0.5
SETBP0.3 ; Строб записи.
CLRP0.3
INCR0
INCR1 ; Увеличение регистра перехода к
; следующей метке вывода.
MOVTH1, #0F8h; Задается значение таймера для задержки
MOVTL1, #02Fh; на 2мс.
RETI; Возврат из прерывания.
BIG_ZADERG: DECR2 ; Уменьшение числа повторений вывода
; на индикаторы на 1.
MOVA, #0h; Проверка числа повторений на
MOV B, R2 ; равенство 0.
CJNE A, B, D1
D1: MOV R0, #5Ah ; Возврат регистра 0 к первоначальному
; значению 5А.
MOVR1, #0h; Возврат регистра 1 к первоначальному
; значению 0.
JCD2 ; Если число повторений не равно 0, то
JNCD3 ; вывод на индикатор повторяется.
; В противном случае переход в
D2: MOVTH1, #0FFh; бесконечный цикл и ожидание
MOVTL1, #0FFh; прерывания (все повторяется заново).
RETI; Возврат из прерывания.
D3: MOVR3, #0h
MOV TH1, #0FFh
MOV TL1, #0FFh
RETI; Возврат из прерывания.
END
4. Разработка принципиальной электрической схемы
Базовым элементом схемы является микроконтроллер. Выберем его исходя из следующих параметров: четыре двунаправленных побитно настраиваемых восьмиразрядных порта ввода-вывода, наличие таймеров/счетчиков, возможность перепрограммирования ПЗУ. Данным требованиям удовлетворяет микроконтроллер АТ89C51 фирмы Atmel. Его основные параметры:
- 4K , Flash ПЗУ;
- ОЗУ 128 байт;
- 2 таймера/счетчика;
- Корпус PDIP40;
- Рабочее напряжение 5,0 В;
- Рабочая частота 12 МГц.
Для преобразования аналоговых сигналов, несущих информацию о скорости и расходе топлива, используются АЦП. Воспользуемся АЦП AD7819 фирмы AnalogDevices. 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 В), и ток через него не протекает. В этом случае должно выполняться условие