當前位置:編程學習大全網 - 編程語言 - 求助51匯編程序

求助51匯編程序

程序從20H開始查找數據,把首次出現的數據存放到40H開始的單元,並在60H開始的單元,存放該數據的個數,如果數據是重復出現的,就將其個數加壹。

之後從60H單元開始找最大值的位置,然後從40H開始找到出現次數最多的數據,送到A及P1。

程序已經經過了驗證,符合要求,如下:

ORG 0000H

MOV 20H, #12H ;準備數據.

MOV 21H, #23H

MOV 22H, #32H

MOV 23H, #32H

MOV 24H, #32H

MOV 25H, #43H

MOV 26H, #32H

MOV 27H, #56H

MOV 28H, #56H

MOV 29H, #35H

;-------------------------------------------------

MOV R0, #20H ;未知數據起始地址.

MOV R1, #40H ;篩選後的數據起始地址.

MOV 7FH, #1 ;現篩選出來1個數據: 00H

MOV 7EH, 7FH

INC 7EH

MOV R7, #10 ;***有10個未知數據,(最多可以有32個)

BBB:

MOV A, @R0 ;取出未知數據.

MOV R1, #40H ;從頭和已篩選出的比較.

WWW:

MOV B, @R1

CJNE A, B, CCC ;不同就比較下壹個.

RRR:

MOV A, R1 ;相同則個數加壹.

ADD A, #20H

MOV R1, A

INC @R1

INC R0 ;轉到下壹個未知數據.

MOV 7EH, 7FH

INC 7EH

DJNZ R7, BBB

SJMP EEE ;查找數據結束

;-----------------------------------------------------

CCC:

INC R1

DJNZ 7EH, WWW ;按照已知數據的個數循環.

;-----------------------------------------------------

MOV A, #40H ;沒有找到,那就存入這個數據.

ADD A, 7FH

MOV R1, A ;計算出新數據應該存放的地址.

MOV A, @R0

MOV @R1, A ;存放.

INC 7FH ;已知數據個數加壹.

MOV 7EH, 7FH

INC 7EH

SJMP RRR

;-----------------------------------------------------

EEE: ;從篩選後的個數中找最多數據的地址.

MOV 7EH, #0

MOV R0, #60H

YYY:

MOV A, @R0

CJNE A, 7EH, $+3

JC TTT

MOV 7EH, A

MOV B, R0

TTT:

INC R0

DJNZ 7FH, YYY

;-----------------------------------------------------

MOV A, B ;根據地址,再找到數據.

CLR C

SUBB A, #20H

MOV R0, A

MOV A, @R0

MOV P1, A ;輸出到P1

SJMP $

END

------------------------------------------------------

它們是51單片機片內RAM的最後兩個單元。

對篩選出來的數據,需要統計個數,進行循環處理,還需要控制循環次數,7FH 7EH,就擔任了這個任務。

用Rn也可,但是涉及互相傳送的時候,不方便;7FH 7EH,基本是空閑的,可以利用。

  • 上一篇:SBC AAC有什麽區別?
  • 下一篇:我的房間_
  • copyright 2024編程學習大全網