專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

MSP430F5529/G2553單片機(jī)頻率設(shè)置程序

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月31日   【字體:

MSP430F5529/G2553單片機(jī)的頻率設(shè)置c語(yǔ)言程序:

#include "msp430F5529.h"

#define P15_H    (P1IN & BIT5);
#define P15_L   (P1OUT & (~BIT5));
int tt=0,temp,kk,i;
void delay(int ns)
{
  int kk;
  while(ns--)
    for(kk=0;kk<120;kk++);
}
//******A/D轉(zhuǎn)換函數(shù)設(shè)置*****//
void adc1()
{
 P1SEL |=BIT6;       //轉(zhuǎn)換模擬信號(hào)從P1.6輸入,內(nèi)部集成了轉(zhuǎn)換模塊
 ADC12CTL0 =ADC12ON  + ADC12SHT02 + ADC12MSC;
 ADC12CTL1 =ADC12SHP + ADC12CONSEQ_2;
 ADC12MCTL0=ADC12SREF_0+ADC12INCH_6;
 ADC12CTL0 |=ADC12ENC;
//////一次轉(zhuǎn)換結(jié)束后產(chǎn)生轉(zhuǎn)換中斷調(diào)用ADC中斷函數(shù)////
}
void MainFre24M(void)
{
   UCSCTL3 |=SELREF__REFOCLK;
   __bis_SR_register(SCG0);     //disable the FLL control loop
   UCSCTL0=0X0000;//            //Set lowest possible DCOx,MODxSCG0
   UCSCTL1=DCORSEL_6;           //Select DCO range 24MHz opreation
                               //DCORSEL_x,其中x可選3、4、5、6、7
   UCSCTL3=FLLD_0+731;          //Set DCO Multiplier for 24MHz
                                //(N+1)*FLLRef=Fdco
                                //(731+1)*32768=24MHz
                               //Set FLL DIV =fDCOCLK/2
   __bis_SR_register(SCG0);                 //Enable the FLL control loopSCG0
   UCSCTL4 |=SELA__DCOCLK+SELS__XT1CLK+SELM__DCOCLK;//MCLK Source select
   UCSCTL5 |=DIVPA_2;                       //ACLK output divide
   UCSCTL6 |=XT1DRIVE_3+XCAP_0;             //XT1 cap
}
int main(void)
 {
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT
   MainFre24M();
   UCSCTL3=FLLD_0+731;
   UCSCTL1=DCORSEL_7;
   P1REN |=BIT7;
   P1OUT |=BIT7;
   P1IE |=BIT7;
   P1IES|=BIT7;
   P1IFG&=~BIT7;
  
   P2REN |=BIT2;
   P2OUT |=BIT2;
   P2IE |=BIT2;
   P2IES|=BIT2;
   P2IFG&=~BIT2;
   __enable_interrupt();
   P1DIR |= 0x3f;
   P1DS  |= 0x3f;
   while(1)
     {
       UCSCTL1=DCORSEL_3;
       P1OUT |=BIT5;
       delay(1000);
       P1OUT &=~BIT5;
       delay(1000);     
     }  
 }
#pragma vector=PORT1_VECTOR
__interrupt void PORT17ISR(void)
{
 int i;
 UCSCTL1=DCORSEL_7;
 UCSCTL3=FLLD_7+730;
 for(i=0;i<40;i++)
     {     
       P1OUT |=BIT0;
       delay(1000);
       P1OUT &= ~BIT0;
       delay(1000);     
     }
 P1IFG &=~BIT7;
}
#pragma vector=PORT2_VECTOR
__interrupt void PORT22ISR(void)
{
 int i;
 UCSCTL1=DCORSEL_7;
 UCSCTL3=FLLD_7+730;
 for(i=0;i<40;i++)
     {     
       P1OUT |=BIT3;
       delay(1000);
       P1OUT &= ~BIT3;
       delay(1000);     
     }
 P2IFG &=~BIT2;
}
 
============風(fēng)洞=========================
#include "msp430G2553.h"
int tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
          0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
int key,temp,time=0,tt=0,m;
//毫秒延遲函數(shù)
void delay(int ms)
{
  int i;
  while(ms--)
   for(i=0;i<120;i++);
}
//納米延遲函數(shù)
void delayns(int ns)
{
  while(ns--);
}
void qidong()
{
 if(P1IN==0xff)
    if(P1IN==0x7f)
      if(P1IN==0xbf)
        if(P1IN==0x9f)time=360;
}
void xianshi(void)
{
 // if(m==0xfe)
}
void display(temp)//現(xiàn)實(shí)位置P2.0=SH;P2.1=ST;P2,2=DS
{
  int k,temp1,temp2;
   for(k=7;k>=0;k--)
     {
       temp1=1<<k;
       temp2=temp & temp1;
       if(temp2==temp1)
           {
             P2OUT |=BIT2;
           }
       else
           {
             P2OUT &=~BIT2;
           }
       P2OUT &=~BIT0;
       delayns(10);
       P2OUT |=BIT0;
     }
   P2OUT &=~BIT1;
   delayns(10);
   P2OUT |=BIT1;
}
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  DCOCTL =CALDCO_16MHZ;
  BCSCTL1=CALBC1_16MHZ;
  BCSCTL2|=SELM_1+DIVM_0;
  P2DIR |=0x0f;//顯示I2C輸出
  P1DIR =0x00;//開(kāi)啟P1作為位置檢查輸入
 
  int m,temp;
     //顯示
    temp=tab[0];//個(gè)位
    display(temp);
    temp=tab[0];//十位
    display(temp);
    tt=0;
     while(1)
     {
      
       m=P1IN;
       qidong();
       xianshi();
       P2OUT |=BIT3;
       delay(time);
       P2OUT &=~BIT3;
       delay(500);
   
     }
關(guān)閉窗口