这是单片机的延时程序,晶振是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--); 展开
{
unsigned char a, b;
for (;c>0;c--) //c=50
for (b=38;b>0;b--)
for (a=130;a>0;a--); 展开
1个回答
展开全部
不要试图去计算,计算不准确,软件延时本身都不准确,这些都是试验得来的,如果晶振频率不同,可以调整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延时结果是不一样的
假如b=38 时,刚好延时38ms的话,b=50延时不会刚好是50ms
同样 a=130 时,刚好延时13ms的话,a=150延时不会刚好是15ms
所以一般是按比例改变a b取值,然后根据仿真结果再去调整,误差不大就可以了
还有unsigned char a, b和unsigned int a, b延时结果是不一样的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询