📄 untitled1.c
字号:
//单通道重复多次的采样转换模式
#include<msp430x44x.h>
unsigned int results[8];//设置转换结果的静态变量
unsigned int kk=0;
void delay(int v)//延时子程序
{
while(v!=0)
v--;
}
void main(void)//主函数
{
WDTCTL=WDTPW+WDTHOLD;//设置看门狗密码 停止看门狗
P6SEL=0X01;//选择P6.0引脚为模电压输入端
//设置ADC12CTL0控制寄存器0
ADC12CTL0=ADC12ON+SHT0_8+MSC;//加电源 并定义采样周期
//15-12 SHT1 11-8 SHT0 采样保持时间 :SHT0_8 选择采样周期为256个ADC12CLK
//7 MSC 多次采样/转换位 :为0即每次转换时采样定时器需要SHI信号的上升沿触发
//6 2.5V/1.5V 内部参考电压产生器的电压值选择位 :为0选择内部1.5V参考电压
//5 REFON 参考电压控制位 :为0内部参考电压产生器关闭 不消耗功率
//4 ADC12ON 打开ADC12内核控制位 :为1打开ADC12内核
//3ADC12OVIE 溢出中断允许位 当中ADC12MEMx原有数据还没有读出,而又没有新的转换结果数据要写入时,则发生溢出
//:为0没有发生溢出
// 2ADC12TOVIE 转换时间溢出中断允许位 在当前转换还没有完成时,又发生一次采样请求,则会发生时间溢出
//:为0没有转换时间溢出
//1 ENC 转换允许位 :为0 ADC12模块处于初始状态,不能启动A/D转换,但可以设置ADC12
//0 ADC12SC 采样/转换启动控制位 :为0 不启动采样转换
//设置ADC12CTL1控制寄存器1
ADC12CTL1=SHP+CONSEQ_2;
//15-12 CSTARTADDx 转换存储器地址定义位 该4位定义了在ADC12MEMx作为单次转换地址或序列转换的首地址
//:CSTARTADDx=00 选择转换结果存放的开始地址为 ADC12MEM0
//11-10 SHSx 采样保持控制源选择位 控制源输出信号为SHI :SHSx=0 表示选择采样保持源 为ADC12SC
// 9 SHP 采样信号SAMPON的控制源选择位 可以是采样定时器 也可以是采样控制源信号SHI
//:为1 选择脉冲采样模式,SAMPCON信号来自采样定时器
//8 ISSH 采样控制源信号反相控制位
//7-5 ADC12DIVx ADC12CLK时钟源分频因子选择位 :ADC12DIVx=000 选择分频比为1
//3-4 ADC12SSELx ADC12内核时钟源选择 :SSELx=00 选择时钟源为ADC12OSC
//2-1 CONSEQx 转换模式选择位 为2表示单通道多次转换模式
//0 BUSY 忙标志
ADC12IE=0X01;//中断寄存器 使能A0通道转换结束中断
ADC12CTL0|=ENC;//转换允许位 使能转换
P2DIR=0xff;//将P2口设置为输出
P2OUT=0X00;//P2口输出低电平
_EINT();//使能总中断
while(1)
{
P2OUT^=0xff;//每转换一次 P2口连接的发光二极管闪烁一次
delay(60000);//延迟时间 使闪烁可见
ADC12CTL0|=ADC12SC+ENC;}}
#pragma vector=ADC_VECTOR//ADC中断服务程序
__interrupt void ADC12ISR(void)
{
results[kk]=ADC12MEM0;//将 A0通道的转换结果读到变量result0
kk=(kk+1);//变量下标加1
if(kk>=8)//如果8次转换结束,则results[kk]变量下标为0
{
kk=0;
ADC12CTL0&=~ENC;}}//ENC为0,ADC等待下一次启动转换
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -