📄 ex7-5a.asm
字号:
$INCLUDE (STC12C5A.inc) ;包含STC12C5A60S2寄存器定义文件
COUNTER EQU 30H ;声明一个计数器,用来计数中断的次数
LED_1s EQU P1.6
ORG 0000H
LJMP MAIN ;转主程序
ORG 003BH ;PCA中断入口地址
LJMP PCA_ISR
ORG 0050H
MAIN: MOV SP, #70H
MOV COUNTER, #200 ;设置COUNTER计数器初值
;初始化PCA模块
MOV CMOD, #10000000B ;空闲模式下停止PCA计数器工作
;选择PCA的时钟源为fOSC/12,禁止PCA计数器溢出时中断
MOV CCON, #00H ;清0 PCA计数器溢出中断请求标志位CF
;CR = 0, 不允许 PCA 计数器计数
;清0 PCA 各模块中断请求标志位CCFn
MOV CL, #00H ;清0 PCA 计数器
MOV CH, #00H
MOV CCAP0L, #00H ;给PCA模块0的CCAP0L置初值
MOV CCAP0H, #1EH ;给PCA模块0的CCAP0H 置初值
MOV CCAPM0, #49H ;设置PCA模块0为16位软件定时器
;ECCF0=1允许PCA模块0中断
;当[CH,CL]=[CCAP0H,CCAP0L]时,产生中断请求,CCF0=1,请求中断
SETB EA ;开整个单片机所有中断共享的总中断控制位
SETB CR ;启动PCA计数器(CH,CL)计数
SJMP $ ;循环等待中断
;PCA中断服务程序
PCA_ISR:
PUSH ACC ;保护现场
PUSH PSW
;每5mS中断一次
MOV A, #00H ;给[CCAP0H,CCAP0L]增加一个数值
ADD A, CCAP0L
MOV CCAP0L, A
MOV A, #1EH
ADDC A, CCAP0H
MOV CCAP0H, A
CLR CCF0 ;清 PCA 模块0 中断标志
DJNZ COUNTER,PCA_EXIT ;中断计数没有减到0,直接退出
MOV COUNTER,#200 ;恢复中断计数初值
CPL LED_1s ;LED_1S输出脉冲宽度为1秒钟的方
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -