51单片机中用定时器怎么样控制频率

同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔2s依次输出 1,10,50,100,200,400,800, 1k(hz)的方波? 设晶振频率为12MHz。 */ /*********************************************************/ #include
//52单片机头文件 #include
//包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 sbit beep=P2^3; uchar tt; uint fre,flag; void main() //主函数 { fre=50000; beep=0; TMOD=0x11;//设置定时器0,定时器1为工作方式1 TH0=(65536-fre)/256; TL0=(65536-fre)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1;//开总中断 ET0=1;//开定时器0中断 ET1=1; TR1=1; TR0=1;//启动定时器0 while(1);//等待中断产生 } void timer0() interrupt 1 //定时器0中断 { TR0=0; //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失 TH0=(65536-fre)/256; TL0=(65536-fre)%256; tt++; if(flag<40) tt="0;" fre="50000;" beep="~beep;" flag="">=40&&flag<80) tt="0;" fre="50000;" beep="~beep;" flag="">=80&&flag<120) tt="0;" fre="10000;" beep="~beep;" flag="">=120&&flag<160) tt="0;" fre="5000;" beep="~beep;" flag="">=160&&flag<200) tt="0;" fre="2500;" beep="~beep;" flag="">=200&&flag<240) tt="0;" fre="1250;" beep="~beep;" flag="">=240&&flag<280) tt="0;" fre="625;" beep="~beep;" flag="">=280&&flag<320) tt="0;" fre="312;" beep="~beep;" flag="">=320&&flag<360) { tt=0; fre=156; beep=~beep; } TR0=1; } void timer1() interrupt 3 //定时器1中断用来产生2秒时间定时 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; flag++; if(flag==360) { flag=0; fre=50000; } } ········不同频率之间是怎样选取的,,??单片机初学者求解答

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
uchar num=0,times=0;
uint flag,tt;
uint freq[]={4000,400,80,40,20,10,5,4}; //1Hz~1KHz
void main() //主函数
{
beep=0;
TMOD=0x12;//设置定时器0,定时器1为工作方式1
TH0=(256-125);
TL0=(256-125);
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR1=1;
TR0=1;//启动定时器0
while(1);//等待中断产生
}
void timer0() interrupt 1 //定时器0中断
{
tt++;
if(tt>=freq[num])
{
tt=0;
beep=~beep;
}
}
void timer1() interrupt 3
{
times++;
if(times>=40)
{
times=0;
num++;
num&=8;
}
}追问

前两天有事去了,,很感谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-13
改变定时器的初值,就可以改变输出方波的频率追问

我知道是改变初值,但是题目不是只要求改变八个频率吗??程序里面到了800Hz了,就到1.6KHZ,,3.2KHZ了,,不是还要求1KHZ的吗?怎么没有,,可能问题有点幼稚,毕竟是初学的,,很感谢了

追答

你的程序太乱了,没法看

你再整理一下吧