利用汇编语言编程,对30H到39H的存储数据按大小排序,重新存储,并且去最大值和最小值后,求均值,存在40H
程序是在keilc V4上运行过,成功
单片机源程序如下:
-
- ORG 0000H
- LJMP MAIN
- ORG 0100H
- MAIN: MOV A,#98; 存储数据
- MOV 30H,A;
- MOV A,#77;
- MOV 31H,A;
- MOV A,#100;
- MOV 32H,A;
- MOV A,#56;
- MOV 33H,A;
- MOV A,#86;
- MOV 34H,A;
- MOV A,#73;
- MOV 35H,A;
- MOV A,#92;
- MOV 36H,A;
- MOV A,#25;
- MOV 37H,A;
- MOV A,#81;
- MOV 38H,A;
- MOV A,#48; 存储数据
- MOV 39H,A;
- ; 从小到大排序
- MOV R7, #09H ;设置外循环计数器
- NEXT: MOV A, R7
- MOV R5,A
- ;MOV 80H, A ;循环中的比较次数
- MOV R6, A ;设置外循环计数器
- MOV R0, #30H ;设置数据指针
- COMP: MOV A, @R0
- MOV R2, A
- INC R0
- CLR C
- SUBB A, @R0
- JC LESS
- MOV A, R2
- XCH A, @R0
- DEC R0
- MOV @R0, A
- INC R0
- LESS: DJNZ R6,COMP ;(R6)-1不等于0,转COMP继续内循环
- MOV R0,#30H
- ;DEC 80H ; 循环中的比较次数
- DEC R5;
- MOV A,R5;
- MOV R6,A
- ;MOV R6, 80h ; 在新的循环中,更新比较次数
- DJNZ R7, COMP ;排序结束
- ;SJMP $
- ; END
-
-
-
- LJMP AJUNZHI
- AJUNZHI:MOV A,39H; ; 保存最大值
- MOV 40H,A;
- MOV A,30H; ; 保存最小值
- MOV 41H,A;
-
- ;求平均值
- MOV R7,#08H ;8个数据 ,除去最大数,最小数,求平均值
- MOV R0,#31H ;首地址
- MOV B,#08H ;求平均值
- MOV R4,#00H ;和的进位清零
- MOV R5,#00H ; 和清零
- MOV R3,#03H ;右移次数,3次,求均值
- CLR C ;C清零
- CLR A ;A清零
- QIUHE: MOV A,R5;
- ADD A,@R0;
- MOV R5,A;
- MOV A,R4;
- ADDC A,#00H;
- MOV R4,A;
- INC R0;
- DJNZ R7,QIUHE;
- JUNZHI: MOV A,R4;
- RRC A;
- MOV R4,A;
- MOV A,R5;
- RRC A;
- MOV R5,A;
- DJNZ R3,JUNZHI;右移三次,相当于除8,求平均值
- MOV 43H,R5
- SJMP $;
- END;
-
复制代码
所有资料51hei提供下载:
thurs-test.zip
(16.46 KB, 下载次数: 12)
|