⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c

📁 MSP430单片机常用模块与综合系统实例精讲 的:“程序代码”、“实例插图”、“电路图”3个文件夹。以及MSP430F14X系列单片机的官方源码"CODE-MSP430F14X" 其中各个文件夹主要
💻 C
字号:
#include "adc.h"
int gain;
void Init_CLK(void)
{
    unsigned int i;
    //将寄存器的内容清零
    //XT2震荡器开启
    //LFTX1工作在低频模式
    //ACLK的分频因子为1
    BCSCTL1 = 0X00;			
					
					
    do 
    {
        // 清除OSCFault标志
	IFG1 &= ~OFIFG;                       
	for (i = 0x20; i > 0; i--);                
    }
    while ((IFG1 & OFIFG) == OFIFG);      // 如果OSCFault =1   
				
    //open XT2, LFTX2 选择低频率
    BCSCTL1 &= ~(XT2OFF + XTS);
    //DCO Rsel=7(Freq=3200k/25摄氏度)  
    BCSCTL1 |= RSEL0 + RSEL1 + RSEL2; 
    BCSCTL1 |= 0x07;
    //MCLK的时钟源为TX2CLK,分频因子为1
    BCSCTL2 += SELM1;		
    //SMCLK的时钟源为TX2CLK,分频因子为1
    BCSCTL2 += SELS;		
    
}
void Init_ADC(void)
{
    //设置P6.0为模拟输入通道
    P6SEL = 0X01;       
    
    //设置ENC为0,从而修改ADC12寄存器的值
    ADC12CTL0 &= ~(ENC); 
    //转换的起始地址为:ADCMEM0
    ADC12CTL1 |= CSTARTADD_0;

    //设置参考电压分别为AVSS和AVCC,输入通道为A0
    ADC12MCTL0 = INCH_0;    
            
    ADC12CTL0 |= ADC12ON;
    ADC12CTL0 |= MSC;
    
    //转换模式为:单通道、单次转换
    ADC12CTL1 |= CONSEQ_0;
    //时钟源为SMCLK
    ADC12CTL1 |= ADC12SSEL_1;
    //时钟分频为1
    ADC12CTL1 |= ADC12DIV_0;
    //采样脉冲由采用定时器产生
    ADC12CTL1 |= (SHP);
                
    //使能ADC转换
    ADC12CTL0 |= ENC;
    return;
}
void Init_TimerA(void)
{
    // 选择SMCLK,清除TAR
    TACTL = TASSEL1 + TACLR; 
    // CCR0 中断允许
    CCTL0 = CCIE;	
    //200Hz
    CCR0 = 40000;	
    // 增记数模式 
    TACTL |= MC0;	     
}
void Init_Port(void)
{
    //将P1、P2、P3、P4、P5、P6口的管脚设置为一般I/O口
    P1SEL = 0;
    P2SEL = 0;
    P3SEL = 0;
    P4SEL = 0;
    P5SEL = 0;
    P6SEL = 0;
    
    //设置管脚为输入管脚
    P1DIR = 0;
    P2DIR = 0;
    P3DIR = 0;
    P4DIR = 0;
    P5DIR = 0;
    P6DIR = 0;
    
    //设置P1.0、P1.1和P1.3为输出管脚
    P1DIR |= BIT0;
    P1DIR |= BIT1;
    P1DIR |= BIT3;
    
    // 将中断寄存器清零
    P1IE = 0;
    P1IES = 0;
    P1IFG = 0;
    
    // 管脚 START 使能中断
    P1IE |= BIT2;	
    // 对应的管脚由高到低电平跳变使相应的标志置位
    P1IES |= BIT2;		
  
    return;
}
void Delay_us(unsigned long nValue)//微秒为单位,8MHz为主时钟
{
    int nCount;
    int i;
    int j;
    nCount = 3;
    for(i = nValue;i > 0;i--)
    {
    	for(j = nCount;j > 0;j--);
    }
    return;
}
void setGain(unsigned int nValue)
{
    //增益为1
    if(nValue == 1)
    {
        P1OUT = 0x00;
    }
    //增益为10
    if(nValue == 10)
    {
        P1OUT = 0x00;
        P1OUT |= BIT0;
    }
    //增益为100
    if(nValue == 100)
    {
        P1OUT = 0x00;
        P1OUT |= BIT1;
    }
    //增益为1000
    if(nValue == 1000)
    {
        P1OUT = 0x00;
        P1OUT |= BIT0;
        P1OUT |= BIT1;
    }
    
    gain = nValue;
}
int getGain(void)
{
    return gain;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -