功勋会员
WJ
- 积分
- 6304
- 威望
- 1456
- 贡献
- 4674
- 兑换币
- 17
- 注册时间
- 2008-4-6
- 在线时间
- 87 小时
|
Re:求教ECT模块
<>上面说的是利用外部捕捉计算.</P><P>我自己写了一个ECT累加器计脉冲的,粘出来,ECT的分析太长了,可以去博客上看.</P><P>///////////////////////////////////////////////////////////////////<BR>// 16位累加器测速程序(PACB累加器),PT0口输入脉冲<BR>//每次记录脉冲时间可修改宏:TIME_INTER</P><P>///////////////////////////////////////////////////////////////////<BR>#include <hidef.h> /* common defines and macros */<BR>#include <mc9s12dg128.h> /* derivative information */<BR>#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"</P><P>#define TIME_INTER 1000 //1000个ms=1s<BR>unsigned int Get_pulse;</P><P><BR>void Start_PLL(void) //busCLK=32M<BR>{<BR> REFDV=0x01; // PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)<BR> SYNR=0x03; // =2*16M*3/2=64M<BR> asm{<BR> BRCLR CRGFLG,#$08,*<BR> BSET CLKSEL,#$80<BR> } <BR>}</P><P><BR>void PACBInit()<BR>{<BR> TCTL4 = 0X02; //下降沿捕捉脉冲<BR> PBCTL = 0x40; //级联两个8位累加器(PAC0和PAC1)<BR> ICPAR = 0X03; //使能累加器<BR> PACN10 = 0X0000;<BR>}</P><P><BR>void MDCInit(void)<BR>{<BR> MCCTL = MCCTL&0Xfb; //模数计数器禁止运行<BR> MCCTL = 0Xe3; //允许中断,模数计数方式 <BR> //返回时重新加载所用的常数,分频常数为16 <BR> MCCTL = MCCTL|0X04; //模数计数器使能<BR> MCCNT = 2000; //(1/32M)*16*2000= 1ms <BR> MCCTL = MCCTL|0X08 ; //把模数常数寄存器的值加载到模数计数器FLMC;<BR>}</P><P> </P><P>void main(void) <BR>{<BR> DisableInterrupts;<BR> Start_PLL();<BR> PACBInit();<BR> MDCInit();<BR> EnableInterrupts;<BR> DDRB=0xff;<BR> PORTB=0XAA; <BR> for(;;)<BR> {</P><P> } <BR>}</P><P><BR>#pragma CODE_SEG __NEAR_SEG NON_BANKED<BR>void interrupt 26 MDC_ISR(void) <BR>{ <BR> static unsigned int number_count;<BR> MCFLG = 0x80; <BR> number_count ++;</P><P> if( number_count==TIME_INTER) //1秒取一次<BR> {<BR> number_count=0;<BR> Get_pulse = PACN10; <BR> PACN10 = 0X0000;<BR> PORTB^=0Xff;<BR> }<BR>}</P> |
|