При включении питания микроконтроллер начинает выполнение программы с функции main(). В ней описаны команды инициализации контроллера: настройка АЦП на порт RA0, настройка LCD-дисплея (4-х разрядная шина данных, 2 сточки, последовательное перемещение курсора), конфигурация портов на ввод и на вывод, разрешение прерываний от порта В и таймера 0. Далее происходит зацикливание при помощи бесконечного цикла while(1), в теле которого происходит проверка управляющих флагов и в зависимости от состояния этих флагов осуществляется вызов соответствующих процедур и сброс состояния флага.
Листинг программы
#include <pic.h>
#define PORTBIT (adr, bit) ((unsigned) (&adr)*8+ (bit))bit RS @ PORTBIT (PORTC, 6);bit RW @ PORTBIT (PORTC, 5);bit E @ PORTBIT (PORTC, 4);probel=0x20 ;//0x20; //0x5Fint _time=0,_settime, _time1=0,_time2=0,_time3=0,_time4=0;char status=0, temperature, settemperature=50, regim=1, subregim=0, mig=0;char d1=0, d2=0, d3=0, d4=0, d5=0, d6=0, kl=0, displayed=1;
//Функция корректировки представления времениCorrectTime(unsigned int &ttime)
{(ttime>24*60-1)
{ttime=_time1=_time2=_time3=_time4=0;
}
}
//Функция корректирования температурыCorrectTemperature(unsigned char &ttemperature)
{(ttemperature>99) ttemperature=99;(ttemperature<30) ttemperature=30;
}
//ПаузаWait(uchar kk)
{(kk--);
}
//Читаем из индикатораchar ReadInd(void)
{char DATA;=0x0F;//на ввод 4мл бита порта
RW=1;=1;=(PORTC&&0x0F)<<4;//считываем 4ст. бита=0;=1;=DATA||(PORTC&&0x0F);//считываем 4мл бита=0;=0;(DATA);
}
//Записываем в индикатор код
void WriteInd(uchar Dann)
{stDann, mlDann;=Dann&&0xF0;//старшие тетрады=Dann&&0x0F;//младшие тетрады=0;=0;=PORTC&&0xF0;//очищаем 4мл бита порта С=PORTC||stDann;//передаём 4ст бита
E=1;=0;=PORTC&&0xF0;//очищаем 4мл бита порта С=PORTC||mlDann;//передаём 4мл бита=1;=0;=0x0F;
}
//Проверка готовности индикатораCheck(void)
{DATA;//описали переменную DATA типа uchar
RS=0;
{=ReadInd();<<=1;
}(CARRY);//если бит переноса равен 1,то индикатор не готов
}WriteData(uchar kod)
{(20);
Check();=1;(kod);//записать в индикатор код
}WriteCommand(uchar kod)
{(20);//пауза(20 машинных циклов)();//проверить состояния индикатора=0;(kod);//записать в индикатор код
RS=1;
}
//Вывод на дисплейDisplay(int i)
{(_time);(settemperature);(_settime);
WriteCommand(0x01);//(00000001)очистка экрана
// -------Вывод 1-го режима------------
if (i==1) {(status==1)
{(0x4f); //O(0x6E); //n(probel); //_
} else
{(0x4f); //O(0x66); //f(0x66); //f
}(0x7c); //|(probel); //_(0x54); //T(0x69); //i(0x6D); //m(0x65); //e(0x3A); //:(probel); //_(0x30+(_time/60)/10); //desyatki chasov(0x30+(_time/60)%10); //edinitsy chasov(0x3A); //:(0x30+(_time%60)/10); // desytki minut(0x30+(_time%60)%10); // edinitsy minut
//вторая строка(0x54); //T(0x65); //e(0x6D); //m(0x70); //p(0x65); //e(0x72); //r(0x61); //a(0x74); //t(0x75); //u(0x72); //r(0x65); //e(0x3A); //:(probel); //_(0x30+temperature/10); // desyatki temperatury(0x30+temperature%10); // edinitsy temperatury((temperature<settemperature)||(mig==0))(probel); //_(0x21); //!
Субмикронные полевые транзисторы с барьером Шоттки
Характерные размеры современных полупроводниковых
приборов могут быть значительно меньше 1 мкм. В таких условиях длина прибора
может стать сравнимой со средней длиной свободного пробега ...
Планирование кинозала
Зрительный зал кинотеатра является основным помещением и от его
формы и размеров зависит экономическая часть и техника кинопоказа из-за
дешевизны в строительстве выбирается прямоугольная ...
Система управления роботизированной платформой перемещения предметов
Несмотря на то что современная технология переводит все на
уровень сверхбольших чипов и микросхем и в большинстве случаев ремонт
представляет собой замену блоков или в крайнем случае чип ...