单片机实验数据排序

单片机实验数据排序,第1张

原发布者:瀚海湛蓝

实验一、数据排序实验一、实验目的熟悉8031指令系统,掌握程序设计方法。二、实验内容编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。三、实验程序框图NNN四、实验步骤1把8032片内RAM区50H—5AH中放入不等的数据(用寄存器读写方法)。2用连续运行方式从起始地址0100H开始运行程序(输入0100后按EXEC键)。3排序结束,显示“P.”。4用寄存器读写方法检查50—5AH中内容应从小到大排列。五、参考程序DORDE:MOVSP,#60H设置栈指针MOVR3,#50HDORDE1:MOVA,R3MOVR0,A数据指针传送到R0MOVR7,#0AH长度送到R7CLR00H清零标志位MOVA,@R0DORDE2:INCR0MOVR2,ACLRC清零进位标志MOV22H,@R0CJNEA,22H,DORDE3是否相等SETBCDORDE3:MOVA,R2JCDORDE4小于或等于不交换SETB00HXCHA,@R0DECR0XCHA,@R0大于交换位置INCR0DORDE4:MOVA,@R0DJNZR7,DORDE2JB00H,DORDE1未完继续MOVR0,#7EH完,关显示器前三位MOVA,#0FFHMOVR4,#06HDORDE5:MOV@RO,ADECR0DJNZR4,DORDE5MOV7EH,#0CH

#include

<stdio.h>

#include

<time.h>

#include

<stdlib.h>

void

Swap(int*

a,

int*

b)

//

交换

{

int

t

t

=

*a

*a

=

*b

*b

=

t

}

void

AsceSort(int*

begin,

int*

end)

//

升序排序

{

for(int*

p

=

begin

p

!=

end)

if(p

==

begin

||

*(p-1)

<=

*p)

++p

else

Swap(p---1,

p)

}

void

DescSort(int*

begin,

int*

end)

//

降序排序

{

for(int*

p

=

begin

p

!=

end)

if(p

==

begin

||

*(p-1)

>=

*p)

++p

else

Swap(p---1,

p)

}

void

Print(int*

a,

int

n)

//

10个一行输出

{

int

i

for(i

=

0

i

<

n

++i)

{

if(i

!=

0

&&

i

%

10

==

0)

putchar('\n')

printf("%4d

",

a[i])

}

putchar('\n')

}

#define

N

1000

int

main()

{

int

a[N],

i

srand(time(0))

for(i

=

0

i

<

N

++i)

a[i]

=

rand()

%

1001

+

1

puts("整理前排列:")

Print(a,

N)

puts("递增排列:")

AsceSort(a,

a

+

N)

Print(a,

N)

puts("递减排列:")

DescSort(a,

a

+

N)

Print(a,

N)

return

0

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7971692.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存