- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Assemblerprogramm zu groß

  1. #1
    andyoo1
    Gast

    Assemblerprogramm zu groß

    Anzeige

    Praxistest und DIY Projekte
    HI welche möglichkeiten habe ich ???

    PORT .EQU $02 ;PortC
    DIR .EQU $06 ;PortCdir
    SDA .EQU 0 ;Port 9
    SCL .EQU 1 ;Port 10
    SDA1 .EQU 0 ;Port 1
    SCL1 .EQU 1 ;Port 2

    Start_9u10 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_1u2 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

    Kann man das zusammenfassen ????

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.01.2004
    Ort
    München
    Alter
    75
    Beiträge
    214
    Kommt drauf an, was Du brauchst, aber nachdem ich mich auch grad mit dem Assembler beschäftige:
    1. Routinen zusammenfassen: alle bits gleichzeitig mit OR setzen und mit AND rücksetzen
    2. Vielleicht die BSET's auf das DDR in CBASIC erzwingen
    3. Vieleicht die Routinen komplett in CBASIC nach $H91 übertragen und da ausführen (SYS &H91, ...)

  3. #3
    andyoo1
    Gast
    Danke für deine Antwort

    aber das ist nicht möglich.

    Habe 6 PCF 8574 an Port 1 und 2.....diese muß ich lesen und schreiben....und 6 PCF 8574 an Port 9 und 10.
    So das ich im Assembler alles 2x habe, da ja 4 Ports angesprochen werden.
    Gibt es eine möglichkeit das man im Assembler die Abfrage nur 1x hat, und den Port nur ändert. Einmal Port 1 und aus Port1 dann Port 9 ????
    Das geht sicher nicht...........ODER ??????

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.01.2004
    Ort
    München
    Alter
    75
    Beiträge
    214
    Aha.

    Aber ich verstehe dann den Source nicht:
    "BSET SDA,DIR" (etc) ist doch identisch
    "BSET SDA1,DIR" (etc), oder nicht?
    (SDA ist ja identisch SDA1 = 0 = SDA)

    Müsste das also nicht heissen
    "BSET SDA,DIR" (etc) und
    "BSET SDA1,DIR1" (etc) ?
    Und dieses DIR1 / PORT1 könntest Du ja dann per Param übergeben.

    Falls doch nicht:
    Den Bit-Wert vom BSET kann man m.E. nur per OpCode-Modifikation "parametrieren".
    Oder halt den BSET / BCLR ersetzen durch OR / AND:
    LDA Port
    ORA param
    STA Port

    PS: (siehe Thread "255 Byte Assemblerprogramm zu lang?")
    Mein Problem ist: Ich kann kein Assembler-Programm laden, das genau 255 Bytes lang ist; 254 Bytes gehen.
    Kann Du 255 Bytes laden, oder ist das Limit tatsächlich 254 Bytes?

  5. #5
    andyoo1
    Gast
    255 Byte Assemblerprogramm zu lang?

    Ich kann auch kein Assembler-Programm laden, das genau 255 Byte
    lang ist. Bei 254 Bytes ist schluß.

    Bin am Ende .......komme einfach nicht weiter.
    254 reicht nicht aus.

    Das SDA steht doch für Port 9 und SCL für Port 10.
    Habe ich nun Port 1 und 2 auch noch, so ist doch SDA1 und SCL1 notwendig.
    SDA1 für Port 1 und SCL1 für Port 2. ODER ?????

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    13.01.2004
    Ort
    Speyer
    Alter
    49
    Beiträge
    28
    Dann nimm einen Controller der mehr kann. Sorry, aber 255 Byte für ein Assembler ist ja wohl lachhaft.
    Krischan100

  7. #7
    andyoo1
    Gast
    Das ist gut gesagt :::::

    Aber für C-control konnte ich noch keinen andern finden, der in frage kommt.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    19.11.2003
    Alter
    46
    Beiträge
    97
    Ich habe irgendwo im Forum mal eine Bemerkung gelesen, dass man einen größeren Speicher einbauen kann. Ihr müsst halt mal die ganzen Foren (C-Control und Robby) durchsuchen.
    mfg
    Judgeman

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.01.2004
    Ort
    München
    Alter
    75
    Beiträge
    214
    Hallo krischan100:
    Klar: 255 Bytes sind xxx, aber eigentlich sollte man für die CC1 nix in Assembler programmieren (müssen), sondern in CBASIC; sonst sollte man wirklich einen andern Prozessor nehmen.

    Hallo Judgeman:
    Speichererweiterung geht (eigentlich) nicht für Assembler-Programme, sondern nur für Basic-Programme. Aber mit "Tricks" geht natürlich alles.

    Hallo andyoo1:
    Dass bei Dir auch nur 254 Bytes gehen, und 255 Bytes nicht, hilft mir zwar bisschen weiter (zum Verständnis), aber Dir nützt das natürlich nichts.
    Ich tu mir aber schwer, das "Code verkürzen" so per Frage / Antwort zu verstehen, und es dauert auch. Nachdem ich mich eh grad mit I2C rumgeschlagen habe (zur LCD Ansteuerung): Stell doch Deinen Source mal hier rein - vielleicht fällt mir (oder jemand anderem) was dazu ein!

  10. #10
    andyoo1
    Gast
    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ß.

Seite 1 von 2 12 LetzteLetzte

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
  •  

fchao-Sinus-Wechselrichter AliExpress