Archief - [PROG][ASM] Aansturing van de T89C51CC01

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

stoffer

Legacy Member
Mijn ervaring met ASM is vrij beperkt en een beetje hulp zou meer dan welkom zijn.

De bedoeling van volgende code is op basis van een bitsequentie bepaalde poorten aan te sturen.

Code:
          ; ALU-registers
          ;---------------
            Acc     equ     0E0h  
             A_0    equ     0E0h
             A_1    equ     0E1h
             A_2    equ     0E2h
             A_3    equ     0E3h
             A_4    equ     0E4h
             A_5    equ     0E5h
             A_6    equ     0E6h
             A_7    equ     0E7h
            B       equ     0F0h
             B_0    equ     0F0h
             B_1    equ     0F1h
             B_2    equ     0F2h
             B_3    equ     0F3h
             B_4    equ     0F4h
             B_5    equ     0F5h
             B_6    equ     0F6h
             B_7    equ     0F7h
Code:
;R0 = register op adres 00h

gegevens: mov 08h,#11011000b   ;willekeurige gegevens
          mov 10h,#00100100b   ;0 = aan, 1 = uit
start:    mov B,#00h           ;B = teller -> 8 bits per keer
          mov R0,08h      ;Haal de waarde op plaats 08h op uit het gegeheugen
lus:      mov A,R0        ;Steek de waarde van R0 in A
          rlc A           ;Rotate left carry -> meeste linkse bit in A naar carry
          jnc af          ;Carry = 0 -> we hadden een 0 -> poort af
aan:      clr P4.1        ;Breng poort laag (=aan)
          setb P4.0
          clr P4.0
          jnb P4.0,check
af:       setb P4.1          ;Breng poort hoog (=af)
          setb P4.0
          clr P4.0
check:    mov R0,A           ;Steek A nu in R0 (A heeft normaal rlc ondergaan)
          mov A,B            ;Steek de teller in A
          inc A              ;Verhoog de teller
          mov B,A            ;Sla de teller op
          cjne A,#08h,lus    ;Is de teller <8 -> doe de lus opnieuw
          mov B,#00h         ;teller was 8 -> resetten en verder doen

De bedoeling is dus van een bitstring te halen uit het geheugen en vervolgens iedere bit daaruit te bekijken. Dit stukje code zou dat moeten doen voor de 8 bits vertrekkende vanaf locatie 08h.

Uiteindelijk wil ik gewoon telkens een pointer hebben die verwijst naar het huidige bit zodat ik dan het bit kan inlezen, de pointer verhogen en het volgende bit in kan lezen totdat alle bits bekeken zijn.

Instructie Set

Verder snap ik ook niet echt wat het verband tussen die A (die ik hier nu gebruik) is en de accumulator (Acc, bovenaan gedefinieerd). In de datasheets wordt A nergens gedefinieerd maar wel altijd gebruikt. Terwijl Acc wel gedefinieerd wordt maar bvb niet gebruikt kan worden bij cjne.

Is er iemand met wat ervaring die me op weg kan helpen?

killgore

Legacy Member
Laat gezien pas, excuus.

Kheb nog nooit voor randapparaten geschreven, maar prolly is die A gewoon gedefinieerd in de instructieset zelf?

Voor de rest, in principe kan je geen pointers krijgen naar een bepaalde bit, enkel naar byte, maar verderhelpen kan ik niet doen, ik heb minder voorkennis als u :p.

stoffer

Legacy Member
nvm, heb het eig al in orde gekregen

Nogal onhandig dat ASM gedoe

killgore

Legacy Member
ach troost u, gij zijt tenminste al voorbij computerarchitectuur :p.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan