久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2942|回復: 1
收起左側

基于msp430F149單片機的頻測量+最高頻率12MH

[復制鏈接]
ID:896677 發(fā)表于 2021-12-12 10:37 | 顯示全部樓層 |閱讀模式
最高可采集到12MHZ,經過測試精度極高,可以精確到小數(shù)點后三位

單片機源程序如下:
  1. /*********************************************************************
  2. 程 序 名:基于msp430F149單片機的頻率計
  3. 版   本 :PLj
  4. 時   間 :2015.11.17~2015.11.24
  5. 班   級        :電子1302班
  6. 功   能 :頻率計                                                                       
  7. 使用說明:被測信號輸入p1.0口;LCD12864顯示;頻率測量范圍:1hz~12.5MHZ;
  8.           1hz~10MHZ 誤差萬分之一以內;
  9. *********************************************************************/
  10. #include <msp430x14x.h>
  11. #include "set_clock.h"
  12. #include "lcd12864.h"
  13. #include "delay.h"

  14. #define uchar unsigned char
  15. #define uint  unsigned int

  16. uchar xianshi1[]; //  定義顯示數(shù)組
  17. long int pinlvzhi;  //  頻率計數(shù)常量
  18. int number;         //  中斷計數(shù)常量
  19. uint old_pinlvzhi,new_pinlvzhi;// 計數(shù)器原始值、計數(shù)器更新值

  20. void set_TimerA_TACTL(void);  //設置定時器A的寄存器TACTL,TAR清零,開啟溢出中斷,使用外部引腳TACLK輸入。
  21. void fenchai();               //把頻率的數(shù)值分拆放入顯示數(shù)和去掉高位為0的數(shù)值

  22. /*********************************************************************
  23. 函數(shù)名:void main()
  24. 功能:  主函數(shù);                                                                               
  25. *********************************************************************/
  26. void main()
  27. {
  28.     WDTCTL=WDTPW+WDTHOLD;
  29.     set_clock();                 //設置MSP430工作時鐘;
  30.     lcd12864_init();             //LCD12864初始化函數(shù);
  31.     set_TimerA_TACTL();          //設置定時器A的寄存器TACTL,TAR清零,開啟溢出中斷,使用外部引腳TACLK輸入。
  32.     number=0;                    //中計數(shù)常量初始化;
  33.     P1DIR=0x00;                  //P1 I/O模式為輸入;
  34.     P1SEL=0xff;                  //P1 I/O選擇第二功能;外部引腳輸入;
  35.     IE1 |= WDTIE;                //開啟看門狗定時器中斷;
  36.     _EINT();                     // 總中斷開
  37.     lcd12864_display(1,3,"測頻率");   
  38.     TACTL|=MC_2;                //連續(xù)計數(shù)模式 ;
  39.     Delay_ms(1);                //給MCU反應時間;
  40.     WDTCTL=0x5a1c;              //看門狗定時器定時一秒(WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL);
  41.     old_pinlvzhi=TAR;           //讀取TAR計數(shù)器原始值;
  42.     while(1)
  43.     {
  44.         fenchai();
  45.         lcd12864_display(2,1,xianshi1);
  46.     }
  47. }

  48. /*********************************************************************
  49. *函數(shù)名:void set_TimerA_TACTL(void)
  50. *功  能:設置Timer_A的TACTL控制寄存器、
  51. **********************************************************************/
  52. void set_TimerA_TACTL(void)
  53. {  
  54.   TACTL|=TACLR;           //Timer_A計數(shù)器清零位
  55. /********************  選擇Timer_A的輸入時鐘源  *********************/
  56.    TACTL|=TASSEL_0;        //Timer_A時鐘源選擇:TACLK(使用外部引腳輸入)
  57.     TACTL|=TAIE;            //Timer_A溢出中斷使能允許位
  58. }
  59. /*********************************************************************/


  60. /*********************************************************************
  61. *函數(shù)名:void fenchai()
  62. *功  能:把頻率的數(shù)值分拆放入顯示數(shù)和去掉高位為0的數(shù)值
  63. **********************************************************************/
  64. void fenchai()
  65. {          xianshi1[0]=pinlvzhi/10000000+'0';  //頻率值高位
  66.           xianshi1[1]=pinlvzhi/1000000%10+'0';
  67.           xianshi1[2]=pinlvzhi/100000%10+'0';
  68.           xianshi1[3]=pinlvzhi/10000%10+'0';
  69.           xianshi1[4]=pinlvzhi/1000%10+'0';
  70.           xianshi1[5]=pinlvzhi/100%10+'0';
  71.           xianshi1[6]=pinlvzhi/10%10+'0';
  72.           xianshi1[7]=pinlvzhi%10+'0';
  73.           xianshi1[8]='H';                    //頻率值低位
  74.           xianshi1[9]='z';                    //頻率值低位
  75.           xianshi1[10]=0x20;  
  76.           xianshi1[11]=0x20;         
  77.          
  78.           if(xianshi1[0]=='0')                  //去掉最高位的0
  79.         {
  80.                 xianshi1[0]=0x20;
  81.                 if(xianshi1[1]=='0')
  82.                 {
  83.                         xianshi1[1]=0x20;
  84.                         if(xianshi1[2]=='0')
  85.                         {
  86.                                 xianshi1[2]=0x20;
  87.                                 if(xianshi1[3]=='0')
  88.                                 {
  89.                                         xianshi1[3]=0x20;
  90.                                         if(xianshi1[4]=='0')
  91.                                         {
  92.                                                 xianshi1[4]=0x20;
  93.                                                 if(xianshi1[5]=='0')
  94.                                                 {
  95.                                                         xianshi1[5]=0x20;
  96.                                                         if(xianshi1[6]=='0')
  97.                                                        {
  98.                                                             xianshi1[6]=0x20;
  99.                                                         
  100.                                                        }
  101.                                                 }
  102.                                         }
  103.                                 }
  104.                         }
  105.                 }
  106.         }  
  107. }
  108. /*********************************************************************/

  109. /********************************************************************
  110. *函數(shù)名:void set_TimerA_TACTL(void)
  111. *功  能:設置Timer_A的TACTL控制寄存器、
  112. ***************  TimerA CCR2的捕獲中斷  ****************************/
  113. #pragma vector=TIMERA1_VECTOR
  114. __interrupt void TimerA_I(void)
  115. {
  116.     switch(TAIV)
  117.         {
  118.             case 2:
  119.                     break;
  120.             case 4:
  121.                     break;
  122.             case 10:
  123.                     number++;//中斷計數(shù)常量溢出加一
  124.                     break;
  125.         }
  126. }
  127. /********************************************************************/


  128. /********************************************************************
  129. 看門狗中斷服務子程序
  130. ********************************************************************/      
  131. #pragma vector = WDT_VECTOR
  132. __interrupt void WDT_IRQ(void)
  133. {
  134.     new_pinlvzhi=TAR;//得到計數(shù)器計數(shù)后的值
  135.     if(number==0)////中斷計數(shù)常量溢小于1
  136.     {
  137.        pinlvzhi=new_pinlvzhi-old_pinlvzhi;//得到頻率值=計數(shù)器現(xiàn)在的值-計數(shù)器原始值
  138.     }
  139.     else
  140.     {
  141.       pinlvzhi=new_pinlvzhi+number*65536-old_pinlvzhi;//得到頻率值;
  142.     }   
  143.     number=0; //清零;
  144.     old_pinlvzhi=new_pinlvzhi;//把上一次計數(shù)器的計數(shù)值作為下一次的計數(shù)初值;
  145. }
  146. /*************************************END*******************************/
復制代碼

代碼下載: 代碼.7z (92.24 KB, 下載次數(shù): 18)

評分

參與人數(shù) 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:1027664 發(fā)表于 2022-5-18 20:47 | 顯示全部樓層
牛哇,寫的很整齊。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品日韩欧美一区二区三区 | 久久九精品 | 亚洲高清在线 | 亚洲一区二区三区视频免费观看 | 成人h视频在线观看 | 国产成人免费视频 | 欧美色999| 亚洲人成在线观看 | 亚洲高清在线 | 欧美成人影院在线 | 日韩久久中文字幕 | 欧美1区2区| 国产一区二区久久久 | 国产欧美精品一区二区三区 | 美女逼网站 | 亚洲免费人成在线视频观看 | 久久精品国产99国产精品 | 日韩精品久久久久久 | 日韩欧美中文字幕在线观看 | 午夜免费视频 | 一级高清视频 | 国产精品一区久久久 | 国产91中文| 亚洲人a | 久久精品国产免费一区二区三区 | 中文字幕在线观看一区 | 亚洲在线一区二区 | 天天爱爱网 | 国产精品呻吟久久av凹凸 | 欧美在线国产精品 | 亚洲h视频| 国产精品久久久久无码av | 亚州av在线 | 美女视频黄的免费 | 成人免费视频观看 | 免费国产视频在线观看 | 亚洲一区二区国产 | 一区二区福利视频 | 国产一区二区精品在线观看 | 日日干日日操 | 日屁视频 |