//晶振是11.0592Mhz
#include <reg52.h>
#define s8 signed char
#define u8 unsigned char
#define u16 unsigned int
sbit D1 = P0^0;//位定义LED0
u16 tmr0_value = 1000;//定时器0的初值
void init_tmr0(void);
int main(void)
{
init_tmr0();//初始化定时器0
while (1);
return 0;
}
void init_tmr0(void)
{
TMOD = 0x01;//设置tmr0为工作方式1
EA = 1;//开总中断
ET0 = 1;//开定时器0中断
TH1 = (65536 - tmr0_value) >> 8;//得到高8位
TH0 = (65536 - tmr0_value) & 0x00ff;//得到低8位
TR0 = 1;//启动定时器0
return;
}
//注:定时器溢出后若没重装初值就重新从0开始计数(0—65535)
//计数到65536就溢出!
void tmr0(void) interrupt 1//定时器0中断
{
TR0 = 0;//关闭定时器0
//重新给定时器0赋初值
TH1 = (65536 - tmr0_value) >> 8;
TH0 = (65536 - tmr0_value) & 0x00ff;
D1 = !D1;//D1的闪烁速度和tmr0_value的值不匹配
TR0 = 1;//启动定时器0
return;
}
现象:tmr0_value 取值为25000时,人眼可以明显地看见D1的闪烁!
困惑:大家看红色代码tmr0_value = 20000时,人眼是看不到D1闪烁的;当tmr0_value = 30000时,人眼能微微看见D1闪烁,这当然是符合情理的,但当tmr0_value = 25000时,D1的闪烁变的非常明显,这真是好奇怪呃!
另外:tmr0_value 取值为15000、5000时,也能看见D1强烈的闪烁!高人解答~ |