📄 ccuuse1.asm.bak
字号:
;使用硬件CCU ----- 模块A捕获操作
; 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中断允许位
;定义LPC932的I2C相关寄存器的定义
I2ADR DATA 0DBH
I2DAT DATA 0DAH
I2CON DATA 0D8H
I2STAT DATA 0D9H
I2SCLH DATA 0DDH
I2SCLL DATA 0DCH
STA BIT I2CON.5
SI BIT I2CON.3
;为平台定义变量
ACK BIT 10H ;应答标志位
SLA DATA 50H ;器件从地址
SUBA DATA 51H ;器件子地址
NUMBYTE DATA 52H ;读/写的字节数
;使用前定义常量:
SDA EQU P1.3
SCL EQU P1.2
MTD EQU 30H ;发送数据缓冲区首址 (缓冲区30H-3FH)
MRD EQU 30H ;接收数据缓冲区首址 (缓冲区30H-3FH)
;定义器件地址
SAA1064T EQU 70H
T2_CNT DATA 40H ;软件定时器
ICRAH_DAT DATA 41H ;读取捕获值
ICRAL_DAT DATA 42H
LEDCON BIT P1.6 ;LED控制口线,为0时点亮
;============================================================
ORG 0000H
AJMP MAIN
ORG 005BH
AJMP INTS_CCU ;CCU中断入口
ORG 0100H
MAIN: MOV DIVM,#2
MOV R7,#0
DJNZ R7,$
;由于上电复位时所用IO口设置为高阻态,所以要进行IO设置
MOV P1M1,#2CH
MOV P1M2,#0CH
MOV P2M1,#00H
MOV P2M2,#00H
CPL LEDCON
MOV T2_CNT,#0
MOV SP,#60H
ACALL INI_CCU ;初始化CCU
;读取OCRAH,OCRAL的值输出显示
DISP_LED:
MOV R7,ICRAH_DAT ;读取捕获值
MOV R6,ICRAL_DAT
MOV R1,#MTD ;显示缓冲区设置
MOV @R1,#47H ;设置SAA1064工作模式
INC R1
MOV A,R7 ;第1、2显示位,显示操作地址
MOV DPTR,#TAB_IO
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV @R1,A
INC R1
MOV A,R7
ANL A,#0FH
MOVC A,@A+DPTR
MOV @R1,A
INC R1
MOV A,R6 ;第3、4显示位,显示所读出的数据
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV @R1,A
INC R1
MOV A,R6
ANL A,#0FH
MOVC A,@A+DPTR
MOV @R1,A
MOV R5,#2
MOV SUBA,#00H
MOV SLA,#SAA1064T
MOV NUMBYTE,#05H
LCALL IWRNBYTE ;调用I2C软件包子程序
MAIN_L2:
MOV R7,#0
MAIN_L3:
MOV R6,#0
DJNZ R6,$
DJNZ R7,MAIN_L3
DJNZ R5,MAIN_L2
AJMP DISP_LED
;初始化CCU
;设置定时器重装值,时钟源设置,并打开中断设置等。
INI_CCU:
MOV TOR2H,#00H ;设置CCU定时器重装值
MOV TOR2L,#00H ;TH2,TL2可先不设置
MOV TPCR2H,#00 ;使用PCLK时钟源,并进行5分频
MOV TPCR2L,#5
MOV TCR20,#00000001B;设置基本定时器
MOV CCCRA,#0
MOV TICR2,#81H ;设置CCU中断使能寄存器,打开捕获中断
SETB ECCU ;打开CCU中断
SETB EA
RET
;CCU定时器中断处理
;注:定时器值会自动重装,TH2,TL2
INTS_CCU:
MOV A,TISE2
ANL A,#07H
CJNE A,#07H,INTS_CNEXT
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_CNEXT: CJNE A,#06H,INTS_CEXT ;捕获中断
MOV A,ICRAL
MOV ICRAL_DAT,A
MOV A,ICRAH
MOV ICRAH_DAT,A
INTS_CEXT: MOV TIFR2,#00H ;清除中断标志
RETI
;共阴字模表
TAB_IO: DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,73h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$INCLUDE (HI2C_ASM.INC) ;引入LPC932硬件I2C软件包
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -