star 发表于 2012-8-21 17:56:13

16f88x 电容触摸跟踪程序

;AVEH/L 16次滑动平均数值. CAPH/L当前的timer1数值   TRIPH/L 差值
;减法结果程序SOUH,SOU
;BUTTON 前三位是触摸开关标志位 高三位是检测通道选择位 从左到有依次为123
;BUTTON某为为1 则为此通道检测 此通道按下
;RAW<AVE-TRIP   
;BUTTON,4为SQU16运算正负位 1为负0为正
;F1/2/3 分别为16运算临时RAM
;;检验跟踪是否正确。将手指 非常慢的靠近开关,一直到完全紧密接触
;都没有检测到按下动作证明跟踪程序起到了作用!


SQU16:
       ;滑动平均数值的求取 (AVE*16-AVE)/16+CAP/16=AVE滑动跟踪
       ;/16=AVE+(CAP/16-AVE/16)F1<F2<F3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         MOVF      CAPH,W
         MOVWF       F3
         MOVF      CAPL,W
         MOVWF       F2    ;FX-AVE=CAP-AVE正负号为BUTTON,4 1为负 0为正
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         MOVF      AVEL,W
         SUBWF       F2,F
         MOVF      AVEH,W
         BTFSS       STATUS,C
         INCFSZ      AVEH,W
         SUBWF       F3,F
         BTFSC       STATUS,C
         GOTO      $+5
         BSF         BUTTON,4
         COMF      F3,F
         COMF      F2,F
         GOTO      $+2
         BCF         BUTTON,4
         NOP
         NOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;以上的是减法运算CAP-AVE 运算结果在F3/F2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;下面是将结果FX/16然后和AVE做加减
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         BCF      STATUS,C
         RRF      F2,F
         BCF      STATUS,C
         RRF      F2,F
         BCF      STATUS,C
         RRF      F2,F
         BCF      STATUS,C
         RRF      F2,F
         MOVLW      0X0F
         ANDWF      F3,W;屏蔽高四位
         MOVWF      F1;将低四位保存在F1中
         SWAPF      F1,W ;低四位半成高四位
         IORWF      F2,F ;顺利完成 F3的低四位转移到F2的高四位
         MOVLW      0XF0;屏蔽F3的低四位
         ANDWF      F3,F
         SWAPF      F3,F;将F3的高四位移到低四位中
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;这里就完成了双字节的/16的运算.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;下面进行和AVE加减发运算         
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         BTFSS   BUTTON,4
         GOTO      AVJ    ;转道加法运算AV+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;FX结果为负减法运算AVE-FX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AFJJ:
         MOVF      F2,W
         SUBWF       AVEL,F
         MOVF      F3,W
         BTFSS       STATUS,C
         INCFSZ      F3,W
         SUBWF       AVEH,F
         RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;结果为正进行AVE+FX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AVJ:   
          MOVF      F2,W
          ADDWF       AVEL,F
          MOVF      F3,W
          BTFSC       STATUS,C
          INCFSZ      F3,W
          ADDWF       AVEH,F
          RETURN
;到此完成AVE跟踪
页: [1]
查看完整版本: 16f88x 电容触摸跟踪程序