那位帮忙看看这个程序那里错了

2019-07-16 03:57发布

我在看书上介绍释放CPU的方法,就照着做了,可是编译错误,提示 LED_ON() ;和LED_OFF() ;为undefined identifier,提示g_bSystemTime1Ms = 0 ;为undefined identifier,是什么意思?


#define LED_ON() LED = 0x00 ; //所有LED 亮
#define LED_OFF() LED = 0xff ; //所有LED 熄灭
unsigned int g_u16LedTimeCount = 0 ; //LED 计数器
unsigned char g_u8LedState = 0 ; //LED 状态标志, 0 表示亮,1 表示熄灭
void LedProcess(void)
{
      if(0 == g_u8LedState) //如果LED 的状态为亮,则点亮LED
      {
          LED_ON() ;
      }
          else //否则熄灭LED
      {
          LED_OFF() ;
      }
}
void LedStateChange(void)
{
      if(g_bSystemTime1Ms) //系统1MS 时标到
      {
          g_bSystemTime1Ms = 0 ;
          g_u16LedTimeCount++ ; //LED 计数器加一
        if(g_u16LedTimeCount >= 500) //计数达到500,即500MS 到了,改变LED 的状态。
        {
          g_u16LedTimeCount = 0 ;
          g_u8LedState = ! g_u8LedState ;
        }
      }
}
void main(void)   //主程序
{
       while(1)
     {
        LedProcess() ;
        LedStateChange() ;
     }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
h414984185
1楼-- · 2019-07-16 08:53
你还有没有其他文件的?在你所给的程序里LED和g_bSystemTime1Ms这两个变量都没定义;
jiangxiaowenzsz
2楼-- · 2019-07-16 13:05
有完整代码的。
jiangxiaowenzsz
3楼-- · 2019-07-16 18:02
#define LED  P0
void Timer0Init(void)
{
    TMOD &= 0xf0 ;
    TMOD |= 0x01 ;      //定时器0工作方式1
    TH0  =    0xfc ;      //定时器初始值
    TL0  =  0x66 ;
    TR0  = 1 ;
    ET0  = 1 ;
}
void Time0Isr(void) interrupt 1
{
    TH0  =    0xfc ;            //定时器重新赋初值
    TL0  =  0x66 ;
    g_bSystemTime1Ms = 1 ;    //1MS时标标志位置位
}
少了上面这些
popeye0451
4楼-- · 2019-07-16 18:36
g_bSystemTime1Ms没有定义,如果所有程序都在一个文件里,全局变量和宏定义都放到文件开头吧
jackor88
5楼-- · 2019-07-16 22:37
 精彩回答 2  元偷偷看……
h414984185
6楼-- · 2019-07-16 23:06
开头还是少了#include <reg52.h>,  g_bSystemTime1Ms没定义;Timer0Init(void)函数没调用;
我调整了一下,这个在我的编译器了可以编译
#include <reg52.h>
#define LED  P0         
#define LED_ON() LED = 0x00 ; //所有LED 亮
#define LED_OFF() LED = 0xff ; //所有LED 熄灭
unsigned int g_u16LedTimeCount = 0 ; //LED 计数器
unsigned char g_u8LedState = 0 ; //LED 状态标志, 0 表示亮,1 表示熄灭

bit g_bSystemTime1Ms;

void Timer0Init(void)
{
    TMOD &= 0xf0 ;
    TMOD |= 0x01 ;      //定时器0工作方式1
    TH0  =    0xfc ;      //定时器初始值
    TL0  =  0x66 ;
    TR0  = 1 ;
    ET0  = 1 ;
}
void Time0Isr(void) interrupt 1
{
    TH0  =    0xfc ;            //定时器重新赋初值
    TL0  =  0x66 ;
    g_bSystemTime1Ms = 1 ;    //1MS时标标志位置位
}

void LedProcess(void)
{
      if(0 == g_u8LedState) //如果LED 的状态为亮,则点亮LED
      {
          LED_ON() ;
      }
          else //否则熄灭LED
      {
          LED_OFF() ;
      }
}
void LedStateChange(void)
{
      if(g_bSystemTime1Ms) //系统1MS 时标到
      {
          g_bSystemTime1Ms = 0 ;
          g_u16LedTimeCount++ ; //LED 计数器加一
        if(g_u16LedTimeCount >= 500) //计数达到500,即500MS 到了,改变LED 的状态。
        {
          g_u16LedTimeCount = 0 ;
          g_u8LedState = ! g_u8LedState ;
        }
      }
}
void main(void)   //主程序
{         Timer0Init();
       while(1)
     {
        LedProcess() ;
        LedStateChange() ;
     }
}

一周热门 更多>