定时控制LED闪烁的疑问(关于头文件)

2019-03-24 19:54发布

编了个定时控制LED闪烁的程序程序。运行,验证OK。如下:
#include <reg52.h>
 #define uint unsigned int;
     uint timer_inc;  sbit led1=P0^1;
      void inittimer( )
{
  TMOD=0x01;
 
  TH0=0x4c;
  TL0=0xf7;
      EA=1;
  ET0=1;
  TR0=1;
  }      void main()
{
  inittimer();
    while(1)
   {
   
   }
 
   }
     void timer0(void) interrupt 1
{
  
   TH0=0x4c;
   TL0=0xf7;    timer_inc++;
  if(timer_inc>=10)
    {
    timer_inc=0;
   led1=~led1;
  }
  }   但其分成 main.c ,val.h,timer.h,后,编译错误,提示说找不到led1,timer_inc这些变量。程序如下: 其中 main.c      #include <reg52.h>
 #include "timer.h"
 #include "val.h"
#define uint unsigned int;
#define uchar unsigned char; void main()
{
  inittimer();
 
 
   while(1)
   {
   
   }
 
   
 } timer.h 如下:  void inittimer( )
{
  TMOD=0x01;
 
  TH0=0x4c;
  TL0=0xf7;
      EA=1;
  ET0=1;
  TR0=1;
  } 
   void timer0(void) interrupt 1
{
  
   TH0=0x4c;
   TL0=0xf7;    timer_inc++;
  if(timer_inc>=10)
    {
    timer_inc=0;
   led1=~led1;
  }
  }
val.h如下:       uint timer_inc;  //这里有的程序这样写uchar data timer_inc    _at_ 0x4a; 。字面意思是说,指定个起始地址,从0x4a开始。那么两者的本质区别在哪,执行效果有何不同。 sbit led1=P0^1;     不明白哪里错了,还请各位高手多多指教,谢谢! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
jishuaihu
1楼-- · 2019-03-24 23:47
在timer.h里面没有定义led1,timer_inc编译的时候当然找不到啦。如果在其他文件里定义了应该在声明一下!
yanse51
2楼-- · 2019-03-25 00:45
具体举个例子,好不。楼上的,俺没看明白
辛昕
3楼-- · 2019-03-25 02:05
我想他的意思是说
多个源文件的编译和引用自己做的头文件 这些问题。

关于这个,我也想弄过,但一直没怎么弄,更没解决。
在这方面向你推荐一本书

何宗彬 的 8位单片机开发--技术、技巧与规范

这本书网上有电子版,我下载过,不过不在这个电脑上,你可以找找看。
这本书里很详细讲了各种链接工具和编译工具的使用,应该会有参考作用。
辛昕
4楼-- · 2019-03-25 07:00
最后一个问题:

如果变量定义时,指定DATA,则可以把变量存储在RAM里,如果不指定,就会在ROM里。
leang521
5楼-- · 2019-03-25 09:45
 精彩回答 2  元偷偷看……
yanse51
6楼-- · 2019-03-25 15:45
多谢两位版主热心解答。今天下午看预处理和宏定义时,明白了。有先后顺序之分。编译通过了。

一周热门 更多>