Hallo,

Danke schon mal für den Hinweis. Es muss natürlich RET heissen. Die Stacktiefe wird nicht überschritten. Die Daten über PB2 werden später von einem Timer Interrupt gestellt. Insgesamt beträgt die Stacktiefe damit 2.

Ich habe die Start Bedigung jetzt so verändert:

Code:
iic_start:
  	; SDA = SCL = Hi?
  	sbis	pinb,	0x00
  	rjmp	iic_start

  	sbis	pinb,	0x01
 	rjmp	iic_start

	; SDA = Lo, SCL = Hi?
__iic_start1:
	sbic	pinb,	0x00
  	rjmp	__iic_start1

__iic_start2:
	sbis	pinb,	0x01
  	rjmp	__iic_start2		; Eventuell hier Rücksprung zu iic_start?

	; SDA = Lo, SCL = Lo?
__iic_start3:
	sbic	pinb,	0x00		; Eventuell hier Rücksprung zu iic_start?
  	rjmp	__iic_start3

__iic_start4:
	sbic	pinb,	0x01
  	rjmp	__iic_start4		; Eventuell hier Rücksprung zu iic_start?

	ret
Das komische ist, manchmal scheint der Controller durch welche Zufälle auch immer die Start Bedigung zu erkennen. Da mir komischerweise schon zwei ATTiny11 kaputt gegangen sind (sie lassen sich nicht mehr beschreiben) habe ich das Programm mit dem Simulator getestet. Nach meiner Meinung funktioniert der Code!

Nur in der Praxis sieht es dann wieder anders aus.

Gruß,

Stefan