Das Assemblerprogramm ist zum lesen und schreiben von 6 PCF 8574.
An Port 1 und Port 2
PORT .EQU $02 ;PortC
DIR .EQU $06 ;PortCdir
SDA .EQU 0 ;Port 1
SCL .EQU 1 ;Port 2
SDA1 .EQU 0 ;Port 9
SCL1 .EQU 1 ;Port 10
.org $101
jsr start_1u2
lda $0A1 ;Adresse lesen
jsr schreiben_1u2
lda $0A2 ;Daten lesen
jsr schreiben_1u2
jsr I2C_Stop
jsr I2C_Ack
rts
.org $102
jsr start_9u10
lda $0A1 ;Adresse lesen
jsr schreiben_9u10
lda $0A2 ;Daten lesen
jsr schreiben_9u10
jsr I2C_Stop
jsr I2C_Ack
rts
start_1u2 BSET SDA,DIR ; SDA hi ausgeben
BSET SDA,PORT ; Vorbereiten der Startbed.
BSET SCL,PORT ; SCL hi falls lo
BCLR SDA,PORT ; SDA lo -> STARTBEDINGUNG
BCLR SCL,PORT ;
RTS
start_9u10 BSET SDA1,DIR ; SDA hi ausgeben
BSET SDA1,PORT ; Vorbereiten der Startbed.
BSET SCL1,PORT ; SCL hi falls lo
BCLR SDA1,PORT ; SDA lo -> STARTBEDINGUNG
BCLR SCL1,PORT ;
RTS
schreiben_1u2 BSET SDA,DIR ; SDA out
LDX #8 ; init loop
Nextbit ROLA
BCC Lobit ;
BSET SDA,PORT ; hi bit
BRA Clock
Lobit BCLR SDA,PORT ; lo bit
Clock BSET SCL,PORT ; scl hi
BCLR SCL,PORT ; scl lo
DEX
BNE Nextbit ; loop
BCLR SDA,DIR ; sda als Eingang
BSET SCL,PORT ; scl hi
BCLR SCL,PORT
RTS
schreiben_9u10 BSET SDA1,DIR ; SDA out
LDX #8 ; init loop
Nextbit1 ROLA
BCC Lobit1 ;
BSET SDA1,PORT ; hi bit
BRA Clock1
Lobit1 BCLR SDA1,PORT ; lo bit
Clock1 BSET SCL1,PORT ; scl hi
BCLR SCL1,PORT ; scl lo
DEX
BNE Nextbit1 ; loop
BCLR SDA1,DIR ; sda als Eingang
BSET SCL1,PORT ; scl hi
BCLR SCL1,PORT
RTS
'''''Mit lesen auch SDA,SCL einmal und mit SDA1,SCL1 einmal'''''' usw.
I2C_Read BCLR SDA,DIR ; sda als Eingang
CLRA
LDX PORT
RORX
ROLA
BSET SCL,PORT ; scl hi
BCLR SCL,PORT
LDX PORT
RORX
ROLA
BSET SCL,PORT ; scl hi
BCLR SCL,PORT
LDX PORT
RORX
ROLA
BSET SCL,PORT ; scl hi
BCLR SCL,PORT
LDX PORT
RORX
ROLA
BSET SCL,PORT ; scl hi
BCLR SCL,PORT
LDX PORT
RORX
ROLA
BSET SCL,PORT ; scl hi
BCLR SCL,PORT
LDX PORT
RORX
ROLA
BSET SCL,PORT ; scl hi
BCLR SCL,PORT
LDX PORT
RORX
ROLA
BSET SCL,PORT ; scl hi
BCLR SCL,PORT
LDX PORT
RORX
ROLA
BSET SCL,PORT ; scl hi
BCLR SCL,PORT
RTS
I2C_Ack
BSET SDA,DIR
BCLR SDA,PORT ; ACK
BSET SCL,PORT ; scl hi
BCLR SCL,PORT ; scl lo
RTS
I2C_NoAck
BSET SDA,DIR
BSET SDA,PORT ; NoACK
BSET SCL,PORT ; scl hi
BCLR SCL,PORT ; scl lo
RTS
I2C_Stop BSET SDA,DIR ; SDA out
BCLR SDA,PORT ; low
BSET SCL,PORT ; scl high
BSET SDA,PORT ; STOPBEDINGUNG
RTS
.end
diese PCF brauch ich zum Steuern meiner Rollos.
Nur brauch ich aber noch 6 PCF 8574 zum abfragen meiner Schalter.
Diese sind am Port 9 und Port 10.
Im Basic ist das ja auch alles möglich, aber das ist einfach zu langsam.
Ich muß Port 9 und 10 auch wie Port 1 und 2 ansprechen.
Aus diesem Grund ist halt alles 2x( Start,Stop,lesen,schreiben usw)
mit SCL1 und SDA1......und das ist halt zu lang.
Wenn man am Anfang aus SDA und SCL beim 2x mal SDA1 und SCL1 machen kann,dann ist alles 1x und nicht 2x vorhanden. Dann ist das
Assembler auch nicht so groß.
Lesezeichen