RainKing 发表于 2013-9-13 20:14:29

关于PIC18系列的NOP()语句的时间计算

本帖最后由 RainKing 于 2013-9-13 20:15 编辑

芯片的型号是PIC18F25K22,使用的晶振是16M,理论上计算的话,一个节拍是1/16us,那么一个指令周期就是0.25us,也就是250ns。
但是我用数字示波器(具体名称不知道,反正是可以测量数字频率的)发现时间对不上,运行的程序如下:
while(1)
{
    Test=0;       //某一个测试脚
   NOP();
   Test=1;
}
其他程序就忽略,核心运行的程序,就是这个,翻译成汇编如下:
BCF0Xf82 , 0x7
NOP
BSF0Xf82 , 0X7
BRA 0X7d78         //(这个是第一句的地址)
也就是说执行的是4条语句,我用示波器观察之后,显示的信息如下:
Frequency=3.205M(+/-)0.02
T=310.8ns
也就是执行这四句话的时间为:310.8ns,每一句话的执行实际平均为:77.7ns,
这与理论的差距咋这么大呢,我不知道是不是我的计算有误,还是怎么回事,求各位解释一下啊。。。

RainKing 发表于 2013-9-13 20:29:50

顺便在问一下...如何设置寄存器,使得某个脚的高电平是3.3v,而不是5v...也就是说输出数字1的时候,这个脚的电压是3.3v,而不是5v....

gaolf_2012 发表于 2013-9-13 20:44:08

310.8ns x 4 = 1243.2nS ~= 1250 nS = 250nS x 5,差不多5个时钟周期。你是不是4倍频了呀?看看OSCCON2
的PLLRDY

RainKing 发表于 2013-9-13 22:10:15

gaolf_2012 发表于 2013-9-13 20:44 static/image/common/back.gif
310.8ns x 4 = 1243.2nS ~= 1250 nS = 250nS x 5,差不多5个时钟周期。你是不是4倍频了呀?看看OSCCON2
的P ...

不太懂你的意思....求解答,具体可以么。。。

RainKing 发表于 2013-9-13 22:26:05

gaolf_2012 发表于 2013-9-13 20:44 static/image/common/back.gif
310.8ns x 4 = 1243.2nS ~= 1250 nS = 250nS x 5,差不多5个时钟周期。你是不是4倍频了呀?看看OSCCON2
的P ...

我的程序特简单啊,没有设置任何寄存器啊,出了那个测试脚的设置,不可能4倍频的。。。。。。

gaolf_2012 发表于 2013-9-14 05:52:35

不知道配置字CONFIG1H你设的是多少。
bit 4
PLLCFG

RainKing 发表于 2013-9-14 08:18:00

gaolf_2012 发表于 2013-9-14 05:52
不知道配置字CONFIG1H你设的是多少。
bit 4
PLLCFG

我没有设置过这个寄存器……

RainKing 发表于 2013-9-14 17:41:03

我不小心把这个给设置了,时钟的4倍频..

szmini2006 发表于 2013-9-14 20:47:29

不能简单的这么算吧?现在的MCU都是几级流水线跑的

RainKing 发表于 2013-9-15 00:27:20

szmini2006 发表于 2013-9-14 20:47
不能简单的这么算吧?现在的MCU都是几级流水线跑的

我看了一下资料,pic的单片机的大多数指令都是1个周期执行完成的,除了特殊的指令需要多个周期……
页: [1]
查看完整版本: 关于PIC18系列的NOP()语句的时间计算