Измеритель расхода топлива
Рисунок 9 – Блок – схема части алгоритма вывода результата на индикаторы
3.3 Листинг программы
ORG 00h ; Начало программы.
SJMP TIMER ; Переход на установку таймера.
ORG 1Bh ; Переход на обработку
JMP SELECTOR ; прерывания от таймера.
ORG 30h
TIMER: MOV TMOD, #00010000b
; 1-ый режим работы таймера (16 разрядов).
MOV TCON, #01000000b ; Включение таймера 1.
MOV IE, #10001000b ; Разрешение прерывания от таймера.
MOV TH1, #0FFh ; Задаются старшие и младшие
MOV TL1, #0FFh ; 8 разрядов таймера 1.
MOV R3, #0h ; Значение регистра необходимое для
; перехода к метке START.
V1: SJMP V1 ; Бесконечный цикл.
; Работа с АЦП
START: CLR P1.2 ; Сигнал подается на первый АЦП -
SETB P1.2 ; начало преобразования аналогового
NOP ; сигнала в цифровой.
CLR P1.2
NOP ; Задержка на время преобразования 4,5мкс.
NOP
NOP
NOP
NOP
NOP
CLR P1.3 ; Сигналы /CS и /RD
CLR P1.4 ; (разрешения работы и чтения)
SETB P1.4 ; служат для передачи данных
SETB P1.3 ; с АЦП на порт 3.
MOV 53h, P3 ; Данные с порта (скорость) записываются
; в ячейку памяти.
CLR P1.5 ; Аналогично, сигнал начала преобразования
SETB P1.5 ; для второго АЦП.
NOP
CLR P1.5
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.6 ; Аналогичные сигналы для передачи
CLR P1.7 ; данных со второго АЦП на 3-ий порт.
SETB P1.7 ;
SETB P1.6
MOV 52h, P3 ; Данные с порта в ячейку (расход топлива).
MOV 50h, #10110100b ; Коэффициент 180 в формуле (4).
MOV A, 53h ; Проверка скорости на равенство нулю и
JZ NULL ; переход в метку NULL при его истинности.
MOV A, 52h ; Реализация по формуле (4)
MOV B, 50h
SJMP ALGORITM ; Переход к реализации формулы.
NULL: MOV 53h, #64h ; Реализация по формуле (6) .
MOV A, 52h
MOV B, #0Eh
; Реализация формул (4) и (6)
ALGORITM: MUL AB ; Произведение или .
MOV 50h, A ; Младший байт произведения.
MOV 51h, B ; Старший байт произведения.
MOV A, B ; Деление старшего байта произведения
MOV B, 53h ; на значение скорости или на 100.
DIV AB
MOV 54h, A ; Целая часть от деления.
MOV 55h, B ; Остаток от деления.
MOV A, 53h ; Деление делителя (значение скорости
MOV B, #0Ah ; или 100) на 10.
DIV AB
MOV 56h, A ; Целая часть от деления делителя на 10.
MOV 57h, B ; Остаток от деления делителя на 10.
JZ HELP ; Если целая часть от деления делителя на 10
; равна нулю, то переход в метку HELP.
MOV A, 57h
MOV B, #4h ; Если остаток от деления делителя на 10 равен
SUBB A, B ; 4, то переход в метку B5.
JZ B5
MOV A, 57h
MOV B, #6h ; Если остаток от деления делителя на 10 равен
SUBB A, B ; 6, то переход в метку B5.
JZ B5
MOV A, #4h ; Если остаток от деления делителя на 10
CJNE A, 57h, C1 ; больше 4, то переход в метку B1.
C1: JC B1
JNC B3 ; Если меньше 4, то в метку B3.
B1: MOV A, #6h ; Если остаток от деления делителя на 10
CJNE A, 57h, C ; больше 6, то переход в метку B7.
C2: JC B7
JNC B2 ; Если равен 5, то в метку B2.
B2: MOV A, 56h ; Получено, что остаток от деления делителя
MOV B, #2h ; на 10 равен 5, тогда целая часть от деления
MUL AB ; делителя на 10 умножается на 2.
MOV 52h, A
INC 52h ; Увеличение результата на 1. (новый делитель)
MOV A, 55h ; Остаток от деления числителя формул
MOV B, 52h ; (4) или (6) делится на новый делитель.
DIV AB
MOV 41h, B ; Остаток от деления на новый делитель.
MOV B, #2h ; Умножение целой части от деления на
MUL AB ; новый делитель на 2.
MOV 57h, A ; В результате получены десятые доли
; деления старшего байта произведения.
MOV A, 41h ; Умножение остатка от деления на новый
MOV B, #2h ; делитель на 2.
MUL AB
MOV B, 52h ; Результат этого умножения снова делится
DIV AB ; на новый делитель и целая часть этого
ADD A, 57h ; деления складывается с десятыми долями
MOV 57h, A ; деления старшего байта произведения.
MOV 56h, 52h
MOV 42h, B ; Остаток последнего деления фиксируется.
SJMP VPERED ; Переход к нахождения сотых долей.
B3: MOV A, #1h ; Если остаток от деления делителя на 10
CJNE A, 57h, C3 ; 0 или 1, то переход в метку HELP_1.
C3: JNC HELP_1
JC B4 ; Если больше 1, то в метку B4.
B4: MOV A, #2h ; Если остаток от деления делителя на 10
CJNE A, 57h, C4 ; равен 2, то переход в метку B5.
C4: JNC B5
JC B6 ; Если равен 3, то в метку B6.
HELP: JMP D_0 ; Переход в метку D_0.
B5: MOV A, 56h ; Если остаток от деления делителя на 10
MOV B, #5h ; равен 2, 4, 6 или 8, тогда целая часть от
MUL AB ; деления делителя на 10 умножается на 5.
MOV 52h, A
MOV A, 57h ; Остаток от деления делителя на 10
MOV B, #2h ; делится на 2 и складывается с предыдущим
DIV AB ; результатом. Получен новый делитель.
ADD A, 52h
MOV 52h, A
MOV A, 55h ; Остаток от деления числителя формул
MOV B, 52h ; (4) или (6) делится на новый делитель.
DIV AB
MOV 41h, B ; Остаток от деления на новый делитель.
MOV B, #5h ; Умножение целой части от деления на
MUL AB ; новый делитель на 5.
MOV 57h, A ; В результате получены десятые доли
; деление старшего байта произведения.
MOV A, 41h ; Умножение остатка от деления на новый
MOV B, #5h ; делитель на 5.
MUL AB
MOV B, 52h ; Результат этого умножения снова делится
DIV AB ; на новый делитель и целая часть этого
ADD A, 57h ; деления складывается с десятыми долями
MOV 57h, A ; деления старшего байта произведения.
MOV 56h, 52h
MOV 42h, B ; Остаток последнего деления фиксируется.
JMP VPERED ; Переход к нахождения сотых долей.
B7: MOV A, #8h ; Если остаток от деления делителя на 10
CJNE A, 57h, C5 ; равен 9, то переход в метку HELP_1.
C5: JC DALEE
JNC B8 ; Если меньше или равен 8, то в метку B8.
B8: MOV A, #7h ; Если остаток от деления делителя на 10
CJNE A, 57h, C6 ; равен 8, то переход в метку B5.
C6: JC B5
JNC B6 ; Если равен 7, то переход в метку B6.
HELP_1: SJMP DALEE ; Переход в метку DALEE.
B6: MOV A, 56h ; Если остаток от деления делителя на 10
MOV B, #3h ; равен 3 или 7, тогда целая часть от
MUL AB ; деления делителя на 10 умножается на 3.
MOV 52h, A
MOV A, #5h ; Полученный результат в случае, если
CJNE A, 57h, RAZD ; остаток от деления делителя на 10 равен 7
RAZD: JC DEL1 ; увеличивается на 2. А если остаток равен
JNC DEL2 ; 3, то - на 1. Получен новый делитель.
DEL1: INC 52h
INC 52h
SJMP RETURN ; Переход в метку RETURN.
DEL2: INC 52h
RETURN: MOV A, 55h ; Остаток от деления числителя формул
Другие рефераты на тему «Коммуникации, связь и радиоэлектроника»:
Поиск рефератов
Последние рефераты раздела
- Микроконтроллер системы управления
- Разработка алгоритмического и программного обеспечения стандарта IEEE 1500 для тестирования гибкой автоматизированной системы в пакете кристаллов
- Разработка базы данных для информатизации деятельности предприятия малого бизнеса Delphi 7.0
- Разработка детектора высокочастотного излучения
- Разработка микропроцессорного устройства для проверки и диагностики двигателя внутреннего сгорания автомобиля
- Разработка микшерного пульта
- Математические основы теории систем