www.pudn.com > EFA.rar > Init.c


#include  
#include "define.h" 
#include "Global.h" 
 
/************************************************************************ 
处理器: MSP430F149 
************************************************************************/ 
void MCU_Init(void) 
{ 
    unsigned char i; 
     
//--------------Setup_WDT----------------------------------------------- 
    WDTCTL = WDTPW+WDTHOLD;             // Stop WDT 
    _DINT();                            // 关中断 
     
//--------------Setup_IO1-----------------------------------------------  
    P1SEL = 0x0;                        // 选择P1口为IO口 
    P1DIR = 0x00;                       // P1.0,P1.1为输出方式,其余为输入 
    P1OUT = 0x0; 
 
//--------------Setup_IO2-----------------------------------------------  
    P2OUT = 0x0; 
    P2SEL = 0x00;                       // 选择P2口为IO口 
    P2DIR = 0xFF;                       // 选定P2口为输出方式 
     
//--------------Setup_IO3-----------------------------------------------  
    P3OUT = 0x0; 
    P3SEL = 0x30;                       // 选定P3.4,P3.5为TXD0,RXD0 
    P3DIR = 0x10;                       // P3.4为输出  
 
//--------------Setup_XT2-----------------------------------------------    
    BCSCTL1 &= ~XT2OFF;                 // 开启XT2振荡器; 
                                        // ACLK时钟源为LFXT1CLK,不分频 = 32.768kHz;  do         
    do 
    { 
        IFG1 &= ~OFIFG;                 // 清除振荡器失效标志 
        for(i = 0xFF;i > 0;i--);        // 稳定时间 
    }   
    while((IFG1 & OFIFG) != 0);         // 如果振荡器失效标志存在 
    BCSCTL2 |= SELM_2 + DIVM_3          // MCLK时钟源为XT2CLK,8分频 = 1M; 
             + SELS + DIVS_3;           // SMCLK时钟源为XT2CLK,8分频 = 1M; 
                                                               
//--------------Setup_TA-----------------------------------------------  
    TACTL = TASSEL_2 + TACLR;           // 选择时钟源为ACLK, clear TAR 
     
//--------------Setup_TAC0---------------------------------------------  
    CCTL0 = CCIE;                       // CCR0 interrupt enabled 
    CCR0 = 10000;                        // 10ms 
    TACTL |= MC0;                       // 增计数方式 
     
//--------------Setup_TB-----------------------------------------------   
    TBCTL = TBSSEL_2+TBCLR;             // 选择时钟源为SMCLK, clear TBR 
      
//--------------Setup_TBC0---------------------------------------------  
    TBCCTL0 = CCIE;                     // 允许定时器中断 
    TBCCR0 = 420;                       // 0.4ms  f=1200hz 
    //TBCTL |= MC0;                     // 增计数方式 
 
//--------------Setup_Uart---------------------------------------------- 
 /*   UCTL0 = CHAR+PENA+SWRST;            // 8位数据,1位停止位,奇校验 
    UTCTL0 = SSEL0;                     // 选择UCLK = ACLK 
    UBR00 = 0x3;                        // 设置波特率9600bit/s 
    UBR10 = 0; 
    UMCTL0 = 0x4A;                      // 调整寄存器 
    UCTL0 &= ~SWRST; 
    ME1 |= UTXE0 + URXE0;      	        // 打开模块USART0 
    IE1 |= URXIE0;		        // 打开USART0接收中断 
*/ 
//--------------Setup_ADC----------------------------------------------  
    P6SEL |= BIT0+BIT1+BIT2;            // Enable A/D channel inputs 
    ADC12CTL0 &= ~ENC;                  // 将转换使能关闭 
    ADC12CTL0 |= REF2_5V+REFON          // 内部2.5V参考电压,发生器打开 
               + ADC12ON+MSC            // 打开ADC内核,无转换时间溢出中断,无溢出中断 
               + SHT0_8; 
    ADC12CTL1 = CONSEQ_1+SHP;           // 序列通道多次,采样定时器输出为采样信号 
    ADC12MCTL0 = SREF_1+INCH_0;         // ADC12MCTL0输入通道为A0 
    ADC12MCTL1 = SREF_1+INCH_1;         // ADC12MCTL1输入通道为A1 
    ADC12MCTL2 = EOS+SREF_1+INCH_10;    // ADC12MCTL2输入通道为A10    
    ADC12IE = 0;                        // 转换结束不产生中断 
    ADC12CTL0 |= ADC12SC,               // 启动第一次A/D转换 
               + ENC;                   // 允许转换 
         
    _EINT();                            // 开总中断 
} 
 
/************************************************************* 
* 显示初始化  
**************************************************************/ 
void Led_Init(void) 
{ 
    // Reset 
    CH452_Write_1(CH452_RESET); 
    CH452_Write_2(CH452_RESET); 
    CH452_Write_3(CH452_RESET); 
     
    // Set work mode of system : only display on 
    CH452_Write_1(CH452_SYSON2); 
    CH452_Write_2(CH452_SYSON2); 
    CH452_Write_3(CH452_SYSON2); 
 
    // Set display parameter 
    CH452_Write_1(0x0560);              // 扫描极限6 
    CH452_Write_2(0x0570);              // 扫描极限7 
    CH452_Write_3(0x0500);              // 扫描极限8 
     
    // Initial display data                                 
    Value_O2_Pre2 = 1201;     
    Value_N2O_Air_Pre2 = 1201;                               
    Qfg_Flow_Pre = 2401;     
    FiO2_Pre = 1001; 
    LED2 = OFF; 
    LED3 = ON;       
}