单片机C语言程序,大神快来解释,为什么灯不亮,蜂鸣器不响?
#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#definet1_h(65536-5000...
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define t1_h (65536-50000)/256
#define t1_l (65536-50000)%256
#define t0_h (65536-1000)/256
#define t0_l (65536-1000)%256
sbit beep=P2^3;//蜂鸣器
sbit D1=P1;//灯
uint f0,f1;//标志
void init()//初始化
{
TMOD=0x11;
TH1=t1_h;
TL1=t1_l;
TH0=t0_h;
TL0=t0_l;
EA=1;
ET0=1;
ET1=1;
}
void inittro()//初始化定时器t0
{
TR0=0;
TH0=t0_h;
TL0=t0_l;
f0=0;
}
void main()
{
init();
TR1=1;
while(1)
{
if(f1<100)//1ms
{
TR0=1;
if(f0==1)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<200&&f1>=100)//5ms周期
{
TR0=1;
if(f0==5)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<300&&f1>=200)//10ms周期
{
TR0=1;
if(f0==10)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<400&&f1>=300)//50ms周期
{
TR0=1;
if(f0==50)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<500&&f1>=400)//100ms周期
{
TR0=1;
if(f0==100)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<600&&f1>=500)//500ms周期
{
TR0=1;
if(f0==500)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<700&&f1>=600)//1000ms周期
{
if(f1==700)
f1=0;
else
{
TR0=1;
if(f0==1000)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
}
inittro();
}
}
void timer0() interrupt 1
{
TH0=t0_h;//赋初值
TL0=t0_l;
f0++;
}
void timer1() interrupt 3
{
TH1=t1_h;//赋初值
TL1=t1_l;
f1++;
} 展开
#define uchar unsigned char
#define uint unsigned int
#define t1_h (65536-50000)/256
#define t1_l (65536-50000)%256
#define t0_h (65536-1000)/256
#define t0_l (65536-1000)%256
sbit beep=P2^3;//蜂鸣器
sbit D1=P1;//灯
uint f0,f1;//标志
void init()//初始化
{
TMOD=0x11;
TH1=t1_h;
TL1=t1_l;
TH0=t0_h;
TL0=t0_l;
EA=1;
ET0=1;
ET1=1;
}
void inittro()//初始化定时器t0
{
TR0=0;
TH0=t0_h;
TL0=t0_l;
f0=0;
}
void main()
{
init();
TR1=1;
while(1)
{
if(f1<100)//1ms
{
TR0=1;
if(f0==1)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<200&&f1>=100)//5ms周期
{
TR0=1;
if(f0==5)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<300&&f1>=200)//10ms周期
{
TR0=1;
if(f0==10)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<400&&f1>=300)//50ms周期
{
TR0=1;
if(f0==50)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<500&&f1>=400)//100ms周期
{
TR0=1;
if(f0==100)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<600&&f1>=500)//500ms周期
{
TR0=1;
if(f0==500)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
inittro();
if(f1<700&&f1>=600)//1000ms周期
{
if(f1==700)
f1=0;
else
{
TR0=1;
if(f0==1000)
{
f0=0;
beep=~beep;
D1=~D1;
}
}
}
inittro();
}
}
void timer0() interrupt 1
{
TH0=t0_h;//赋初值
TL0=t0_l;
f0++;
}
void timer1() interrupt 3
{
TH1=t1_h;//赋初值
TL1=t1_l;
f1++;
} 展开
2个回答
展开全部
你好,
首先问个问题,你这程序是要实现什么功能。
然后,不管你要实现什么,先要明白一点,定时器1是每50ms中断一次,也就是f1要每50ms自增一次,在
if(f1<100)//1ms
{
TR0=1;
if(f0==1)
{
f0=0;
beep=~beep;
D1=~D1;
}
}的条件下,就是在50s内,都只会执行这个if语句;每执行一次都会进入这个if,启动定时器0,而定时器0是每1ms中断一次,但执行这个if里边的程序只需要几十微妙,也就是说,还没等f0自增,这些程序就执行完了,而在这个程序执行完了之后,你又对定时器0进行了初始化,这样就导致在时间无限长的条件下,能进入每一个if(f1<)语句,但是不能进入if(f0==?)这个语句,从而LED不亮,蜂鸣器不响。
有不懂的地方随时回复我。
希望我的回答能帮助到你。
首先问个问题,你这程序是要实现什么功能。
然后,不管你要实现什么,先要明白一点,定时器1是每50ms中断一次,也就是f1要每50ms自增一次,在
if(f1<100)//1ms
{
TR0=1;
if(f0==1)
{
f0=0;
beep=~beep;
D1=~D1;
}
}的条件下,就是在50s内,都只会执行这个if语句;每执行一次都会进入这个if,启动定时器0,而定时器0是每1ms中断一次,但执行这个if里边的程序只需要几十微妙,也就是说,还没等f0自增,这些程序就执行完了,而在这个程序执行完了之后,你又对定时器0进行了初始化,这样就导致在时间无限长的条件下,能进入每一个if(f1<)语句,但是不能进入if(f0==?)这个语句,从而LED不亮,蜂鸣器不响。
有不懂的地方随时回复我。
希望我的回答能帮助到你。
宿兴电子
2024-10-18 广告
2024-10-18 广告
联系我们蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H...
点击进入详情页
本回答由宿兴电子提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询