background image
宏晶科技:www.MCU-Memory.com   Mobile:13922805190(姚永平)   Tel:0755-82948409    Fax: 0755-82944243
宏晶科技:专业单片机 / 存储器供应商   www.MCU-Memory.com   STC12C5410AD 系列 1T 8051 单片机中文指南
75
;------------------------------------------------------------------------------
PCA_Initiate:
    MOV   CMOD, #10000000B ;PCA 在空闲模式下停止 PCA 计数器工作
                           ;PCA 时钟源为 fosc/12
                           ;禁止 PCA 计数器溢出(CH,CL 由 FFFFH 变为 0000H 时)中断
    MOV   CCON, #00H       ;CF = 0,清 0 PCA 计数器溢出中断请求标志位
                           ;CR = 0, 不允许 PCA 计数器计数
                           ;清 0 PCA 各模块中断请求标志位,如 CCF1,CCF0
    MOV   CL, #00H         ;清 0 PCA 计数器
    MOV   CH, #00H
;-------------------------
;设置模块 0
    MOV   CCAPM0, #11H          ;设置 PCA 模块 0 下降沿触发捕捉功能。
;   MOV   CCAPM0, #21H          ;如果送的是 #21h, 则 PCA 模块 0 为上升沿触发。
;-------------------------
;设置模块 1
    MOV   CCAPM1, #31H          ;设置 PCA 模块 1 上升沿 / 下降沿均可触发的捕捉功能。
;-------------------------
    SETB  EPCA_LVD              ;开 PCA 中断和 LVD(低压检测)中断共享的总中断控制位
    SETB  EA                    ;开整个单片机所有中断共享的总中断控制位
    SETB  CR                    ;启动 PCA 计数器(CH,CL)计数
    RET
;------------------------------------------------------------------------------
PCA_Interrupt:
    PUSH  ACC
    PUSH  PSW
    JNB   CCF0, Not_PCA0_Else_PCA1 ;如果 CCF0 不等于 1 就不是 PCA 模块 0 中断
                                   ;就直接去判是否是 PCA 模块 1 中断
    ;模块 0 中断服务程序
    CPL   LED_PCA_INT0             ;P1.6 LED 变化一次, 表示 PCA 模块 0 发生了一次中断
    CLR   CCF0                     ;清 PCA 模块 0 中断标志
Not_PCA0_Else_PCA1:
    JNB   CCF1, PCA_Interrupt_Exit ;如果 CCF1 不等于 1 就不是 PCA 模块 1 中断
                                   ;就立即退出
    ;模块 1 中断服务程序
    CPL   LED_PCA_INT1             ;P1.5 LED 变化一次, 表示 PCA 模块 1 发生了一次中断
    CLR   CCF1                     ;清 PCA 模块 1 中断标志
PCA_Interrupt_Exit:
    POP   PSW
    POP   ACC
    RETI
;------------------------------------------------------------------------------
    END
;------------------------------------------------------------------------------