#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=temp; _delay_ms(1); asm volatile( BIT0 BIT0 BIT0 BIT0 BIT0 BIT0 BIT0 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 }