📄 init.c
字号:
#include <msp430x14x.h>
#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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -