/************************************************ *************************************************/ #include <avr/io.h> #include <avr/delay.h> #define F 8000.0 // F, , #define N 20L // N, #define S 2L // S, #define t (unsigned long)((1/F)*1000000.0/2.0) // t, , #define Tp (unsigned long)(N*(t*2)) // Tp, , #define Td (unsigned long)(Tp*(S-1)) // Td, , void init(void) { DDRD = 0x00; DDRB = 0xff; DDRC = 0xff; PORTB = 0xff; PORTC = 0xff; PORTD = 0xff; PORTB |= _BV(PB1); PORTB |= _BV(PB2); } void rMotorF(void) { PORTC &= ~_BV(PC4); // "0" PORTC |= _BV(PC2); // "1" } void lMotorF(void) { PORTC &= ~_BV(PC5); // "0" PORTC |= _BV(PC3); // "1" } void rMotorB(void) { PORTC &= ~_BV(PC2); // "0" PORTC |= _BV(PC4); // "1" } void lMotorB(void) { PORTC &= ~_BV(PC3); // "0" PORTC |= _BV(PC5); // "1" } void IRGenerate(void) { int i; for (i = 0; i < N; ++i) // - { PORTC |= _BV(PC1); _delay_us (t); PORTC &= ~_BV(PC1); _delay_us (t); } } int main(void) // { init(); PORTC |= _BV(PC0); PORTB |= _BV(PB0); while (1) { IRGenerate(); if (!(PIND & (1 <<PIND7))) // { rMotorB(); // _delay_ms(50); } else { rMotorF(); // _delay_ms(50); } _delay_us(Td); IRGenerate(); if (!(PIND & (1 <<PIND6))) // { lMotorB(); // _delay_ms(50); } else { lMotorF(); // _delay_ms(50); } _delay_us(Td); // } }
Source: https://habr.com/ru/post/135570/
All Articles