// vim:set et sw=2 ts=2 tw=120: #include #include #include #include #include "inc/int/dcf77.h" #define CTC_MATCH_OVERFLOW ((F_CPU / 1000) / 8) // set bit static inline void BIT_SET(volatile uint8_t* target, uint8_t bit) __attribute__((always_inline)); static inline void BIT_SET(volatile uint8_t* target, uint8_t bit) { *target |= (1 << bit); }; // set clear static inline void BIT_CLEAR(volatile uint8_t* target, uint8_t bit) __attribute__((always_inline)); static inline void BIT_CLEAR(volatile uint8_t* target, uint8_t bit) { *target &= ~(1 << bit); }; /* * * PB2 : connected to ShiftClock on Port 11 * PB3 : connected to MemoryClock on Port 12 (shows content of memory) * PB4 (PIN3) : connected to SERIAL_IN on pin 14 * */ void pulse_sck() { PORTB |= (1 << PB2); PORTB ^= (1 << PB2); } void print_data(uint16_t data) { //BIT_CLEAR(&PORTB, PB4); //BIT_SET(&PORTB, PB4); for (uint16_t i = 0; i < 16; i++) { data & 0x1 << i ? BIT_SET(&PORTB, PB4) : BIT_CLEAR(&PORTB, PB4); pulse_sck(); } //BIT_CLEAR(&PORTB, PB4); // pulse_sck(); BIT_CLEAR(&PORTB, PB3); BIT_SET(&PORTB, PB3); } int main(void) { BIT_CLEAR(&PORTB, PB5); _delay_ms(20); BIT_SET(&PORTB, PB5); BIT_CLEAR(&PORTB, PB5); _delay_ms(20); BIT_SET(&PORTB, PB5); // make all pins output pins... DDRB = 0xFF; DDRB &= ~(1 << PB0); // makes PB0 an input pin (INT0) PORTB |= (1 << PB0); // activate input resistor // activate dcf77-receiver... PORTB &= (1 << PB1); // sets PB1 to low _delay_ms(20); PORTB &= ~(1 << PB1); // sets PB1 to low cli(); /* GIMSK |= (1<