打印
[PIC®/AVR®/dsPIC®产品]

PIC单片机CPU时钟

[复制链接]
1004|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当汇编在写呢?

使用特权

评论回复
5
ilikedota|  楼主 | 2015-2-1 21:49 | 只看该作者
yklstudent 发表于 2015-1-31 20:55
这样理解对了才怪

大神,求赐教,应该怎么理解才对。谢谢!!

使用特权

评论回复
6
ilikedota|  楼主 | 2015-2-1 21:51 | 只看该作者
本帖最后由 ilikedota 于 2015-2-1 21:52 编辑
NE5532 发表于 2015-1-31 22:06
“for循环一次需要2个机器周期”?咋算出来的?C当汇编在写呢?

大神,给一下建议,我这个现象是怎么样的来的,谢谢!!

使用特权

评论回复
7
NE5532| | 2015-2-1 22:35 | 只看该作者
你语句算得太少了呗,PIC的一行C可能要当7~9行汇编来算,你自己打开输出的汇编文件看看就知道了。

使用特权

评论回复
8
youss| | 2015-2-2 08:56 | 只看该作者
还有要告诉你 : PIC单片机的一个操作需用4个时钟周期来完成,即1个指令周期等于4个时钟周期。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

98

帖子

3

粉丝