Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Assemblerbefehl brclr Kategorie: Programmierung ASM (von GeKue - 11.11.2013 15:02)
 Als Antwort auf Re: Assemblerbefehl brclr von wolfi1956 - 11.11.2013 8:22
GeKue nutzt:  Open-Micro, Open-Mini, Open-Midi
> Danke für deine Mühe,
>
> Ich habe ein bischen experimentiert und ff. Lösung
> gefunden:
>
>
>                   ! lda #8
>         #next1            ! bclr b5,pta     'bit5 ist Eingang an PORTA   2
>
>                           'hier jetzt akku bitweise abfragen
>                           ! brclr 0, freeram1, weiter1
>                                         'Pause 2,5µs
>                           ! bset b5,pta     'setze bit5=1 an PORTA   2
>                           ! bra bitende1
>                  #weiter1 ! ldx #70
>                 #warten1  ! decx                  'Pause
>                           ! bne warten1
>                           ! bset b5,pta  'setze bit5=1 an PORTA   2
>
>                 #bitende1 !  lsr freeram1
>                           ! deca
>                           !  bne next1
>                           !
>                           !
>
>
>
> es wird also immer bit0 abgefragt,dafür der der Wert im Speicher 8x nach rechts verschoben.
>
> LG
>
> Wolfi

Hallo Wolfi,
viele Wege führen nach Rom, wenn es Dir um kürzer/schneller geht, dann ist DBNZA(DBNZX) besser:

#weiter:!DECX: !BNE weiter  ' 1 + 3 =4Tkt
benötigt insgesamt 4 IC-Takt-Cyclen

Die Befehle DBNZA und DBNZX jeweils nur 3 :
Dein Programm könnte also sein:

          ! lda #8
#next1:   ! bclr b5,pta:! brclr 0, freeram1, weiter1
          ! bset b5,pta:! bra bitende1
#weiter1: ! ldx #93                 ' vorher war Deine Pause 4Tkt*70=280 Taktzyklen
#warten1: ! DBNZX warten1           ' jetzt hat Deine Pause  3Tkt*93=279 Taktzyklen              
          ! bset b5,pta
#bitende1:! lsr freeram1:! DBNZA next1

und noch kürzer/schneller:

          ! lda #8
#next1:   ! bclr b5,pta:! brclr 0, freeram1, weiter1
          ! bra bitende1
#weiter1: ! ldx #93                 ' vorher war Deine Pause 4Tkt*70=280 Taktzyklen
#warten1: ! DBNZX warten1           ' jetzt hat Deine Pause  3Tkt*93=279 Taktzyklen              
#bitende1:! bset b5,pta:! lsr freeram1:! DBNZA next1

Beste Grüße, GeKue

 Antwort schreiben

Bisherige Antworten: