7d98f69965181add
获得 0 次赞
帮助过0人
单片机定时器0中断 控制LED亮灭 有几个问题想不清楚!求解答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; //给定时器赋初值,定时1msTL0=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; //给定时器赋初值,定时1msTL0=0X18;i++;if(i==1000){i=0;led=~led; } }