#include <16F877.h>

#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD
#use delay(clock=4000000) //4 MHz-es kvarc

#byte PORTB = 0x06 //PORTB regiszterre mutató pointer
#byte PORTC = 0x07 //PORTC regiszterre mutató pointer
#byte PORTD = 0x08 //PORTD regiszterre mutató pointer

#define varakozas_ms = 100; // A várakozás idejének megadása (millisecundum)

//================================================================
void main(void){
//================================================================
int futofenypoz=0; // futofenypoz változó deklarálása értékadással (0)

	set_tris_a(0b00011111);	// PORTA 0:5 bemenet
	set_tris_b(0b00000000);	// PORTB kimenet
	set_tris_c(0b00000000);	// PORTC kimenet
	set_tris_d(0b00000000);	// PORTD kimenet
	output_b(0b10000000);	// Első led bekapcs a PORTB-n
	
	for(;;) { // Végtelen ciklus
		if(!input(PIN_A0)) { // A PORTA 1. lábán levő gomb
			effectselect(); // Lehívja az EFFECTSELECT-et
		} // if
		delay_ms(varakozas_ms); // -varakozas_ms- millisecundumot vár (jelenleg 100)
	} // for
} // main

//================================================================
void effectselect(void){
//================================================================
	for(;;) { // Végtelen ciklus
		if (futofenypoz==0) {
			futofenyjobb(); // Lehívja az FUTOFENYJOBB-ot
		}
		if (futofenypoz==1) {
			futofenybal(); // Lehívja az FUTOFENYBAL-t
		}	
	} // for
} //  effectselect

//================================================================
void futofenyjobb(void){
//================================================================
	for(;;) { // Végtelen ciklus
		rotate_right(&PORTB,1); // Jobbra lépteti a biteket a PORTB-n, 1-gyel
		delay_ms(varakozas_ms); // -varakozas_ms- millisecundumot vár (jelenleg 100)
		main(); // Lehívja az MAIN-t
	} // for
} //  futofenyjobb

//================================================================
void futofenybal(void){
//================================================================
	for(;;) { // Végtelen ciklus
		rotate_left(&PORTB,1); // Balra lépteti a biteket a PORTB-n, 1-gyel
		delay_ms(varakozas_ms); // -varakozas_ms- millisecundumot vár (jelenleg 100)
		main(); // Lehívja az MAIN-t
	} // for
} //  futofenybal
// A rotate_x függvénynek pointert kell átadni, ezért kell elé az & jel