#include #include int main (void) { DDRC=0x00; PORTC=0x00; DDRB=0xFF; PORTB=0x55; #define OUT0 "sbi %0, 5 \n" /* pull line to GND */ #define OUT1 "cbi %0, 5 \n" /* tristate the line */ #define NOP "nop \n" #define NOP10 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP #define NOP12 NOP10 NOP NOP #define WAIT10 "ldi r16, 1 \n rcall loop \n" #define WAIT34 "ldi r16, 9 \n rcall loop \n" //#define BIT0 OUT0 NOP10 NOP12 NOP12 OUT1 NOP10 //#define BIT1 OUT0 NOP10 OUT1 NOP10 NOP12 NOP12 #define BIT0 OUT0 WAIT34 OUT1 WAIT10 #define BIT1 OUT0 WAIT10 OUT1 WAIT34 PORTB=0x55; int temp=0; while(1) { temp++; PORTB=~(1 << ((temp>>9)%6)); _delay_ms(1); asm volatile( BIT0 BIT1 BIT0 BIT0 BIT0 BIT0 BIT0 BIT0 BIT0 BIT0 BIT0 BIT0 BIT0 BIT0 BIT1 BIT1 BIT0 BIT0 BIT0 BIT0 BIT0 BIT0 BIT1 BIT0 BIT1 "rjmp done \n" "loop:\n" "dec r16\n" "brne loop\n" "ret\n" "done: \n" : : "I" (_SFR_IO_ADDR(DDRC)), "I" (_SFR_IO_ADDR(PINC)) : "r16" ); } return 0; // never reached }