STC89C52单片机用两个定时器控制蜂鸣器的频率和输出时间间隔

题目

同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,
1k(hz)的方波。

遇到的问题

出现定时器紊乱的现象,这个时候需要把T1定时器的优先级设为高于T0优先级

具体代码如下:

#include <reg52.h>

typedef unsigned int unint;
typedef unsigned char uchar;

sbit beep = P1^5;
sbit led = P2^0;
uchar t1,bphz,times;

uchar code table[]=
{
	500,300,200,100,50,25,12,10
};

void init();

void main()
{
	init();

	while(1)
	{
		if(t1==30)
		{
			led = ~led;
			t1 = 0;
			times++;
			if(times==8)
			{times =0;}
			else
			{	bphz=table[times]*100;}
		}
	}
}

void init(){
	times =0;
	led = 0;
	bphz = table[0]*100;
	TMOD = 0x11;	

	TH1 = (65536-1000)/256;
	TL1 = (65536-1000)%256;
	TH0 = (65536-bphz)/256;
	TL0 = (65536-bphz)%256;
	
	EA = 1;
	ET1 = 1;
	TR1 = 1;
	ET0 = 1;
	TR0 = 1;
	PT1 = 1;//在这里设置优先级

}

void time0() interrupt 1
{
	TR0=0;
	TH0 = (65536-bphz)/256;
	TL0 = (65536-bphz)%256;
	beep = ~beep;
	TR0=1;
}

void time1() interrupt 3
{
	TR1 = 0;
	TH1 = (65536-10000)/256;
	TL1 = (65536-10000)%256;
	t1++;
	TR1 = 1;
}


  • 5
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值