📄 ad.c
字号:
#include <mc9s12dg128.h> /* derivative information */
#include "main.h"
#include "ECT.h"
#include "AD.h"
extern word AD0_wData[4];
void AD0_Init(void) //AD初始化
{
//控制寄存器2: 上电,标志位快速清零,开中断
ATD0CTL2 = (ATD0CTL2_ADPU_MASK|ATD0CTL2_AFFC_MASK|ATD0CTL2_ASCIE_MASK);
//控制寄存器3:转换序列长度为3,FIFO模式
ATD0CTL3 = (ATD0CTL3_S4C_MASK|ATD0CTL3_FIFO_MASK);
//控制寄存器4: 10位采样精度,A/D Clock 不能大于 2 MHz,小于0.5MHz
ATD0CTL4 = (ATD0CTL4_PRS1_MASK|ATD0CTL4_PRS0_MASK);
//控制寄存器5:右对齐无符号,多通道采样,通道0
ATD0CTL5 = 0x90;
ATD0DIEN=0x00; // 禁止数字输入缓冲
}
#pragma CODE_SEG NON_BANKED //中断服务程序
interrupt void AD0_ISR(void)
{
word data;
if(ATD0STAT1_CCF0==1)
{
data = ATD0DR0;
if((data<AD0_VALUE_MAX)&&(data>AD0_VALUE_MIN)) //检查采样值是否在规定范围内
{
AD0_wData[0] = data; //将结果寄存器中的值存放到数组中
}
}//通道0转换结束
if(ATD0STAT1_CCF1==1)
{
data = ATD0DR1;
if((data<AD0_VALUE_MAX)&&(data>AD0_VALUE_MIN)) //检查采样值是否在规定范围内
{
AD0_wData[1] = data; //将结果寄存器中的值存放到数组中
}
}//通道1转换结束
if(ATD0STAT1_CCF2==1)
{
data = ATD0DR2;
if((data<AD0_VALUE_MAX)&&(data>AD0_VALUE_MIN)) //检查采样值是否在规定范围内
{
AD0_wData[2] = data; //将结果寄存器中的值存放到数组中
}
}//通道2转换结束
if(ATD0STAT1_CCF3==1)
{
data = ATD0DR3;
if((data<AD0_VALUE_MAX)&&(data>AD0_VALUE_MIN)) //检查采样值是否在规定范围内
{
AD0_wData[3] = data; //将结果寄存器中的值存放到数组中
}
}//通道3转换结束
}
#pragma CODE_SEG DEFAULT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -