|
本帖最后由 javasy 于 2012-5-22 07:32 编辑
我使用的是062,在切换外部时钟时程序一直停在了检查外部晶振处(下面程序加下划线一句),换过晶振、片子、电容等,用示波器看晶振脚上确定没起振。
哪位朋友遇到过这种情况,请指点一下,谢谢!
程序如下:
#include <c8051f060.h>
/************************************/
#define Crystal_Clock 12000000
/************************************/
void SYSCLK_Init (void);
void SYSCLK_ExtOsc_Init (void);
/************************************/
//----------------------------------------/
// 内部时钟设置
void SYSCLK_Init (void)
{
OSCICN = 0x83;
RSTSRC = 0x04; // Enable missing clock detector
}
//----------------------------------------/
// 外部时钟初始化
void SYSCLK_ExtOsc_Init (void)
{
unsigned int i;
#if (Crystal_Clock <= 32000)
#define XFCN 0
#elif (Crystal_Clock <= 84000)
#define XFCN 1
#elif (Crystal_Clock <= 225000)
#define XFCN 2
#elif (Crystal_Clock <= 590000)
#define XFCN 3
#elif (Crystal_Clock <= 1500000)
#define XFCN 4
#elif (Crystal_Clock <= 4000000)
#define XFCN 5
#elif (Crystal_Clock <= 10000000)
#define XFCN 6
#elif (Crystal_Clock <= 30000000)
#define XFCN 7
#else
#error "Defined Crystal Frequency outside allowable range!"
#define XFCN 0
#endif
OSCXCN = 0x60;
OSCXCN |= XFCN;
for (i = 13000; i > 0; i--); // 24.5MHz, 1ms=24500 SYSCLKs DJNZ=2 SYSCLKs
while (!(OSCXCN & 0x80));
CLKSEL = 0x01; // 禁止内部振荡器;
return;
}
/*****************************************/
// 主 程 序
void main (void)
{
WDTCN = 0xDE; // Disable watchdog timer
WDTCN = 0xAD;
SYSCLK_Init();
SYSCLK_ExtOsc_Init ();
while(1);
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|