#include #include #include #include #include const int iDotLength = 75; void dot() { PORTB |= 1; _delay_ms ( iDotLength ); PORTB &= ~1; } void dash() { PORTB |= 1; _delay_ms ( iDotLength ); _delay_ms ( iDotLength ); _delay_ms ( iDotLength ); PORTB &= ~1; } void space() { _delay_ms ( iDotLength ); _delay_ms ( iDotLength ); _delay_ms ( iDotLength ); } int main() { volatile int iSymbol = 0; volatile int iCount = 50; DDRB = 1; PORTB |= ( 1 << PB2 ); for ( ; ; ) { iSymbol = rand() % 3; if ( iCount != 0 ) { switch ( iSymbol ) { case 0:dot();break; case 1:dash();break; case 2:space();break; } _delay_ms ( iDotLength ); iCount -= 1; } if ( ( ( PINB >> PB2 ) & 1 ) == 0 ) { iCount = 50; } } }