微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 学习51单片机时遇到问题,希望懂的人指教一下

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

时间:10-02 整理:3721RD 点击:
以下是我写的一个让蜂鸣器发出不同频率声音的程序,可是运行结果并不和我的想法相同,我查不出原因,希望大神指教!我的预想:从第一个频率运行到最后一个频率,再从头开始重复运行
运行结果:运行到最后一直重复最后一个频率的声音
#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;
        }
}

是不是刚开始两个中断时间太近了,导致定时器0一直优先定时器1一直没机会执行

可是第一遍执行没有问题啊!是从第一个频率逐个执行到最后一个的,只是到了最后一个就不返回前面的了,一直发出最后一个频率的声音

上一篇:微机原理
下一篇:新手请教个问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top