- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 3 von 3

Thema: Bit setzen und ausgeben

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Gast

    Bit setzen und ausgeben

    Hi Leute brauch mal eine Antwort.

    Habe im Assembler folgendes geschrieben,

    cport equ $02 ;Port B
    cpdir equ $06 ;Portrichtung

    org $101

    lda #252 ;lade Port 9 und 10
    sta cpdir ;Port 9 und 10 als Ausgang
    bset 0,cport ;setze Port 9 auf 1
    bset 1,cport ;setze Port 10 auf 1
    rts

    Meine Frage .....bset bedeutet doch "Port auf 1 setzen"
    Habe an Port 9 und 10 ein Relais. Der Assembler setzt aber das Port nicht auf 1, denn das Relais bleibt aus.
    Oder ist das nicht so wie ich denke????

  2. #2
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    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

  3. #3
    Gast
    Danke für Antwort,muß mal testen.

    cport equ $02 ;Port B
    cpdir equ $06 ;Portrichtung


    das ist richtig denn PCF liegt an Port B an 9 und 10.

    Port9 equ 0 ; Port 9 C-Control
    Port10 equ 1 ;Port 10 C_Control

    lda #252 ;lade Port 9 und 10
    sta cpdir ;Port 9 und 10 als Ausgang
    bset Port9,cport ;setze Port 9 auf 1
    bset Port 10,cport ;setze Port 10 auf 1
    rts

    Muß ich manchmal den Akku noch mal laden, um Relais zu schalten.

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad