宏晶科技: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,立即跳转退出