我需要知道如何读取频率

时间:2014-12-29 21:31:13

标签: frequency atmel 8051

我有电子卡上的端口(带有8051微控制器的Atmel卡)。这个端口名为p3_0。端口得到'1'或'0'逻辑。

   1     0      1     0
'''''''     ''''''''     
'     '     '      '
'     '''''''      ''''''      And so on....

我需要将C用于8051(实际上是原始C)并编写一个能够知道频率是多少的代码。最后我需要char数组中的频率因为我需要将它打印到只知道打印char array[];的LCD。我使用“itoa”函数将int数字,'count'转换为char array [];。频率可以在16Hz到90Hz之间。

这就是我所做的:

void main(void)
{
   init_lcd()///Print command 
   ;print_lcd(1,"The Project"); //Print command 
   ;print_lcd(2,"is starting:"); //Print command 
   for(i=0; i<20; i++){delay(1000);delay(1000);delay(1000);}
   for(i=0; i<20; i++){delay(1000);delay(1000);delay(1000);}

 while(1)
   {
    count = 0;
     while(P3_0 == 1)
       {
         count ++;
           init_lcd() //Print command 
           ;print_lcd(1,"Counting..."); //Print command 
              for(i=0; i<1; i++){delay(1000);delay(1000);delay(1000);}//delay...
       }

  init_lcd()///Print command 
   ;print_lcd(1,"Done Counting!"); //Print command 
   for(i=0; i<1; i++){delay(1000);delay(1000);delay(1000);}

   ;print_lcd(2,itoa(count)); //Print command 
   for(i=0; i<20; i++){delay(1000);delay(1000);delay(1000);}
   for(i=0; i<20; i++){delay(1000);delay(1000);delay(1000);}
   }
}

我的想法是检查端口,我每次都计算它为'1'。最后,我将决定每个'1'计数的时间和(计算频率是什么)

问题是:我如何知道有多少人在频率上,我可以怎样?

当计算“从频率中取出”时,还有dalay的东西。 我该如何解决?

感谢所有阅读此处输入代码的人! 我非常感谢任何帮助! 感谢所有人!

1 个答案:

答案 0 :(得分:0)

它们是衡量频率的逻辑。 8051有2个定时器/计数器,配置一个作为定时器,另一个作为计数器,并将频率输入提供给计数器引脚,然后同时启动计数器和定时器(无论如何,它们在激活定时器时会延迟1个机器周期,但是你可以通过计算补偿它,在此负载计数器之前具有合适的值,以便您的模块可以测量低频率。当计数器溢出停止计时器并且不知道没有。你可以计算频率的计数和时间。 希望这种逻辑有效。