Hallo!!
Hier mal die Funktion, wie ich sie jetzt verwende :
Code:
void txd(uint8_t data)
{
	uint8_t bitcnt;
	uint8_t delay;

	__asm__ __volatile__(
		"		cli\n\t"
		"		ldi	%A0,0x0a\n\t"			//;1+8+sb (sb is # of stop bits)
		"		com	%A2\n\t"				//;Inverte everything
		"		sec\n\t"					//;Start bit

		"0:		brcc 1f\n\t"		//;If carry set
		"		sbi	0x1b,6\n\t"			//;send a '0'
		"		rjmp 2f\n\t"		//;else	

		"1:		cbi	0x1b,6\n\t"			//;send a '1'
		"		nop\n\t"

		"2:		rcall 3f\n\t"		//;One bit delay
		"		rcall 3f\n\t"

		"		lsr	%A2\n\t"				//;Get next bit
		"		dec	%A0\n\t"				//;If not all bit sent
		"		brne 0b\n\t"		//;send next
		"		sei\n\t"								//;else
		"		ret\n\t"					//;  return

		"3:		ldi	%A1,19\n\t"
		"4:		dec	%A1\n\t"
		"		brne 4b\n\t"
		"		ret\n\t"

		:"=r"(bitcnt),"=r"(delay),"=r"(data));

}
Wenn ich die Operanden so übergebe, brauche ich dem Compiler nichts über veränderte Register sagen, der entscheidet ja eh selbst, welche er nimmt, richtig?

So, und das ganze läuft zur Zeit wunderbar zusammen mit meiner GBCAM, der T26 auf 16MHz, der ADC Prescaler auf 2 (!!), schalte ich die serielle Übertragung ab und lese nur die Kamera aus, dann komme ich auf ca. 10 fps, getestet mit einer LED, die nach jedem Bild kurz blinkt.