使用C8051F时晶振不起振,请有经验的朋友赐教。
本帖最后由 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 inti;
#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);
}
将起荡电容改小,用15p试试 帮顶。
我用的是060,不过是有源晶振。 Spunky 发表于 2012-5-22 00:33 static/image/common/back.gif
将起荡电容改小,用15p试试
我已经试过了也不行,之前用的是33pF,后来改到22,15都不行。 // 主 程 序
void main (void)
{
WDTCN = 0xDE; // Disable watchdog timer
WDTCN = 0xAD;
SYSCLK_ExtOsc_Init ();
SYSCLK_Init();
while(1);
}
将时钟设置子程序更改一下位置,貌似外部时钟还未初始化时,已经开启了时钟检测功能。
attach://19450.rar
使用一下官方的测试程序,确认不是硬件的问题再说! 我从来不相信任何单片机的启振电路,我都是在外面振完再送进去的,虽然要多花0.2元.
C8051F410就经常在-35度时不能启动 我觉得应该是晶振的引脚没有焊接好,很可能虚焊了,你再检查一下 ibmx311 发表于 2012-5-22 08:25 static/image/common/back.gif
我从来不相信任何单片机的启振电路,我都是在外面振完再送进去的,虽然要多花0.2元.
C8051F410就经常在-35度 ...
你说的是用有源的? 官方的试过,两条语句顺序也不影响,真不知怎么回事 unrama 发表于 2012-5-22 09:34 static/image/common/back.gif
你说的是用有源的?
他得意思是,外接一个无源晶振。外接无源晶振相对而言比内部晶振要稳定和精确很多,而且并不贵。 unrama 发表于 2012-5-22 09:34 static/image/common/back.gif
你说的是用有源的?
我的意思是用晶体管+晶振振好了,再送到单片机里 问题找到了吗? and001 发表于 2013-9-11 17:38 static/image/common/back.gif
问题找到了吗?
问题早已经解决了,是狗的问题 哦我正考虑用外部晶振,内部快钟太快了没必要,现在太耗电了10mA(平时)电池一下就没了 and001 发表于 2013-9-11 23:54 static/image/common/back.gif
哦我正考虑用外部晶振,内部快钟太快了没必要,现在太耗电了10mA(平时)电池一下就没了 ...
你用电池供电啊?可以考虑用430单片机,功耗小,我们有一款产品上就用的430 没用的!如果就用内部快钟肯定不行 你是搞软件的就知道,如果不是可以问问你们的软件工程师!一定得用慢钟定时否则耗点一定大
页:
[1]