智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2938|回复: 3
打印 上一主题 下一主题

关于定时器的疑问

[复制链接]

0

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
威望
199
贡献
22
兑换币
0
注册时间
2008-10-26
在线时间
21 小时
跳转到指定楼层
1#
发表于 2008-11-21 04:01:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<>1)我采用的16M的晶振,设置锁相环的情况下,想实现定时</P><P>mccnt寄存器是从0xffff开始的,16分频</P><P>按照书上的讲解 我的定时应该是1/16M*2^16*16=0.065536s</P><P>但是我出来的结果却是这个数据的11倍左右 约为760ms</P><P>我是用portA作为输出引脚 mccnt每减到0x0000 就取反一次 以此来输出高低电平 用示波器来读取的</P><P>2)问什么我的在设置锁相环的情况下while语句不能用呢。如果不注掉 整个程序就没有反映</P><P>下面是我的原程序 请大虾帮忙看看</P><P>#include &lt;hidef.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* common defines and macros */<BR>#include &lt;mc9s12dg128.h&gt;&nbsp;&nbsp;&nbsp;&nbsp; /* derivative information */<BR>#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"</P><P><BR>static unsigned char a=0;<BR></P><P>void ini_PLL() {<BR>&nbsp; REFDV=0X03;//pllclk=2*oscclk*(REFDV+1)/(SYNR+1)=2*16*(1/2)=16M,如果我采用的是16M的晶振 那么OSSCLK是16M吗<BR>&nbsp; SYNR=0X01;//<BR>&nbsp; //while(CRGFLG_LOCK==0);//就是这句,不注掉就会没反应<BR>&nbsp; CLKSEL=0X80;<BR>}&nbsp;<BR>&nbsp;<BR>void ini_pacn(){<BR>&nbsp; TCTL4=0x80; <BR>&nbsp; ICPAR=0X08;<BR>&nbsp; PACN3=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>}</P><P>*/<BR>void ini_MDC(void){<BR>&nbsp;<BR>&nbsp;MCCTL = MCCTL&amp;0Xfb;&nbsp;&nbsp; //模数计数器禁止运行<BR>&nbsp;MCCTL = 0Xe3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //允许中断,模数计数方式 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//返回时重新加载所用的常数,分频常数为16&nbsp;&nbsp;&nbsp; <BR>&nbsp;MCCTL = MCCTL|0X04;&nbsp;&nbsp; //模数计数器使能<BR>&nbsp;MCCNT = 0xFFFF;&nbsp;&nbsp; //这个MDC的初始化有些画蛇添足了&nbsp;&nbsp;<BR>&nbsp;MCCTL = MCCTL|0X08&nbsp; ; //把模数常数寄存器的值加载到模数计数器<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>}</P><P><BR>void main(void) {<BR>&nbsp; /* put your own code here */<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; ini_MDC();<BR>&nbsp;&nbsp;&nbsp; DDRA=0XFF;<BR>&nbsp;&nbsp; PORTA=0X00 ;<BR>&nbsp; EnableInterrupts;</P><P>&nbsp; for(;;) {&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;} /* wait forever */<BR>&nbsp; /* please make sure that you never leave this function */<BR>}</P><P>&nbsp;#pragma CODE_SEG __NEAR_SEG NON_BANKED</P><P><BR>&nbsp;&nbsp;&nbsp; interrupt 26 void MDC_ISR(void) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a=~a;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PORTA_BIT0=a;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}</P><P>&nbsp;</P>

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
2#
发表于 2008-11-25 04:19:00 | 只看该作者

Re:关于定时器的疑问

不是,我估计PLL不成功的话,按内部时钟了,估计8M左右。具体的没测过。
回复 支持 反对

使用道具 举报

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
3#
发表于 2008-11-22 04:27:24 | 只看该作者

Re:关于定时器的疑问

<>PLL没有成功,你检查一下晶振是否起振.</P><P>很明显,倍频出了问题.</P>
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
威望
199
贡献
22
兑换币
0
注册时间
2008-10-26
在线时间
21 小时
4#
 楼主| 发表于 2008-11-23 04:33:42 | 只看该作者

Re:Re:关于定时器的疑问

<>跳进26号中断也是要花时间的</P><P>是这个导致了程序不能精确的计时吗</P>
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-11 06:01 , Processed in 0.068053 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表