单片机c语言,这里的频率怎么算的,比如说,一赫兹的,程序取T=50000*10,那f=1/T也不是1hz啊

/*
1,10,50,100,200,400,800,1k(hz)
12MHz
*/
/*********************************************************/
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar t1;
uint T,t2;

void main()
{
T=50000;
beep=0;
TMOD=0x11;
TH0=(65536-T)/256;
TL0=(65536-T)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR1=1;
TR0=1;
while(1);

}

void timer0() interrupt 1
{
TR0=0;
TH0=(65536-T)/256;
TL0=(65536-T)%256;
t1++;
if(t2<40)
if(t1==10)//1hz
{
t1=0;
T=50000;
beep=~beep;
}
if(t2>=40&&t2<80)//10hz
{
t1=0;
T=50000;
beep=~beep;
}
if(t2>=80&&t2<120)//50hz
{
t1=0;
T=10000;
beep=~beep;
}
if(t2>=120&&t2<160)//100hz
{
t1=0;
T=5000;
beep=~beep;
}
if(t2>=160&&t2<200)
{
t1=0;
T=2500;
beep=~beep;
}
if(t2>=200&&t2<240)
{
t1=0;
T=1250;
beep=~beep;
}
if(t2>=240&&t2<280)
{
t1=0;
T=625;
beep=~beep;
}
if(t2>=280&&t2<320)
{
t1=0;
T=312;
beep=~beep;
}
if(t2>=320&&t2<360)
{
t1=0;
T=156;
beep=~beep;
}
TR0=1;
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t2++;
if(t2==360)
{
t2=0;
T=50000;
}
}
还有为什么进中断要关TR0,TR0关了那这个中断还怎么起作用

昨天回答过这个问题了,当时只改了数据,这里说明一下,定时器初值是-50000时,定时时间是50毫秒,中断10次是500毫秒,产生一个脉冲需要需要2个10次,脉冲周期是1000毫秒,即1秒,所以频率为1Hz。其余依次类推:
10Hz:-5000
50Hz:-1000
100Hz:-500
200Hz:-250
400Hz:-125
800Hz:-62
1000Hz:-50
2000Hz:-25追问

T没有初始化,怎么触发中断??

温馨提示:答案为网友推荐,仅供参考
相似回答