Ok...bis jetzt soll das Programm folgendes machen: Wenn auf der angeschlossenen Folientastaur der Knopf 1 gedrückt wird, soll auf einer Smartcard über den I2C Bus eine 5 gespeichert werden.
Die Tastaturabfrage funktioniert wunderbar, die hab ich schon durch LEDs getestet.
Code:
        list p=16f876a 
;********************************************************** 
;*      Pinbelegung 
;*      ----------------------------------  
;*      PORTA:  0   LED 
;*              1   LED 
;*              2   LED   
;*      PORTB:  0  
;*              1   Keyboard 1 4 7 * 
;*              2   Keyboard 2 5 8 0 
;*              3   Keyboard 3 6 9 # 
;*              4   ---------I I I I 
;*              5   -----------+ I I 
;*              6   -------------+ I 
;*              7   ---------------+ 
;	PORTC:	3   SCL
;		4   SDA
;*  
;********************************************************** 
; 
;********************************************************** 
; Includedatei für den 16F876a einbinden 
        #include <P16f876a.INC> 

; Configuration festlegen 
; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator 

        __CONFIG        _PWRTE_ON & _WDT_OFF & _XT_OSC 
;************************************************************** 


Init    bsf     STATUS, RP0     ; Bank 1 
	movlw	0x06		; Digitalumschaltung
	movwf	ADCON1
        movlw   D'11010111'     ; pull-up Widerstände ein ?
        movwf   OPTION_REG 
	movlw	D'00000000'
	movwf	INTCON 		;Interupts disable
        movlw	B'00000000'
	movwf    TRISA          ; RA0 .. RA7 output 
        movlw   B'11110000'     ; RB1 .. RB3 output 
        movwf   TRISB 
	movlw	B'00011000'	;RC3,4 inputs
	iorwf	TRISC,f		;
	movlw	d'2'		; Busgeschwindigkeit
	movwf	SSPADD
        bcf     STATUS, RP0     ; Bank 0 
	movlw	B'00001000'	;Mastermode
	movwf	SSPCON
	bsf	SSPCON,SSPEN	;I2C enable
        clrf    PORTA           ;  
        clrf    PORTB           ; 
	clrf	PORTC 



Main  
        call    Tastatur        ; Tastatur abfragen 
        goto    Main		; 


;**********************************************************  
; 
;Abfrage der 3x4-Tastatur 
; 
;********************************************************** 
; Festlegung der Spaltennummern 

Row1    equ     1	        ;Keyboard 1 4 7 * 
Row2    equ     2               ;Keyboard 2 5 8 0 
Row3    equ     0               ;Keyboard 3 6 9 # 
  

; ist eine Taste gedrückt? und welche? 

Tastatur                        ; Tastencode nach Taste 
                                ; wenn keine Taste gedrückt dann Taste=0 
       ; movlw   0               ; W=0 

        bsf     PORTB, Row2 
        bsf     PORTB, Row3 
        bcf     PORTB, Row1 
        call    col1            ; 1. Spalte abfragen 

        bsf     PORTB, Row1 
        bcf     PORTB, Row2 
        call    col2            ; 2. Spalte 

        bsf     PORTB, Row2 
        bcf     PORTB, Row3 
        call    col3            ; 3. Spalte 
        return 

col1 

        btfss   PORTB, 7 
        call   	Knopf1
        btfss   PORTB, 6 
        call	Knopf4 
        btfss   PORTB, 5 
        call	Knopf7
        btfss   PORTB, 4 
        call	Knopf11
        return 
col2 
        btfss   PORTB, 7 
        call	Knopf2
        btfss   PORTB, 6 
        call 	Knopf5
        btfss   PORTB, 5 
        call	Knopf8
        btfss   PORTB, 4 
        call	Knopf0
        return 
col3 

	btfss   PORTB, 7 
        call	Knopf3
        btfss   PORTB, 6 
        call	Knopf6
        btfss   PORTB, 5 
        call	Knopf9
        btfss   PORTB, 4 
        call	Knopf12
        return 


Knopf1
	movlw	B'00000001'
	movwf	PORTA
	call	i2c_on
	movlw	B'10100000'	;EEPROM Adresse
	call	i2c_tx
	movlw	0x00		;high Teil der Speicheradresse
	call	i2c_tx
	movlw	0x03		;low Teil der Speicheradresse
	call	i2c_tx
	movlw	0x05		;5 soll gespeichert werden
	call	i2c_tx
	call	i2c_off		;Bus freigabe
	return

Knopf2

	return

Knopf3

	return

Knopf4

	return

Knopf5

	return

Knopf6

	return
	

Knopf7
	return

Knopf8
	return

Knopf9

	return

Knopf11
	return

Knopf0
	return

Knopf12

	return


;*************I2C Unterprogramme**********************************************

i2c_on
	bcf	PIR1,SSPIF	;SSPIF Bit löschen
	bsf	STATUS,RP0
	bsf	SSPCON2,SEN	;Bus Übernahme
	bcf	STATUS,RP0
	goto	i2c_warte

i2c_tx
	movwf	SSPBUF		;zum I2C-Slave übertragen
	goto	i2c_warte

i2c_off	
	bsf	STATUS,RP0
	bsf	SSPCON,PEN	;Bus-Freigabe
	bcf	STATUS,RP0
	goto	i2c_warte


i2c_rx
	bsf	STATUS,RP0
	bsf	SSPCON2,RCEN	;Receive enable
	bcf	STATUS,RP0
	goto	i2c_warte

i2c_warte
	btfss	PIR1,SSPIF
	goto	i2c_warte
	bcf	PIR1,SSPIF

zurücksetzen
	return

        end