; count number of 1's in a given data byte
; data: 4000H
; result: 4001H
ORG 0H
DATA_ADDR EQU 4000H
MAIN:
MOV DPTR,#DATA_ADDR ; fill memory
MOV A, #55H
MOVX @DPTR,A
LCALL COUNT
SJMP MAIN
COUNT:
MOV DPTR,#DATA_ADDR ;Load dptr with #DATA_ADDR
MOVX A,@DPTR ;move data from external memory location to a
MOV R0,#0H ;load r0 with 0
MOV R1,#8H ;load r1 with 8
CLR C ;clear carry bit
up: RLC A ;rotate a left through carry
JNC next ;if no carry, jump to label next
INC R0 ;increment r0
next: DJNZ R1,up ;decrement r1, and jump to label next, if r1>0
INC DPTR ;increment dptr
MOV A,R0 ;move data from r0 to a
MOVX @DPTR,A ;move data from a to external memory location
return:
RET
END
Related topics:
8051 Program - search an element in an array | 8051 Program - search a byte in array and count match | 8051 Program - square of a given number 8bit | 8051 Program - square root of a given number 8bit | 8051 Program - square and cube operation | 8051 Program - count 0 and 1 in a byte | 8051 Program - memory subroutines | 8051 Program - math subroutines | 8051 Program - conversion subroutines
List of topics: 8051
No comments:
Post a Comment