⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex7-7.asm

📁 《增强型8051单片机实用开发技术》例程代码
💻 ASM
字号:
$INCLUDE (STC12C5A.INC)	  ;包含STC12C5A60S2寄存器定义文件
CCAPnL_Value  EQU  28H    ;fosc=20MHz时,高速脉冲输出= 125KHz
	ORG   0000H 
	LJMP  MAIN
	ORG   003BH              ;PCA中断入口地址
	LJMP  PCA_ISR
	ORG   0060H 
MAIN:
    MOV   SP, #70H           ;设置堆栈指针 
	;PCA模块初始化
	MOV   CMOD, #00000010B   ;CIDL = 0,PCA 计数器在空闲模式下继续工作
	          ;PCA 计数器计数脉冲来源为系统时钟源fOSC/2
	;ECF = 0,禁止PCA计数器计数溢出中断
	MOV   CCON, #00H           ;清除PCA计数器计数溢出中断标志CF
	               ;停止PCA计数器计数, CR=0;清除 中断标志, CCFn=0
	MOV   CH, #00H             ;清0 PCA 计数器高8位
	MOV   CL, #00H             ;清0 PCA 计数器低8位
	;设置模块1为高速脉冲输出模式, 脉冲在P1.4引脚输出
	MOV   CCAPM1, #01001101B ;PCA模块1为高速脉冲输出模式,允许触发中断
	MOV   CCAP1L, #CCAPnL_Value ;给模块 1置初值 
	MOV   CCAP1H, #0               ;给模块 1置初值, 此句不可少 
	;其它中断服务可能会使模块1高速脉冲输出的某个周期突然变得很大,因此,
	;必须将PCA中断的优先级设置为唯一的最高级, 其它中断的优先级都要比它低。
	MOV   IPH, #01000000B     ;PCA 中断的优先级设置为唯一的最高级
	MOV   IP, #01000000B
	SETB  EA                    ;开总中断 
	SETB  CR                    ;将PCA 计数器打开 
	SJMP   $                    ;循环等待中断
PCA_ISR:					    ;PCA中断服务程序
	PUSH  ACC                   ;4 Clock 
	PUSH  PSW                   ;4 Clock 
	CLR   CCF1                  ;1 Clock, 清PCA模块1中断标志
	MOV   A, #CCAPnL_Value      ;2 Clock 
	ADD   A, CCAP1L             ;3 Clock 
	MOV   CCAP1L, A             ;3 Clock 
	CLR   A                     ;1 Clock 
	ADDC  A, CCAP1H             ;3 Clock 
	MOV   CCAP1H, A             ;3 Clock 
	POP   PSW                   ;3 Clock 
	POP   ACC                   ;3 Clock 
	RETI                        ;4 Clock 
	;为了实现精确定时或者脉冲输出,中断服务程序的时间应该加以考虑。
	END 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -