今天我开始了一个项目,用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
答案 0 :(得分:1)
Roger Rowland回答了我的问题:
正如数据表第2.6.1节所述,当与内部振荡器一起使用时,CLKOUT将为Fosc / 4。如果您配置了1MHz振荡器,那么您应该在CLKOUT上看到250KHz,这表示执行指令的速率(这些PIC上每条指令4个时钟周期)。一切都按预期工作。