解惑

2019-07-15 14:30发布

/*******************************/
/*同时用两个定时器控制蜂鸣器发声,
T0控制频率,T1控制同个频率持续的
时间,间隔两秒依次输出11050100
200,400800?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;
}
}



哪位大神帮我讲解一下这个程序
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
张大猛
1楼-- · 2019-07-15 16:11
 精彩回答 2  元偷偷看……
张大猛
2楼-- · 2019-07-15 17:33
你看一下定时器1的中断  你就会明白是怎么搞出来数字的啦    50000跟flag    flag是用来形成方波的
wr12306
3楼-- · 2019-07-15 20:27
张大猛 发表于 2016-4-8 12:31
这个程序是有问题的   定时器1的TL1不是TL0   还有主函数写的也不规范    不知运行结果如何   不过应该会出错

那个TL0是手误  暂时不要管  我想知道那些个标的数字怎么算出来的  还有如果想将程序写的更规范的话 大神给指导一下  或是推荐本书看看也行 给指条明路
wr12306
4楼-- · 2019-07-16 01:08
张大猛 发表于 2016-4-8 12:34
你看一下定时器1的中断  你就会明白是怎么搞出来数字的啦    50000跟flag    flag是用来形成方波的

我根据这个定时时间反推了一下  验证是正确的  但还是模糊  在给出晶振频率以及要求的频率这两个条件下 就有点蒙圈了  大神能给讲解一下不
张大猛
5楼-- · 2019-07-16 06:13
wr12306 发表于 2016-4-8 16:59
那个TL0是手误  暂时不要管  我想知道那些个标的数字怎么算出来的  还有如果想将程序写的更规范的话 大神给指导一下  或是推荐本书看看也行 给指条明路

郭天祥的十天学会单片机   那本书的知识丰富   够用
张大猛
6楼-- · 2019-07-16 09:39
 精彩回答 2  元偷偷看……

一周热门 更多>