background image
宏晶科技:www.MCU-Memory.com   Mobile:13922805190(姚永平)   Tel:0755-82948409    Fax: 0755-82944243
宏晶科技:专业单片机 / 存储器供应商   www.MCU-Memory.com   STC12C5410AD 系列 1T 8051 单片机中文指南
79
;-------------------------
    ;Channe0_5mS_H, Channe0_5mS_L 的计算方法见 PCA 中断服务程序内的注释
    MOV   CCAP0L, #Channe0_5mS_L ;给 PCA 模块 0 的 CCAP0L 置初值
    MOV   CCAP0H, #Channe0_5mS_H ;给 PCA 模块 0 的 CCAP0H 置初值
    MOV   CCAPM0, #49H    ;设置 PCA 模块 0 为 16 位软件定时器,ECCF0=1 允许 PCA 模块 0 中断
        ;当[CH,CL]==[CCAP0H,CCAP0L]时,产生中断请求,CCF0=1,请求中断
    SETB  EPCA_LVD              ;开 PCA 中断和 LVD(低压检测)中断共享的总中断控制位
    SETB  EA                    ;开整个单片机所有中断共享的总中断控制位
    SETB  CR                    ;启动 PCA 计数器(CH,CL)计数
    RET
;------------------------------------------------------------------------------
PCA_Interrupt:
    PUSH  ACC
    PUSH  PSW
    CPL   LED_5mS_Flashing  ;本程序 PCA 模块 0 每 5mS 中断一次, 每次进中断将该灯状态取反
    ;在本程序中[CH,CL]每 12 个时钟脉冲加 1, 当[CH,CL]  增加到等于 [CCAP0H,CCAP0L]时
    ;CCF0=1, 产生中断请求。如果每次 PCA 模块 0 中断后, 在中断服务程序中给
    ;[CCAP0H,CCAP0L]  增加一个相同的数值,那么下一次中断来临的间隔时间 T  也是相
    ;同的。本程序中这个 " 相同的数值 "  就是 Channe0_5mS_H, Channe0_5mS_L
    ;举例: 时钟频率 Fosc = 18.432MHz, PCA 计数器计数 1E00H 次才是 5mS。
    ;计算 PCA 计数器计数多少次:
    ;    Channe0_5mS_H, Channe0_5mS_L = T/( (1/Fosc)*12 )
    ;                                 = 0.005/ ( (1/18432000)*12 )
    ;                                 = 7680 (10 进制数)
    ;                                 = 1E00H (16 进制数)
    ;    即 Channe0_5mS_H = 1EH, Channe0_5mS_L = 00H
    ;
    ;   Channe0_5mS_H, Channe0_5mS_L:每次给 [CCAP0H,CCAP0L]  增加的数值(步长)
    MOV   A, #Channe0_5mS_L     ;给[CCAP0H,CCAP0L] 增加一个数值
    ADD   A, CCAP0L
    MOV   CCAP0L, A
    MOV   A, #Channe0_5mS_H
 ADDC  A, CCAP0H
    MOV   CCAP0H, A
    CLR   CCF0                  ;清 PCA 模块 0 中断标志
    INC   Counter               ;中断次数计数器 + 1
    MOV   A, Counter
    CLR   C
    SUBB  A, #200               ;检测是否中断了 200 次(1 秒)
    JC    PCA_Interrupt_Exit    ;有借位,表示 Counter  小于 200,立即跳转退出