ADCSTA是一个ADC状态寄存器,也是八位。它指示ADC转换结果已完成。
ADCSTA寄存器只有一个位Bit0(ADCReady),表示ADC的转换状态。在一次ADC转换完成后该位置1,并且产生一个ADC中断。当读取ADCDATMMR时,该位自动清0。在ADC进行转换时, 也可以通过外部ADC BUSY 引脚读取ADC的工作状态。 在转换期间, 该引脚上为高电平; 当转换结束后, ADC BUSY引脚变为低电平。如果通过ADCCON寄存器使能,则可以在P0.5引脚输出ADC BUSY 的状态 (参见 “通用输入/输出” 部分) 。
ADCDAT为ADC数据结果的32位寄存器。里面存放12位ADC转换结果,其中高四位存放符号位,底16位保留,27~16保存的是12位ADC转换结果。(在全差分模式下,其结果是二进制补码格式。在伪差分模式和单端模式下,结果是标准二进制格式表示。)
ADCRST寄存器可以复位ADC的数字接口。通过向ADCRST中写入任意数据,可恢复所有ADC寄存器到默认值。
ADCOF是一个10位偏移校准寄存器。
那好,我们下面来编程调用ADC进行电压测量
上面介绍了那么多个寄存器,但其实在一般的场合只用配置其中几个个就可以了,并不是全部都需要用到,比如最简单的
#include
int main(void)
{
int Result=0;
ADCCON = 0x20;//至少在开启电源5us之后再开始ADC转换
Delay(5); //5us短延时
ADCCP = 0x00; //选择ADC0转换通道
REFCON= 0x01;//使用内部基准源(建议使用内部基准源)
ADCCON = 0x07E4;/*配置ADC的工作模式并开启ADC转换,
000 001 11 1 1 1 00 100 ADC的时钟速度为fADC/2、ADC采样时间为16个时钟、启动ADC转换、使能ADCBUSY、打开ADC电源、选择单端模式、选择连续转换*/
While(1)
{
while (!ADCSTA); //等待转换结束
Result = ADCDAT>>16;//从数据结果寄存器中取出转换数据
DisPlay(Result); //通过串口或液晶显示转换结果
}
}
以上这个是比较简单的应用,除了这种之外,我们还可以用ADC来进行两个信号的比较或者平衡信号,比如全差分模式。我们还可以把ADuc7026的ADC配置成温度传感器,不过它只能测量芯片内部温度,无法用于进行外部温度测量。
这里我只是简单介绍了ADuc7026内部集成的这个ADC的皮毛内容,有兴趣的可以买一块或者申请样片回去玩玩,撸完,收工
上几张图,已经受不了JTAG接口,现在改用串口下程序,没想到串口下载也是波折,还是焊接问题,顶层镜像的时候母头插座忘了处理下,结果悲剧,焊反反了!!!!!只能重新拆了焊,板子到现在已经面目全非,哎,说多都是泪:Cry:
文章评论(0条评论)
登录后参与讨论