| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
貼一個(gè)很好的頻率計(jì)程序 | 
  
| 作者:wanglele 欄目:單片機(jī) | 
//能測(cè)1~20KHz的頻率 #include "iom8515v.h" #include "macros.h" #include "stdio.h" #pragma interrupt_handler timer1:4 #pragma interrupt_handler timer0:8 void delay(unsigned int t); /*顯示7段數(shù)碼管的字表0~9*/ #pragma data:code const unsigned CHAR digit[]={0x01,0x4f,0x12,0x06,0x4c,0x24,0x20,0x0f,0x00,0x04,0x08,0x60,0x31,0x42,0x30,0x38}; //const表示這個(gè)量在程序執(zhí)行的過(guò)程中不可變 /*顯示緩沖區(qū)*/ #pragma data:data unsigned CHAR ledbuff[]={0x01,0x01,0x01,0x01}; unsigned int count; //頻率測(cè)量計(jì)數(shù)變量 unsigned int timecount=20; //頻率測(cè)量閘門(mén)控制變量 void port_init(void); void delay(unsigned int t); void DISPLAY(void); void hextobcd(void); /********************* 初始化 **********************/ void port_init(void) { DDRA=0XFF; DDRB=0X1F; PORTA=0XFF; PORTB=0XFF; MCUCR=0X00; SREG|=0X80; //開(kāi)全局中斷 TIMSK=0X0a; //開(kāi)放T0溢出中斷和T1捕捉中斷 TCCR0=0X05; //CK/1024 TCCR1A=0X00; TCCR1B=0X80; //下降沿觸發(fā) TCNT0=0X3D; //(4M/1024)/195=50ms timecount=20; } /************************ 延遲時(shí)間函數(shù) *************************/ void delay(unsigned int t) { unsigned int i,j; for(i=0;i<t;i++) for(j=0;j<10;j++); } /************************* 五路動(dòng)態(tài)顯示掃描電路 **************************/ void DISPLAY(void) { unsigned CHAR i; for(i=0;i<5;i++) { PORTA=ledbuff[i]; //將顯示緩沖區(qū)數(shù)據(jù)送PORTA口 PORTB=(0x01<<i); //開(kāi)始顯示 delay(10); PORTB&=~(1<<i); //關(guān)閉顯示 } } /************************** 將數(shù)據(jù)轉(zhuǎn)換成LED七段碼 ***************************/ void hextobcd(void) { if(count<20000) { unsigned CHAR i,TEMP; for(i=0;i<5;i++) { TEMP=count%10; ledbuff[i]=digit[TEMP]; count=count/10; } } else ; } /************************** 主程序 ***************************/ void main(void) { port_init(); //初始化 count=0; do { DISPLAY(); } while(1); } /*************************************** T0溢出中斷,完成測(cè)量閘門(mén)控制和數(shù)字轉(zhuǎn)換 ****************************************/ timer0(void) { if(--timecount==0) { TIMSK=0X00; //stop interrupt hextobcd(); count=0; TIMSK=0X0a; //start interrupt timecount=20; } TCNT0=0X3D; } /**************************** T1捕捉中斷,完成脈沖計(jì)數(shù) *****************************/ timer1(void) { count++; }  | 
  
| 2樓: | >>參與討論 | 
| 作者: coke 于 2003/9/4 16:10:00 發(fā)布:
         收藏!  | 
  |
| 3樓: | >>參與討論 | 
| 作者: 音樂(lè)樂(lè)樂(lè) 于 2003/9/4 17:30:00 發(fā)布:
         程序很粗糙,不過(guò)還是鼓勵(lì)一下,呵呵  | 
  |
| 4樓: | >>參與討論 | 
| 作者: minghua 于 2003/9/5 10:22:00 發(fā)布:
         你的測(cè)頻精度有問(wèn)題 只能測(cè)到1赫茲啊 我的能測(cè)到0.01赫茲  | 
  |
| 5樓: | >>參與討論 | 
| 作者: yanyuliang 于 2003/9/5 12:26:00 發(fā)布:
         只是通用的程序 沒(méi)有用到avr 8515的icp 低頻精度不高 avr 計(jì)數(shù)可以測(cè)到 頻率的上限是clk/2  | 
  |
| 6樓: | >>參與討論 | 
| 作者: longwmy 于 2003/9/5 22:47:00 發(fā)布:
         怎么現(xiàn)在才貼? 我們上學(xué)期MCU課考試就考這個(gè),早貼就好了  | 
  |
| 7樓: | >>參與討論 | 
| 作者: xky183 于 2003/9/7 21:28:00 發(fā)布:
         minghua 那把你0.01的帖出來(lái)大家學(xué)習(xí)一下啊 期待中  | 
  |
| 8樓: | >>參與討論 | 
| 作者: 音樂(lè)樂(lè)樂(lè) 于 2003/9/8 12:51:00 發(fā)布:
         minghua:你的時(shí)間需要多長(zhǎng)?  | 
  |
| 9樓: | >>參與討論 | 
| 作者: 瘋子 于 2008/3/2 0:27:39 發(fā)布:
         頂呀!!!!!!!!太強(qiáng)了 
 
  | 
  |
  | 
    
 
  | 
  
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào)  |