标题: 谁能给个1US延时程序啊(要求晶振是12M的51单片机) [打印本页]

作者: nt06    时间: 2012-7-4 15:42
标题: 谁能给个1US延时程序啊(要求晶振是12M的51单片机)

 


作者: admin    时间: 2012-7-4 16:24

这个简单  一个 nop 就是1us

 


作者: nt06    时间: 2012-7-4 16:47

我要的是一个延时程序是转一个参数进去 就得到想要的

 


作者: ahshmj    时间: 2012-7-4 23:53

你的问题很搞笑。

 

12兆晶体标准51片子,一个机器周期就是1us,无法再小了,没有其他办法。只能是nop,一周期指令。


作者: ahshmj    时间: 2012-7-4 23:54
估计你是需要1ms的吧?
作者: ahshmj    时间: 2012-7-5 08:43

如果已知屋里只有1个人,让你给出一个计算公式,计算屋里有几个人,你会怎么写?

 


作者: nt06    时间: 2012-7-5 18:50
版主你别想的那么理所当然 你试试就知道多难了 我目前最多控制在误差6个US以内 它是这样子的 12M里面有个累计误差 而且由于他的运算比较慢有个累计误差 所以我觉得是不可能的 但是呢就是有这么一个做到了
作者: nt06    时间: 2012-7-5 18:54
版主你别想的那么理所当然 你试试就知道多难了 我目前最多控制在误差6个US以内 它是这样子的 12M里面有个累计误差 而且由于他的运算比较慢有增大 时间相差就越大
作者: ahshmj    时间: 2012-7-5 22:05

听不懂你说的是啥!你最后说的和你开始说的就不是一回事!

 

“我目前最多控制在误差6个US以内 ”,你多长时间允许误差6个US??

 

对使用12M晶振的51单片机来说,最小的时间单位就是1US,只要是个程序,最少要一个指令吧?对标准的89c51来说任何一个指令都等于或大于1US。

如果说在一定时间内积累了一个或几个微秒的+误差,你想延迟几个微秒,那是另外一回事。

你想延迟几个微秒就加进去几个NOP,这也可以认为就是1US的延时程序。

如果你是数小时积累了1个微秒的误差,用程序在一定的小时后(计算出来的)或者是每天00:00:00时,一次性的在定时器的初装值加上几个数值即可。

积累误差不超过1微秒是没法调整的。

到现在我没有弄明你的真正的意图,不知道我揣摩的对与否?


作者: nt06    时间: 2012-7-6 09:26
就是你说这样我要一断长时间的累计 但是了又总是有点点岔开 这几天来一个总结晶振稍微大点误差就会少点 这几天来一个总结
作者: rgwan    时间: 2012-8-1 01:16
 现在晶振质量普遍不行,
不过如果是 12T,延1uS,12M,NOP解决一切

作者: dlyt_test002    时间: 2012-8-1 09:05
以下是引用admin在2012-7-4 16:24:58的发言:

这个简单  一个 nop 就是1us

 

正解。

不清楚LZ到底想要什么!


作者: 威龙1410    时间: 2019-2-2 21:38
/*分享一下常用的延时函数*/
/*延时10us*/
void delay_10us()  //延时10us@12M晶振
{      
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}

/****延时n个10us****/
void delay_n10us(uint n)  //延时n个10us@12M晶振
{      
        uint i;         
        for(i=n;i>0;i--)   
        {
              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        }
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1