• dsPIC33EP ADC模块初始化及应用实例


    //文件名 p33adc.h
    
    #ifndef _P33ADC_H_
    #define _P33ADC_H_
    //#include "p33adc.h"
    //--AD1CON1
    
    #define		ADON	(1<<15)
    #define		MAUTO   (7<<5)	//采样后 自动转换模式
    #define		SAMP	(1<<1)
    #define		DONE	(1<<0)
    
    //ADC时钟选择--时钟分频
    #define		ADC_DIV1		(1-1)
    #define		ADC_DIV5		(5-1)
    #define		ADC_DIV10		(10-1)
    #define		ADC_DIV25		(25-1)
    #define		ADC_DIV50		(50-1)
    #define		ADC_DIV100		(100-1)
    #define		ADC_DIV250		(250-1)
    
    
    //--AD通道选择------
    #define		ADC_Chanel0			(0x00<<0)
    #define		ADC_Chanel1			(0x01<<0)
    #define		ADC_Chanel2			(0x02<<0)
    #define		ADC_Chanel3			(0x03<<0)
    #define		ADC_Chanel4			(0x04<<0)
    #define		ADC_Chanel5			(0x05<<0)
    #define		ADC_Chanel6			(0x06<<0)
    #define		ADC_Chanel7			(0x07<<0)
    #define		ADC_Chanel8			(0x08<<0)
    #define		ADC_Chanel9			(0x09<<0)
    #define		ADC_Chanel10		(0x0A<<0)
    #define		ADC_Chanel11		(0x0B<<0)
    #define		ADC_Chanel12		(0x0C<<0)
    #define		ADC_Chanel13		(0x0D<<0)
    #define		ADC_Chanel14		(0x0E<<0)
    #define		ADC_Chanel15		(0x0F<<0)
    
    //================================
    extern void Init_Adc(uint16 ClkDiv) ;
    extern uint16 AdcSwitch(uint16 Adc_Ch) ;
    
    #endif
    
    
    
    //文件名 p33adc.c
    
    #include "global.h" 
    //#include "p33adc.h"
    
    
    //***************************************
    // 函数名称:Init_Adc
    // 函数功能:初始化ADC模块
    // 入口参数:
    // 出口参数:无
    // 返回值:无
    // ADC时钟来源于Fcpu
    //***************************************
    void Init_Adc(uint16 ClkDiv)
    {
    	AD1CON1 = 0X0000|MAUTO; //设置为自动模式 10位4通道模式 数据右对齐
    	AD1CON2 = 0X0000 ;
    	AD1CON3 = 0X0000 | ClkDiv |0X8000; //ADC时钟分频
    	AD1CON4 = 0X0000 ; //不使能DMA 每个通道分一个字的缓存
    
    	AD1CHS123 = 0X0000 ;
    	AD1CHS0 = 0X0000 ;
    
    	AD1CSSH = 0X0000 ;
    	AD1CSSL = 0X0000 ;	
    
    	AD1CON1 |= ADON ; //开启ADC模块工作
    	asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;//延时
    	asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;
    }
    //***************************************
    // 函数名称:AdcSwitch
    // 函数功能:选择AD通道转换
    // 入口参数:
    // 出口参数:无
    // 返回值:无
    //***************************************
    uint16 AdcSwitch(uint16 Adc_Ch) //	ADRESH ADRESL
    {
    	uint16 wTmp ;
    
    	AD1CON1 |= ADON ; //开启ADC模块工作
    
    	AD1CHS0 = (AD1CHS0 & 0XFFE0)|Adc_Ch ;//选择通道
    
    	asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;//延时
    	asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;
    
    	AD1CON1 &= ~DONE ; //ADC空闲
    	AD1CON1 |= SAMP ; //开始转换
    
    	while(!(AD1CON1 & DONE)) ; //等待转换完成
    //	AD1CON1 &= ~DONE ; //ADC空闲
    
    	wTmp = ADC1BUF0 & 0X03FF ; //读取转换结果
    
    	return wTmp ;
    }
    
    
    //应用实例
    
    void main(void)
    {
    	uint16 g_wTmp1 ;
    
    	//初始化ADC
    	Init_Adc(ADC_DIV25) ;//AD模块时钟输入频率  10BIT AD
    
    	while(1)
    	{
    		g_wTmp1 = AdcSwitch(ADC_Chanel0) ;//读取转换结果				
    	}
    	
    
    }
    
    


  • 相关阅读:
    『原创』一个基于Win CE 5.0的Txt文件阅读器
    『原创』来电防火墙源码
    『转载』NetBeans开发J2ME手机程序之——文件浏览器
    c#文件分割与合并 part 2
    『原创』c#下的分词程序(准原创)
    『转载』在vs2008(2005)winform中,打开office文档
    『原创』老范的来电防火墙v1.0发布了(图文)
    『原创』手把手教你用c#做个Splash(启动屏幕)
    DLL简单示例
    虚函数与多态
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3397991.html
Copyright © 2020-2023  润新知