8951单片机,标准12MHZ
void delay()
{
unsigned int i,j;
for(i=2;i>0;i--)
for(j=484;j>0;j--);
}
自己算的1900多纳秒,运行却不对,求!!!!
1/12Mhz=0.0833us一个周期,0.0833us2484=80us,再加上指令跳转时间就80多us了
for(j=484;j>0;j--);
这条语句至少1+484*3个周期,
一次循环至少这三步:
1判断j>0,
2 一个;空周期
3 j--
所以你知道怎么算了吧
一个for(i = 0; i < 484; i++) { ;} 差不多1451us吧,然后你循环了两次,那么应该2902us左右
这个不好精确计时的,只能实际测试后确定个大概范围。首先,循环变量是整形的,而51是8位,所以这个循环变量加减法运算就是多条指令,而不同情况下的加减法运算时间都可能不一样(例如有时候要处理进位),然后,现在的51一般都是带流水线的,有些指令是在流水线里的,就不需要一个完整的机器周期了,而有些指令因为跳转之类的,导致需要重新取,时间就要长很多。在这种情况下取精确计算一段代码的执行时间根本没有意义