单片机 程序求助:用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint flag=0;
uint fre;
uchar tt=0;
sbit beep=P2^3;
void main()
{
beep=0;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65535-50000)%256;
TH1=(65536-fre)/256;
TL1=(65535-fre)%256;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
while(1) ;
}
void time1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65535-50000)%256;
flag++;
if(flag==320)
{
flag=0;
}
}
void time0() interrupt 1
{
TR0=0;
TH0=(65536-fre)/256;
TL0=(65535-fre)%256;
if (flag<40)
{
tt++;
if(tt==10)
{
tt=0;
fre=50000;
beep=~beep;
}
}
if(flag>=40&&flag<80)
{
fre=50000;
beep=~beep;
}
if(flag>=80&&flag<120)
{
fre=10000;
beep=~beep;
}
if(flag>=120&&flag<160)
{
fre=5000;
beep=~beep;
}
if(flag>=160&&flag<200)
{
fre=2500;
beep=~beep;
}
if(flag>=200&&flag<240)
{
fre=1250;
beep=~beep;
}
if(flag>=240&&flag<280)
{
fre=625;
beep=~beep;
}
if(flag>=280&&flag<320)
{
fre=500;
beep=~beep;
}
TR0=1;
}
我觉得此程序中T1的优先级应高于T0的优先级,先控制持续时间再来控制频率,怎么设置优先级呢?是只要把TR0=1这句话放在TR1=1前面吗?

不是,优先级是有一个专用的寄存器IP控制的,里面有5个中断的优先级设置,你这么写:
PT1 = 1;
PT0 = 0;
这样,就是定时器1的优先级高于定时器0
给你个参考资料
http://wenku.baidu.com/view/4f3738f64693daef5ef73da6.html
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-02
你是新手吧,连书本都没看全,优先级是IP控制的