Zähler von 00 bis 99 in Assembler

Grundsätzlich meine Aufgabe ist es, den counter auf einer micro-controller-board count von 00-99 kontinuierlich mit Assembler.

weil es nicht möglich ist, zeigen zwei 7-Seg-Anzeige in der gleichen Zeit, meine Lösung ist die Darstellung der tens(0), Anzeige(0), Anzeige tens(0), Anzeige(1), Zehner - (0), Anzeige(2), tens(0), display(3), etc. mein Ansatz, dies zu tun ist, um zwei Schleifen (eine für die Zehner-Ziffer, eine für diejenigen-stellig) das geht über ein array. einmal diejenigen stellige loop Durchlaufen haben, das gesamte array, die Schleife bricht und geht zurück auf die Zehner-Ziffer Schleife, bewegen Sie die zehnerstellen zum nächsten element, und dann zurück zu denen stellige loop

    MSB_Display     equ     $0B ; display on 'tens' digit/second most right of 7-Seg
    LSB_Display     equ     $07 ; display on 'ones' digit/most right of 7-Seg


    D_1MS           equ     24000 /6

    DelayVal        equ     35      ; 35 ms delay simulates both Hex Displays on at once

                    org     $1000
    ;                             Lookup table for LED segments
    array           db      $3F,$06,$5B,$4F,$66,$6D,$7C,$07,$7F,$6F
    ;                        0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9

    ; Memory Reserved for Delay Routine
    DCount          ds      1
    Counter         ds      1
    countones       db      0
    counttens       db      0

            org     $2000           ; Program starts here
            lds     #$2000          ; Initalize the stack

    ; Configure Hardware
            ldaa    #$FF
            staa    DDRB            ; Make PORTB output
            staa    DDRP            ; PTP as Output

    start
            clr     countones       ; clear count back to 0
            clr     counttens
        ldx     #array


    MSB
            ldaa    1,x+
            staa    PORTB
            ldaa    #MSB_Display
            staa    PTP             ; turn off 7-segment display
            bsr     Delay_ms
            inc     counttens
            ldaa    counttens
            cmpa    #10
            bne     LSB


    LSB
            ldy     #array
        ldab    1,y+
            stab    PORTB
            ldab    #LSB_Display
            stab    PTP
            bsr     Delay_ms
            inc     countones
            ldaa    countones
            cmpa    #10
            bne     LSB


            bra     MSB


            Delay_ms
                    psha              
                    pshy
                    ldaa   #DelayVal        ; Number of msec to delay
                    staa    DCount          ; store delay counter
                    ldaa    DCount          ; delay Dcount ms
                    staa    Counter
            Delay1  ldy     #D_1MS          ; 6000 x 4 = 24,000 cycles = 1ms
            Delay2  dey                     ; this instruction takes 1 cycle
                    bne     Delay2          ; this instruction takes 3 cycles
                    dec     Counter
                    bne     Delay1          ; not Dcount ms yet, delay again
                    pula                    ; Restore contents of ACC A before returning
                    puly
                    rts
                    end

jetzt scheint es, wie das Programm in der diejenigen stellige loop (LSB) und sitzt da, es nicht zu beenden, dass die Schleife noch gibt es reloop selbst. Ich kann nicht scheinen, um herauszufinden, was falsch in der Logik meines Programms

Was deine Hardwareausstattung tut, ist nicht klar. Sie möchten für die Anzeige von zwei Ziffern... ich nehme an, Sie haben eine mindestens 2-7-segment-anzeigen. Wie wählen Sie, die 7-segment-Anzeige wird eine bestimmte display-code? Sie werden nur für die Ausgabe der anzeigen-code PortB, sobald Ihr das Programm gestartet wird; wie funktioniert die hardware wissen, welche Ziffer zu Leuchten?
...Ich bin ein Alter timer, das sieht aus wie eine 6800 cpu, aber ich glaube nicht, dass der ldab 1,x+' - Anweisung. Was tut es? (Ich denke an pshy dey puly problemlos).
die hardware weiß zu Leuchten, durch diese beiden Linien MSB_Display equ $0B LSB_Display equ $07 LSB macht es wählen in der rechten 7-seg, MSB ermöglicht es, wählen Sie die 2. rechts die meisten 7-seg ldab 1,x+ im Grunde macht es Durchlaufen das array/look-up-Tabelle
welcher Prozessor ist das?
Sie schob dann y in der delay-Funktion, aber nach dem Ausgang zog dann ein y, ist, dass ein Prozessor bestimmte Sache oder sind die in Ordnung?

InformationsquelleAutor livelaughlove | 2011-12-05

Schreibe einen Kommentar