📄 adc.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 + -