来源:PIC单片机版 精华 作者:yewuyi
前段时间在某本书上看到一类似子程序,个人认为其写的还是不够精简,且因为他把双字节定义为低位在前,高位在后,而我需要的是高位在前,低位在后的数据块排序,所以做了一些修改,且数据块的排序在一般程序中都需要用到,期望能给用的着的朋友一点帮助。
#define sort_value .10;数据块长度定义,可自行定义大小
;但注意不要跨RAM页面
#define sort_end flag,0
cblock 20h
cnt1
cnt2
flag
adbuf
endc
;按照从小到大排列
;测试方法如下:从40H寄存器输入
;0A0A,0909,0808,0707,0606,0505,0404,0303,0202,0101
;运行程序后
;0101,0202,0303,0404,0505,0606,0707,0808,0909,0A0A
sort_adbuf: movlw sort_value;从小到大排序
movwf cnt1
sort1: movfw cnt1
movwf cnt2
bcf sort_end;交换标志
movlw adbuf
movwf FSR
sort2: movfw INDF
incf FSR
incf FSR
subwf INDF,W
btfss STATUS,Z
goto sort3
decf FSR
movfw INDF
incf FSR
incf FSR
subwf INDF,W
decf FSR;decf指令不影响c标志
sort3: btfsc STATUS,C
goto sort4
exchange: bsf sort_end
movfw INDF
decf FSR
decf FSR
subwf INDF,W
subwf INDF
incf FSR
incf FSR
addwf INDF
incf FSR
movfw INDF
decf FSR
decf FSR
subwf INDF,W
subwf INDF
incf FSR
incf FSR
addwf INDF
decf FSR
sort4: decfsz cnt2
goto sort2
btfss sort_end
return
decfsz cnt1
goto sort1
return
;稍做修改就是从大到小排序。