// vim:set et sw=2 ts=2 tw=120: #include #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 print_data(uint16_t data) { BIT_CLEAR(&PORTB, PB3); for (char i = 0; i < 16; i++) { data & 0x1 << i ? BIT_SET(&PORTB, PB4) : BIT_CLEAR(&PORTB, PB4); // pulse sck... BIT_SET(&PORTB, PB2); BIT_CLEAR(&PORTB, PB2); } 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 = 0b11111110; PORTB |= 1<