专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

MSP430F5529/G2553单片机频率设置程序

作者:huqin   来源:本站原创   点击数:  更新时间:2014年08月31日   【字体:

MSP430F5529/G2553单片机的频率设置c语言程序:

#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转换函数设置*****//
void adc1()
{
 P1SEL |=BIT6;       //转换模拟信号从P1.6输入,内部集成了转换模块
 ADC12CTL0 =ADC12ON  + ADC12SHT02 + ADC12MSC;
 ADC12CTL1 =ADC12SHP + ADC12CONSEQ_2;
 ADC12MCTL0=ADC12SREF_0+ADC12INCH_6;
 ADC12CTL0 |=ADC12ENC;
//////一次转换结束后产生转换中断调用ADC中断函数////
}
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;
}
 
============风洞=========================
#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;
//毫秒延迟函数
void delay(int ms)
{
  int i;
  while(ms--)
   for(i=0;i<120;i++);
}
//纳米延迟函数
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)//现实位置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;//开启P1作为位置检查输入
 
  int m,temp;
     //显示
    temp=tab[0];//个位
    display(temp);
    temp=tab[0];//十位
    display(temp);
    tt=0;
     while(1)
     {
      
       m=P1IN;
       qidong();
       xianshi();
       P2OUT |=BIT3;
       delay(time);
       P2OUT &=~BIT3;
       delay(500);
   
     }
关闭窗口