编了个定时控制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;
不明白哪里错了,还请各位高手多多指教,谢谢!
此帖出自
小平头技术问答
多个源文件的编译和引用自己做的头文件 这些问题。
关于这个,我也想弄过,但一直没怎么弄,更没解决。
在这方面向你推荐一本书
何宗彬 的 8位单片机开发--技术、技巧与规范
这本书网上有电子版,我下载过,不过不在这个电脑上,你可以找找看。
这本书里很详细讲了各种链接工具和编译工具的使用,应该会有参考作用。
一周热门 更多>