📄 main.c
字号:
#include "msp430x20x2.h"
//此程序是用ADC10单通道多次方式测片内温度二极管的电压
// MSP430F20x2
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// |A10 (Temp) P1.0|-->LED
volatile unsigned int ad_value[10];
int main( void )
{
WDTCTL=WDTPW+WDTHOLD; //关看门狗
BCSCTL1 =CALBC1_1MHZ; //设定DCO为1MHZ
DCOCTL =CALBC1_1MHZ;
//时钟源选AD内部时钟并4分频,选通道10,AD启动信号来源选TA.OUT1,选单通道连续采样
ADC10CTL1=ADC10DIV_3+INCH_10+SHS_1+CONSEQ_2;
//选1.5V为正向参考,地为负参考,AD中断使能,打开参考,启动AD模块(不是启动AD转换)
ADC10CTL0=SREF_1+ADC10SHT_3+ADC10IE+REFON+ADC10ON;
TACCR0=30; //延时等待参考稳定
TACCTL0 |=CCIE; //CCR0中断使能
TACTL=TACLR+MC_1+TASSEL_2; //TA增计数,时钟源为smclk
_BIS_SR(LPM0_bits+GIE); //进入低功耗0,使能总中断,等待参考稳定
TACCTL0 &=~CCIE; //CCR0中断禁止
_BIC_SR(GIE); //关总中断
ADC10CTL0 |=ENC; //AD转换使能
TACCTL1=OUTMOD_4; //CCR1选输出模式4,当TAR=0时,输出高电平
TACTL =TASSEL_2+MC_2; //TA改为连续计数,smclk时钟源
_BIS_SR(LPM0_bits+GIE); //进入低功耗0,使能总中断,等待10AD完成
_NOP();
return 0;
}
#pragma vector = TIMERA0_VECTOR //TA0中断服务,用来参考稳定
__interrupt void ta0_isr(void)
{
TACTL=0; //关TA
_BIC_SR_IRQ(LPM0_bits); //退出低功耗
}
#pragma vector = ADC10_VECTOR //ADC10中断服务
__interrupt void adc_isr(void)
{
static char i=0;
ad_value[i]=ADC10MEM; //保存AD结果
i++;
if(i==10) //作10次AD
_BIC_SR_IRQ(LPM0_bits+GIE); //退出低功耗
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -