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);
}
}