宏晶科技: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] 增加的数值(步长)