【问题标题】:8051F312 microcontroller [duplicate]8051F312微控制器[重复]
【发布时间】:2014-01-06 13:40:54
【问题描述】:

我有 8051F312 微控制器,我必须打开 LED(在 P2 端口的 7.bit 上)。我的代码不起作用,也许你有一些想法。

 #include < C8051F310.H >
 #include < stdio.h >

sbit LED_16 = P2^7; // P2^7-->green LED: 1 = ON; 0 = OFF
void init(void)
    {

    // XBRN registers_init
      XBR1    = 0x40;                  // Enable the crossbar
      PCA0MD  &= 0X40;                 // Disable Watchdog  
      P2MDOUT |= 0xF0;
      ADC0CN  = 0x80;   
      ADC0CF  = 0xFC;   
      REF0CN  = 0x08;
    }

void main(void)
{
  init();

  while (1)
  {

    LED_16 = 1;                       // LED continuously illuminated

  }
}

(对不起格式,但我的文本编辑器有问题)

【问题讨论】:

  • 那么你的问题是什么?
  • 您忘记添加问题...
  • 答案好像是42
  • 我有 2 条狗,我非常爱它们。
  • 对不起,我已经编辑过了...

标签: c microcontroller init 8051


【解决方案1】:

首先您需要设置 GPIO 的输入/输出。对于 8051 微控制器系列(据我所知)(我不了解 8051F312),将 1 分配给将 gpio 设置为输入的引脚并将 0 设置为 gpio 作为输出。因此,在您的情况下,您首先需要将 P2.7 设置为输出。为此,您需要在 init 函数中执行 LED_16 = 0;。之后,您需要考虑 LED 是如何连接到微控制器引脚的。如果 LED 的阳极连接到微控制器引脚,则需要将其设为高以使 LED 发光。如果 LED 的阴极连接到微控制器引脚,则需要将其设为低电平以使 LED 发光。 如果 LED 的阳极连接到微控制器,您的代码应该是

void main(void)
{
  init();

  while (1)
  {

    LED_16 = 1;                       // LED continuously illuminated

  }
}

如果led的阴极连接到微控制器,那么你的代码应该是

void main(void)
{
  init();

  while (1)
  {

    LED_16 = 0;                       // LED continuously illuminated

  }
}

【讨论】:

    【解决方案2】:

    请查看 Silicon Labs 的 AN101 应用说明。我已经将示例源代码与您的代码进行了比较,我注意到:

    1. 他们使用XBR2 = 0x40 进行交叉开关初始化。
    2. 他们通过XBR1 = 0x80启用/SYSCLK。
    3. 他们通过PRT1CF |= 0x40 将输出引脚配置为推挽模式(我认为在您的情况下应该是PRT1CF |= 0x80)。

    【讨论】:

      猜你喜欢
      • 2012-01-22
      • 2011-02-24
      • 2012-02-09
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      相关资源
      最近更新 更多