• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

刚写了个延时程序,进入这个程序就出不来了,大家看下什么回事

void delay(unsigned int k)           //*****************************delay
{
unsigned int i,j;
for(i=0;i}
全部回复(13)
正序查看
倒序查看
2008-05-20 22:29
void delay(unsigned int k)           //*****************************delay
{
unsigned int k,j;
for(;k>0;k--)for(j=0;j<2;j++);
}
0
回复
dz3690
LV.2
3
2008-05-20 23:26
两个for在一起,一不小心就会死循环.还是分开用吧.
0
回复
abing
LV.8
4
2008-05-21 08:19
@dz3690
两个for在一起,一不小心就会死循环.还是分开用吧.
谢谢回复,请问怎么分开呢?
0
回复
dz3690
LV.2
5
2008-05-21 21:51
@abing
谢谢回复,请问怎么分开呢?
//这样改一下试试,会直观一些
void delay(unsigned int k)   //***假设K是希望延时的一个单位数
{unsigned int i,j;           //k已定义,不要重复
for(i=0;i   {for(j=0;j<200;j++);      //此处假设200为一个延时单位.
          {}
   }
}

//道理上讲,应当得时值为 k*200 个周期,但是实际时长要比k*200 个周期大一些,定时不准确.
0
回复
dz3690
LV.2
6
2008-05-21 21:53
@abing
谢谢回复,请问怎么分开呢?
//这样改一下试试,会直观一些
void delay(unsigned int k)   //***假设K是希望延时的一个单位数
{unsigned int i,j;           //k已定义,不要重复
for(i=0;i   {for(j=0;j<200;j++);      //此处假设200为一个延时单位.
          {}
   }
}

//道理上讲,应当得时值为 k*200 个周期,但是实际时长要比k*200 个周期大一些,定时不准确.
0
回复
abing
LV.8
7
2008-05-24 08:15
@dz3690
//这样改一下试试,会直观一些voiddelay(unsignedintk)  //***假设K是希望延时的一个单位数{unsignedinti,j;          //k已定义,不要重复for(i=0;i
是的,这种定时太不精确,但在要求不高的场合还是很实用的
0
回复
2008-05-28 22:25
@abing
是的,这种定时太不精确,但在要求不高的场合还是很实用的
算好了指令周期总数,还是可以做到比较精准的,就是忒麻烦
0
回复
dz3690
LV.2
9
2008-05-29 23:14
@醉雨打枝遍地红
算好了指令周期总数,还是可以做到比较精准的,就是忒麻烦
用汇编还好算,用C就会算不准了.
0
回复
abing
LV.8
10
2008-05-30 12:20
@dz3690
用汇编还好算,用C就会算不准了.
插入汇编是个好方法.

最主要还要看定时要求怎么样,有很多时候我是采用定时器来做
0
回复
309898038
LV.1
11
2009-01-02 20:21
@abing
插入汇编是个好方法.最主要还要看定时要求怎么样,有很多时候我是采用定时器来做
用汇编的ret就ok了
0
回复
2009-02-12 10:07
@309898038
用汇编的ret就ok了
hehe
0
回复
2009-02-19 15:04
@pengchuang0819
hehe
延时程序用汇编的也很简单的
0
回复
abing
LV.8
14
2009-02-21 11:05
@北溟有鱼
延时程序用汇编的也很简单的
现在写程序我不会想到用汇编了,那样真的很累.
我现在这样写的延时程序:
void delay_ms(unsigned int ms)//对于AVR单片机8M时,延时约1mS
{
unsigned int i;
for(;ms>0;ms++){for(i=0;i<1000;i++};
}

这程序可以直接和于AVR,C51及PIC单片机等,用汇编的话就不能通用了.
0
回复