⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c

📁 DSPIC30F6120 AD转换初使化代码
💻 C
字号:
#include "common.h"
void ADCInitialization(void)
{
   //	ADCON1bits.DONE		= 0x00;	//A/D 转换状态位
								//1 = A/D 转换完成
								//0 = A/D 转换未完成
								//将此位清零不会影响进行中的任何操作。
								//此位由软件或开始新转换清零
	ADCON1bits.SAMP		= 0x00;	//A/D 采样使能位
								//1 = 至少一个A/D 采样/ 保持放大器正在采样
								//0 = A/D 采样/ 保持放大器正在保持
								//当ASAM = 0 时,此位写入1 将开始采样。
								//当SSRC = 000 时,此位写入0 将结束采样并开始转换
	ADCON1bits.ASAM		= 0x00;	//A/D 采样自动开始位
								//1 = 采样在上一个转换结束后立即开始。SAMP 位自动置位。
								//0 = 采样在SAMP 位置位后开始
	ADCON1bits.SSRC		= 0x01;	//转换触发源选择位
								//111 = 内部计数器结束采样并开始转换(自动转换)
								//110 = 保留
								//101 = 保留
								//100 = 保留
								//011 = 电机控制PWM 间隔结束采样并开始转换
								//010 = 通用功能Timer3 比较结束采样并开始转换
								//001 = INT0 引脚的有效电平变化结束采样并开始转换
								//000 = 清除SAMP 位结束采样并开始转换
	ADCON1bits.FORM		= 0x00;	//数据输出格式位
								//11 = 有符号小数(DOUT = sddd dddd dddd 0000)
								//10 = 小数(DOUT = dddd dddd dddd 0000)
								//01 = 有符号整数(DOUT = ssss sddd dddd dddd)
								//00 = 整数(DOUT = 0000 dddd dddd dddd)
	ADCON1bits.ADSIDL	= 0x00;	//在空闲模式位停止
								//1 = 当器件进入空闲模式时模块不继续工作
								//0 = 在空闲模式模块继续工作
	ADCON1bits.ADON		= 0x00;	//A/D 工作模式位
								//1 = A/D 转换器模块正在工作
								//0 = A/D 转换器已关闭
	TRISBbits.TRISB9	= 0x01;
	
	ADPCFGbits.PCFG9	= 0x00;	//模拟输入引脚配置控制位
								//PCFG15 PCFG14 PCFG13 PCFG12 PCFG11 PCFG10 PCFG9 PCFG8
								//PCFG7 PCFG6 PCFG5 PCFG4 PCFG3 PCFG2 PCFG1
								//1 = 模拟输入引脚处于数字模式,使能端口读取输入, A/D 输入多路开关输入连接到AVSS
								//0 = 模拟输入引脚处于模拟模式,禁止端口读取输入,A/D 采样引脚电压
	ADCHSbits.CH0NB		= 0x00;	//MUX B多路开关设置通道0 负输入选择位
								//1 = 通道0 负输入是AN1
								//0 = 通道0 负输入是VREF
	ADCHSbits.CH0SB		= 0x00;	//MUX B 多路开关设置通道0 正输入选择位
								//1111 = 通道0 正输入是AN15
								//1110 = 通道0 正输入是AN14
								//1101 = 通道0 正输入是AN13
								//……
								//0001 = 通道0 正输入是AN1
								//0000 = 通道0 正输入是AN0
	
	ADCHSbits.CH0NA		= 0x01;	//MUX A多路开关设置通道0 负输入选择位
								//1 = 通道0 负输入是AN1
								//0 = 通道0 负输入是VREF
	ADCHSbits.CH0SA		= 0x09;	//MUX A 多路开关设置通道0 正输入选择位
								//1111 = 通道0 正输入是AN15
								//1110 = 通道0 正输入是AN14
								//1101 = 通道0 正输入是AN13
								//……
								//0001 = 通道0 正输入是AN1
								//0000 = 通道0 正输入是AN0
	ADCSSL	= 0x0000;			//A/D 输入引脚扫描选择位
								//CSSL15 CSSL14 CSSL13 CSSL12 CSSL11 CSSL10 CSSL9 CSSL8 
								//CSSL7 CSSL6 CSSL5 CSSL4 CSSL3 CSSL2 CSSL1
								//1 = 选择对ANx输入进行扫描
								//0 = 输入扫描时跳过ANx

	ADCON3bits.ADCS		= 0x0F;	//A/D 转换时钟选择位
								//111111 = TCY/2 * (ADCS<5:0> + 1) = 32 * TCY
								//……
								//000001 = TCY/2 * (ADCS<5:0> + 1) = TCY
								//000000 = TCY/2 * (ADCS<5:0> + 1) = TCY/2
	ADCON3bits.ADRC		= 0x00;	//A/D转换时钟源位
								//1 = A/D内部RC 时钟
								//0 = 时钟由系统时钟产生
	ADCON3bits.SAMC		= 0x0F;	//自动采样时间位
								//11111 = 31 TAD
								//……
								//00001 = 1 TAD
								//00000 = 0 TAD

	ADCON2bits.ALTS		= 0x00;	//交替输入采样模式选择位
								//1 = 为第一个采样使用MUX A输入多路开关设置,然后对所有后续采样在MUX B和MUX A 输入多路开关
								//设置之间轮换
								//0 = 总是使用MUX A输入多路开关设置
	ADCON2bits.BUFM		= 0x00;	//缓冲器模式选择位
								//1 =缓冲器配置为两个8字缓冲器ADCBUF (15……8)和ADCBUF (7……0)
								//0 = 缓冲器配置为一个16 字缓冲器ADCBUF (15……0)
	ADCON2bits.SMPI		= 0x00;	//每产生一次中断的采样/转换过程数选择位
								//1111 = 每完成第16 个采样/转换过程后产生中断
								//1110 = 每完成第15 个采样/转换过程后产生中断
								//.....
								//0001 = 每完成第2 个采样/转换过程后产生中断
								//0000 = 完成每个采样/ 转换过程后产生中断
//	ADCON2bits.BUFS		= 0x00;	//缓冲器填充状态位
								//仅在BUFM = 1时有效(ADRES分成2 x 8 字的缓冲器)
								//1 = A/D正在填充缓冲器0x8—0xF,用户应该访问0x0—0x7 的数据
								//0 = A/D正在填充缓冲器0x0—0x7,用户应该访问0x8—0xF的数据
	ADCON2bits.CSCNA	= 0x00;	//MUX A输入多路开关设置的CH0+ S/H输入的扫描输入选择位
								//1 = 扫描输入
								//0 = 不扫描输入
	ADCON2bits.VCFG		= 0x01;	//参考电压配置位
								//    A/D VREFH      A/D VREFL
								//000 AVDD           AVSS
								//001 外部VREF+      引脚AVSS
								//010 AVDD 外部      VREF- 引脚
								//011 外部VREF+引脚  外部VREF-引脚
								//1xx AVDD           AVSS
	IFS0bits.ADIF 		= 0x00;	//A/D转换完成中断标志状态位
								//1 = 发生中断请求
								//0 = 未发生中断请求
	IPC2bits.ADIP		= 0x01;	//A/D转换完成中断优先级位
								//111 = 中断优先级为7(最高优先级中断)
								//???
								//001 = 中断优先级为1
								//000 = 中断源被禁止
	IEC0bits.ADIE		= 0x00;	//A/D转换完成中断允许位
								//1 = 允许中断请求
								//0 = 不允许中断请求
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -