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
Lesezeichen