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

📄 adc.c

📁 stc12c5608ad.rar
💻 C
字号:
#include"stc12c5608ad.h"
#include"ADC.h"
#include"time.h"
#include"sys.h"
#include"watchdog.h"
#include"type.h"

//选择 ADC 转换速率
                            //          SPEED1 SPEED0  A/D转换所需时间
#define   AD_SPEED   0x60   //0110,0000   1      1     270个时钟周期转换一次,                      
//#define AD_SPEED   0x40   //0100,0000   1      0     540个时钟周期转换一次
//#define AD_SPEED   0x20   //0010,0000   0      1     810个时钟周期转换一次
//#define AD_SPEED   0x00   //0000,0000   0      0     1080个时钟周期转换一次

INT16U get_AD_result(INT8U channel);

void Start_ADC(void)
{
    ADC_CONTR |= 0x08;
}

INT16U get_AD_result(INT8U channel)
{ 
    INT16U  result;
    ADC_DATA  = 0;
	ADC_LOW2  = 0;

    channel &= 0x07;                //0000,0111 清0高5位
    ADC_CONTR = AD_SPEED;
    ADC_CONTR = 0xE0;               //1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位
    ADC_CONTR |= channel;           //选择 A/D 当前通道
   
     //使输入电压达到稳定
    
	ADC_CONTR |= 0x08;              //0000,1000 令 ADCS = 1, 启动A/D转换, 
    while((ADC_CONTR&0x10) == 0);   //等待AD转换完成
    
    ADC_CONTR &= 0xE7;              //1111,0111 清 ADC_FLAG 位, 关闭A/D转换, 

    result = ( ((unsigned int)(ADC_DATA)<<2) | (unsigned int)(ADC_LOW2) ); //返回 A/D 10 位转换结果
	return ( result);
}




⌨️ 快捷键说明

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