关于51定时器的小问题求教

2019-03-24 19:52发布

题目是:同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms输出1k(hz)的方波。
我的代码是:#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint t1=0,t2=0;
sbit beep=P3^6;
void main()
{

TMOD=0x11;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
while(1);

}

void BEEP() interrupt 1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
t1++;

if(t1==1)
{
beep=0;
}

if(t1==2)
{
beep=1;t1=0;
}

}


void time() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t2++;
if(t2==6)
{
beep=0;
t2=0;
}

}

请各位大大帮我看看错在哪,有劳了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
zhangdaoyu
1楼-- · 2019-03-25 02:00

用个一定时器就可以啦

void BEEP() interrupt 1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
t1++;

if(t1==600)
{
beep=1;

t1 = 0;
}

else

{
beep=0;
}
这样写应该对  你试试吧

王囧囧Orz
2楼-- · 2019-03-25 04:39
谢谢~
t1=0~599时 beep=0; t1=600时 beep=1,t1被清零。这样产生的应该是个尖脉冲吧,应该不能实现
zhangdaoyu
3楼-- · 2019-03-25 09:57
你的题的意思是不是每隔300ms输出一个0.5ms的脉冲信号吗?还是300ms以后便产生方波,以后一直是这样的方波
王囧囧Orz
4楼-- · 2019-03-25 15:08
每隔300MS输出 1HZ方波 方波持续300MS
zhangdaoyu
5楼-- · 2019-03-25 16:38
void time() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t2++;
if(t2==6)
{
beep=0;
t2=0;
ET0 = ~ET0;
}

}
这次应该可以,在300ms的定时里,让定时器0的中断取反
xu__changhua
6楼-- · 2019-03-25 20:16
 精彩回答 2  元偷偷看……

一周热门 更多>