|
自从开始用C写程序,猛然间轻松了好多,可是,当需要做一个10MS延时用作软件防抖时,发现用C很难想象出怎么做,想来想去,有了,keil的debug与伟福结合,推算延时时间,从for到while,再到do-while,从a--到--a,终于被我发现了一个还说的过去的延时子程序:
void dilay(unsigned char a)
{
while(--a);
}
延时情况列表如下
a的取值 延时时间(子程序从调用到执行完毕并返回)(us)
0 635
1 8
2 10
3 13
4 15
5 17
6 19
7 21
8 23
9 26
A 28
B 30
C 32
D 34
E 36
F 39
10 41
11 43
12 45
13 47
14 49
..... ......
我相信大家发现了,相邻两个延时的差值不是2就是3(别拿635和8跟我们说事),而且2占的比例比较大 ,说以在不需要多精确的地方,把差值算作2就行了(可能有人看出2与3的比例是固定的了,其实并不是这样的,到后面2的比例会越来越大),但是这个子程序最大延时时间有限,当需要较长延时时不好用,怎么办呢? ? ?
对!un int
void dilay(unsigned int)
{
while(--a);
}
关于它我也精确仿真过,表 我就不再列了,相邻两数的差值是9或10,10的比例更大一些,这个做延时,长度足够了,但精度不咋地,在一些要求较为严格的地方(DS18B20),还得和上面配合使用,实在不行你也用伟福仿真一下,这肯定是最精确的,不习惯的话用混编嘛,要是还不行,那放弃C吧,用汇编,精确度达2us,也好计算,代码效率还高,不过你要做好受煎熬的准备 ,呵呵
----------------完
|
|