1

今天我开始了一个项目,尝试用 PIC18F45K22 做一些事情。我以前为其他控制器编写的代码有一些时间问题。原来是控制器的时钟频率有问题。

正如数据表告诉我的那样,使用内部振荡器时,我的默认时钟频率应该是 1MHz。根据我的示波器,我在 OSC2 (RA6) 引脚上测量了 250kHz 的时钟频率。所以我开始在数据表中四处寻找,并从数据表中找到表 2-3。该表显示当控制器处于睡眠模式时,OSC2 引脚将为“时钟/4”,这可能是我的问题的根源,因为 1MHz/4 = 250kHz。根据第 3.0 章,当设备复位时,控制器将以 PRI_RUN 模式启动,除非启用了双速启动。因此,为了确保我使用以下配置行禁用了此模式:

#pragma config IESO = OFF

该行将禁用内部/外部振荡器切换位,这将根据第 2.12.1 段禁用双速启动。

现在我尝试了 OSCCON、OSCCON2、OSCTUNE 寄存器的多种设置,但都失败了。在这一点上,我想不出是什么导致了这个“问题”。我希望有人能发现我的错误,以便我可以在指定的时钟频率上运行设备。

目前我设置了这些配置位:

#pragma config WDTEN = OFF
#pragma config FOSC = INTIO7 // Make clock visible on OSC2 pin
#pragma config LVP = OFF 
#pragma config DEBUG = OFF
#pragma config IESO = OFF // Disable Two-speed Start-up 

// Entry of application
int main(int argc, char** argv)
{
    OSCCONbits.IRCF = 0b011; // default frequency
    // Tried different OSCCON; OSCCON2; OSCTUNE settings, without succes
}

数据表 (1):http ://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf

4

1 回答 1

1

罗杰罗兰回答了我的问题:

正如数据表第 2.6.1 节所述,当与内部振荡器一起使用时,CLKOUT 将为 Fosc/4。如果您配置了 1MHz 振荡器,那么您应该会在 CLKOUT 上看到 250KHz,它代表指令执行的速率(这些 PIC 上的每条指令 4 个时钟周期)。一切都按预期工作。

于 2015-11-13T12:13:11.130 回答