SN 8 位单片机 SN8P2743 应用实践(4)

2012年04月01日 10:13    发布者:李宽
作者:bjxsdz

接 汇编测试程序:

B_COM0SS:;比较器CM0:
        CLR         CM0M ; 清CM0M 寄存器。; 复位比较器CM0。
;设置比较器CM0 的功能模式。
;B0BCLR         FCM0SF ; 普通比较器模式。
        B0BSET         FCM0SF ; 特殊功能模式。
;设置比较器CM0 的输出引脚。
         B0BCLR  FCM0OEN ; 禁止比较器CM0 的输出引脚。 ---- 没有输出引脚
;        B0BSET         FCM0OEN ; 使能比较器CM0 的输出引脚。
;比较器不要外部输出引脚时,接口板上芯片插座引脚是普通I/O,比较器引脚则仍然是比较器引脚.
;比较器使用外部输出引脚时,接口板上芯片插座引脚=比较器引脚.
;仅仅 2 个引脚 ( IN+_IN- )就可以构成一个比较器!
        ; 设置比较器CM0 中断触发沿。
B0BCLR   FCM0G ; 下降沿。由高变低(CM0P<CM0N).
;        B0BSET         FCM0G ; 上升沿。比较器输出状态由低变高(CM0P>CM0N).
;设置比较器CM0 输出de-bounce。
        MOV         A,#00H ; 通过CM0D设置比较器CM0 输出de-bounce。
        B0MOV         CMDB0,A
        B0BCLR         FCM0IRQ; 清CM0IRQ。
;使能比较器CM0 和中断功能。
        B0BSET         FCM0IEN ; 使能比较器CM0 中断功能。
        B0BSET         FCM0EN ; 使能比较器CM0。
        RET
;=============================================================
B_COM0SS_1: ;// 比较器CM1:
        CLR         CM1M ; 清CM1M 寄存器。; 复位比较器CM1。
; 设置比较器CM1 正极输入端。 通过CM1RS设置比较器CM1 正极输入端。
;000=CM1P 引脚为比较器正极输入引脚,GPIO 功能被屏蔽,
      ;  MOV         A,#00000111B ; 100B=4.0V -- 读数=105709
      ;  MOV         A,#00000110B ; 100B=3.5V -- 读数=79147
      ; MOV         A,#00000101B ; 100B=3.0V -- 读数=60305
      ; MOV         A,#00000100B ; 100B=2.5V -- 读数=45723
      ;  MOV         A,#00000011B ; 11B=2.0V -- 读数=33659
     ;  MOV         A,#00000010B ; 10B=1.5V -- 读数=23601
       MOV         A,#00000001B ; 10B=1.0V -- 读数=14908
        B0MOV         CM1M,A   ; ---- 没有输入+ 引脚
        ; 设置比较器CM1 功能模式。
        B0BCLR         FCM1SF ; 普通比较器。
;B0BSET         FCM1SF ; 特殊功能。
        ; 设置比较器CM1 输出引脚。
        B0BCLR         FCM1OEN ; 禁止。 ---- 没有输出引脚
      ;  B0BSET         FCM1OEN ; 使能。
;比较器不要外部输出引脚时,接口板上芯片插座引脚是普通I/O,比较器引脚则仍然是比较器引脚.
;比较器使用外部输出引脚时,接口板上芯片插座引脚=比较器引脚.
;仅仅一个 IN- 就可以构成一个比较器!
;设置比较器CM1 中断触发沿。
        B0BCLR         FCM1G ; 下降沿。翻转=2.552V/2.570V
; B0BSET         FCM1G ; 上升沿。翻转=2.552V/2.570V
        ; 设置比较器CM1 输出de-bounce。
        MOV         A,#00H ; 通过CM1D设置比较器CM1 输出de-bounce。
        B0MOV         CMDB0,A
        ; 清CM1IRQ。
        B0BCLR         FCM1IRQ
        ; 使能比较器CM1 和中断功能。
        B0BSET         FCM1IEN ; 使能比较器CM1 中断功能。
        B0BSET         FCM1EN ; 使能比较器CM1。
        RET
;***************************************************************
B_IRS:
        H_PUSH
;比较器1 中断
        BS1        FCM1IEN ; 使能比较器CM0 中断功能。
        JMP        B_IRST0
        BS1        FCM1IRQ; 清CM0IRQ。
        JMP        B_IRST0
        ZB0        FCM1IRQ; 中断发生时,FCM0OUT 并不对!还没有发生翻转就中断了!
        BS0        FCM1OUT;IN+>IN- 则=1,否则=0!--- 输入脚加滤波电容就很好了! 0.8mV 动作!
        JMP        B_IRST0
        Z2B0         FT0ENB,FT0IEN
        ZB0        FP01
        ZB0        FCM1IEN
        JMP        B_IRQT01
B_IRST0:
        BS1        FT0IEN
        JMP        B_EXISR
B_IRQT01:
        BS1        FT0IRQ
        JMP        B_EXISR
        ZB0        FT0IRQ
        INCMS        SSSL
        JMP        @F
        INCMS        SSSM
        JMP        @F
        INCMS        SSSH
@@:
        NOP
        NOP
        NOP
        JMP        B_EXISR
;------------------------------------------------------------------------
;比较器0 中断
        BS1        FCM0IEN ; 使能比较器CM0 中断功能。
        JMP        B_EXISR
        BS1        FCM0IRQ; 清CM0IRQ。
        JMP        B_EXISR
        ZB0        FCM0IRQ; 中断发生时,FCM0OUT 并不对!还没有发生翻转就中断了!
        BS0        FCM0OUT;IN+>IN- 则=1,否则=0!--- 输入脚加滤波电容就很好了! 0.8mV 动作!
        JMP        B_EXISR
        NOP
        NOP
        NOP
B_EXISR:
        H_POP
        RETI
;*************************************************