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