// ATmega8 CERBERES #include #define F_CPU 8000000UL #include #include #define bs(sfr, bit) (_SFR_BYTE(sfr)|=_BV(bit)) //Bit 1 be állítása #define bc(sfr, bit) (_SFR_BYTE(sfr)&=~_BV(bit)) //Bit 0 ba állítása #define btg(sfr, bit) (_SFR_BYTE(sfr)^=_BV(bit)) //Bit ellenkezőjére váltása #define tb(sfr, bit) (bit_is_set(sfr, bit)) //Bit tesztelése #define bitcpy(from_byte, from_bit, to_byte, to_bit) if(tb(from_byte,from_bit))bs(to_byte,to_bit);else bc(to_byte,to_bit); //bit másolása void IOinit(void); void stopp(void); void elore(void); void jobbra(void); void balra(void); void hatra(void); unsigned char IR=0; int main(void) { IOinit(); //HW- inicializálása ki és bemenetek PORTB=0x00; PORTD=0x00; elore(); while(1) { bitcpy(PINC,0,IR,0); bitcpy(PINC,1,IR,1); if(IR==1) {stopp(); jobbra();} if(IR==2) {stopp(); balra();} if(IR==0) {stopp(); hatra();} } return 0; } void stopp(void) { bc(PORTC,2); // bal motor bc(PORTC,3); bc(PORTC,4); // jobb motor bc(PORTC,5); _delay_ms(20); return; } void jobbra(void) { bc(PORTC,2); // bal motor bs(PORTC,3); bs(PORTC,4); // jobb motor bc(PORTC,5); _delay_ms(80); elore(); return; } void balra(void) { bs(PORTC,2); // bal motor bc(PORTC,3); bc(PORTC,4); // jobb motor bs(PORTC,5); _delay_ms(80); elore(); return; } void hatra(void) { bs(PORTC,2); // bal motor bc(PORTC,3); bs(PORTC,4); // jobb motor bc(PORTC,5); _delay_ms(80); elore(); return; } void elore(void) { bc(PORTC,2); bs(PORTC,3); bc(PORTC,4); bs(PORTC,5); return; } void IOinit(void) { DDRC=0xfc; // bemenet a pc0 és pc1 DDRB=0xff; // minden kimenet DDRD=0xff; // minden kimenet return; }