Hi,
hab jetzt leider bald 2 Monate nix mehr im C-Control Assembler gemacht da ich mir derzeit etwas mehr den Atmel anschaue. Von daher hab ich die Portadressen und Bezeichnungen nicht mehr so im Kopf.
Aber wie es aussieht verwendest Du glaub die falschen Adressen. Hab mal kurz in mein letztes Listing gelinst , da steht folgendes
PORTB .EQU $01 ;PortB
DIRB .EQU $05 ;PortBdir
Also das solltest du schon mal ändern. Und dann solltest du beim kommentieren möglichst auch imme rdie Bit´s des Ports nennen, denn die Nummerbezeichnung bei der C-Control ist manchmal etwas verwirrend. Von dahe rweiss ich jetzt nicht ob du den Port schaltest den du auch willst. Am besten und übersichtlichsten ist es wenn du auch das Datenrichtungsregister mit BSET setzt. Ansonsten stimmt es wohl, bset setzt immer auf 1 !
Hier hast du mal Auszug aus meinem letzten Listing, ist zwar hinsichtlich Bytegröße nicht sonderlich optimiert, aber einigermaßen übersichtlich. Vielleicht hilft es dir
Code:
;Ansteuerung eines PCF8574 ber SDA und SCL
;Verwendung des vorhandenen I2C-Bus
I2CAdr .EQU $0A1 ;Adresse
I2CDat .EQU $0A2 ;Adresse
SensorDatenA .EQU $0A3 ;PCF Baustein 1 vorne linken und rechten 4
SensorDatenB .EQU $0A4 ;PCF Baustein 2 Seiten und Mitte vorne
PCF3Befehl .EQU $0A5 ;PCF Baustein 3 Lichtschranke
LSchritte .EQU $0A6
HSchritte .EQU $0A7
.org $101
;EEPROM vom Bus abmelden
I2C jsr $08BB ;I2C_ReadLast
;Schreibzugriff auf PCF8574
jsr I2C_Start
lda I2CAdr ;Adresse PCF8574 lesen
jsr I2C_Write
lda I2CDat ;Daten lesen
jsr I2C_Write
jsr $08E5 ;I2C_Stop
;Lesezugriff auf PCF8574
jsr I2C_Start
lda I2CAdr ;Adresse lesen
inca ;Lesebit setzen
jsr I2C_Write
jsr $086F ;I2C_Read
sta I2CDat ;Daten speichern
jsr $08BB ;I2C_ReadLast
;EEPROM wieder anmelden
ldx #$0A0 ;Adresse 24C65, write
jsr $083C ;I2C_Start
ldx $066 ;AdrCounter Hi
jsr $0846 ;I2C_Write
ldx $067 ;AdrCounter Lo
jsr $0846 ;I2C_Write
ldx #$0A1 ;Adresse 24C65, read
jsr $083C ;I2C_Start
rts
PORT .EQU $00 ;PortA
DIR .EQU $04 ;PortAdir
SDA .EQU 0 ;Port A.0
SCL .EQU 1 ;Port A.1
I2C_Start 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
I2C_Write 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
;Schrittmotor vorwärts
PORTB .EQU $01 ;PortB
DIRB .EQU $05 ;PortBdir
LMOTOR .EQU 4 ;Port B.5
RMOTOR .EQU 5 ;Port B.6
PCF1 .EQU $70
PCF2 .EQU $72
PCF3 .EQU $74
Vor ldx #250 ;unnötig
VorA jsr Pulse
jsr Pause
jsr SensorAbfragen
lda SensorDatenA ;Vorne IR Sensoren
cmp #255
bne Fertig
lda SensorDatenB ;Vorne mittlere IR Sensor
and #16
cmp #16
bne Fertig
lda PCF3Befehl ;Vorne mittlere IR Sensor
and #8
cmp #8
bne Fertig
bra VorA ;Immer springen
Fertig rts
Pulse BSET LMOTOR,DIRB ;Als Ausgang schalten
BSET RMOTOR,DIRB ;Als Ausgang schalten
BCLR LMOTOR,PORTB
BCLR RMOTOR,PORTB
BSET LMOTOR,PORTB
BSET RMOTOR,PORTB
inc LSchritte ;Schritte zählen
bne Pulse1
inc HSchritte
Pulse1 RTS
Pause Lda #2
pause1 ldx #255
pause2 decx
bne pause2
deca
bne pause1
rts
SensorAbfragen lda #PCF1
sta I2CAdr
lda #255
sta I2CDat
jsr I2C
lda I2CDat
sta SensorDatenA
lda #PCF2
sta I2CAdr
lda #255
sta I2CDat
jsr I2C
lda I2CDat
sta SensorDatenB
lda #PCF3
sta I2CAdr
lda PCF3Befehl
ora #8 ;Lichtschranke Input
sta I2CDat
jsr I2C
lda I2CDat
sta PCF3Befehl
rts
.end
Gruß Frank
Lesezeichen