Устройство для измерения угла опережения зажигания четырехтактных карбюраторных двигателей

Загрузить архив:
Файл: vdv-0761.zip (55kb [zip], Скачиваний: 99) скачать

Министерство высшего образования Украины

Национальный технический университет Украины

“Киевский политехнический институт”

Радиотехнический факультет.

Кафедра радиотехнических устройств и систем.

Êóðñîâàÿ ðàáîòà

ïî êóðñó

“Öèôðîâûå óñòðîéñòâà è ìèêðîïðîöåññîðû”

Устройство для измерения угла опережения зажигания четырехтактных карбюраторных двигателей

Âûïîëíèëè: ñòóäåíòû ãðóïïû ÐÒ-42

Ñîëîìåíöåâà Ê. Ê.

ßí÷óê È. Â.

Ïðîâåðèë: Ìèõàéëåíêî Ì. Â.

Çàùèùåíà ñ îöåíêîé:

—Êèåâ 1997—

Оглавление

TOC o "1-1" 1. Òåõíè÷åñêîå çàäàíèå......................... GOTOBUTTON _Toc389725459  PAGEREF _Toc389725459 3

2. Îïèñàíèå ïîäîáíûõ ñõåìîòåõíè÷åñêèõ ðåøåíèé.. GOTOBUTTON _Toc389725460PAGEREF _Toc389725460 3

3. Ïðèíöèï ðàáîòû è ìåòîäèêà èçìåðåíèÿ......... GOTOBUTTON _Toc389725461  PAGEREF _Toc389725461 3

4. Àïïàðàòíîå îáåñïå÷åíèå...................... GOTOBUTTON _Toc389725462  PAGEREF _Toc389725462 4

5. Ïðîãðàììíîå îáåñïå÷åíèå..................... GOTOBUTTON _Toc389725463  PAGEREF _Toc389725463 8

Ëèòåðàòóðà.................................... GOTOBUTTON _Toc389725464  PAGEREF _Toc389725464 16


[1][AK1][AK2][AK3]

JR    NZ N; на выходе таймера истинное значение счетчика

LD    (R7),1; на выходе таймера ложное значение счетчика

EXX

RETI

N:    LD    (R7),0

IN    A,0 ; ввод значения Счетчика1 с выхода таймера.

XORFFH ; инверсия, так как счетчик таймера считает в отрицательном направлении.

LD    L,A

IN    A,0

XORFFH

LD    H,A

LD    (R1), HL

IN    A,4 ; ввод состояния переключателя.

CPS1

JP     NZ  A; если не нажат, то переход к А.

LD    BC, (R1) ;вычисление количества оборотов.

LD    (A1), BC

LD    (A2),10

CALL DEL ; вызов процедуры деления.

LD    BC, (A2)

LD    (A2), BC

LD    (A1), 50000

CALL DEL

LD    (A2),6

CALL YMH ;вызов процедуры умножения.

LD    BC, (A1)

LD    (R3), BC

LD    (R10),0

CALL DECT ; вызов процедуры разбиения на десятки.

EXX

RETI

A:     IN    A, 1 ; ввод значения Счетчика2 с выхода таймера.

XORFFH

LD    L, A

IN    A, 1

XORFFH

LD    H, A

LD    (R2), HL ; вычисление угла опережения зажигания.

LD    (A1), 36 (10)

LD    (A2), HL

CALL YMH

LD    HL, (A1)

LD    BC, (R1)

LD    (A1), BC

LD    (A2), 10

CALL DEL

LD    BC, (A1)

LD    (A2), BC

LD    (A1), HL

CALL DEL

LD    BC, (A1)

LD    (R3), BC

LD    BC, (A3)

LD    (R10), BC

CALL DECT

EXX

RETI

Подпрограмма DECT:

;процедура разбиения числа на десятки (на цифры).

LD    BC, (R3) ; ввод числа, которое нужно разбить осуществляется через ячейку с адрессом R3.

LD    (A1), BC

C:     LD    (A2), 10

CALL DEL

LD    B, (A3)

INC  (R4) ; количество десятков в ячейке с адресом R4.

LD    A, (R4)

ADDA, (R5)

LD    (A), B

LD    A, (A1)

CPS10

JP    NC   C;

LD    B, (A1)

INC(R4)

LD    A, (R4)

ADDA, R5

LD    (A), B ; цифры находятся в памяти друг за другом, в порядке возрастания начиная с адреса R5.

INC   A

LD    (A), 128 (10) ;вывод точки

INC   A

LD    B, (R10)

LD    (A), B

RET

Подпрограмма DEL:

; процедура деления одного числа (в ячейке памяти по адресу А1) на другое ( в ячейке памяти по адрессу А2).

PUSH BC

PUSH DE

PUSH HL

LD    HL, (A2)

LD    DE, (A1)

LD    BC, 0

M1:   LD   (A4), HL

SBCHL, DE

INCBC

JR    NC, M1;

DEC BC

LD    (A1), BC ; результат заносится в ячейку памяти с адресом А1.

LD    HL, (A4)

LD    (A3), HL ; остаток от деления находится в ячейке памяти с адресом А3.

POPHL

POPDE

POPBC

RET

Подпрограмма YMH:

; процедура для умножения одного числа (в ячейке памяти по адресу А1) на другое ( в ячейке памяти по адрессу А2).

PUSH DE

PUSH HL

LD    DE, (A2)

DECDE

LD    HL, (A1)

M2:   ADCHL, HL

DINZ M2;

LD    (A1), HL ; результат заносится в ячейку памяти с адресом А1.

POPHL

POPDE

RET

Опишем подробней каждую из процедур.

DECT: процедура разбиения числа на десятки. Программа делит число на десять, остатком от деления будет младший разряд, который заносится в ячейку R5. Эта процедура повторяется несколько раз, при этом каждый раз увеличивается число количества десятков ( ячейка R4), пока частное не будет меньше 10, после чего процедура останавливается, а последнее полученное нами частное будет старшим разрядом, которое заносится в ячейку по адресу R5+R4.

DEL и YMH: процедуры умножения и деления двух чисел. Наиболее рациональным методом деления и умножения в цифровых приборах является метод двоичного умножения (деления). Но в нашей схеме по ряду причин мы будем использовать другой метод. Одна из причин - это то, что в ассемблере для Z-80 не существует команды для сдвига влево или вправо пары восьмибитовых регистров, а мы производим вычисления над 16-битовыми числами. И второе - быстродействие достигаемое методом двоичного умножения (деления) нам не нужно так, как микропроцессор только обслуживает одно прерывание с Датчика1 (которое появляется с частотой 10-100 Гц) и второе - с таймера (появляющееся с частотой 200 Гц), а все остальное время находится в режиме ожидания.

Процедура умножения запрашивает два числа А1 и А2, а результат возвращает в А1. Умножение производится обычным сложением А1+А1 А2 раз. Поэтому рекомендуется, чтобы А1 было больше чем А2.

Процедура деления запрашивает два числа А1 и А2, а результат и остаток возвращает соответственно в А1 и А3. Деление производится вычитанием из А1 числа А2 пока не будет установлен флаг переноса.

На индикатор информация выводится следующим образом:

Берется цифра соответствующего разряда (разряды перебираются с конца) и из ячейки с адресом “R6+цифра” выбирается код сегментного индикатора.

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

Разряд индикатора показан на рис.4, а код соответствующий определенной цифре в таблице 1.

                                                     Таблица 1.

Цифра

Сегменты

Адрес

A

B

C

D

E

F

G

H

0

1

1

1

1

1

1

0

0

4111

1

0

1

1

0

0

0

0

0

4112

2

1

1

0

1

1

0

1

0

4113

3

1

1

1

1

0

0

1

0

4114

4

0

1

1

0

0

1

1

0

4115

5

1

0

1

1

0

1

1

0

4116

6

1

0

1

1

1

1

1

0

4117

7

1

1

1

0

0

0

0

0

4118

8

1

1

1

1

1

1

1

0

4119

9

1

1

1

1

0

1

1

0

4120

Опишем переменные и место расположение их в памяти, используемые программой.

                                                                            Таблица 2.

Переменная

Назначение

Нач. Адрес

Длина

R1

Значение Счетчика1

4096 D

2 байта

R2

Значение Счетчика2

4098

2

R3

Переменная для процедуры DECT

4100

2

R4

Число десятков

4102

1

R5

Начальный адрес массива цифр (8 цифр)

4103

8 байт

R6

Начальный адрес массива кодов сегментного индикатора (10)

4111

10 байт

R7

Состояние счетчика таймера

4121

1

R8,R9,R10

Вспомогательная

4122

1,1,1

A1

1-е число для процедур DEL и YMH

4125

2

A2

2-е число для процедур DEL и YMH

4127

2

A3

остаток от деления

4129

2

В данной схеме сигнал прерывания с Датчика1 подается на вход немаскируемого прерывания INT микропроцессора Z-80. В общем случае обычное прерывание приведет к тому, что текущий счетчик команд будет помещен в стек, а управление с помощью программы RST будет передано на нулевую страницу ПЗУ. Поэтому процедура обработки прерываний должна находится по адресу 0000Н (см. рис. 5). Сигнал прерывания с таймера, контролирующий вывод на индикатор, поступает на вход немаскируемого прерывания NMI. Это прерывание имеет более высокий приоритет чем INT. Сигнал автоматически переводит ЦП к выполнению программы с адреса 0066Н. Поэтому данная процедура обработки прерывания вывода на индикатор должна находится по этому адресу. Следом за ней идут вспомогательныепроцедуры DECT, DEL, YMH, после чего располагается основная программа.


[1] Первый импульс с Датчика1 для таймера является стробирующим, который запускает счетчик. Второй импульс с Датчика1 останавливает счетчик для того, чтобы микропроцессор смог прочитать информацию с обеих счетчиков таймера. При очередном появлении сигнала с Датчика1 таймер опять запускает счетчик. Таким образом на выходе таймера истинное значение счетчиков будет появляться только через один сигнал с Датчика!. Поэтому программе обработки прерывания следует считывать значение со счетчиков таймера только когда на них находятся истинные значения, пропорциональные периоду.


[AK1]

[AK2]

[AK3]