用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时很不好控制,我们常常很难知道一段延时程序它的精确延时到底是多少,这和汇编延时程序没法比。但有时后写程序又不得不要用到比较精确的延时,虽然说可以用混合编程的方式解决,但这种方式不是每个人都能掌握,且写起来也麻烦。所以,通过测试我给大家提供一个延时子程序模块,并以此给一个出我们经常用到的延时的数据表格。(注意:表格中的数据只适合我的延时模块,对其他的延时程序不适用,切忌!!!!!!!!别到时候延时不对来找我。)
延时模块:其中问号代表要填的数,要延时多少,到表格中去找数据,然后填上就OK!切忌3条FOR语句不能颠倒顺序
void
delay() { 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,这样的误差已经
很小了,省去了仿真的麻烦。
现在你不再为延时不精确担忧了,参照表中的数据写延时,想延时多少就能延时多少。
再次重申:此表格是根据我的延时模块编写,这也是大多数朋友都习惯用的一个模块,如果你用其他模块或是改动了我的模块,延时都不准的,不信大家可以试试!!!
|