• 已解决 73488 个问题
  • 已帮助 5994 位优秀工程师

求单片机软件延时精确计算

lanshou 2016-11-22 浏览量:573
求单片机软件延时精确计算,C编程,for语句。好像与单片机、晶振有关的啊,望详细解答,先谢谢了
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
}
像这样一个程序段,它的延时是怎样计算的。

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 用软件仿真可以计算出来,写一个简单的程序如下

    #include<reg51.h>

    sbit d1=P1^0;

    void delay(unsigned int i)

    {

        while(i--);

    }

    void main()

    {

    while(1)

      {

        d1=0;

        delay(10000);

        d1=1;

        delay(10000);

      }

    }

    方法如下

    用kell软件编译后,打开软件仿真最好看的哪个,然后在d1=1,这条语句设置断点,点全速运行,观察左边的框中sec后面的数值

    比如sec  0.098456.大约为98个毫秒,这种方法不能准确地定时,只能是大概的,如果想要准确定时,可以用定时器。

    • 发布于 2016-11-22
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • 你好,如果你用的是STC单片机的话可以直接用官方提供的ISP软件计算,其他单片机的话就要自己去摸索了,另外如果确实对时间精度要求比较高,建议还是用定时器去实现:



    • 发布于2016-11-22
    • 举报
    • 评论 0
    • 1
    • 0

  • 单片机的程序 在编译器中都会被编译成相应汇编指令 每个汇编指令的执行时间由于 cpu的主频相关  主频又会和晶振有关系 

    • 发布于2016-11-22
    • 举报
    • 评论 0
    • 1
    • 0

  • 其實如果用ASM Code看這一串for迴圈至少就2行以上了,包含比較並跳進跳離,自加,用軟體延時來估計都不是很準確,所以像51提供的那個ISP計算都是大約值,時間一長誤差會越大,若需要精準度高的方法還是用定時器囉
    • 发布于2016-11-22
    • 举报
    • 评论 0
    • 1
    • 0

  • 这个问题我也提出过,你可以去单片机板块看看,答案只有看你转成的汇编了,要是你用的老的89系列的单片机可以用keil的时间看看,但是你要是用的stc的最好用官方的提供的延时程序了,SingleYork已经回答你了, 或者你用这种

    void  delay_ms(unsigned char ms)
    {
    	unsigned int i;
    
    	do
    	{
    		i = MAIN_Fosc / 13000;
    		while(--i)	;   //14T per loop
    	}while(--ms);
    }
       这用也可以,不过我也没弄明白这个13000怎么来的

    • 发布于2016-11-22
    • 举报
    • 评论 0
    • 1
    • 0

求单片机软件延时精确计算