应该乘以2才能得到一个周期,但是我乘以4后才能得到正确结果,为什么呢,程序如下: void main() { initlcd();//液晶显示初始化 CT_init();//定时计数器初始化 EA=1;//开总中断 EX0=1;//允许外部中断 IT0=1;//设置外部中断方式为下降沿触发 ... 应该乘以2才能得到一个周期,但是我乘以4后才能得到正确结果,为什么呢,程序如下:
void main()
{
initlcd();//液晶显示初始化
CT_init();//定时计数器初始化
EA=1;//开总中断
EX0=1;//允许外部中断
IT0=1;//设置外部中断方式为下降沿触发
P3=0xff;
while(1)
{
t0=u*65536+x;//计算脉冲时间宽度
f=1000000/(4*t0);//计算频率
c=f*100;//计算结果逐位保存
a[9]=c%10+48;
a[8]=(c/10)%10+48;
c=f;
a[6]=c%10+48;
a[5]=(c/10)%10+48;
a[4]=(c/100)%10+48;
a[3]=(c/1000)%10+48;
a[2]=(c/10000)%10+48;
write_com(0x80);
for(i=0;i<=11;i++)
{
write_data(a[i]);
delay(10);
}
}
}
void CT_init()//定时计数器初始化
{
TMOD=0x99;//GATE=1,T0工作在方式1,定时方式
TH0=0;//定时计数器初值清零
TL0=0;
TR0=1;//TR0置位,此时定时计数器的启动有INT0引脚电平决定
ET0=1;//开中断
}
void ITC0() interrupt 0//外部中断0服务程序
{
u=m;//读定时计数器0溢出次数
m=0;//溢出次数清零
x=TH0*256+TL0;//读定时计数器0当前值
TH0=0;//定时计数器0清零
TL0=0;
}
void TIME0() interrupt 1//定时计数器0溢出中断
{
m++;//溢出次数加1
}
不知你测的是什么波形,为什么要除以2
若是方波,不用除以2
是交流电整流后半波变全波?是要除以2
若是STC的非1T 单片机,下载程序时 有6T和12T选项,若选6T,定时器定时时间就减小一半
实测频率就高了
STC有一个版本的下载软件有问题,6T应该是倍速,结果写成了12T是倍速