智能车制作

标题: 根据总线频率怎么写mc9s12xs128的延时程序? [打印本页]

作者: mlhmxhabc    时间: 2013-10-12 19:47
标题: 根据总线频率怎么写mc9s12xs128的延时程序?
例如40M的总线频率,我要写个延时函数如:void delay(uint x)
                                       {
                                            uint i,j;
                                            for(i=0;i<x;i++)
                                                for(j=0;j<m;j++);
                                       }
m是一个具体的数,当调用这个延时函数时如:delay(100);它代表延时约100毫秒,delay(1000);它代表延时约1000毫秒,以此类推,该怎么确定m的值?如果总线频率是64M呢?如果总线频率是其他呢?
跪求大神解答

作者: andyxu    时间: 2013-10-12 20:09
我知道一种办法是  你用示波器去看  ms级延时的误差还是很小的
作者: 机遇    时间: 2013-10-12 21:51
用示波器定个us的基准时间就行了呀
作者: 2601819196    时间: 2013-10-12 23:52
精确延时函数我一般是这样写:
void   delay(u16  a)
{
      for(i=0;i<a;i++)
     {
               _asm(nop);  //_asm(nop)表示1个总线周期的延时,他的时间与PLL设置的频率有关
     }
}

作者: vison    时间: 2013-10-13 07:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: mlhmxhabc    时间: 2013-10-13 10:00
andyxu 发表于 2013-10-12 20:09
我知道一种办法是  你用示波器去看  ms级延时的误差还是很小的

谢谢!

作者: mlhmxhabc    时间: 2013-10-13 10:00
vison 发表于 2013-10-13 07:36
建议使用示波器调整看。。。。

谢谢!

作者: 飞鸿印雪    时间: 2013-10-13 10:50
也可以用定时器啊
作者: mlhmxhabc    时间: 2013-10-13 11:17
2601819196 发表于 2013-10-12 23:52
精确延时函数我一般是这样写:
void   delay(u16  a)
{

请问假如mc9s12xs128的总线频率为16M,那么一个机器周期怎么算?是这样的吗:1/16M=0.0625微秒,然后12*0.0625=0.75微秒,0.75微秒就是一个机器周期?

作者: 2601819196    时间: 2013-10-13 13:23
mlhmxhabc 发表于 2013-10-13 11:17
请问假如mc9s12xs128的总线频率为16M,那么一个机器周期怎么算?是这样的吗:1/16M=0.0625微秒,然后12*0 ...

这个跟51的可能有区别,xs机器周期与总线周期的倍速关系要查相关的手册。_asm(nop);就是一个总线的周期,1/PLL.
作者: mlhmxhabc    时间: 2013-10-13 17:19
2601819196 发表于 2013-10-13 13:23
这个跟51的可能有区别,xs机器周期与总线周期的倍速关系要查相关的手册。_asm(nop);就是一个总线的周期, ...

谢谢了!

作者: 中华旺仔    时间: 2013-10-18 18:20
学习了。。
作者: Bandari    时间: 2013-10-20 11:38
受教了。




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2