松翰单片机_SN8F570310——ADC

SN8F570310——ADC


平台:松翰 SN8F570310

官网:http://www.sonix.com.tw/masterpage-tw




        








 代码示例:

#include "Equ.h"

/*
        硬件:
                    P13    AIN10
*/


/*
        1 将 ADC 输入通道设置为输入模式(由 PnM 寄存器设置);
        2 必须禁止 ADC 输入通道的内部上拉电阻(由 PnUR 寄存器设置);
        3 选择和使能 ADC 输入通道(由 CHS[3:0]位和 GCHS 位设置);
        4 必须将 ADC 模拟输入通道的控制位设置为 1(由 PnCON 寄存器设置);
        5 选择 ADC 高参考电压(由 VREFH 寄存器设置);
        6 选择 ADC 时钟频率(由 ADCKS[1:0]位设置);
        7 设置 ADENB 位后, ADC 准备开始转换。
*/

void adc_init(void)
{
    P1M    &= ~0x08;                //1.输入模式
    P1UR   &= ~0x08;                //2.禁止上拉
    ADM    |=  0x8A;                   //3.选择和使能 ADC 输入通道   1010
    P1CON  |=  0x08;                 //4.模拟输入通道的控制位设置为 1               
    VREFH   =  1<<2;                    //5.高参考电压 VDD
    ADR     =  1<<6 | 2<<4 ;  //6.ADC 时钟频率

    IEN2    = 3<<1;           //开启ADC中断
    ADM    |= 0X40;           //7.开始转换
}    
    
void ADCInterrupt(void) interrupt ISRAdc
{
    unsigned int ADCBuffer = 0; // data buffer
    unsigned long p;
    if ((IRCON2 &0x01) == 0x01){
        IRCON2 &= ~0x01;    //清除ADC标志位
            
        ADCBuffer = (ADB << 4) | (ADR &0x0f);
        for(p=0;p<30000;p++){}    
        for(p=0;p<30000;p++){}
        S0BUF =  ADCBuffer;
        
        ADM  &= ~0X20;   //转换结束,手动清零
        ADM  |=  0X40;   //开始转换        
    }
}

 测试:

复位按键和电源

笔记:


1.  11个输入通道,12位数字信号采集所以分辨率为2^12=4096 ,参考高压可设置与参考低压为零,则将外部电压(参考低压—参考高压)转换为12位数字信号(0—4096);

原文地址:https://www.cnblogs.com/panda-w/p/11780715.html