?? ccuuse1.asm
字號:
;使用硬件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 + -