- ;================================================================
- ;问题:测量的波形周期大于1ms
- ;采用外部晶振,2M divm=0; ccu频率四分频
- ;所以计数1为4us 一个周期计数差最少为250(0xfa),而实际试验时发现计数差会比245(0xf5)小
- ;-----------------------------------------------------------------
- DIVM EQU 95H
- TPCR2H EQU 0CBH
- TPCR2L EQU 0CAH
- P0M1 EQU 84H
- P0M2 EQU 85H
- P1M1 EQU 91H
- P1M2 EQU 92H
- P2M1 EQU 0A4H
- P2M2 EQU 0A5H
- IEN1 EQU 0E8H
- IEN2 EQU 0D5H
- TH2 EQU 0CDH
- TL2 EQU 0CCH ;CCU定时器计数器
- OCRAH EQU 0EFH ;比较寄存器
- OCRAL EQU 0EEH
- ICRAH EQU 0ABH ;捕捉寄存器
- ICRAL EQU 0AAH
- TIFR2 EQU 0E9H ;CCU中断标志寄存器
- TICR2 EQU 0C9H ;CCU中断控制寄存器
- TCR20 EQU 0C8H
- TCR21 EQU 0F9H ;
- CCCRA EQU 0EAH ;
- FInterFirst EQU 2 ;中断第一次
- ;=============================================================================
- ORG 0000H
- LJMP Start
- ORG 0003
- RETI
- ORG 002BH ;掉电检测 BOF
- RETI
- ORG 003BH ;KBI中断 KBF
- RETI
- ORG 005BH ;CCU中断 比较/捕获
- LJMP Lab0927
- ;--------------------------------------------------
- ;程序区
- ORG 0070H
- Start:
- MOV SP,#0D0H
- CALL RegIntial
- CLR 2BH.FInterFirst
- SETB P2.0 ;关闭LED
- SETB IEN1.4 ;使能ECCU
- SETB EA
- ORL TICR2,#01H
- ORL TICR2,#08H
- Stopsub:
- JMP StopSub
- ;========================================================================
- RegIntial:
- CLR EA
- MOV DIVM,#00H ;Fcclk=2M 2~4机器周期(指令周期) 1M~0.5M moto:约0.25M
- ;pclk=fcclk=1M
- MOV TPCR2H,#00
- MOV TPCR2L,#03H ;ccuclk=0.25M
- MOV P1M1,#29H
- MOV P1M2,#0DEH ;P1.0为输入,P1.5输入,其它为推挽输出
- MOV P1,#04H
- MOV P0M1,#3EH ;P0.1 p0.2 p0.3 p0.4 p0.5输入
- MOV P0M2,#00H
- MOV P0,#0FFH
- MOV P2M1,#80H ;P2.0 p2.4 p2.5 输出,p2.7输入,其它也设为输出
- MOV P2M2,#07FH ;p2.2 p2.3 双向口
- MOV P2,#0FFH
- MOV TICR2,#00H
- MOV TCR20,#01H
- MOV CCCRA,#01H
- SETB IEN1.4 ;使能ECCU
- SETB EA
- RET
- ;====================================================================
- ;中断子程序
- ;16 BIT timer
- Lab0927:
- PUSH ACC
- PUSH PSW
- MOV A,TIFR2
- JNB ACC.0,aaaINT
- ANL TIFR2,#0FEH
- CPL P2.0 ;通过看这个脚的波形,知道捕获中断什么时候进来了
- MOV A,ICRAL
- MOV 57H,A
- MOV A,ICRAH
- MOV 58H,A
- JNB 2BH.FInterFirst,cccINT
- MOV A,57H
- CLR C
- SUBB A,59H
- MOV 59H,A
- MOV A,58H
- SUBB A,5AH
- MOV 5AH,A ;计算出间隔值
- MOV A,59H
- CLR C
- SUBB A,#0F5H
- MOV 59H,A
- MOV A,5AH
- SUBB A,#00H ;间隔值与立即数0xf5比较
- MOV 5AH,A
- JC aa55
- jmp cccINT
- aa55:
- call ErrorSub ;不应该到此
- cccINT:
- SETB 2BH.FInterFirst
- MOV A,57H
- MOV 59H,A
- MOV A,58H
- MOV 5AH,A
- ;ccu ocra中断
- aaaINT:
- MOV A,TIFR2
- JNB ACC.3,INTE
- ANL TIFR2,#0F7H
- INTE:
- POP PSW
- POP ACC
- RETI
- ;=========================================================
- ;死循环,中断停止使能
- ErrorSub:
- setb p1.1
- clr ea
- clr p2.0 ;灯一直亮
- jmp ErrorSub
- ;==================================================================
- END
- ;==================================================================