C51延时函数delay的编写

例如,要写一个延迟10ms的delay函数:(12M晶振)

void delay_10ms()
{
     unsigned char i,j,k;
     for(i=5;i>0;i--)
     {
           for(j=4;j>0;j--)
           {
                   for(k=248;j>0;j--);
            }
      }
}
原理:3层for循环,循环次数是 NUM = 4X5X248 = 4960次,由每次循环都有条件判断(如 i >0)和自减语句(如 i--),因此每次循环又耗费两个机器周期

     所以,总耗费的机器周期为 SUM = NUM x 2 = 9920个

     又因为 12M 晶振频率,每一个机器周期为 1us,所以 这个函数话费的时间 为9920us = 9.920 ms 约等于10ms,而把赋值语句,压栈出栈操作计算在内,加起来差不多10ms

你可能感兴趣的:(#,C51单片机)