Мегаобучалка Главная | О нас | Обратная связь


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



2020-03-19 180 Обсуждений (0)
Разработка программного обеспечения МПС 0.00 из 5.00 0 оценок




 

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

 

Описание алгоритма работы главной программы main ().

При включении питания микроконтроллер начинает выполнение программы с функции main () в ней описаны команды инициализации контроллера: настройка АЦП, настройка таймера, конфигурация портов на ввод и на вывод, разрешение прерываний от порта В и таймера 0. Далее микроконтроллер зацикливается при помощи бесконечного цикла while (1).

Схема алгоритма обработки прерываний от таймера 0



Схема алгоритма записи данных на LCD -дисплей

 

 


Схема алгоритма проверки готовности LCD -дисплея и чтения информации с него

 

 

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

 

#include <pic.h>

#define uchar unsigned char

#define uint unsigned int

#define PORTBIT (adr, bit) ((unsigned) (&adr)*8+ (bit))bit RS @ PORTBIT (PORTC, 6);bit RW @ PORTBIT (PORTC, 5);bit E @ PORTBIT (PORTC, 4);on[5], s=5;ms, tzK, tzC, t0, t1, t2, t3, t4;

// ПаузаWait (uchar kk)

{(kk-);

}

// Читаем из индикатораReadInd(void)

{DATA;=0x0F; // на ввод 4 мл бита порта=1;

E=1;

DATA=(PORTC&&0x0F)<<4; // считываем 4 ст. бита

E=0;

E=1;

DATA=DATA||(PORTC&&0x0F); // считываем 4 мл бита

E=0;

RW=0;

return(DATA);

}

// Записываем в индикатор код

void WriteInd (uchar Dann)

{stDann, mlDann;=Dann&&0xF0; // старшие тетрады=Dann&&0x0F; // младшие тетрады=0;=0;=PORTC&&0xF0; // очищаем 4 мл бита порта С=PORTC||stDann; // передаём 4 ст бита=1;

E=0;

PORTC=PORTC&&0xF0; // очищаем 4 мл бита порта С

PORTC=PORTC||mlDann; // передаём 4 мл бита

E=1;

E=0;

TRISC=0x0F;

}

// Проверка готовности индикатора

void Check(void)

{

uchar DATA; // описали переменную DATA типа uchar

RS=0;

{=ReadInd();<<=1;

}

while(CARRY); // если бит переноса равен 1, то индикатор не готов

}WriteData (uchar kod)

{(20);();

RS=1;

WriteInd(kod); // записать в индикатор код

}

void WriteCommand (uchar kod)

{

Wait(20); // пауза (20 машинных циклов)

Check(); // проверить состояния индикатора

RS=0;

WriteInd(kod); // записать в индикатор код

RS=1;

}

// Вывод на дисплей

void Display(void)

{

WriteCommand(0x01); // (00000001) очистка экрана

// первая строка

WriteData(0x54); // (01010100) T(0x3D); // (00111101)=(0x30+tzC/1000); // тысячи(0x30+tzC % 1000/100); // сотни(0x30+tzC % 100/10); // десятки(0x30+tzC % 10); // единицы(0x2F); // (00101111) знак «/»(0x30+t[0]/1000); // тысячи(0x30+t[0]%1000/100); // сотни(0x30+t[0]%100/10); // десятки(0x30+t[0]%10); // единицы(0x2F); // (00101111) знак «/»(0x30+t[1]/1000); // тысячи(0x30+t[1]%1000/100); // сотни(0x30+t[1]%100/10); // десятки(0x30+t[1]%10); // единицы

// вторая строка

WriteData(0x27); // (00100111) знак «'» (градусы)

WriteData(0x43); // (01000011) C(0x30+t[2]/1000); // тысячи(0x30+t[2]%1000/100); // сотни(0x30+t[2]%100/10); // десятки(0x30+t[2]%10); // единицы(0x2F); // (00101111) знак «/»(0x30+t[3]/1000); // тысячи(0x30+t[3]%1000/100); // сотни(0x30+t[3]%100/10); // десятки(0x30+t[3]%10); // единицы(0x2F); // (00101111) знак «/»(0x30+t[4]/1000); // тысячи(0x30+t[4]%1000/100); // сотни(0x30+t[4]%100/10); // десятки(0x30+t[4]%10); // единицы(s==0) WriteCommand(0x8A); // (10001010) на 1ю стр. 11 поз.(s==1) WriteCommand(0x8F); // (10001111) на 1ю стр. 16 поз.(s==2) WriteCommand(0xC5); // (11000101) на 2ю стр. 6 поз.(s==3) WriteCommand(0xCA); // (11001010) на 2ю стр. 11 поз.(s==4) WriteCommand(0xCF); // (11001111) на 2ю стр. 16 поз.(s==5) WriteCommand(0x0C); // (00001100) курсор выключенWriteCommand(0x0E); // курсор включен

}

// Увеличение заданной температуры

void Up(void)

{++;(tzK>5000) tzK=5000;=tzK-273;

}

// Уменьшение заданной температуры

void Down(void)

{-;(tzK<300) tzK=300;=tzK-273;

}

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

interrupt INTR()

{

if (T0IF) // запрос прерывания от таймера

{

TMR0=0x84; // (10000100) загрузка в таймер начального значения

ms++; // отсчёт миллисекунд

if (ms>1000) // если миллисекунд больше 1000

{ms=0; // обнуление

if (on[0]) // если разрешено управление первым нагревателем

{

CHS0=0; CHS1=0; CHS2=0; // выбираем 1-й канал АЦП

ADGO=1; // запускаем АЦП

while (ADGO); // ждем пока АЦП закончит преобразование

t[0]=(ADRESL+ADRESH*256)*5000/1023; // вычисляем температуру

if (t[0]>tzK) RB0=0;

else RB0=1;

}

if (on[1]) // если разрешена работа вторым нагревателем

{=1; CHS1=0; CHS2=0;=1;(ADGO);[1]=(ADRESL+ADRESH*256)*5000/1023;(t[1]>tzK) RB1=0; else RB1=1;

}

if (on[2]) // если разрешена работа третьим нагревателем

{=0; CHS1=1; CHS2=0;=1;(ADGO);[2]=(ADRESL+ADRESH*256)*5000/1023;(t[2]>tzK) RB2=0; else RB2=1;

}

if (on[3]) // если разрешена работа четвертым нагревателем

{=1; CHS1=1; CHS2=0;=1;(ADGO);[3]=(ADRESL+ADRESH*256)*5000/1023;(t[3]>tzK) RB3=0; else RB3=1;

}

if (on[4]) // если разрешена работа пятым нагревателем

{=0; CHS1=0; CHS2=1;=1;(ADGO);[4]=(ADRESL+ADRESH*256)*5000/1023;(t[4]>tzK) RB4=0; else RC7=1;

}

Display();

}

T0IF=0; // сброс флага запроса прерывания от таймера

}

if (RBIF) // запрос прерывания от клавиатуры

{ // прерывание от клавиатуры(! RB7) {on[s]=! on[s]; t[s]=0;}(! RB6) Up();(! RB5) Down();(! RB4) {s=s+1; if (s>5) s=0;}=0; // сброс флага запроса прерывания от клавиатуры

Display();}

} // конец обработки прерываний

void main(void)

{TRISB=0xF0; // (11110000) конфигурация порта на ввод

TRISC=0; // конфигурация порта на вывод

WriteCommand(0x28); // (00101000)

WriteCommand(0x0С); // (00001100)

WriteCommand(0x06); // (00000110)

ADCON0=0x41; // (01000001) включение модуля АЦП, частота Fosc/8;

ADCON1=0x82; // (10000010) // включаем 5 каналов АЦП

while (1);}

 


Заключение

микроконтроллер электронагреватель полимер управление

При выполнении данного проекта была изучена архитектура микроконтроллера PIC16F876 фирмы Microchip и построена на его основе микропроцессорная система управления электронагревателями печи обработки полимеров. При этом также был изучен текстовый жидкокристаллический дисплей WH1602A-YYK-CP фирмы Winstar и встроенный в него контроллер HD44780. Приобретены навыки программирования микропроцессорных систем и построения на их основе устройств сбора и обработки информации. Так же был изучен кросс-компилятор HI-TECH С for Microchip PIC v7.85.



2020-03-19 180 Обсуждений (0)
Разработка программного обеспечения МПС 0.00 из 5.00 0 оценок









Обсуждение в статье: Разработка программного обеспечения МПС

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (180)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)