单片机
返回首页

ARM入门笔记(5)

2015-04-20 来源:eechina

 模拟量输入

——A/D转换实验

一.目的

通过A/D转换,能够正确读取外部模拟输入通道的电压值。

二.实验程序和参数设置

1>连接器选项设置和启动代码都与上个实验相同
2>C语言的代码

#i nclude 'AT91SAM7S64.h'
#i nclude 'Board.h'
volatile unsigned int EXT_AD_Val[4];   //定义A/D转换结果值
int main(void)
{unsigned char i;
*AT91C_ADC_CR = AT91C_CKGR_MOSCEN; //ADC的软件复位,即清除ADC的所有寄存器
*AT91C_PMC_SCER = AT91C_CKGR_MOSCEN;//使能系统时钟寄存器的处理器时钟
*AT91C_PMC_PCER = 1 91C_ID_ADC; //使能ADC时钟
*AT91C_PIOA_PDR = EXT_AD0 | EXT_AD1; //禁止管脚的I/O口功能,使作为模拟输入功能
*AT91C_ADC_MR  = 0x0f1f3f00;   //软件起动,10位分辨率,128分频
*AT91C_ADC_CHER = 0x33;    //使能通道0,1,4,5
*AT91C_ADC_CHDR = 0xcc;    //禁能通道2,3,6,7
*AT91C_ADC_IDR  = 0xfffff;    //禁止所有ADC中断
while (1)
{ *AT91C_ADC_CR = 0x2;    //起动转换
while(1)
{ if ((*AT91C_ADC_SR) & 0x33)  //等待转换结束
  { EXT_AD_Val[0] = (*AT91C_ADC_CDR0) & 0x3ff;//读取10Bit的结果值
   EXT_AD_Val[1] = (*AT91C_ADC_CDR1) & 0x3ff;
   EXT_AD_Val[2] = (*AT91C_ADC_CDR4) & 0x3ff;
   EXT_AD_Val[3] = (*AT91C_ADC_CDR5) & 0x3ff;
   for (i = 0; i
   break;
  }
}
}
}

三.总结

执行ADC的软件复位,将清除ADC的所有相关寄存器,因此必须在设置ADC相关寄存器之前执行。
进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • CCD图像传感器在微光电视系统中的应用

  • 光控音效发生器电路

  • 非常简单的150W功放电路图

  • 分享一个电网倾角计电路

  • 电谐波图形均衡器示意图

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章