基于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));  这一句,后面根本进不去?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
沈十一郎
1楼-- · 2019-07-16 05:55
我的程序编译都没有问题,就是程序下载后,运行老是跑到那里就停了,麻烦高手帮我看看,谢谢!
草根白骨精
2楼-- · 2019-07-16 10:37
 精彩回答 2  元偷偷看……
沈十一郎
3楼-- · 2019-07-16 11:13
找到了,是晶振坏了,换了一个就可以了,谢谢!还有一个是void main()
{

  Init_Device();
  delay();
  PCA0CPM0  = 0x42;
  PCA0CPM3  = 0x42;
  PCA0CPM4  = 0x42;
程序怎么跑到这里我的p0.3,p0.4就有输出高电平了,P0.0反而没有作用,始终输出的是高电平?(我的原意是最开始p0.0,p0.3,p0.4先输出高电平,延时后再输出低电平但是这里输出高电平后就控制不了了,求高手指点,谢谢!)
lstcspring
4楼-- · 2019-07-16 12:39
本帖最后由 lstcspring 于 2012-9-15 20:01 编辑

OSCXCN 最高位始终为1,初始化失败;
记不清了,你自己看一下配置成什么方式了
沈十一郎
5楼-- · 2019-07-16 15:18
已解决,谢谢

一周热门 更多>