欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1804|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

msp430測(cè)頻(ps:來自論壇大佬,但具體出處忘記了)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:286064 發(fā)表于 2018-5-20 09:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
測(cè)頻(ps:來自論壇大佬,但具體出處忘記了,若涉及侵權(quán)立馬刪)

單片機(jī)源程序如下:

  1. #include "msp430f449.h"
  2. #include "string.h"
  3. #include "stdio.h"
  4. #include "time.h"
  5. #include "lcd.c"
  6. #define CPUF ((double)7995392)
  7. #define delay_us(x) __delay_cycles((long)(CPUF*(double)x/1000000))
  8. #define delay_ms(x) __delay_cycles((long)(CPUF*(double)x/1000))
  9. #define delay_s(x) __delay_cycles(CPUF*x)

  10. long Cap_num=0;
  11. int Cap_star=0;
  12. int Cap_Ns=0;
  13. long OV_Ns=0;
  14. long Ns=0;
  15. long Nx=0;
  16. long f=0;
  17. int flag_Capend;
  18. /*char str1[20]={"頻率: "};
  19. char str2[];
  20. char str3[]={"  HZ"};*/
  21. uchar lcd_buf[6]={0,0,0,0,0,0};


  22. void initclk()
  23. {

  24.   SCFI0|=FN_4;      
  25.   SCFQCTL=121;      //系統(tǒng)時(shí)鐘倍頻達(dá)到8M
  26.   FLL_CTL0=DCOPLUS+OSCCAP1;
  27. }


  28. int main( void )
  29. {
  30.   // Stop watchdog timer to prevent time out reset
  31.   WDTCTL = WDTPW + WDTHOLD;
  32.   initclk();  //時(shí)鐘初始化
  33.   lcd_init();
  34.   //Display_string(0,0,"是");
  35.   Display_string(3,0,"頻率:"); //先列后行才是對(duì)的,上面一行地址是錯(cuò)的;
  36.   //Display_string(10,1,"HZ");  //該顯示函數(shù)自動(dòng)從第0列開始 ,所以會(huì)被后來的數(shù)據(jù)覆蓋,有待解決
  37.    _EINT();   //開總中斷
  38.   Preset_gate();         //預(yù)置閘門
  39.   Cap_signal();          //捕獲被測(cè)信號(hào)
  40.    while(1)
  41.   {
  42.    if(flag_Capend==2)
  43.    {
  44.    _DINT();               //此處關(guān)總中斷防止計(jì)數(shù)值改變
  45.     Ns=Ns+OV_Ns*500;
  46.     f=Nx/(Ns/3980000);    //理論上應(yīng)是1/4M,但定時(shí)器的頻率達(dá)不到那么高
  47.    
  48.   /*  此種顯示方法會(huì)導(dǎo)致單片機(jī)運(yùn)行崩潰,是軟件原因還是程序原因不明。
  49.     sprintf(str2,"%1.f",f); //%1.f確定f的精度即位寬,以至于不會(huì)將str1[]填滿,導(dǎo)致str3[]裝不進(jìn)去
  50.     strcat(str1,str2);  //strcat函數(shù)將兩個(gè)字符數(shù)組連接起來
  51.     strcat(str1,str3);   
  52.     Display_string(0,0,str1);   //直接將數(shù)組內(nèi)的內(nèi)容顯示
  53. */
  54.     lcd_buf[0]=(uchar)(f/100000%10)+0x30;
  55.     lcd_buf[1]=(uchar)(f/10000%10)+0x30;
  56.     lcd_buf[2]=(uchar)(f/1000%10)+0x30;
  57.     lcd_buf[3]=(uchar)(f/100%10)+0x30;
  58.     lcd_buf[4]=(uchar)(f/10%10)+0x30;
  59.     lcd_buf[5]=(uchar)(f%10)+0x30;
  60.     Display_string(6,1,lcd_buf);
  61.   //  Display_char(7,1,'H');
  62. //   Display_char(8,1,'Z');
  63.     Cap_num=0;
  64.     OV_Ns=0;
  65.     flag_Capend=0;
  66.     TACCTL1|=CCIE;   
  67.     TACCTL2|=CCIE;
  68.     TACCTL2|=TAIE;
  69.     TBCCTL1|=TAIE;
  70.     _EINT();
  71.    }
  72.   }
  73.    
  74. }

  75. /****** 定時(shí)器 A1,2 中斷 處理 ***********/
  76. #pragma vector = TIMERA1_VECTOR
  77. __interrupt void Timer_A1 (void)
  78. {
  79. if(flag_Capend==1)                 //實(shí)際閘門關(guān)閉
  80.   {
  81.    lcd_buf[0]=0;lcd_buf[1]=0;lcd_buf[2]=0;lcd_buf[3]=0;lcd_buf[4]=0;lcd_buf[5]=0;
  82.    TACCTL1&=~CCIE;
  83.    TBCCTL1&=~TAIE;
  84.    flag_Capend=2;
  85.    Ns=TAR;
  86.    Nx=Cap_num-1;
  87.    TACCTL1&=~CCIE;
  88.    TACCTL2&=~CCIE;
  89.    TACCTL2&=~TAIE;
  90.    TBCCTL1&=~TAIE;
  91.     _DINT();        //此處關(guān)總中斷無用,在中斷發(fā)生時(shí),主函數(shù)中的SR入棧保存,
  92.                      //在中斷函數(shù)中用的新的SR,退出中斷后,這個(gè)SR是要被主函數(shù)以前的SR出棧覆蓋的,
  93.                      //所以說在這個(gè)中斷里面改變GIE,并不能改變退出中斷以后的GIE。
  94.    //TACCR2=0;        
  95.   }
  96. else
  97.   {
  98.    switch(TAIV)
  99.    {
  100.      case 2: if(Cap_num==0)   //第一個(gè)被測(cè)信號(hào)上升沿  
  101.              {
  102.               TBR=0;
  103.               TBCTL|=MC_1;         //開啟1s實(shí)際閘門,增計(jì)數(shù)模式
  104.               TAR=0;              //標(biāo)準(zhǔn)信號(hào)計(jì)數(shù)清零,標(biāo)準(zhǔn)信號(hào)開始計(jì)數(shù)
  105.               TACTL|= TAIE;        //開中斷,
  106.               if(flag_Capend==0)
  107.               Cap_num++;     
  108.              }            
  109.             else
  110.              {
  111.             // Cap_Ns=TAR;
  112.              if(flag_Capend==0)
  113.              Cap_num++;      //被測(cè)信號(hào)計(jì)數(shù)Nx
  114.              }
  115.             break;

  116.     case 10: //TACCR2=0;
  117.              if(flag_Capend==0);
  118.              OV_Ns++;
  119.              break;
  120.     default:  break;     
  121.    }      
  122.   }
  123. }

  124. /****** 定時(shí)器 B 中斷 處理 ***********/
  125. #pragma vector = TIMERB0_VECTOR
  126. __interrupt void Timer_B (void)
  127. {
  128.    flag_Capend=1;
  129. }
復(fù)制代碼

所有資料51hei提供下載:
測(cè)頻.rar (33.08 KB, 下載次數(shù): 13)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表