PIC 16f886 NOP()指令时间问题
内部时钟晶振4M 系统时钟为4M/4=1M 。定时器配置1s 将IO口翻转,确定时钟为1M。一条指令周期理应为1us 。
用示波器查看端口电平拉高拉低,查看相关指令耗时,
以下结果:
NOP(); 4us
asm("nop") 4us
i++ 1us
delay(1) 11us【该delay函数自己增加的内容如下】
void delay(uchar i) { for(;i>0;i--); }
delay_single() 1us 【该delay函数自己增加的内容如下】
void delay_single() { uchar i; i++; }
按上面测试数据,恨不能理解NOP空指令理应为一个指令周期吗?delay()函数 算上函数调用时间,也不该为11us???? 4M晶振,一个NOP 1us 你看汇编代码才才知道用了几条指令的。 sfq2008 发表于 2014-8-16 09:15
4M晶振,一个NOP 1us
可是测出来 是4us{:mad:} tigerman520 发表于 2014-8-16 09:23
你看汇编代码才才知道用了几条指令的。
NOP();
汇编如下,就一条。
555: NOP();
07CB 0000 NOP
不清楚樓主如何測試,
指令週期為CPU 執行指令的單位時間,NOP 是一個指令週期的指令
但i++ , 要看<i> 是甚麼資料格式,unsigned char ,char ,short int, int,unsigned long .....
不管<i> 是甚麼資料格式,對<i> 存取一定會大於等於 一個指令週期,不可能小於一個指令週期
可以肯定樓主的測試方法有問題。
會不會樓主 沒把 loop 指令的值行指令時間扣除 ..... 單純想像
这个不用示波器看,用MPLAB软仿,设断点直接就能看到指令执行时间的。
页:
[1]