打印
[ZLG-MCU]

有偿求助LPC938捕获问题

[复制链接]
2004|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chunyu-lee|  楼主 | 2011-9-15 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LPC, ov, TI, hm, ST
chunyulee@foxmail.com  15204656110 这是我的邮箱和电话  谢谢!


;================================================================
;问题:测量的波形周期大于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
;==================================================================

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

1

粉丝