累计定时中断次数使LED灯闪烁
#include "REG52.H"
#define const_time_level 200
void delay_long(unsigned int uiDelaylong);
void initial_myself();
void initial_peripheral();
void led_flicker();
void T0_time(); //定时中断函数
sbit led_dr=P3^5;
#define const_time_level 200
void delay_long(unsigned int uiDelaylong);
void initial_myself();
void initial_peripheral();
void led_flicker();
void T0_time(); //定时中断函数
sbit led_dr=P3^5;
unsigned char ucLedStep=0; //步骤变量
unsigned int uiTimeCnt=0; //统计定时中断次数的延时计数器
unsigned int uiTimeCnt=0; //统计定时中断次数的延时计数器
void main()
{
initial_myself();
delay_long(100);
initial_peripheral();
while(1)
{
led_flicker(); //第三区 LED灯闪烁应用程序
}
}
{
initial_myself();
delay_long(100);
initial_peripheral();
while(1)
{
led_flicker(); //第三区 LED灯闪烁应用程序
}
}
void led_flicker()
{
switch(ucLedStep)
{
case 0:
if(uiTimeCnt>=const_time_level)
{
ET0=0; //禁止定时中断
uiTimeCnt=0; //时间计数器清零
ET0=1; //开启定时中断
led_dr=1; //LED灯亮
ucLedStep=1; //切换到下一个步骤
}
break;
case 1:
if(uiTimeCnt<=const_time_level) //时间到
{
ET0=0; //禁止定时中断
uiTimeCnt=0; //时间计数器清零
ET0=1; //开启定时中断
led_dr=0; //LED灭
ucLedStep=0; //返回上一步骤
}
break;
}
}
{
switch(ucLedStep)
{
case 0:
if(uiTimeCnt>=const_time_level)
{
ET0=0; //禁止定时中断
uiTimeCnt=0; //时间计数器清零
ET0=1; //开启定时中断
led_dr=1; //LED灯亮
ucLedStep=1; //切换到下一个步骤
}
break;
case 1:
if(uiTimeCnt<=const_time_level) //时间到
{
ET0=0; //禁止定时中断
uiTimeCnt=0; //时间计数器清零
ET0=1; //开启定时中断
led_dr=0; //LED灭
ucLedStep=0; //返回上一步骤
}
break;
}
}
void T0_time() interrupt 1
{
TF0=0; //清除中断标志
TR0=0; //关中断
if(uiTimeCnt<0xffff)
{
uiTimeCnt++;
}
TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f
TL0=0x2f;
TR0=1; //开中断
}
{
TF0=0; //清除中断标志
TR0=0; //关中断
if(uiTimeCnt<0xffff)
{
uiTimeCnt++;
}
TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f
TL0=0x2f;
TR0=1; //开中断
}
void delay_long(unsigned int uiDelaylong)
{
unsigned int i;
unsigned int j;
for(i=0;i<uiDelaylong;i++)
for(j=0;j<500;j++)
;
}
{
unsigned int i;
unsigned int j;
for(i=0;i<uiDelaylong;i++)
for(j=0;j<500;j++)
;
}
void initial_myself() //第一区 初始化单片机
{
TMOD=0x01; //设置定时器0为工作方式1
TH0=0xf8; //重装初始值0xf82f
TL0=0x2f;
led_dr=0; //LED灭
}
{
TMOD=0x01; //设置定时器0为工作方式1
TH0=0xf8; //重装初始值0xf82f
TL0=0x2f;
led_dr=0; //LED灭
}
void initial_peripheral() //第二区 初始化外围
{
EA=1; //开总中断
ET0=1; //允许定时中断
TR0=1; //启动定时中断
}
{
EA=1; //开总中断
ET0=1; //允许定时中断
TR0=1; //启动定时中断
}