C编写延时程序时,下面这段代码表示延时187ms?怎么计算的?晶振为12MHZ for(t2=0;t2<8000;t2++){}
答案:2 悬赏:10 手机版
解决时间 2021-02-08 23:31
- 提问者网友:心牵心
- 2021-02-08 06:40
C编写延时程序时,下面这段代码表示延时187ms?怎么计算的?晶振为12MHZ for(t2=0;t2<8000;t2++){}
最佳答案
- 五星知识达人网友:行雁书
- 2021-02-08 07:38
不可能是187ms吧,
通常情况下,一次for循环运行需要8个机器周期,12MHZ的一个机器周期为1us。
所以for(t2=0;t2<8000;t2++){}的时间消耗大约为8000*8=64000us=64ms
但是具体的运行环境差别较大,不过应该没有187ms这么夸张,给你一个程序验证一下:
#include
__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
unsigned _int64 Start(void) { return My_clock();} // 开始时间
unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64 m_overhead)
{return My_clock()-m_start - m_overhead; } // 停时间
void main()
{
unsigned _int64 m_start=0, m_overhead=0;
unsigned int N;
m_start = My_clock();
m_overhead = My_clock() - m_start - m_overhead;
m_start = My_clock(); // 正式开始
//测试程序段 Start
for(int t2=0;t2<8000;t2++){}
//测试程序段 End
N = Stop(m_start,m_overhead); // 获取耗时.
printf("Time:%I64d us\n", N);
}
通常情况下,一次for循环运行需要8个机器周期,12MHZ的一个机器周期为1us。
所以for(t2=0;t2<8000;t2++){}的时间消耗大约为8000*8=64000us=64ms
但是具体的运行环境差别较大,不过应该没有187ms这么夸张,给你一个程序验证一下:
#include
__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
unsigned _int64 Start(void) { return My_clock();} // 开始时间
unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64 m_overhead)
{return My_clock()-m_start - m_overhead; } // 停时间
void main()
{
unsigned _int64 m_start=0, m_overhead=0;
unsigned int N;
m_start = My_clock();
m_overhead = My_clock() - m_start - m_overhead;
m_start = My_clock(); // 正式开始
//测试程序段 Start
for(int t2=0;t2<8000;t2++){}
//测试程序段 End
N = Stop(m_start,m_overhead); // 获取耗时.
printf("Time:%I64d us\n", N);
}
全部回答
- 1楼网友:刀戟声无边
- 2021-02-08 08:18
你好!
跟你用的芯片类型也有关系,如果是1T 可能跑得很快,8051系列的,是12T的比较稳定,但具体效果也跟编程有关,如定义的 int xdata t2; 与int data t2; 相差很多很多,在芯片型号一定,代码形式确定的情况下,大体上可以计算下一共用了多少指令来估算时间,还可以在仿真程序下用断点方式,查看一下,这个循环要花多少时间,不一定就是187的
比较精确的延时方式还是用时间中断
打字不易,采纳哦!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯