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.
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?
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?
.