Hi!
also ich bin übrigens der Gast von 2 threads weiter oben sorry....
hab mich jetzt mal hingesetzt und das versucht sitz jetzt aber schon 4 stunden an dem slave.. will einfach nicht.. es währe echt total genial wenn sich jemand der sich auskennt mal meinen code ansieht! is auch schön kurz nur zum testen vielleicht hab ich ja nur irgend ne kleinigkeit vergessen.. naja den master hab ich aus den schnipseln von www.sprut.de zusammengesetzt aber vielleicht liegts ja auch an dem... ich verzweifel hier auf jedenfall fast.. wäre echt spize wenn sich jemand die mühe macht sich das anzusehen!!
hier mal die codes (für PIC16F877 @ 4mHz):

Master:
Code:
	#include <P16f877.INC>
	__CONFIG	_PWRTE_ON & _WDT_OFF & _HS_OSC & _LVP_OFF & _BODEN_OFF

adresse1	EQU	0x26				; Variablen Declarieren ;)
loops		EQU	0x28
loops2		EQU	0x29
temp		EQU	0x2A

; reicht vorerst an vars will ja nix übertreibn
	org 0
	goto init

; init the I2C stuff::::::::::::::::::::::::::::::::::::::::::::::::::::
init
	movlw	B'01001000'
	movwf	adresse1

	bsf	STATUS, RP0		; Bank1
	movlw   B'00011000'		; trisc 2+3 inputs für I2C
	movwf	TRISC			;
	movlw	B'00000000'		; trisd outputs für Servos
	movwf	TRISD			;
	movlw	B'00000000'		; trisb outputs für LEDs und Relais
	movwf	TRISB			;
	movlw   d'2'			; clock = 4/(4*(2+1)) = 333kHz
	movwf   SSPADD			; für I2C
	bcf	STATUS, RP0		; Bank 0
	movlw   B'00001000'		; master mode, clock=Fosc/(4*(SSPADD+1))
	movwf   SSPCON			;
	bsf     SSPCON, SSPEN		; MSSP-Modul enable
	
	goto main
; rdy with initing:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; General routines:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; delay 1sec::
WAIT
top1      movlw   .110			; timing adjustment variable (1ms)
         movwf   loops2
top21   nop				; sit and wait
        nop
        nop
        nop
	nop
	nop
	nop
        nop
        nop
	nop
	nop

         decfsz  loops2, F		; inner loops complete?
         goto    top21			; no, go again
                        
         decfsz  loops, F		; outer loops complete?
         goto    top1			; no, go again
         retlw 0			; yes, return from subWAIT


; I2C routines:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; bus übernehmen::
i2c_takeover	bcf     PIR1, SSPIF     ; SSPIF Bit löschen
		bsf     STATUS, RP0
        	bsf     SSPCON2, SEN    ; Bus Übernahme anweisen
        	bcf     STATUS, RP0

i2c_t1		btfss   PIR1, SSPIF     ; Testen, ob Bus schon übernommen wurde
        	goto    i2c_t1          ; nein, noch nicht
        	bcf     PIR1, SSPIF     ; ja, der Bus ist mein! nun noch SSPIF zurücksetzen 
	return

; w senden an adresse1::
i2c_sendw1	movwf	temp
		movfw	adresse1
		movwf   SSPBUF          ; -> zum I2C-Slave übertragen

i2c_t2		btfss   PIR1, SSPIF     ; ACK schon empfangen?
        	goto    i2c_t2          ; nein, noch nicht
        	bcf     PIR1, SSPIF     ; ja, Daten sind im Slave, nun noch SSPIF zurücksetzen

		movfw	temp
		movwf   SSPBUF          ; -> zum I2C-Slave übertragen

i2c_t3		btfss   PIR1, SSPIF     ; ACK schon empfangen?
        	goto    i2c_t3          ; nein, noch nicht
        	bcf     PIR1, SSPIF     ; ja, Daten sind im Slave, nun noch SSPIF zurücksetzen
	return


; bus freigeben::
i2c_free	bsf     STATUS, RP0
        	bsf     SSPCON2, PEN    ; Bus Freigabe anweisen
        	bcf     STATUS, RP0

i2c_t6		btfss   PIR1, SSPIF     ; Bus schon freigegeben?
      		goto    i2c_t6          ; nein, noch nicht
        	bcf     PIR1, SSPIF     ; ja, alles fertig, nun noch SSPIF zurücksetzen
	return
;:::::::::::::::::::::::main program:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::....
main
	clrf PORTB
	call WAIT
	call WAIT
	call i2c_takeover
	bsf  PORTB, 0
	movlw b'11111111'
	call i2c_sendw1
	bsf  PORTB, 1
	call i2c_free
	bsf  PORTB, 2
	call WAIT
	call WAIT
	bsf  PORTB, 3
	call i2c_takeover
	
	movlw b'00000000'
	call i2c_sendw1
	call i2c_free
	goto main

	end
Slave:

Code:
	#include <P16f877.INC>
	__CONFIG	_PWRTE_ON & _WDT_OFF & _HS_OSC & _LVP_OFF & _BODEN_OFF

adresse1	EQU	0x26				; Variablen Declarieren ;)
adresse2	EQU	0x27
loops		EQU	0x28
loops2		EQU	0x29
s_copy		EQU	0x2A
w_copy		EQU	0x2B
temp		EQU	0x2C


; reicht vorerst an vars will ja nix übertreibn
	org 0
	goto init


	org 4 					; Interruptvector

intvec	bcf	INTCON, GIE			; disable Interupt 
	movwf	w_copy				; w retten
	swapf	STATUS, w 			; STATUS retten
	movwf	s_copy				;



								; Intrupt servic routine
Int_serv 

	call    receivedata
	swapf	s_copy, w			; STATUS zurück
	movwf	STATUS 
	swapf	w_copy, f			; w zurück mit flags
	swapf	w_copy, w

	bcf	INTCON, T0IF			; Interupt-Flag löschen
	bsf	INTCON, GIE				; enable Interupt
	retfie


receivedata	bsf	STATUS, RP0		; Bank1
		btfss	SSPSTAT, BF
		goto 	receivedata
		
		movfw	SSPBUF
		movwf	PORTB
		bcf	STATUS, RP0		; Bank 0
		bcf	PIR1, SSPIF

	return



; init the I2C stuff::::::::::::::::::::::::::::::::::::::::::::::::::::
init
	bsf	STATUS, RP0		; Bank1
	movlw   B'00011000'		; trisc 2+3 inputs für I2C
	movwf	TRISC			;
	movlw	B'00000000'		; trisd outputs für Servos
	movwf	TRISD			;
		
	movlw	B'00000000'		; trisb outputs für LEDs und Relais
	movwf	TRISB			;
	
	movlw   d'01001000'		; adress
	movwf   SSPADD			; für I2C
	bcf	STATUS, RP0		; Bank 0
	clrf	PORTB
	clrf	PORTD	
	movlw   B'00001100'		; slave mode
	movwf   SSPCON			;
	bsf     SSPCON, SSPEN		; MSSP-Modul enable
	bsf	INTCON, GIE		; Interupt erlauben
	goto main
; rdy with initing:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



;:::::::::::::::::::::::main program:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::....
main	
	nop

	goto main

	end
Vielen dank im voraus ich weiss is n haufn arbeit son code durchzugehn aber ich wär euch echt dankbar!
mfg.
m0