vlambda博客
学习文章列表

非常精确的C语言延时子程序表

非常精确的C语言延时子程序表

用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是语言也还是有它不足之处: 它的延时很不好控制,我们常常很难知道一段延时程序它的精确延时少,这和汇编延时程序没法比。 但有时候写程序又不得不要用到比较精确的延时,虽然说可以用混合方式 解决,但这种方式不是每个人都能掌握,且写起来也麻烦。 所以,通过测试我给大家提供一序模块,并以此给一个出我们经常用到的延时的数据表格。 (注意: 表格中的数据只适合我的延其他的延时程序不适用
延时模块:其中问号代表要填的数,要延时多少,到表格中去找数据,然后填上就OK!切忌 不能颠倒顺序
void delay(void){ unsigned char a,b,c; for(a=0;a<?;a++) for(b=0;b<?;b++) for(c=0;c<?;c++);}
据表如下(晶振20MHz):

序号

延时时间

a的值

b的值

c的值

延时误差(us)

1

10us

1

1

1

-0.5

2

20us

1

1

8

0

3

30us

1

1

15

+0.5

4

40us

2

1

9

0

5

50us

1

1

28

0

6

60us

1

1

35

+0.5

7

70us

1

1

42

+1

8

80us

1

1

48

0

9

90us

1

1

55

+0.5

10

100us

1

1

61

-0.5

11

200us

1

1

128

0

12

300us

3

1

63

+0.5

13

400us

2

1

129

0

14

500us

5

1

63

+0.5

15

600us

6

1

63

0

16

700us

7

1

63

-0.5

17

800us

1

3

175

+0.5

18

900us

9

1

63

-1.5

19

1ms

1

3

219

-1.5

20

2ms

2

3

220

+3

21

3ms

3

3

220

+3

22

Xms

X

3

220

+3

注:X的取值范围为2到255。
基本上我们平时用到的延时都在这里了,每种延时的误差都很小,最大也不过3us,有的甚至
已经很精确了,如果想延时1秒钟,你可以连续调用延时250ms的程序4次,总共延时误差12us,这样已经很小了,省去了仿真的麻烦。
现在你不再为延时不精确担忧了,参照表中的数据写延时,想延时多少就能延时多少。
再次重申:此表格是根据我的延时模块编写,这也是大多数朋友都习惯用的一个模块,如果你 或是改动了我的模块,延时都不准的,不信大家可以试试!
免责声明:本文来源于网络。版权归原作者所有,如涉及侵权,请联系删除。谢谢。