编了个定时控制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;
不明白哪里错了,还请各位高手多多指教,谢谢!
|