这是单片机的延时程序,晶振是12MHZ,延时10ms。请问是怎么计算的?其中,c=50。

voidDelay10ms(unsignedintc)//误差0us{unsignedchara,b;for(;c>0;c--)//c=50for(b=38;b>0;b-... void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
for (;c>0;c--) //c=50
for (b=38;b>0;b--)
for (a=130;a>0;a--);
展开
 我来答
11kxmx
2015-03-13 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:70%
帮助的人:2503万
展开全部
不要试图去计算,计算不准确,软件延时本身都不准确,这些都是试验得来的,如果晶振频率不同,可以调整a=130,但想刚好是10ms基本无可能,用汇编语言延时准确一些,但计算也比较麻烦如果要准确延时的话,还要用定时器
假如b=38 时,刚好延时38ms的话,b=50延时不会刚好是50ms
同样 a=130 时,刚好延时13ms的话,a=150延时不会刚好是15ms
所以一般是按比例改变a b取值,然后根据仿真结果再去调整,误差不大就可以了
还有unsigned char a, b和unsigned int a, b延时结果是不一样的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式