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







Zitieren

Lesezeichen