A. 求MCS51单片机冒泡法排序程序!高手进!
ORG 0000H
;------------------------下面先准备6个数字
MOV 40H, #8AH
MOV 41H, #3BH
MOV 42H, #0B9H
MOV 43H, #47H
MOV 44H, #29H
MOV 45H, #0AFH
CALL SORT6 ;调用排序子程序
SJMP $ ;停止,此时可以观察排序结果
;-------------------------------------
SORT6: ;排序子程序
MOV R6, #5 ;6个数字,比较5次
S1:
MOV R0, #40H ;起始地址
MOV B, R6
MOV R7, B
CLR PSW.5 ;交换标志清零
S2:
MOV B, @R0 ;取出前一个数
INC R0
MOV A, @R0 ;取出后一个数
CJNE A, B, S3 ;后-前
S3:
JNC N_JH ;够减就不用交换
MOV @R0, B ;交换存放
DEC R0
MOV @R0, A
INC R0
SETB PSW.5 ;设立交换标志位
N_JH:
DJNZ R7, S2
JNB PSW.5, S_END ;没有交换过,就结束
DJNZ R6, S1
S_END:
RET
;-------------------------------------
END
B. 求51单片机冒泡程序
ORG 0000H
MOV 60H,#02H ;给60-69H存储单元送初值
MOV 61H,#05H
MOV 62H,#03H
MOV 63H,#07H
MOV 64H,#09H
MOV 65H,#14H
MOV 66H,#13H
MOV 67H,#08H
MOV 68H,#01H
MOV 69H,#12H
MOV R0,#60H
MOV R1,#61H
L2: MOV A,@R0
MOV 50H,@R1
CJNE A,50H,BIG ;比较60H与61H中数值的大小,做减法。如果60中的内容大则C位(进位为)为0如果60中的内容比61中的小C位为1
BIG: JNC LESS ;判断C位是0还是1,是0则跳转
LJMP L3
LESS: XCH A,@R1 ;交换60与61中的内容
XCH A,@R0
L3: INC R1
CJNE R1,#6AH,L2 ;让62到69中的内容逐一与60中的比较,最后60中的内容就是最小值
INC R0
MOV 51H,R0
MOV R1,51H
INC R1
CJNE R0,#69H,L2 ;让61中的内容与之后的62到69中的内容比较,61中的内容就为第二小值,以此类推,直到剩最后两个数比较完。
SJMP $
END
C. 关于51单片机冒泡排序法
参考:
http://hi..com/do_sermon/item/3289f20a20836c97a3df439a
D. C51单片机“冒泡法”排序实例
用keil调试下,就可以知道结果了。
感觉楼主的分析是正确的……
只是不清楚这个程序段的意图是对数组a[]的全部数据进行排序还是仅对其前9个数据排序。
printf("the unsorted numbers:\n");
for(i=0;i<9;i++)
printf("%bx",a[i]);
printf("\n");
printf("the sorted number:\n");
for(i=0;i<=10;i++)
printf("%bx",a[i]);
按常理,这两段应该是对应的,判断条件下面的那个更合理,按分析前面那段只打印未排序前的a[0]~a[8];后面那段却将11个数全部打印出来了。 (实际还应以调试结果为准)
E. 51单片机汇编语言-请编写程序将内部RAM 40H到4FH 中的16个数据按从小到大顺序重新排列。
咨询记录 · 回答于2021-10-11
F. 问几个关于学习51单片机的问题
如果你学习单片机的目的是为了以后用于开发,那你就要从基础开始学习,C有C的优点,汇编有汇编的优点,不懂汇编的人成不了编程高手,C里面插入汇编则能充分利用两者的优点,学单片机没有捷径可走,必须学会基本理论,学习基本理论至少要先学会数字电路的基本知识,推荐新手认真学一下《单片机原理与应用-基于汇编、C51及混合编程》一书,这本书中的例题和实际结合,这本书学好了再做设计时会有点思路,各个例题的原理图与实际电路图一致,标出了各器件的参数,给出了汇编、C51两种编程的详解,该书例题的程序编写思路符合于产品设计,最后一章给出了两个完整的实例,通俗易懂,即可指导初学者入门,也可以做设计时参考。
G. 51单片机汇编 排序问题 请各位赐教
单片机排序问题,可以参考:
http://..com/question/148407042.html
试设计一个子程序,其功能为将(RO)指出的内部RAM中6个单字节正整数按从小到大的次序重新排列。
仿真测试通过.
ORG 0000H
MOV 40H, #8AH
MOV 41H, #3BH
MOV 42H, #0B9H
MOV 43H, #47H
MOV 44H, #29H
MOV 45H, #0AFH
CALL SORT6 ;调用排序子程序
NOP
NOP
SJMP $
;-------------------------------------
SORT6: ;排序子程序
MOV R6, #5
S1:
MOV B, R6
MOV R7, B
MOV R0, #40H ;起始地址
S2:
MOV B, @R0
INC R0
MOV A, @R0
CJNE A, B, S3
S3:
JNC N_JH
MOV @R0, B
DEC R0
MOV @R0, A
INC R0
N_JH:
DJNZ R7, S2
DJNZ R6, S1
RET
;-------------------------------------
END
三字节的加法,在我的空间,也有。
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0
H. 在8051芯片上,(汇编语言)用冒泡排序法来排列地址为30H到50H的数值大小
嘿嘿 俺来帮帮你吧
1 第八句也就是 CJNE @R0,A ,NEXT 出错了
这是一条非法指令 即51单片机指令表中不存在的指令
正确的写法是:
CJNE @R0, #data , NEXT 即采用指针(寄存器间接寻址)的存储器单元内容
只能与立即数比较 不能与累加器A比较
2 你是要进行2个变量数据的比较 建议采用CJNE A, direct, NEXT 指令
呵呵 满意 就给俺加分喽 (早知有人已经答了 何必再答啊 回答时看见没人答啊 ??)