background image
宏晶科技:www.MCU-Memory.com   Mobile:13922805190(姚永平)   Tel:0755-82948409    Fax: 0755-82944243
宏晶科技:专业单片机 / 存储器供应商   www.MCU-Memory.com   STC12C5410AD 系列 1T 8051 单片机中文指南
96
;-------------------------
;设置 PCA 模块 1
    ;Channe1_5mS_H, Channe1_5mS_L 的计算方法见 PCA 中断服务程序内的注释
    MOV   CCAP1L, #Channe1_5mS_L ;给 PCA 模块 1 的 CCAP1L 置初值
    MOV   CCAP1H, #Channe1_5mS_H ;给 PCA 模块 1 的 CCAP1H 置初值
    MOV   CCAPM1, #49H     ;设置 PCA 模块 1 为 16 位软件定时器,ECCF1=1 允许 PCA 模块 1 中断
        ; 当[ C H ,C L ] = = [ C C A P 1 H ,C C A P 1 L ] 时,产生中断请求,C C F 1 = 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 模块 1 每 5mS 中断一次, 每次进中断将该灯状态取反
;用定时器 0  的溢出率作 PCA 计数器(CH,CL)的时钟源时,  计算 Channe1_5mS_H, Channe1_5mS_L
    ;在本程序中定时器 0 每 12 个时钟脉冲加 1, 定时器 0 每加 10 次后产生 1 次溢出, 即每
    ;120 个时钟脉冲 PCA  计数器(CH,CL)加 1。当[CH,CL] 增加到等于 [CCAP1H,CCAP1L]时
    ;CCF0=1, PCA 模块 1 产生中断请求。如果每次 PCA 模块 1 中断后, 在中断服务程序中给
    ;[CCAP1H,CCAP1L]  增加一个相同的数值,那么下一次中断来临的间隔时间 T  也是相
    ;同的。本程序中这个 " 相同的数值 "  就是 Channe1_5mS_H, Channe1_5mS_L
    ;举例: 时钟频率 Fosc = 18.432MHz, PCA 计数器计数 300H 次等于 5mS。
    ;    Channe1_5mS_H, Channe1_5mS_L = T/( (1/Fosc)*120 )
    ;                                 = 0.005/ ( (1/18432000)*120 )
    ;                                 = 768 (10 进制数)
    ;                                 = 300H (16 进制数)
    ;    即 Channe1_5mS_H = 03H, Channe1_5mS_L = 00H
    ;
    ;   Channe1_5mS_H, Channe1_5mS_L:每次给 [CCAP1H,CCAP1L]  增加的数值(步长)
;内部时钟频率(fosc)/12  作 PCA  计数器(CH,CL)的时钟源,计算 Channe1_5mS_H,Channe1_5mS_L
    ;在本程序中[CH,CL]每 12 个时钟脉冲加 1, 当[CH,CL]  增加到等于 [CCAP1H,CCAP1L]时
    ;CCF0=1, PCA 模块 1 产生中断请求。如果每次 PCA 模块 1 中断后, 在中断服务程序中给
    ;[CCAP1H,CCAP1L]  增加一个相同的数值,那么下一次中断来临的间隔时间 T  也是相
    ;同的。本程序中这个 " 相同的数值 "  就是 Channe1_5mS_H, Channe1_5mS_L
    ;举例: 时钟频率 Fosc = 18.432MHz, PCA 计数器计数 1E00H 次才是 5mS。
    ;    Channe1_5mS_H, Channe1_5mS_L = T/( (1/Fosc)*12 )
    ;                                 = 0.005/ ( (1/18432000)*12 )
    ;                                 = 7680 (10 进制数)
    ;                                 = 1E00H (16 进制数)
    ;    即 Channe1_5mS_H = 1EH, Channe1_5mS_L = 00H
    
    ;   Channe1_5mS_H, Channe1_5mS_L:每次给 [CCAP1H,CCAP1L]  增加的数值(步长)