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

📄 ccuuse1.asm.bak

📁 LPC932的CCU应用
💻 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 + -