当前位置: 网站首页 > 技术应用 > 单片机应用 > 应用范例

单片机的实用双字节排序程序

SN 单片机的实用双字节排序程序
关于数据排序,近日使用 SN8P2706A 做一个项目,里头就使用了数据排序.
简单介绍:
这个项目使用了 FP40,FP41,FP42 分别测量温度,湿度,空气清新度三项内容,如图:

;================================================
.DATA
RR0         DS       1
RR1        DS       1
EEH        DS       1
EEL        DS       1
TTH        DS       1
TTL        DS       1
SYSFL    DS       1
FXCH     EQU     SYSFL .0  ;排序交换标志

;// 首先,定义了FP40,FP41,FP42 分别测量后数据的存放位置:
ORG        0100H   ; RAM 1 
AD40S        EQU        00H ;温度
AD41S        EQU        10H ;湿度
AD42S        EQU        20H ;空气
;-------------------------------------------------------------------------
; 每一路数据测量 6 次后(每次是双字节),分别进行排序:

B_ADCDATA: ;子程序标号,由主程序 CALL .
40=温度
41=湿度
42=空气
        MOV_        Z,#AD40S    ;排序12字节/2=6组数据
        CALL        Z_PXU          ;排序温度数据
        MOV_        Z,#AD41S
        CALL        Z_PXU         ;排序湿度数据

        MOV_        Z,#AD42S
        CALL        Z_PXU          ;排序空气数据

;至此,3 路各 6 组双字节排序完成! ;取排序后的中间 4 组累加起来
        Z2M0        EEH,EEL
        ZMN        Y,#1
        MOV_        Z,#AD40S+3 ;温度

        CALL        Z_2MADD     ;双字节加法子程序,这里不再贴出了!
        MOV_        Z,#AD40S+5
        CALL        Z_2MADD
        MOV_        Z,#AD40S+7
        CALL        Z_2MADD
        MOV_        Z,#AD40S+9
        CALL        Z_2MADD
        MOV_        Z,#ADSS+1
        CALL        Z_MYZX2    ;累加结果放置到其它位置,这里也无需贴出的.

;下面湿度,空气的同样处理,不再重复......................
                    CLR              Y         
                     RET
;================================================
Z_PXU:;双字节排序

        ZMN        RR1,#5;//需要排列6-1=5
Z_XCH:
        MOV_        RR0,RR1 ;每轮减少一次比较

        ZMN        Y,#1
        MOV_        EEH,@YZ ;@Ri必须先赋值

        INCMS        Z
        MOV_        EEL,@YZ
        INCMS        Z
        ZM0        Y
        ZB0        FXCH
        CALL        Z_XCH0
        BS1        FXCH
        JMP        Z_XCHRET
        DECMS        RR1
        JMP        Z_XCH
Z_XCHRET:
        RET
;====================================================================
Z_XCH0:;把双字节二组数据移入EEH_EEL,DPTR+2

        ZMN        Y,#1
        MOV_        TTH,@YZ
        INCMS        Z
        MOV_        TTL,@YZ
        INCMS        Z
        ZM0        Y
        SBC2A        EEH,EEL,TTH,TTL;相减

        BS0        FC
        JMP        Z_XCH1
        ;交换

        ZB1        FXCH  ;=1,有交换
        SUB_        Z,#4
        ZMN        Y,#1
        MOV_        @YZ,TTH 
        INCMS        Z
        MOV_        @YZ,TTL 
        INCMS        Z
        MOV_        @YZ,EEH 
        INCMS        Z
        MOV_        @YZ,EEL 
        INCMS        Z
        ZM0        Y
        JMP        Z_XCH2
Z_XCH1:
        CALL        Z_2MXCH
Z_XCH2:
        DECMS        RR0
        JMP        Z_XCH0
        RET
Z_2MXCH:
        H_XCH        EEH,TTH
        H_XCH        EEL,TTL
        RET
;=======================================================

本排序程序段落直接从实际工程项目拷贝出来.供朋友们参考使用.(直接拷贝过去就可以使用.注意:数据存放位置 RAM 库和地址需要根据自己使用芯片的资源修改一下.)
仅供参考!

 

点击次数:  【关闭
  • 壹零零单片机©版权所有 2008-2025 粤ICP备17151077号

Powered by  xinfuke  5.2.5 ©2008-2025  www.100mcu.com