2014-12-29 4 views
0

전자 카드 (8051 마이크로 컨트롤러가있는 Atmel 카드)에있는 포트가 있습니다. 이 포트 이름은 p3_0입니다. 포트는 '1'또는 '0'논리를 얻습니다.주파수를 읽는 방법을 알아야합니다.

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

저는 8051 (실제로는 원래의 C입니다)에 C를 사용해야하고 빈도를 알 수있는 코드를 작성해야합니다. 마침내 나는 단지 char array[];을 인쇄하는 것으로 알고있는 LCD에 그것을 인쇄 할 필요가 있기 때문에 char 배열로 주파수가 필요합니다. int number, 'count'를 char array [];으로 변환하는 "itoa"함수를 사용합니다. 주파수는 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'이 세어지고 (주파수가 무엇인지를 계산하는) 시간을 결정할 것입니다.

질문 : 주파수가 정확히 얼마나되는지 정확히 알 수 있습니까?

"주파수에서 가져 가라."라고 계산할 때 달 레이가있는 것도 있습니다. 어떻게 해결할 수 있습니까?

여기에 코드를 입력 해 주신 모든 분들께 감사드립니다 !! 정말 도움을 주셔서 감사합니다!, 고맙습니다!

+0

답변이 있으십니까? 부디?! –

답변

0

주파수를 측정하는 논리입니다. 8051은 2 개의 타이머/카운터를 가지고 있으며 하나는 타이머로 구성하고 다른 하나는 카운터로 구성하고 카운터 핀에 주파수 입력을 제공 한 다음 카운터와 타이머를 동시에 시작합니다 (어쨌든 their'll은 타이머를 활성화하는 데 1 기계주기 지연이 될 수 있지만 계산으로 보정하십시오.) 모듈이 저주파수를 측정 할 수 있도록 적절한 값으로로드 카운터를 계산하기 전에. 카운터 오버플로가 타이머를 멈추고 no를 알면. 카운트 및 경과 시간은 주파수를 계산할 수 있습니다. 희망이 논리가 작동합니다.

관련 문제