例如,要写一个延迟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