打印

C8051f 晶振起振,但频率居然是1khz!

[复制链接]
4379|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
longus|  楼主 | 2010-6-27 21:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 longus 于 2010-6-27 22:18 编辑

用的是C8051f310,使用外部22.1184MHz无源晶体,代码如下:

void Port_IO_Init()
{
//add
    P0 &= 0xf3;
    P0MDIN    = 0xF3;
    P0SKIP    = 0x0C;
}
void Oscillator_Init()
{
    int i = 0;
    OSCXCN    = 0x67;
    for (i = 0; i < 6000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0);
    CLKSEL    = 0x01;
    OSCICN    = 0x00;
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
    Port_IO_Init();
    Oscillator_Init();
}

void main(void)
{
Init_Device();
while (1)
{
  printf("hello\n");
}
}

程序运行后,示波器测量晶体管脚,显示频率略大于1KHz的方波。已知晶体绝对是好的。
请各位达人不吝赐教!

相关帖子

沙发
xwj| | 2010-6-27 22:07 | 只看该作者
还可以测出0HZ呢

使用特权

评论回复
板凳
chunyang| | 2010-6-28 00:32 | 只看该作者
示波器探头的引入,其分布参数就可能破坏晶体振荡电路的工作条件,只要你的晶体及匹配电容参数合适,时钟振荡部份就不会出问题,如果需要用示波器观看振荡器的输出波形,要么使用专用探头,要么用门电路缓冲后再测试。另外,22.1184M晶体一定是泛音晶体,本身就工作在高次谐波上,对分布参数更为敏感。

使用特权

评论回复
地板
ayb_ice| | 2010-6-28 08:08 | 只看该作者
要测量X2脚

使用特权

评论回复
5
acute1110| | 2010-6-28 08:30 | 只看该作者
1,看看是否探头的底线没有接好。
2,看看探头可以测试最高频率是多少,很多国产的探头的电容值很大,帮你做了一级滤波。
3,用软件来测试,通过驱动I/O来判断系统clk是多少,然后反算晶体的频率。

使用特权

评论回复
6
longus|  楼主 | 2010-6-28 08:37 | 只看该作者
多谢楼上各位热心达人!21ic真的是强。

按acute1110大侠所说,用I/O来判断clk,
while(1)
{
    P1 = 0xff;
    P1 = 0x00;
}
出来的频率还是不对,只有1K的量级,所以估计晶振频率还是有问题的。
不解了。

使用特权

评论回复
7
ayb_ice| | 2010-6-28 09:01 | 只看该作者
直接上初始代码吧,替换你的相关部分代码
/////////////////////////////////////
//  Generated Initialization File  //
/////////////////////////////////////

#include "C8051F310.h"

// Peripheral specific initialization functions,
// Called from the Init_Device() function
void PCA_Init()
{
    PCA0MD    &= ~0x40;
    PCA0MD    = 0x00;
}

void Port_IO_Init()
{
    // P0.0  -  Unassigned,  Open-Drain, Digital
    // P0.1  -  Unassigned,  Open-Drain, Digital
    // P0.2  -  Skipped,     Open-Drain, Analog
    // P0.3  -  Skipped,     Open-Drain, Analog
    // P0.4  -  Unassigned,  Open-Drain, Digital
    // P0.5  -  Unassigned,  Open-Drain, Digital
    // P0.6  -  Unassigned,  Open-Drain, Digital
    // P0.7  -  Unassigned,  Open-Drain, Digital

    // P1.0  -  Unassigned,  Open-Drain, Digital
    // P1.1  -  Unassigned,  Open-Drain, Digital
    // P1.2  -  Unassigned,  Open-Drain, Digital
    // P1.3  -  Unassigned,  Open-Drain, Digital
    // P1.4  -  Unassigned,  Open-Drain, Digital
    // P1.5  -  Unassigned,  Open-Drain, Digital
    // P1.6  -  Unassigned,  Open-Drain, Digital
    // P1.7  -  Unassigned,  Open-Drain, Digital
    // P2.0  -  Unassigned,  Open-Drain, Digital
    // P2.1  -  Unassigned,  Open-Drain, Digital
    // P2.2  -  Unassigned,  Open-Drain, Digital
    // P2.3  -  Unassigned,  Open-Drain, Digital

    P0MDIN    = 0xF3;
    P0SKIP    = 0x0C;
}

void Oscillator_Init()
{
    int i = 0;
    OSCXCN    = 0x67;
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0);
    CLKSEL    = 0x01;
}

// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
    PCA_Init();
    Port_IO_Init();
    Oscillator_Init();
}

使用特权

评论回复
8
t.jm| | 2010-6-28 09:03 | 只看该作者
请参考范例中的端口初始化程序:
void PORT_Init (void)
{
   // Oscillator Pins
   P0MDIN &= ~0x0C;                    // P0.2, P0.3 are analog
   P0SKIP |= 0x0C;                     // P0.2, P0.3 skipped in the Crossbar

   // Buffered System Clock Output
   P0MDOUT |= 0x01;                    // P0.0 is push-pull

   // Crossbar Initialization
   XBR0    = 0x08;                     // Route /SYSCLK to first available pin
   XBR1    = 0x40;                     // Enable Crossbar and weak pull-ups
}

使用特权

评论回复
9
longus|  楼主 | 2010-6-28 23:00 | 只看该作者
谢谢楼上各位!问题解决了,低级错误:没有先关掉WDT!ayb_ice大侠的代码提醒了我。还是感谢各位!

使用特权

评论回复
10
yhn1973| | 2010-6-29 09:38 | 只看该作者
ayb_ice是C8051F中的高手

使用特权

评论回复
11
350231547| | 2013-12-20 17:06 | 只看该作者
和你犯过同样的低级错误,看门狗没关,程序只能跑一部分,怎么调试都不对!

使用特权

评论回复
12
znmcu| | 2013-12-20 17:17 | 只看该作者
c8051的看门口默认是打开的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

5

帖子

1

粉丝