C8051f023的晶振频率如何设置,我设置了,有问题呀?大虾...

2020-02-05 09:01发布

#include <c8051f020.h>
sbit led=P1^4;
void delay(int dl)
{
    int i,j;
    for (i=0; i<=dl; i++)
    {
        for (j=0; j<=20000; j++)
        {
        }
    }
}
main()
{   int i;
    WDTCN     = 0xDE;
    WDTCN     = 0xAD; //禁用看门狗
//设置时钟源,用config2 生成的代码,晶振18.432MHZ  
        OSCXCN    = 0x67;
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0); //运行到这句停止了调试,调试无法继续下去了
    OSCICN    = 0x08;


    while(1)
    {
        delay(300);
        led=0;
        delay(300);
        led=1;
    }
}
晶振设置.png (25.02 KB, 下载次数: 0) 下载附件 2012-6-20 22:23 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
dengxm2009
1楼-- · 2020-02-05 12:21
 精彩回答 2  元偷偷看……
dengxm2009
2楼-- · 2020-02-05 13:34
自己顶一下。
dengxm2009
3楼-- · 2020-02-05 14:25
网上搜了下这个问题,找到了c8051f060的晶振设置的程序例子,自己改了下,终于能用了。

/////////////////////////////////////
//        Generated Initialization File  //
/////////////////////////////////////

#include "C8051F020.h"

// Peripheral specific initialization functions,
// Called from the Init_Device() function
sbit Power5    = P1^4;
static int t=0;
void Reset_Sources_Init()
{
    WDTCN     = 0xDE;
    WDTCN     = 0xAD;
}

void Port_IO_Init()
{
    P1MDOUT   = 0x10;
    XBR2      = 0x40;
}

void Oscillator_Init()
{
    int i;
    //设置内部时钟
    OSCICN = 0x05;                      // Configure internal oscillator for  4MHZ
    RSTSRC = 0x04;                                           //启用时钟丢失检测
    //设置外部时钟源
    OSCXCN    = 0x67;                                   //晶振频率大于6.7MHZ
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0); //
    //切换时钟源到外部时钟
    OSCICN    = 0x0C;
}

void Timer_Init()
{
    TCON      = 0x10;
    TMOD      = 0x01;
        //定时寄存器初值设定
    TL0       = 0xE0;
    TH0       = 0xFF;
}

void Interrupts_Init()
{
    IE        = 0x02;        //启用0号定时器中断
}

timer0()  interrupt 1
{


    TF0=0;                 //0#定时器溢出寄存器复位
    t++;
    if (t==30)                                                //接近1秒钟一次
    {
        Power5=1;
    }
    if (t>=60)
    {
        Power5=0;
        t=0;
    }
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
    Oscillator_Init();
    Reset_Sources_Init();
    Timer_Init();
    Port_IO_Init();

    Interrupts_Init();
}

void delayms(int de)
{
    int i,j;
    for (i=0; i<=30; i++)
    {
        for (j=0; j<=de; j++)
            {  }
    }

}
void main()
{
    Init_Device();

    ET0=1;                                //启用0#定时器中断功能
    EA=1;                           //开全局中断
    TR0=1;                           //启动0#定时器计数
    while(1)
    {

    }

}

一周热门 更多>