продължаваме с урока за бутоните. ще ви покажа, стандарта схема и софтуер за активиране на команди подавани от бутон свързан директно към процесор. описанието на командите в коментарите на всяка команда ще ви дадат повече яснота за това какво се случва по време на изпълнение на програмата. кодът можете да си компилирате стандартно със мплаб и хц8 2.0 като внимателно копирате кода на всички файлове във вашият проект файл по файл. ако има някакви затруднения при пробата на софтуера можете да пишете на емайла. симулацията във протеус работи, ще покажем в няколко кадъра какво се случва.
обяснение накратко как работи софтуера и кои са важните моменти. след като стартира програмата единият от светодиодите започва да мига периодично, докато другият е изгасен очаквайки натискането на бутона. когато бутона се натисне и малко се задържи ЗА ДА Е ДОКАЗАНО ЧЕ Е НАСТИСНАТ УМИШЛЕНО, а не случайно, първият светодиод изгасва като светва вторият и стои светнал в продължение на 5 секунди. след като тези 5 секунди изтекат, светодиода изгасва, програмата изчаква малко време като пауза преди да се върне към главната програма и да изпълни следващата команда след IF{} подпрограмата.
времената за доказване на натиснатия бутон и времето за изчакване след като завърши изпълнението на подпрограмата на бутона са важни защото при управлението на механични части със различни двигатели и соленоиди, релета и други, механиката и трябва време да заеме определена позиция спрямо другите детайли в механичният възел. за това времето за изчакване механиката да се успокои е много важно при управление на всякакви ПЛК / програмируеми логически контролери/ различни механичи възли и системи.
по сложните свързвания на бутони към процесорите ще обясним във следващите уроци.
съдържание на програмните файлове във сорс кода на примера за управлението на бутоните:
>>> fuse.h <<<
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
#pragma config WRT = OFF
#pragma config PLLEN = OFF
#pragma config STVREN = OFF
#pragma config BORV = LO
#pragma config LVP = OFF
void main(void) // start main function
{ init_cpu(); // hardware initialization
// of cpu modules
while(1) // start loop when 1=1 is always true
{
led9 = 1; // PORTBbits.RB1 // pin 18 is ON
__delay_ms(500); // wait half second
led9 = 0; // PORTBbits.RB1 // pin 18 is OFF
__delay_ms(500);
if(button1 == 1) // check condition
// for pressed button
// if button is pressed start executing
// commands bellow
{ __delay_ms(200); // wait time to prove
// that button is still
// pressed
led16 = 1; //PORTBbits.RB7 // pin 16 is ON
__delay_ms(5000); // wait 5 seconds
led16 = 0; //PORTBbits.RB7 // pin 16 is OFF
__delay_ms(200); // wait time seconds
// before return in main loop
} // end if button
// other commands goes here in loop if
// is need to do something
} // end while
return;
} //end main