📄 ccuuse2.asm
字号:
;使用硬件CCU ----- 比较输出(PWM)操作
; 1. 16位定时器,并有溢出重装功能有
; 2. 时钟CCUCLK可选,可将时钟源以1到1024间的任何整数进行分频
; 3. 4个比较/PWM输出,可选择极性
; 4. 对称/非对称PWM选择
; 5. 2路比较输入,带有事件计数器和数据噪声滤波器
; 6. 7个中断(1个溢出,2个捕获,4个比较)使用同一具中断向量
; 7. 通过映像寄存器可实现安全的16位读/写。
;16位定时器,4个捕获/比较模块,对应用4路输出(OA,OB,OC,OD),两路捕获输入(IA,IB)
;CCU定时器
TH2 DATA 0CDH ;CCU定时器寄存器
TL2 DATA 0CCH
TOR2H DATA 0CFH ;CCU定时器的重装寄存器
TOR2L DATA 0CEH
TISE2 DATA 0DEH ;中断源寄存器
TICR2 DATA 0C9H ;CCU中断控制寄存器,可屏蔽或打开某个中断
TIFR2 DATA 0E9H ;CCU中断标志寄存器
;定义CCU控制字节
TCR20 DATA 0C8H ;用来设置CCU定时器及工作模式
PLLEN BIT TCR20.7 ;启动锁相环功能。为1时启动
HLTRN BIT TCR20.6 ;PWM停止指示。该位为1时指示发生了PWM停止。若要重新启动PWM,用户要清零该位。
HLTEN BIT TCR20.5 ;PWM停止功能使能。该位为1时,输入捕获A管脚的捕获事件将立即停止所有PWM。
ALTCD BIT TCR20.4 ;PWM通道C/D交替输出使能。当该位置位,PWM通道C和D的输出每个计数器周期交替选通。
ALTAB BIT TCR20.3 ;PWM通道A/B交替输出使能。当该位置位,PWM通道A和B的输出每个计数器周期交替选通。
TDIR2 BIT TCR20.2 ;CCU定时器的计数方向,为0是递增,为1时递减。
TMOD21 BIT TCR20.1 ;CCU定时模式选择。00---定时器停止,01---基本定时器功能
TMOD20 BIT TCR20.0 ;10---非对称PWM(使用PLL作为时钟源),11---对称PWM(使用PLL作为时钟源)
TCR21 DATA 0F9H ;用于设置PLL分频器,以对PCLK进行倍频
;预分频器控制寄存器,TPCR2H的高6位无效。将PCLK再进行分频
TPCR2H DATA 0CBH
TPCR2L DATA 0CAH
;各个模块的寄存器定义
OCRAH DATA 0EFH ;各个模块的捕获比较的定时器寄存器
OCRAL DATA 0EEH
OCRBH DATA 0FBH
OCRBL DATA 0FAH
OCRCH DATA 0FDH
OCRCL DATA 0FCH
OCRDH DATA 0FFH
OCRDL DATA 0FEH
CCCRA DATA 0EAH ;各个模块的捕获比较控制或模式
CCCRB DATA 0EBH
CCCRC DATA 0ECH
CCCRD DATA 0EDH
ICRAH DATA 0ABH ;输入捕获A高字节
ICRAL DATA 0AAH ;输入捕获A低字节
ICRBH DATA 0AFH
ICRBL DATA 0AEH
;定义LPC932的部分特殊寄存器
TRIM DATA 96H
DIVM DATA 95H ;CPU分频设置寄存器
P1M1 DATA 91H
P1M2 DATA 92H
P2M1 DATA 0A4H
P2M2 DATA 0A5H
IEN1 DATA 0E8H
ECCU BIT IEN1.4 ;CCU中断允许位
T2_CNT DATA 30H ;软件定时器
LEDCON BIT P1.7 ;LED控制口线
OCAR BIT P2.6 ;软定时器(模块A)输出控制脚
;============================================================
ORG 0000H
AJMP MAIN
ORG 005BH
AJMP INTS_CCU ;CCU中断入口
ORG 0100H
MAIN: MOV DIVM,#10
MOV R7,#0
DJNZ R7,$
;由于上电复位时所用IO口设置为高阻态,所以要进行IO设置
MOV P1M1,#2CH
MOV P1M2,#0CH
MOV P2M1,#00H
MOV P2M2,#00H
MOV T2_CNT,#0
MOV SP,#60H
ACALL INI_CCU ;初始化CCU
CPL LEDCON
SJMP $ ;等待定时器中断
;初始化CCU
;设置定时器重装值,时钟源设置,并打开中断设置等。
INI_CCU:
MOV TOR2H,#0FFH ;设置CCU定时器重装值
MOV TOR2L,#00H ;TH2,TL2可先不设置
;设置PWM模块
MOV OCRAH,#60H
MOV OCRAL,#00H
MOV CCCRA,#03H
MOV OCRBH,#50H
MOV OCRBL,#00H
MOV CCCRB,#01H
;设置PLL分频数,并把PWM模块的设置值(映像寄存器的)传送入比较寄存器
MOV TCR21,#81H ;设置PLL倍频输出
MOV TCR20,#00H
SETB PLLEN ;使能PLL
NOP
JNB PLLEN,$ ;等待PLL锁定
SETB TMOD21 ;启动定时器
CLR TMOD20
MOV TICR2,#98H ;设置CCU中断使能寄存器
SETB ECCU ;打开CCU中断
SETB EA
RET
;CCU定时器中断处理
;模块A作为软定时器,向OCA输出取反;模块B作为输出比较
;注:定时器值会自动重装,TH2,TL2
;CCU定时器中断处理
;注:定时器值会自动重装,TH2,TL2
INTS_CCU:
ANL TIFR2,#9BH
MOV A,TISE2
ANL A,#07H
CJNE A,#07H,INTS_CNEXT1
INC T2_CNT
MOV A,T2_CNT
CJNE A,#10,INTS_CEXT
MOV T2_CNT,#0
CPL LEDCON
ANL TIFR2,#7FH
MOV A,TISE2
INTS_CNEXT1: CJNE A,#06H,INTS_CNEXT2 ;捕获中断
ANL TIFR2,#7EH
MOV A,TISE2
INTS_CNEXT2: CJNE A,#05H,INTS_CNEXT3
ANL TIFR2,#7CH
MOV A,TISE2
INTS_CNEXT3: CJNE A,#04H,INTS_CNEXT4
CPL OCAR
ANL TIFR2,#74H
MOV A,TISE2
INTS_CNEXT4: CJNE A,#03H,INTS_CEXT
ANL TIFR2,#64H
NOP
INTS_CEXT: MOV TIFR2,#00H ;清除中断标志
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -