疑问: 1.模块一不是给定时器设定了初值了嘛?模块三的重新设定是在中断之后将溢出的数值重新设定???? 2.去除模块三的定时器赋初值为什么下载程序后不能达到LED亮灭?? 3.主函数中的while(1)是让程序停在那里一直扫描???  
#include"reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedefunsigned int u16; //对数据类型进行声明定义 typedef unsignedchar u8;
sbitled=P2^0; //定义P20口是led
/******************************************************************************* 模块一 * 函 数 名 : Timer0Init * 函数功能 :定时器0初始化 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/
voidTimer0Init() //外部中断0的函数 { TMOD|=0X01; //选择为定时器0模式,工作方式1,仅用TR0打开启动。 TH0=0XFC; //给定时器赋初值,定时1ms TL0=0X18; ET0=1;//打开定时器0中断允许 EA=1; //打开总中断 TR0=1;//打开定时器 //定时器0的运行开关 }
/******************************************************************************* 模块二:主函数 * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/
void main() { Timer0Init(); //定时器0初始化 while(1); // 等待中断发生???? }
/******************************************************************************* 模块三:中断服务函数 * 函 数 名 : void Timer0()interrupt 1 * 函数功能 : 定时器0中断函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/
void Timer0()interrupt 1 { staticu16 i; TH0=0XFC; //给定时器赋初值,定时1ms TL0=0X18; i++; if(i==1000) { i=0; led=~led; } }
|