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

[求助]PIC12F675 指令周期20us 不知道为何?

[复制链接]
1368|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
esidarap|  楼主 | 2019-4-21 20:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#pragma config FOSC = INTRCCLK  
#pragma config WDTE = OFF        
#pragma config PWRTE = OFF      
#pragma config MCLRE = ON      
#pragma config BOREN = ON      
#pragma config CP = OFF         
#pragma config CPD = OFF        

#include <xc.h>
int i = 0;

void main(void) {                                                                  //Load Factory Calibration Value Into OSCCAL
    asm("BSF STATUS, 5");
    asm("CALL 3ffh");
    asm("MOVWF OSCCAL");
    asm("BCF STATUS, 5");
   
    WPU = 0x00;
    TRISIO = 0x00;

    GPIObits.GPIO5 = 0;
    while(1) {
        for(i=0;i<100;i++)
        {;}
        GPIObits.GPIO5 = 1;
        for(i=0;i<100;i++)
        {;}
        GPIObits.GPIO5 = 0;
    }
    return;
}
代码如上: GP4/CLKOUT 频率988kHz方波, GP5 频率只有259Hz.
不知道哪个寄存器还会影响指令周期?
多谢!

使用特权

评论回复
沙发
请叫我树人| | 2019-4-22 09:15 | 只看该作者
帮你顶一下吧!!!

使用特权

评论回复
板凳
Rock007| | 2019-4-22 09:48 | 只看该作者
不太清楚你想干什么。只是GP5输出一个方波?

首先确定你选的系统时钟,这个可以确定指令周期(时间);
再计算你的延时,就是 for(i=0;i<100;i++){;} 的占用时间。 调整这个延时时间,可以得到你想要的GP5的输出频率。
用IED自带的 stopwatch 功能做这个很方便的,先在 simulator 里把时钟配置好。

使用特权

评论回复
地板
wooda| | 2019-4-22 10:34 | 只看该作者
看着是没有设定主时钟,另外要精确定时,还是得诶用定时器中断比较可靠准确。

使用特权

评论回复
5
esidarap|  楼主 | 2019-4-22 16:31 | 只看该作者
本帖最后由 esidarap 于 2019-4-22 16:34 编辑

哦? 那么说 pic12f7675这种芯片,就不太适合用C语言编译了。手册上说 P4/CLKOUT 的频率是Fosc的 1/4。所以988kHz应该是对的,这样的话,就是说for这块有问题了呗! 一个空语句加上for判断
大概20us?那是不是也太长了些!

使用特权

评论回复
6
systemchip| | 2019-4-23 00:25 | 只看该作者
675太老了,现在大部分器件可以支持32Mhz Fosc

使用特权

评论回复
7
淘猫汤姆| | 2019-4-23 19:49 | 只看该作者
esidarap 发表于 2019-4-22 16:31
哦? 那么说 pic12f7675这种芯片,就不太适合用C语言编译了。手册上说 P4/CLKOUT 的频率是Fosc ...

写这种for循环不就是空耗时间吗,编译器体贴

使用特权

评论回复
8
天灵灵地灵灵| | 2019-4-23 22:08 | 只看该作者
楼主OUT了。

使用特权

评论回复
9
天灵灵地灵灵| | 2019-4-23 22:09 | 只看该作者
for循环体本身就要消耗好多个机器时钟

使用特权

评论回复
10
CoolSilicon| | 2019-4-24 10:09 | 只看该作者
你如果想精确计时的话, 用timer呗.
再不济用库函数__delay_us(), __delay_ms();
最后才是用for自己写, 并且这个时间不好控制的, 完全取决于编译器生成的代码量和你设置的循环次数...

使用特权

评论回复
11
david4383| | 2019-4-24 12:46 | 只看该作者
需要使用nop,进行精确延时,这种for本身就很多指令周期。

使用特权

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

本版积分规则

5

主题

70

帖子

0

粉丝