Автомобильный компьютер

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    38,73 Кб
  • Опубликовано:
    2012-11-03
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Автомобильный компьютер

Введение

Использование микроэлектронных средств в изделиях производственного и культурно-бытового назначения приводит не только к повышению технико-экономических показателей изделия (стоимости, потребляемой мощности, габаритных размеров) и позволяет многократно сократить сроки разработки и отодвинуть сроки «морального старения» изделий, но придает им принципиально новые потребительские качества (расширенные функциональные возможности, модифицируемость, адаптивность и т.д.).

Развитие микроэлектроники и широкое применение ее изделий в промышленном производстве, в устройствах и системах управления самыми разнообразными объектами и процессами является в настоящее время одним из основных направлений научно-технического прогресса.

За последние годы микроэлектроники бурное развитие получило направление, связанное с выпуском однокристальных микроконтроллеров (ОМК), которые предназначены для «интеллектуализации» оборудования различного назначения. ОМК представляют собой приборы, конструктивно выполненные в виде БИС, и включающие в себя все составные части «голой» микроЭВМ: микропроцессор, память программы, память данных, также программируемые интерфейсные схемы для связи с внешней средой. Использование микроконтроллеров в системах управления обеспечивает достижение исключительно высоких показателей эффективности при столь низкой стоимости (во многих применениях система может состоять только из одной БИС микроконтроллера), что микроконтроллерам, видимо, нет разумной альтернативной базы для построения управляющих и регулирующих систем. К настоящему времени более двух третей мирового рынка микропроцессорных средств составляют именно ОМК.

Техническое задание

В качестве объекта разработки был выбран вариант изготовления автомобильного компьютера.

В соответствии с поставленным заданием он должен выполнять следующие функции:

. Осуществлять контроль над оборудованием и устройствами автомобиля;

. Следить за температурными значениями.

Информация поступает в автомобильный компьютер с датчиков: обороты с датчика оборотов, скорость с датчика скорости, давление с датчика давления, напряжение в сети с датчика напряжения. Необходимо реализовать получение четырех различных значений температур с разных точек. Так необходимо измерять температуру двигателя, температуру коробки и температуру ещё двух источников по выбору (например, температуру в салоне и температуру за бортом). Данные, полученные с каждого датчика, требуется выводить на LCD экран. Причем вывод набора данных на экран должен зависеть от выбранного пользователем режима. В автомобильном компьютере должна присутствовать возможность устанавливать и изменять значения температуры двигателя, коробки и давления масла, превышение которых влечет за собой подачу звукового сигнала. Управление компьютером осуществляется с помощью четырехклавишной клавиатуры. С её помощью у пользователя должна быть возможность выбора режима отображения и возможность увеличения или уменьшения критических значений.

Питание автомобильного компьютера осуществляется посредством бортовой сети через встроенный стабилизатор на 5В.

1. Краткое описание микроконтроллера

 

1.1 Общее описание микроконтроллера


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

-       наличие достаточного количества портов ввода-вывода, для возможности подключения к микроконтроллеру клавиатуры, LCD-дисплея, датчиков, блока управления сигналом тревоги.

-       наличие встроенного АЦП.

-       наличие счетчиков / таймеров.

-       достаточная изученность.

Микроконтроллер ADuC812 удовлетворяет вышеперечисленным требованиям, и подходит для реализации поставленной задачи. Он является аналогом микро-ЭВМ 51-й серии, с которой он совместим программно и аппаратно, но имеет более развитую архитектуру. Данный микроконтроллер представляет собой следующую архитектуру:

Ø  3 16-ти разрядных счетчика / таймера;

Ø  8-ми канальный 12-ти разрядный АЦП;

Ø  2 двенадцати разрядных ЦАП;

Ø  8 Кб FLASH ПЗУ;

Ø  640 байт FLASH данных;

Ø  256 Байт внутреннего ОЗУ;

Ø  позволяет адресовать 16 Мб внешнего ОЗУ;

Ø  позволяет адресовать 64 Кб памяти программ;

Ø  система прерываний имеет 9 источников, 2 уровня приоритетов;

Ø  Поддерживается последовательный канал стандарта I2C;

Ø  4 восьми разрядных порта ввода / вывода

Данный контроллер реализован в виде одноплатного модуля, имеющего в своем составе не только буферные элементы, но и внешнее ОЗУ, в которое производиться загрузка программы с персонального компьютера.

Название

Вывод

Тип

Назначение

AGND

22

I

Аналоговая земля.

DVdd

44

I

Питание +5V

P0.0-P0.7

43-46, 49-52

I/O

Порт P0. Двунаправленный порт с открытым стоком.

P1.0-P1.7

1-4, 11-14

I

Порт P1, только ввод, по умолчанию настраивается на ввод аналоговых сигналов.

P2.0-P2.7

28-31, 36-39

I/O

Порт P2. Двунаправленный порт с внутренними подтягивающими резисторами.

P3.0-P3.7

16-19, 22-25

I/O

Порт P3. Двунаправленный порт с внутренними подтягивающими резисторами.

XTAL1

21

I

Вход тактового генератора

XTAL2

20

O

Выход тактового генератора


1.2 Описание периферийных устройств


·        Таймеры/счётчики:

ADuC812 содержит три 16-ти разрядных счетчика таймера: Таймер0, Таймер1 и Таймер2. Каждый таймер / счетчик состоит из двух 8-ми разрядных регистров THx и TLx (х = 0, 1 и 2). Все три можно сконфигурировать как таймеры, либо как счетчики событий.

В режиме «Таймера» регистр TLx инкрементируется в каждом машинном цикле. В этом режиме работу можно рассматривать как счет машинных циклов. Так как машинный цикл состоит из 12 периодов осциллятора, то максимальная скорость счета составляет 1/12 от частоты осциллятора. В режиме «Счетчика» регистр TLx инкреминтируется по перепаду 1 - 0 на соответствующем контакте микросхемы Т0, Т1 или Т2.

Счетчики/таймеры могут работать в 3-х основных режимах:

I.               Оставлен для совместимости с 48-й серией, на таймер поступает OSC/32, разрядность 13 бит.

Режимы работы таймеров Таймер0 и Таймер1 задают два регистра специальных функций (SFR - Special Function Register): регистр режима - TMOD, расположенный по адресу 89h в регистровой памяти и регистр управления таймерами и внешними прерываниями - TCON (88h). Для управления работой таймера Таймер2 служит регистр T2CON.

Регистр TMOD условно разбит на две половины: первая его часть отвечает за Таймер0, а вторая - за Таймер1.

Распределение битов регистра TMOD следующее:

Бит0 - (М0) - Младший байт поля управления режимом;

Бит1 - (М1) - Старший байт поля управления режимом;

Бит2 - (С/Т0) - Выбор функции таймера или счетчика для Таймера0: 0 - таймер; 1 - счетчик;

Бит3 - (GATE0) - Флаг управления входом:

- работа канала разрешается (INT0=1, TR=1)

- работа счетчика зависит только от TR0

Распределение битов регистра TCON следующее:

Бит0 - (IT0) - Управление типом входа INT0:

- вход прог-ся как динамич по зад фронту импльса,

- статическое состояние входа.

Бит1 - (IE0) - Флаг запроса прерывания INT0 при динамическом входе. Сбрасывается, когда происходит режим подтверждения прерывания.;

Бит2,3 - (IT1/IE1) - Тоже, что и предыдущие биты, но для Таймера0;

Бит4 - (TR0) - Флаг программного запуска Таймера0

Бит5 - (TF0) - Флаг переполнения Таймера0, который вызывает запрос прерывания. При подтверждении прерывания флаг сбрасывается;

Бит6,7 - (TR1, TF1) - Для Таймра1;

Для работы с таймером используется механизм прерываний, работой которого можно управлять через регистр маски прерываний IE (Interrupt Enable). Назначение битов регистра IE следующее:

Бит0 - (EX0) - Бит разрешения внешнего прерывания INT0.

Бит1 - (ET0) - Бит разрешения прерывания по переполнению Таймера0;

Бит2 - (EX1) - Бит разрешения внешнего прерывания INT1;

Бит3 - (ET1) - Бит разрешения прерывания по переполнению Таймера1;

Бит4 - (ES) - Бит разрешения прерывания от последовательного порта UART.

Бит5 - (ET2) - Бит разрешения прерывания по переполнению Таймера 2

Бит6 - (EADC) - Бит разрешения прерывания АЦП

Бит7 - (EA) - Бит разрешения глобального прерывания. Если EA=0, то все прерывания запрещены;

·        12-ти разрядный 8-ми канальный АЦП;

Блок АЦП представляет собой восьмиканальный пяти микросекундный преобразователь с однополярным питанием. АЦП позволяет работать как в однократном режиме измерения, так и в циклическом. Запуск на преобразование осуществляется или по внешнему сигналу, подаваемому на 23-й контакт (CONVST/) или по сигналу переполнения Таймера2.

Для управления АЦП имеется 3 основных SFR-регистра: ADCCON1, ADCCON2, ADCCON3.

Регистр ADCCON1 производит управление преобразованием, временем переключения и режимами. Структура управл бит ADCCON1 следующая:

№ бита

Мнемоника

Описание

0

EXС

Бит разрешения внешнего запуска. Если установлен, то контакт 23 (CONVST/) будет использоваться как сигнал запуска (активный низкий должен быть не менее 100 нс).

1

T2C

Бит запуска преобразования от Таймера2. Если бит установлен, то сигнал переполнения Таймера2 используется для запуска АЦП.

2

AQ0

Биты задержки переключения, выбирают время, необходимое для перезарядки УВХ при переключении мультиплексора: AQ1 AQ0 Число тактов задержки запуска АЦП 0 0 1 0 1 2 1 0 3 1 1 4

3

AQ1


4

CK0

Биты деления тактовой частоты, выбирают коэффициент деления основной частоты микропроцессора для получения тактовой частоты АЦП. Цикл преобразования АЦП занимает 16 тактов, в дополнении к числу тактов переключения. Коэффициент выбирается из: CK1 CK0 Делитель для MCLK 0 0 1 0 1 2 1 0 4 1 1 8

5

CK1


6

MD0

Биты режима выбирают режимы работы АЦП следующим образом: MD1 MD0 Режим АЦП 0 0 Дежурный 0 1 Нормальный 1 0 Дежурный, если не выполняется цикл преобразования 1 1 Холостой, если не выполняется цикл преобразования

7

MD1



Регистр ADCCON2 управляет выбором канала и режимами преобразования. Он имеет следующий формат:

№ бита

Мнемоника

Описание

0

CS0

Биты выбора входных каналов. Позволяют осуществлять выбор номера канала АЦП под управлением программы. Преобразование будет выполняться для канала, номер которого указан данными битами. В режиме ПДП выбор номера канала осуществляется из ID канала, записанного во внешней памяти. CS3 CS2 CS1 CS0 CH# 0 n2 n1 n0 Номер входного канала(n2n1n0) 1 0 0 0 Температурный сенсор 1 x x x Другие комбинации 1 1 1 1 Останов ПДП

1

CS1


2

CS2


3

CS3


4

SCONV

5

CCONV

Бит циклического преобразования. Устанавливается пользователем для установки АЦП в режим непрерывного циклического преобразования. В этом режиме АЦП выполняет преобразование в соответствии с типом синхронизации и конфигурацией каналов, выбранными в других SFR.

6

DMA

Бит разрешения режима ПДП. Устанавливается пользователем для начала операции ПДП со стороны АЦП.

7

ADCI

Бит прерывания АЦП устанавливается аппаратно по окончанию однократного цикла преобразования АЦП или по окончанию передачи блока в режиме ПДП. ADCI очищает аппаратно при переходе по вектору на процедуру обслуживания прерывания.


Регистр ADCCON3 является регистром статуса АЦП и используется только для чтения. Бит 7 этого регистра - бит занятости, автоматически устанавливается в 1 во время преобразования, по окончанию цикла преобразования автоматически очищается. Биты с 0-го по 6-й зарезервированы и в программе пользователя не используются.

Как только АЦП сконфигурирован и установлен бит SCONV регистра ADCCON2, начинается преобразование аналоговых входных сигналов и выдача 12-разрядных выходных кодов в регистры ADCDATAH и ADCDATAL.состоит из двух частей: номер канала (старшие четыре бита)+старшие разряды (младшие четыре бита), ADCDATAL содержит младшие разряды АЦП:

ADCDATAH


ADCDATAL


















не используются

старшие 4 разряда 12-разрядного слова АЦП


младшие 8 разрядов 12-разрядного слова АЦП


2. Принцип действия устройства.

 

2.1 Описание структурной схемы.

 

а) Краткая функциональная схема


 

б) Описание блоков:

·   Блок микроконтроллера.

Осуществляет функционирование микроконтроллера. Состоит из следующих элементов:

o С2, С3, ZQ1 - схема тактового генератора. Осуществляет выработку внешнего сигнала тактирования микроконтроллера частотой 12МГц.

o   С4, R11, SB1 - схема сброса микроконтроллера. Обеспечивает корректный запуск.

o   DD1 - сам микроконтроллер.

·   Блок клавиатуры.

Клавиатура предназначена для управления устройством. Нажатая клавиша обрабатывается микроконтроллером, который выполняет необходимые действия. Клавиатура состоит из 4-х кнопок: «Regim», «+», «-», «Prog». Кнопка «Regim» позволяет выбрать режим отображения информации на LCD экране, кнопки «+», «-» позволяют увеличить или уменьшить критические значения скорости, количества оборотов, напряжения, температуры коробки или температуры двигателя. Кнопка «Prog» предназначена для выбора одного из критических значений.

·   LCD - дисплей.

Для отображения текстовой информации на плату контроллера был установлен LCD-дисплей - текстовый дисплей, 2 строки по 16 символов.

Управление ЖК-индикатором осуществляется через 10h-байт внешней (auxiliary) памяти. Дополнительно для управления устройством используются две управляющие линии RW и RS, которые подключены к выводам контроллера INT0 и INT1. Для удобства пользователя в программе стандартным переменным int0 и int1 из библиотеки reg51.dcl соответствуют переменные rw и rs управления ЖК-индикатором:

RS и RW-линии используются для установки режима ЖК-индикатора:

1.       rs=0, rw=0 - командный режим,

2.       rs=1, rw=0 - режим приема данных.

Командный режим предусматривает передачу в 10h-байт внешней памяти команд управления индикатором, которая предваряется проверкой готовности. Проверка готовности ЖК-индикатора осуществляется чтением 7-го бита 10h-байта внешней памяти.

Последовательность команд, необходимых для инициализации индикатора:

Название команды

№ бита

Описание

Function Set Задание режима работы индикатора 0 0 1 x x x * *

4

длинна: 0 - 4 бита, 1 - 8 бит


3

число линий индикатора: 0 - одна линия, 1 - две линии


2

размерность знакогенератора: 0 - 5x7 точек, 1 - 5x10 точек

Display On/Off Control Управление дисплеем 0 0 0 0 1 x x x

2

0 - декремент, 1 - инкремент


1

0 - сдвиг курсора, 1 - сдвиг строки


0

0 - включить дисплей, 1 - выключить

Entry Mode Set Установка режима вывода 0 0 0 0 0 1 x x

1

0 - инкремент, 1 - декремент


0

1 - со сдвигом дисплея

Cursor/Display Shift Выбор типа сдвига 0 0 0 1 x x * *

3

1 - сдвиг дисплея, 0 - сдвиг курсора


2

1 - сдвиг вправо, 0 - сдвиг влево

Cursor At Home Курсор домой 0 0 0 0 0 0 1*


возврат курсора в начальную позицию

Clear Display Очистка дисплея 0 0 0 0 0 0 0 1


Очищает дисплей и устанавливает курсор в начальную позицию


Во втором режиме передаваемые данные записываются в 10h-байт внешней памяти и воспринимаются ЖК-индикатором как коды символов для отображения.

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

Режим 1.

Отображение текущей скорости и текущих оборотов на первой строке и температур двигателя, коробки и напряжения в сети на второй строке.

Режим 2.

Отображение текущих оборотов и давления масла на первой строке и температур двигателя, коробки и напряжения в сети на второй строке.

Режим 3.

Отображение скорости и пройденного пути на первой строке и температур двигателя, коробки и напряжения в сети на второй строке.


Режим 4.

Отображение температуры в салоне и за бортом на первой строке и температур двигателя, коробки и напряжения в сети на второй строке.


Установка критических значений температур и скорости


·   Датчик скорости.

Представляет собой встроенное в автомобили последних моделей устройство, на выходах которого генерируется сигнал 0 - 12В, и после использования делителя R7 и R8 получается сигнал 0 - 5В. Для определения скорости по сигналу, поступающему на вход МП, мы оцениваем количество импульсов за 1 секунду, зная, что на каждый метр, датчик дает 2 импульса. Затем на экране дисплея отображается рассчитанная скорость. Т.е.


·   Датчик оборотов.

Принцип действия заключается в том, что искра наводит сигнал в катушке, который ограничивается и преобразуется операционным усилителем. Тогда результирующий сигнал получается в диапазоне от 0 до 5В, т.е. операционный усилитель работает как компаратор. Получение количества оборотов происходит из расчета на то, что на каждые 2 оборота мы получаем 1 импульс.


·   Блок температурных датчиков.

Состоит из четырех температурных датчиков, каждый из которых осуществляет измерение одной температуры в некоторой точке (двигатель, коробка, салон, за бортом). Каждый температурный датчик состоит из следующих элементов:

o Термодатчик - полупроводниковый терморезистор. Омическое сопротивление терморезисторов существенно изменяется (убывает или возрастает) с ростом температуры, т.е. он выполняет функции чувствительного элемента и резистивного преобразователя. Терморезистор помещается в защитный теплопроводной корпус с крепежной резьбой для установки датчика в нужном месте. По мере прогрева омическое сопротивление чувствительного элемента такого датчика уменьшается, а следовательно уменьшается и падение напряжения.

o   Повторитель, буферизирующий сигнал;

Блок собран в виде единичного экранированного модуля, для защиты от помех.

·   Блок подачи звукового сигнала

Для упрощения данный блок выполнен в виде стандартного мультивибратора с буферным усилением сигнала.

·   Датчик напряжения

Стандартный резистивный делитель, приводящий значение напряжения в диапазоне от 0В до 20В к диапазону от 0В - 5В

·   Датчик давления

Стандартный датчик, установленный в автомобиле и имеющий почти линейную характеристику аналогичную температурному датчику.

2.2 Выбор элементной базы


При разработке устройства были использованы следующие электронные компоненты:

·        Термодатчик КПМ (Керамическая Полупроводниковая Масса) - для измерения температуры;

·        Усилитель K544УД1 - операционный усилитель, используется в измерительной технике и имеет высокие технические характеристики;

·        Стабилизатор K145EH5A - простой источник стабильного напряжения;

·        Диод К156KЛ - для ограничения напряжения;

·        Логический элемент «И» К561ЛА7 - для реализации мультивибратора

·        2-х строчечный текстовый жидкокристаллический дисплей WH1602A-YYK-CP - для вывода текстовой информации.

3. Разработка программного обеспечения МПС

 

3.1 Описание основных частей программы


В программе можно выделить следующие блоки:

·        Блок объявления переменных. В этом блоке описываются основные переменные и флаги.

·        Блок инициализации программы. В этом блоке осуществляется первоначальная настройка микроконтроллера. Установка битов управления и направления передачи данных в портах ввода-вывода, инициализация АЦП, а так же инициализация и включение ЖКИ - дисплея.

·        Основной цикл программы. Осуществляет проверку нажатия одной из четырех клавиш.

·        Обработчик прерывания от таймера по его переполнению. Расчет скорости и количество оборотов за прошедшую секунду, и сравнение полученных значений с критическими значениями. При необходимости установка флагов.

·        Обработчик прерываний по INT0. Наращивания количества импульсов для подсчета числа оборотов.

·        Обработчик прерываний по INT1. Наращивание количества импульсов для подсчета скорости.

·        Процедура записи скорости в буфер. Формирует последовательность импульсов, которая затем будет отображена на LCD дисплее.

·        Процедура записи температур в буфер. Формирует последовательность импульсов, которая затем будет отображена на LCD дисплее.

·        Процедура записи в буфер информации, запрашиваемой одним из вариантов отображения. Формирование окончательного варианта буфера, который затем будет выведен на LCD экран.

·        Процедура вывода буфера на ЖКИ. Непосредственный вывод информации, хранящейся в буфере на LCD дисплей.

·        Обработчик прерываний от ADC. Запись старшей и младшей частей результата.

 

3.2 Описание алгоритма работы основной программы


При включении питания начинает выполнение основной программы. В начале нее вызывается процедура инициализации контроллера. Установка битов управления и направления передачи данных в портах ввода-вывода, инициализация АЦП, а так же инициализация и включение ЖКИ - дисплея. Далее происходит зацикливание с помощью бесконечного цикла do while 1, в теле которого происходит проверка на нажатие клавиши с помощью управляющих переменных, и в соответствии с этими переменными вызываются соответствующие действия:

выбор режима отображения (из четырех возможных);

увеличение критического значения;

уменьшение критического значения;

выбор программируемой величины;

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

Заключение


При выполнении данного курсового проекта была изучена архитектура микроконтроллера AduC812 и построен на его основе бортовой компьютер автомобиля. При этом также был изучен текстовый жидкокристаллический дисплей. Приобретены навыки программирования микропроцессорных систем и построения на их основе устройств сбора и обработки информации.

компьютер бортовой микроконтроллер программа

Приложение А

Листинг программы.

/* программа для автомобильного компьютера/

start: do;

$include (reg812.dcl)

/* объявление основных переменных и флагов */

(skor, skor1, skorp) word,                /*выводимая на ЖКИ скорость */

(obor, obor1, oborp) word,               /*выводимые на ЖКИ обороты */

(put, put1) word,                               /*пройденный путь*/

(time, tim1) word,                              /* время в пути*/

(td, tk, t1, t2, tp) word,                      /* измеряемые температуры */

(td_max, tk_max, t2_max, t1_max, pMasl_min, ub_max, ub_min), bit,

ub word,                                           /*напряжение бортовой сети */

pMasl word,                                               /*давление масла */

LCD_Ini (*) byte constant (08h, 02h, 0fh, 01h), /*команды ЖКИ*/

Ind(56) bute,                                    /* содержимое индикатора */

(i, j, n, k, s, t) byte,                            /* переменные для работы */

(fl_reg, fl_s, flag, fl_p) byte, /*флаги определ режима работы */_key byte,                                   /*номер нажатой клавиши */

(k1_old) byte,                /*номер последней нажатой клавиши */

adc_H, adc_L byte,

per_t0 word; /*число циклов переполнения таймера0*/

/*пеpеименование pазpядов поpта */

declare rs literally ‘P2.6’,/*линия связи с LCD*/

rw literally ‘P2.7’,/*линия связи с LCD*/literally ‘P2.5’;

/* - Обработчики прерываний -*/

/* - Обработчик прерывания int0-*/

int_obor: procedure interrupt 0;/*обработчик прерывания подсчит число оборотов*/

oborp=oborp+1;

end int_obor;

/* - Обработчик прерывания int1-*/_obor: procedure interrupt 2;/*обработ прерыван подсчит скорость*/=skorp+1;

end int_obor;

/* - Обработчик прерывания таймера-*/_int: procedure interrupt 1; /* прерывание t0 */

/* проверка нажатия клавиш*/(p3.0=0b) and (kl_old<>1) then do; n_key=1; kl_old=1; end;(p3.1=0b) and (kl_old<>2) then do; n_key=2; kl_old=2; end;(p3.2=0b) and (kl_old<>3) then do; n_key=3; kl_old=3; end;(p3.3=0b) and (kl_old<>4) then do; n_key=4; kl_old=4; end;(p3 =0fb) then do; n_key=0; kl_old=0; end;

/* фиксируем текущую скорость и обороты и устанавл флаг*/

if (per_t0>15) then /*если прошла секунда */

dofl_s=1 then do signal=not(signal); P2.4=signal; end;=oborp*60*2;/*подсчитываем число оборотов в минуту*/

skor=skorp*3600/(1000*2);/*переводим скор и м\сек в км\ч*/

skorp=0; oborp=0;/*сбрасываем счетчики*/

/*проверяем превышение скор и оборотов*/

if skor>120 then do fl_s=1; fl_reg=0; fl_p=0; end;obor>5000 then do fl_s=1; fl_reg=0; fl_p=0; end;

end;_t0=per_t0+1; /* увеличиваем счетчик переполнений */

tf0=0; /* sbros flaga perepolneniya */

end timer_int;_INT: procedure interrupt 6; /* обработчик прерывания A D C */

adccon2=chan;_H=ADCDATAH;_L=ADCDATAL;=1; edac=1;

end ADC_INT;:procedure; /* вывод текущей скорости*/

ind(0)=43h; ind(1)=4Bh; ind(3)=2dh; ind(2)=20h;(3)=(skor/100)+30h; ind(5)=(skor mod 100)/10+30h;(6)=((skor mod 100) mod 10)+30h; ind(7)=20h;skor;_tk:procedure;       /* вывод температуры */

ind(41)=74h; ind(42)=064h; ind(43)=2d;/* вывод темп двигателя*/

ind(44)=(td/100)+30h; ind(45)=(td mod 100)/10+30h;(46)=((td mod 100) mod 10)+30h; ind(47)=20h;(48)=74h; ind(49)=06bh; ind(50)=2d;/* вывод темп коробки*/

ind(51)=(tk/100)+30h; ind(52)=(tk mod 100)/10+30h;(53)=((tk mod 100) mod 10)+30h; ind(54)=20h; td_tk;

displ_Buf: procedure; /* вып заполнение дисплея в зависим от режима*/

/* первый режим - скор, обороты, Тдвиг, Ткоробки, Напряжение*/

if Fl_reg=0 then do;

call skor;(8)=4fh; ind(9)=0b2h; ind(10)=2d;/* вывод текущих оборотов*/=(obor mod 1000); ind(11)=(obor/1000)+30h;(12)=(obor1)/100+30h; obor1=(obor1 mod 100);(13)=obor1/10+30h; ind(14)=(obor1 mod 10)+30h; td_tk;

/*вывод напряжения в бортовой сети*/

ind(55)=(up/10)+30h; ind(56)=(up mod 10) +30h;

end;

if Fl_reg=1 then do;

ind(1)=4fh; ind(2)=0b2h; ind(3)=2d;/* вывод текущих оборотов*/

ind(4)=(obor/1000)+30h; obor1=(obor mod 1000);(5)=(obor1)/100+30h; obor1=(obor1 mod 100);(6)=obor1/10+30h; ind(7)=(obor1 mod 10)+30h;

ind(8)=0a8h; ind(9)=0a8h; ind(10)=2d;/* вывод давления масла*/(11)=(put/1000)+30h; put1=(put mod 1000);(12)=(put1)/100+30h; put1=(put1 mod 100);(13)=put1/10+30h; ind(14)=(put1 mod 10)+30h; td_tk;

/*вывод напряжения в бортовой сети*/

ind(55)=(up/10)+30h; ind(56)=(up mod 10) +30h;

end;

if Fl_reg=2 then do

call skor;(8)=0a8h; ind(9)=0a8h; ind(10)=2d;/* вывод пройд пути*/(11)=(put/1000)+30h; put1=(put mod 1000);(12)=(put1)/100+30h; put1=(put1 mod 100);(13)=put1/10+30h; ind(14)=(put1 mod 10)+30h; td_tk;

/*вывод напряжения в бортовой сети*/

ind(55)=(up/10)+30h; ind(56)=(up mod 10) +30h;

end;

if Fl_reg=3 then do

ind(1)=074h; ind(2)=031h; ind(3)=2d;/* вывод температуры 1*/

ind(4)=(t1/100)+30h; tp=(t1 mod 100);(5)=(tp)/10+30h; tp=(tp mod 100);(6)=tp/10+30h; ind(7)=(tp mod 10)+30h; ind(8)=20h;(9)=074h; ind(10)=032h; ind(11)=2d;/* вывод температуры 2*/

ind(12)=(t2/100)+30h; tp=(t2 mod 100);(13)=(tp)/10+30h; ind(14)=(tp mod 100)+30h; td_tk;

/*вывод напряжения в бортовой сети*/

ind(55)=(up/10)+30h; ind(56)=(up mod 10) +30h;

end;

call writeLCD;Displ_Buf;: procedure; /*вывод буфера на жки*/

do I=0 to 55;=0; rw=1; p0.7=1b;while (p0 and 80h)<>0; end;=1; rw=0;=Ind(i);;writeLCD;

/* - пpоцедуpа инициализации-*/: procedure;

tmod=00010001b;/*пеpвый pежим таймеpа для 0 и 1*/=1;/*пpеpывание по фpонту сигнала пеpеполнения*/, tl0=0; tr0=1;/*обнуляем счетчики и pазpешаем pаботу 0 го Таймеpа*/

er0=1;/*запускаем таймеp 0*/=1;/*pазpешаем пpеpывание Т0*/

ea=1;/*pазpешаем все пpеpывания*/

/*Инициализация АЦП*/

ADCCON1=60h;/*настраиваем режим AЦП*/

ADCCON2=0h;/*настраиваем режим AЦП*/

/*инициализация портов на вв\выв */

P2=0f0h; /*линии порта 2 c 0 по 3 на ввод с 4 по7 на вывод*/

n_key=0; k_old=0; fl_s=0; fl_p=0;

/*инициализация ЖКИ*/

do I=0 to 3;

/*___________ Tело основной программы ______________*/

call init;

do while 1;                               /*бесконечный цикл pаботы */ (n_key=1)&(kl_old<>1) then /*Перебираем режимы отображения */

do_reg=fl_reg+1; if fl_reg=4 then fl_reg=0;_old=1;;(n_key=4)&(kl_old<>4) then /* Включаем режим программирования */_p=fl_p+1; do I=1 to 55; ind(i)=20h;

/*Выводим сообщение «Установите_» */

ind(1)=0a9h; ind(2)=043h; ind(3)=054h; ind(4)=041h; ind(5)=048h;

ind(6)=04fh; ind(7)=042h; ind(8)=0a5h; ind(9)=054h; ind(10)=045h;  (11)=020h;fl_p=1 then do ind(41)=074h; ind(42)=064h; ind(43)=02dh;(44)=039h; ind(45)=036h; end;fl_p=2 then do ind(41)=074h; ind(42)=06bh; ind(43)=02dh;(44)=036h; ind(45)=030h; end;fl_p=3 then do ind(41)=074h; ind(42)=031h; ind(43)=02dh;(44)=035h; ind(45)=030h; end;fl_p=4 then do ind(41)=074h; ind(42)=032h; ind(43)=02dh;(44)=039h; ind(45)=036h; end;fl_p=5 then do ind(41)=055h; ind(42)=062h; ind(43)=02dh;(44)=061h; ind(45)=036h; ind(46)=02dh;(47)=031h; ind(48)=039h; end;fl_p=6 then do ind(41)=055h; ind(42)=062h; ind(43)=04dh;(44)=0b8h; ind(45)=0bdh; ind(46)=02dh;(47)=031h; ind(43)=035h; end;fl_p=7 then do ind(41)=050h; ind(42)=04dh; ind(43)=0631h;(44)=0bbh; ind(45)=061h; ind(46)=02dh;(47)=030h; ind(48)=031h; end; fl_p=8 then do fl_p=0; /*если устан все знач завер програм*/

call writeLCD;;

if ((n_key=1) and (kl_old<>1)) and (fl_p>0) then /*+1 к текущему значению*/

dofl_p=1 then do td_max=td_max+1; if td_max>98 then td=97;(44)=td_max/10; ind(45)=td_max mod 10; end;fl_p=2 then do tk_max =tk_max +1; if tk_max >80 then tk_max =80;(44)=tk_max /10; ind(45)=tk_max mod 10; end;fl_p=3 then do t1_max =t1_max +1; if t1>99 then t1_max =99;(44)=t1_max /10; ind(45)=t1_max mod 10; end;fl_p=4 then do t2_max =t2_max +1; if t2_max >98 then t2=97;(44)=t2_max /10; ind(45)=t2_max mod 10; end;fl_p=5 then do ub_max =ub+1; if ub_max >15 then ub_max =15;(44)=ub_max /10; ind(45)=ub_max mod 10; end;fl_p=6 then do ub_min= ub_min +1; if ub_min >98 then ub_min =97;(44)= ub_min /10; ind(45)= ub_min mod 10; end;fl_p=7 then do pMasl_min= pMasl_min +1; if pMasl_min >5 then pMasl_min =5;(44)= pMasl_min; end; call writeLCD;;

if ((n_key=2) and (kl_old<>2)) and (fl_p>0) then /* - 1 к текущему значению*/

dofl_p=1 then do td_max=td_max-1; if td_max<85 then td=85;(44)=td_max/10; ind(45)=td_max mod 10; end;fl_p=2 then do tk_max =tk_max-1; if tk_max <40 then tk_max =40;(44)=tk_max /10; ind(45)=tk_max mod 10; end;fl_p=3 then do t1_max =t1_max -1; if t1<35 then t1_max =35;(44)=t1_max /10; ind(45)=t1_max mod 10; end;fl_p=4 then do t2_max =t2_max-1; if t2_max <25 then t2=25;(44)=t2_max /10; ind(45)=t2_max mod 10; end;fl_p=5 then do ub_max =ub-1; if ub_max <13 then ub_max =13;(44)=ub_max /10; ind(45)=ub_max mod 10; end;fl_p=6 then do ub_min= ub_min-1; if ub_min <7 then ub_min =7;(44)= ub_min /10; ind(45)= ub_min mod 10; end;fl_p=7 then do pMasl_min= pMasl_min-1; if pMasl_min <1 then pMasl_min =1;(44)= pMasl_min; end; call writeLCD;;=0; flag=0; sconv=1; do while flag=0; end; /*зап преобр td*/=adc_h*255+adc_l; call time(10);=0; flag=0; sconv=1; do while flag=0; end; /*зап преобр tk*/=adc_h*255+adc_l; call time(10);=1; flag=0; sconv=1; do while flag=0; end; /*зап преобр t1*/=adc_h*255+adc_l; call time(10);=2; flag=0; sconv=1; do while flag=0; end; /*зап преобр t2*/=adc_h*255+adc_l; call time(10);=3; flag=0; sconv=1; do while flag=0; end;/*зап преобр измер напр*/=adc_h*255+adc_l; call time(10);

/* пересчитываем полученные значения с АЦП в реальные величины */

td=150*td/4096; tk=100*tk/4096; t1=120*t1/4096, t2=120*t2/4096;=ub*20/4096; pMasl=pMasl*5/4096;_s=0;td_max<=td then fl_s=1; /* проверяем превышение диапазонов */tk_max<=tk then fl_s=1;t1_max<=t1 then fl_s=1;t2_max<=t2 then fl_s=1;ub_max<=ub then fl_s=1;fl_s=1 then do fl_reg=3; fl_p=0; end;

if pMasl_max<=pMasl then do fl_reg=1; fl_s=1; fl_p=0; end;

if fl_p=0 then call Displ_Buf;/*если не реж прогр выводим текущ инф*/

end;start;


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!