今天我开始了一个项目,尝试用 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