学习51单片机时遇到问题,希望懂的人指教一下

2019-07-15 20:36发布

以下是我写的一个让蜂鸣器发出不同频率声音的程序,可是运行结果并不和我的想法相同,我查不出原因,希望大神指教!我的预想:从第一个频率运行到最后一个频率,再从头开始重复运行
运行结果:运行到最后一直重复最后一个频率的声音

#include <reg52.h>
#define uint unsigned int
sbit beep=P2^3;
uint t0,t1,num;
void init();
void main()
{
        init();
        while(1);
}

void init()
{
        num=46080;
        TMOD=0x11;
        TH0=(65536-num)/256;
        TL0=(65536-num)%256;
        TH1=(65536-46080)/256;
        TL1=(65536-46080)%256;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=1;
        TR1=1;
}

void f() interrupt 1
{
        TH0=(65536-num)/256;
        TL0=(65536-num)%256;
        t0++;
        if(t1<40)//输出频率为1Hz的方波
        {
                if(t0==10)
                {
                        t0=0;
                        num=46080;
                        beep=~beep;
                }
        }
        if(t1>=40&&t1<80)//输出频率为10Hz的方波
        {
                t0=0;
                num=46080;
                beep=~beep;
        }
        if(t1>=80&&t1<120)//输出频率为50Hz的方波
        {
                t0=0;
                num=9216;
                beep=~beep;
        }
        if(t1>=120&&t1<160)//输出频率为100Hz的方波
        {
                t0=0;
                num=4608;
                beep=~beep;
        }
        if(t1>=160&&t1<200)//输出频率为200Hz的方波
        {
                t0=0;
                num=2304;
                beep=~beep;
        }
        if(t1>=200&&t1<240)//输出频率为400Hz的方波
        {
                t0=0;
                num=1152;
                beep=~beep;
        }
        if(t1>=240&&t1<280)//输出频率为800Hz的方波
        {
                t0=0;
                num=576;
                beep=~beep;
        }
        if(t1>=280&&t1<320)//输出频率为1000Hz的方波
        {
                t0=0;
                num=288;
                beep=~beep;
        }

}

void t() interrupt 3//定时器1中断用来产生2s时间定时
{
        TH1=(65536-46080)/256;
        TL1=(65536-46080)%256;
        t1++;
        if(t1==320)
        {
                t1=0;
                num=46080;
        }
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。