㈠ 单片机 三个数比较大小并从大到小排序
ORG
0000H
MOV
40H,
#8AH
MOV
41H,
#3BH
MOV
42H,
#0B9H
CALL
SORT6
;调用排序子程序
NOP
NOP
SJMP
$
;-------------------------------------
SORT6:
;排序子程序
MOV
R6,
#2
;数据量减一
S1:
MOV
B,
R6
MOV
R7,
B
MOV
R0,
#40H
;起始地址
S2:
MOV
B,
@R0
INC
R0
MOV
A,
@R0
CJNE
A,
B,
S3
S3:
JC
N_JH
MOV
@R0,
B
DEC
R0
MOV
@R0,
A
INC
R0
N_JH:
DJNZ
R7,
S2
DJNZ
R6,
S1
RET
;-------------------------------------
END
程序可对任意多内存数据进行从大到小排序,这里是将40h-42h的数据进行从大到小排序
程序复制自网络,略作修改
㈡ 8051单片机中断优先级怎么确定
首先系统对5个中断源的优先级顺序从高到低有个排序:外中断0,外中断1,定时器0,定时器1中断,串口中断;
其次,用户可以通过为IP寄存器赋值,根据需要设置这5个中断源的优先级
㈢ 单片机io口怎么排序呢
这里的PIO口都是个一字节的寄存器,芯片内部规定P2.0为最低位,P2.7为最高位;
而数据的表示方式按约定是高位在左低位在右的排序,所以有你看到的1111 1110的顺序;
而当数据按位进行串行传输,同时先传低位时,就有你想看到的0111 1111 的顺序了;
㈣ 单片机实验数据排序
原发布者:瀚海湛蓝
实验一、数据排序实验一、实验目的熟悉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
㈤ 单片机 8051可设置几个中断优先级,统同一级别优先级如何排列
8051单片机可以设置2个中断优先级,同一级别优先顺序从高到低如下:
外部中断0
定时器0
外部中断1
定时器1
串口
㈥ 单片机排序问题
仿真测试通过.
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
㈦ 单片机排序程序
MOV R5,#16
MOV R6,#40H
LONG:
MOV R4,#15;16个数比较15次
MOV A,30H;将30H里面的内容复给A
MOV R0,#31H;让其从31H开始自加到3FH
L:
SUBB A,@R0;31H里面的内容和30H里面的内容进行相减比较求C
JC XU;如果C=0则表示A里面的内容大于@R0里面的内容否则小于跳转XU
INC R0;R0加1到下一单元地址
DJNZ R4,L;15次比较没有结束跳转到L继续执行
AJMP LL;如果15次循环完毕则求出最大值,然后再循环求出次大值
XU:
MOV A,R0;放比较数的地址送A,以清零方便为第二次比较
MOV R1,A;方便清零
MOV A,@R0;最大值送A
INC R0
AJMP LL
LL:
MOV @R1,#00H;最大值地址清零,然后再比较15次求次大值
MOV R6,A;最大值送40H
INC R6
DJNZ R5,LONG;判断是否全部从大到小排完
AJMP TT
TT:
END
㈧ 编写简单的单片机c语言程序 1、指定数组找最大值 2、排序
#include<stdio.h>
#defineNR10//数组元素个数
/*从主函数开始*/
intmain(intargc,char**argv)
{
intar[NR];
inti;
fprintf(stdout,"请输入%d个整数: ",NR);
/*获取并检查用户输入*/
while(1)
{
/*循环获取NR个数据*/
for(i=0;i<NR;i++)
{
if(fscanf(stdin,"%d",&ar[i])!=1)
{
fprintf(stdout,"输入错误!请重新输入: ");
while(getchar()!=' ');//丢弃多余非法字符
break;//打破内层for循环
}
}
/*检查是否获取到NR个数据*/
if(i!=NR)
{
continue;
}
else
{
break;
}
}
/*查找最大值和最小值*/
intmax,min;
max=ar[0];//假定第一个数为最大值
min=ar[0];//同时假定也第一个数为最大值
/*从第二个数开始比较查找最值*/
for(i=1;i<NR;i++)
{
if(ar[i]>max)//最大值
{
max=ar[i];
}
if(ar[i]<min)//最小值,不能使用elseif,否则会跳过比较
{
min=ar[i];
}
}
fprintf(stdout,"最大值为:%d最小值为:%d ",max,min);
/*接下来:查找第二大值*/
intsecond;
/*先获取前两个数的第一大和第二大值*/
ar[0]>ar[1]?(max=ar[0],second=ar[1]):
(max=ar[1],second=ar[0]);
/*从第2个数开始比较查找*/
for(i=2;i<NR;i++)
{
if(ar[i]>max)//查找最大值:目的是为了比较第二大值
{
second=max;//先把最大值保存给第二大值
max=ar[i];
}
elseif(second<ar[i])//比最大值小的数再看看是否大于第二大值
{
second=ar[i];
}
}
fprintf(stdout,"第二大值为:%d ",second);
return0;
}
(8)单片机排序扩展阅读
一、c语言程序求数组内所有数的和:
1、通过索引的方式就可以访问到数组内部的元素,索引是从0到数组长度-1。
2、数组点Lenth就是数组的长度。
二、c语言程序冒泡排序:
1、比较相邻的两个元素的大小,如果第一个比第二个大就互换一下。
2、然后每一对都做如上操作,如此一来最后一个元素肯定是最大的数了。
3、除了最后一个元素,重复以上步骤。然后倒数第二个就是次大的值了
4、一次按照这个逻辑直到没有任何数字可以比较了。