原贴链接:https://www.cnblogs.com/wangh0802PositiveANDupward/archive/2012/08/03/2621309.html
PIC18F4X2器件的A/D模块有8个输入通道,该模块包括ADCON0和ADCON1寄存器定义,它们与中档系列A/D模块兼容。 ADCON0寄存器控制A/D模块的操作。ADC0N1寄存器可以配置端口引脚的功能。 A/D 结果高位寄存器(ADRESH); A/D 结果低位寄存器(ADRESL)。 ADCON0寄存器:ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE — ADON A/D时钟设置 A/D通道选择 A/D转换状态位 0 A/D模块使能位(1上电启动,0为关闭) GO/DONE =1,正在进行A/D转换(将该位置1 则启动A/D 转换,A/D 转换结束后该位由硬件自动清零) 。 GO/DONE =0,未进行A/D 转换。 ADCON1寄存器:ADFM ADCS2 — — PCFG3 PCFG2 PCFG1 PCFG0 ADFM:A/D 结果格式选择位。(此系列AD10位,存储容量共16位,因此还有6位为空) 1=右对齐, ADRESH 寄存器的高6 位读作0。 0 = 左对齐, ADRESL 寄存器的低6 位读作0。 ADCS2:A/D 转换时钟选择位。与ADCON1配合使用。 (当ADCS2=0时,转换时钟为Fosc/2^(2n+1);当ADCS2=1时,转换时钟为Fosc/2^(2n+2);当低两位为11时,则Frc,来自内部A/D RC振荡器的时钟)。 PCFG3:PCFG0 :A/D 端口配置控制位。 模拟参考电压可通过软件选择为器件的正电源电压和负电源电压(VDD和VSS)或RA3/AN3/VREF+ 引脚和RA2/AN2/VREF- 引脚上的电压电平。A/D 转换器具备在器件处于休眠状态下仍能工作的独特功能。要使 A/D 模块在休眠状态下运行,A/D 转换时钟必须来自于A/D 模块内部的RC振荡器。 按照以下步骤进行
A/D 转换:
1. 配置A/D 模块:
• 配置模拟引脚、参考电压和数字I/O(ADCON1)
• 选择A/D 输入通道(ADCON0)
• 选择A/D 转换时钟(ADCON0)
• 打开A/D 模块(ADCON0)
2. 需要时,配置A/D 中断:
• 将ADIF位清零
• 将ADIE位置1
• 将GIE 位置1
• 将PEIE位置1
3. 等待所需的采集时间。
4. 启动A/D 转换:
• 将GO/DONE 位置1 (ADCON0) 5. 等待A/D 转换完成,通过以下两种方法之一可判断转换是否完成:
• 轮询GO/DONE 位是否被清零(中断禁止) 或者 • 等待A/D 转换中断
6. 读取A/D 结果寄存器(ADRESH/ADRESL),需要时将ADIF位清零。
7. 要再次进行A/D 转换,根据要求转入步骤 1 或步骤2 。将每一位的A/D 转换时间定义为TAD。在下一次采集开始前至少需要等待2TAD。 图示,显示了在GO 位置1 后,A/D 转换器的工作状态。在转换期间将GO/DONE 位清零将中止当前A/D 转换。部分完成的A/D 转换样本不会更新A/D 结果寄存器对。即,ADRESH:ADRESL 寄存器仍然保持上一次转换完成后的结果(即上一次写入ADRESH:ADRESL 寄存器中的值)。中止A/D 转换后,需要等待2TAD 的时间才开始下一次采集。等待2TAD 之后,将自动开始对所选通道进行采集。可以将 GO/DONE 位置1 ,并开始A/D 转换。 不应在打开A/D 模块的同一指令中将GO/DONE 位置1 。 CCP2 模块的“特殊事件触发器”可以启动A/D 转换。要求将CCP2M3:CCP2M0 位(CCP2CON<3:0>)设置为1011,且使能A/D 模块(ADON 位置1 )。发生触发时,GO/DONE 位被置1,启动 A/D 转换,Timer1(或Timer3)计数器被复位为 0。复位Timer1(或Timer3)可自动重复 A/D 采集周期,最大限度地降低了软件开销(将ADRESH/ADRESL 移到期望的位置)。在“特殊事件触发器”将GO/DONE 位置1 (启动转换)前,必须正确选择模拟输入通道,并要保证最小采集时间。如果未使能A/D 模块(ADON 清零),则“特殊事件触发器”将被 A/D 模块忽略,但它仍会复位 Timer1(或Timer3)计数器。
|