赞助论坛
  • 4356阅读
  • 0回复

学习单片机之---PIC一个无符号双字节排序的子程序 [复制链接]

楼层直达
jswr  
发帖
339
精华
1
金币
264
威望
8
贡献
7
好评
15
注册
2008-06-30
楼主    jswr 发表于: 2008-08-07 14:55:29 
来源: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

;稍做修改就是从大到小排序。