关于51单片机定时器与蜂鸣器的小程序,出了点问题,求帮助,本人小白

题目是同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔2000MS依次输出1,10,50,100,200,400,800,1k(hz... 题目是
同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔2000MS依次输出1,10,50,100,200,400,800,
1k(hz)的方波。以下是本小白写的程序,但是用keil调试的时候所以变量都一动不动,只有T1在计时,请问大神们我的程序错在哪里,需要怎么改才能满足题目要求,虚心求教

#include <reg52.h>
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
uint t,freq,tt;
uchar temp;
uchar code table[]={10000,1000,200,100,500,250,125,10};
sbit beep = P2^0;
void main ()
{

while(1);
{
EA = 1;//开总中断
ET1 = 1;//允许定时或计数器T1中断
ET0 = 1; //允许定时或计数器T0中断
TMOD =0x11;//设置定时器T1与T0工作方式1
TR1 = 1; //启动定时器1
TR0 = 1;//启动定时器0
TH0=(65536-54)/256;
TL0=(65536-54)%256;
TH1=(65536-54254)/256;
TL1=(65536-54254)%256;//设置50毫秒一次中断

}

}
void duan0() interrupt 1
{

TH0=(65536-54)/256;
TL0=(65536-54)%256;//设置50微秒一次中断
tt++;

if(tt=table[freq])
{
tt=0;
temp=beep;
temp!=temp;
beep=temp;
}

}
void duan1() interrupt 3 //定时器1中断用来产生2000毫秒秒时间定时
{

TH1=(65536-54254)/256;
TL1=(65536-54254)%256;//设置50毫秒一次中断
t++;
if(t == 40)
{ET0= 0 ;
tt=0;
freq++;
TH0=(65536-54)/256;
TL0=(65536-54)%256;
beep=1;
t = 0;

}

}
展开
 我来答
5922771321
2016-11-02 · TA获得超过1438个赞
知道小有建树答主
回答量:1410
采纳率:100%
帮助的人:358万
展开全部
temp!=temp;这个应该这么写temp=~temp;,定时器初始化不用放while(1)里面,初始化一次就可以了
追问
谢谢了,我想了一晚上都没搞明白原来是这样啊
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式