基于8051f005的程序

2019-07-16 04:38发布

void Reset_Sources_Init()
{
    WDTCN     = 0xDE;
    WDTCN     = 0xAD;
}
//============================================================================
//  系统时钟初始化,使用外部22.1184MHz晶振作为时钟源
void Oscillator_Init()
{
    int i = 0;
    OSCXCN    = 0x67;
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while(!(OSCXCN & 0x80));  
    OSCICN    = 0x08;
}
//============================================================================
//  I/O端口初始化
void PORT_IO_Init()
{
  PRT0CF    = 0x1B;         //0001 1011  p0.0,p0.1,p0.3,p0.4为推挽方式;P0.2为漏极方式,其余皆为漏极方式
  PRT1CF    = 0x03;        // 0000 0011  P1.0,P1.1为推挽方式,其余为漏极方式
  XBR0      = 0x28;       // 00 101 000 CEX0,CEX1,CEX2,CEX3,CEX4连接到5个端口引脚
  XBR2      = 0x40;        //交叉开关使能
  P0 =  0x02;            //0000 0010  p0.2 设置为高电平
  P1 =  0x01;            //p1.0  设置为高电平
}
//==============================================================================
//  定时器初始化
void Timer_Init()
{
    TCON      = 0x10;    //定时器0允许
    TMOD      = 0x02;   //定时器0方式2,8为自动重载
    TL0       = 0x10;
    TH0       = 0x10;   //输出频率30Hz
    TMR3CN    = 0x04;
    TMR3RLH   = 0x70;
    TMR3H     = 0x70;    //(65532-x)*12/22118400=T  T=0.02  x=28672即TH=0x70 TL=0x00
}
//==============================================================================
//    中断初始化
void Interrupts_Init()
{
    IE        = 0x80;
    EIE2      = 0x01;
}
//==============================================================================
//ADC初始化
void ADC_Init()
{
    ADC0CN    = 0x80;
}

void Voltage_Reference_Init()
{
    REF0CN    = 0x03;    //使用内部参考电压基准
}
//==================================================================
//
void PCA_Init()
{
    PCA0CN    = 0x40;      //允许PCA0定时器/计数器
    PCA0MD    = 0x04;       //定时器0溢出方式
  /*  PCA0CPM0  = 0x42;      //8位PWM方式
    PCA0CPM1  = 0x42;
    PCA0CPM2  = 0x42;
    PCA0CPH0  = 0x80;      //占空比为50%
    PCA0CPH1  = 0x00;      //占空比为100%
    PCA0CPH2  = 0x0C;      //占空比为95%   */

}
//=====================================================================
void Init_Device(void)
{
    EA=0;
        Oscillator_Init();
    Reset_Sources_Init();
    ADC_Init();
    Voltage_Reference_Init();
    PORT_IO_Init();
    Timer_Init();
    PCA_Init();
    Interrupts_Init();
}
void main()
{

  Init_Device();
  delay();
  PCA0CPM0  = 0x42;
  PCA0CPM3  = 0x42;
  PCA0CPM4  = 0x42;
  LED = 0;
  PCA0CPH0 = 0x00;
  PCA0CPH3 = 0x00;
  PCA0CPH4 = 0x00;
//  LED_State(0);
  delay1();
  delay1();
  LED = 1;
  PCA0CPH0 = 0xFF;
  PCA0CPH3 = 0xFF;
  PCA0CPH4 = 0xFF;
//  LED_State(1);
  EA = 1;
……………………
想问一下为什么我的程序老是卡在时钟初始化的 while(!(OSCXCN & 0x80));  这一句,后面根本进不去?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。