单片机内RAM从LIST开始有30个无符号数,编程找出最大数存入BIG

来源:百度知道 编辑:UC知道 时间:2024/06/07 21:58:05
希望 能写一个完整的程序,谢谢 我是刚刚开始学的 所以不知道怎么写 谢谢指教?

已经完全通过调试的程序设计,你只需要修改起始地址,数据个数和最大数地址,就能实现你的要求,,,但是这里需要注意我这里设置了“栈地址”,你在修改上面的上面的地址,尽量不要设置在“栈地址”之后(当然你也可以重新设置“栈地址”来安排一些内存布局),,,另外我这个程序是在你老师反对的情况下发布的,请LZ以30分的悬赏分来作为个人一定的补偿。
程序如下:
LIST EQU 30H ;假设比较的数据从30H地址处开始
TOTAL EQU 10 ;数据总数
BIG EQU 5FH ;最大数据地址

ORG 0000H
AJMP MAIN
ORG 0040H
MAIN:
// MOV 30H,#2
// MOV 31H,#1
// MOV 32H,#0
// MOV 33H,#7
// MOV 34H,#4
// MOV 35H,#9
// MOV 36H,#13
// MOV 37H,#23
// MOV 38H,#34
// MOV 39H,#56
//上面我仅做调试使用

MOV SP,#60H
ACALL Find_Max ;函数调用,你要求的功能就是由我这个自定义函数完成
SJMP $ ;函数完成后可以做其他任何处理,我这里暂时不做其他处理

Find_Max:
PUSH PSW
MOV R2,#(TOTAL-1) ;R2存放比较次数
MOV R0,#LIST
MOV BIG,@R0 ;赋初值
MOV R0,#BIG ;R0指向BIG
MOV R1,#(LIST+1) ;R1指向比较数据
LOOP:
MOV A,@R0 ;A作为暂存比较器
CLR CY
SUBB A,@R1
JC SAVE_BIGGER
AJMP SAVE_END
SAVE_BIGGER:
MOV BIG,@R1
SAVE