微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机如何测信号发生器的频率

51单片机如何测信号发生器的频率

时间:10-02 整理:3721RD 点击:
用中断 定时器什么的 为什么我测的跟我仪器发出的信号频率不一样 附上原代码
long count=0;
int i=0,x=0;
uint shu[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar num;
void time1_int(void) interrupt 3
{
TH1=TL1=0;
TR1=1;
x++;
}
void time0_int(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==20)
{
  i=0;
  TR1=0;
  count=65536*x+TH1*256+TL1;
  x=0;
  TH1=TL1=0;
  TR1=1;
}
}
void show()
{
// LcdWriteCom(0x83); LcdWriteData(0x66);        Lcd1602_Delay1ms(5);                  //f
// LcdWriteCom(0x84); LcdWriteData(0x3d);        Lcd1602_Delay1ms(5);                  //=
LcdWriteCom(0x85); LcdWriteData(shu[count/100000]);            Lcd1602_Delay1ms(5);
LcdWriteCom(0x86); LcdWriteData(shu[(count/10000)%10]);        Lcd1602_Delay1ms(5);   
LcdWriteCom(0x87); LcdWriteData(shu[(count/1000)%10]);            Lcd1602_Delay1ms(5);
LcdWriteCom(0x88); LcdWriteData(shu[(count/100)%10]);            Lcd1602_Delay1ms(5);
LcdWriteCom(0x89); LcdWriteData(shu[(count/10)%10]);            Lcd1602_Delay1ms(5);  
LcdWriteCom(0x8a); LcdWriteData(shu[ count%10] );                Lcd1602_Delay1ms(5);         
// LcdWriteCom(0x83); LcdWriteData(0x48);        Lcd1602_Delay1ms(5);                  //H
// LcdWriteCom(0x83); LcdWriteData(0x7a);        Lcd1602_Delay1ms(5);                  //Z
}
void main()
{
TMOD=0x51;
TH1=0X00;
TL1=0X00;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
LcdInit();
while(1)
{
          show();
        Lcd1602_Delay1ms(5);
}
}

1602显示没问题 大神们自动忽略 为什么显示的不对

你用定时器定时?真有才啊!
把定时器设置为输入捕获模式,就能测频率和脉冲宽度啦!

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

网站地图

Top