[PIC®/AVR®/dsPIC®产品] PIC单片机CPU时钟

[复制链接]
1284|7
 楼主| ilikedota 发表于 2015-1-31 19:39 | 显示全部楼层 |阅读模式
PIC单片机如果使用外部时钟,那CPU的工作时钟频率是外接晶振的频率吗?
在芯片上电时,有个延时,我不想用定时器做,所以写了个延时函数,外接8M晶振

void delay_ms(unsigned int a)
{
    unsigned char i,j;
    for (i=0; i<a; i++)
    {
        for (j=0;j<4000;j++)
        {}
    }
}

程序中想延时100ms,所以我写delay_ms(100),但是我用示波器一测,发现居然延时时长是2s,搞不懂这是怎么回事?请大神们帮忙看下,最好帮忙解释写,非常感谢!!
 楼主| ilikedota 发表于 2015-1-31 19:42 | 显示全部楼层
本帖最后由 ilikedota 于 2015-1-31 19:45 编辑

我用的芯片是PIC18F6720,我之所以程序里写4000,我是这样计算的,8M的时钟,那一个机器周期就是0.125us,for循环一次需要2个机器周期,为0.25us,经过4000次,所以是1ms,这样理解对吗??
yklstudent 发表于 2015-1-31 20:55 | 显示全部楼层
这样理解对了才怪
NE5532 发表于 2015-1-31 22:06 | 显示全部楼层
“for循环一次需要2个机器周期”?咋算出来的?C当汇编在写呢?
 楼主| ilikedota 发表于 2015-2-1 21:49 | 显示全部楼层
yklstudent 发表于 2015-1-31 20:55
这样理解对了才怪

大神,求赐教,应该怎么理解才对。谢谢!!
 楼主| ilikedota 发表于 2015-2-1 21:51 | 显示全部楼层
本帖最后由 ilikedota 于 2015-2-1 21:52 编辑
NE5532 发表于 2015-1-31 22:06
“for循环一次需要2个机器周期”?咋算出来的?C当汇编在写呢?

大神,给一下建议,我这个现象是怎么样的来的,谢谢!!
NE5532 发表于 2015-2-1 22:35 | 显示全部楼层
你语句算得太少了呗,PIC的一行C可能要当7~9行汇编来算,你自己打开输出的汇编文件看看就知道了。
youss 发表于 2015-2-2 08:56 | 显示全部楼层
还有要告诉你 : PIC单片机的一个操作需用4个时钟周期来完成,即1个指令周期等于4个时钟周期。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

98

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部