/*******************************/
/*同时用两个定时器控制蜂鸣器发声,
T0控制频率,T1控制同个频率持续的
时间,间隔两秒依次输出1,10,50,100,
200,400,800?1000的方波,设晶振频率为12MHZ*/
/****************************************/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar tt;
uint fre,flag;
void main()
{
fre=50000;
beep=0;
TMOD=0x11;
TH0=(65536-fre)/256;
TL0=(65536-fre)/256;
TH1=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
while(1);
}
void T0_timer() interrupt 1
{
TR0=0;
TH0=(65536-fre)/256;
TL0=(65536-fre)/256;
tt++;
if(flag<40) 这里的40怎么算出来的
{
if(tt==10)
{
tt=0;
fre=50000;以及这里为什么是50000
beep=~beep;
}
}
if(flag>=40&&flag<80)这里的40 ,80怎么算出来的
{
tt=0;
fre=50000;
beep=~beep;
}
if(flag>=80&&flag<120)
{
tt=0;
fre=10000;这里的10000怎么算出来
beep=~beep;
}
if(flag>=120&&flag<160)这里的120 160怎么算出来
{
tt=0;
fre=5000;这里的5000怎么算出来
beep=~beep;
}
if(flag>=160&&flag<200)
{
tt=0;
fre=2500;这里的2500怎么算出来的
beep=~beep;
}
if(flag>=200&&flag<240)这里的200 240怎么算出来
{
tt=0;
fre=1250;这里的1250怎么算出来的
beep=~beep;
}
if(flag>=240&&flag<280)这里的240 280 怎么算出来的
{
tt=0;
fre=625;这里的625怎么算出来的
beep=~beep;
}
if(flag>=280&&flag<320)这里的280 320怎么算出来
{
tt=0;
fre=312;这里的312怎么算出来的
beep=~beep;
}
if(flag>=320&&flag<360)这里的320 360 怎么算出来的
{
tt=0;
fre=156;这里的156怎么算出来的
beep=~beep;
}
TR0=1;
}
void T1_timer() interrupt 3
{
TH1=(65536-50000)/256;
TL0=(65536-50000)%256;
flag++;
if(flag==360)
{
flag=0;
fre=50000;
}
}
哪位大神帮我讲解一下这个程序
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
那个TL0是手误 暂时不要管 我想知道那些个标的数字怎么算出来的 还有如果想将程序写的更规范的话 大神给指导一下 或是推荐本书看看也行 给指条明路
我根据这个定时时间反推了一下 验证是正确的 但还是模糊 在给出晶振频率以及要求的频率这两个条件下 就有点蒙圈了 大神能给讲解一下不
郭天祥的十天学会单片机 那本书的知识丰富 够用
一周热门 更多>