片内AD的使用——代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
# define ADC_SPEEDLL 0x00 //540 clocks
# define ADC_SPEEDL 0x20 //360 clocks
# define ADC_SPEEDH 0x40 //180 clocks
# define ADC_SPEEDHH 0x60 //90 clocks
typedef unsigned char uint8; //无符号8位整型变量
附页——代码
# include <STC12C5A60S2.h>
# define ADC_POWER 0x80 //ADC电源控制位,置1为打开
# define ADC_FLAG 0x10 //ADC结束标志位,A/D转换完成后置1,要由软件清零
# define ADC_START 0x08 //ADC转换启动控制位,置1开始转
TL1 = 0xfd;
EA = 1; //开放中断总开关
ES = 1; //启动串口中断
TR1 = 1; //启动定时器1
}
void Adc_Init()
{
//ADC初始化
int i;
P1ASF = 0xff; //Pቤተ መጻሕፍቲ ባይዱ口模拟功能控制寄存器,置1作为A/D使用
ADC_CONTR = ADC_POWER | ADC_START | ADC_SPEEDLL; //ADC控制寄存器,540个时钟周期转换一次
typedef signed long int32; //有符号32位整型变量
typedef float fp32; //单精度浮点数
Uart_Init()
{
//串口初始化
SCON = 0x50; //配置SCON
TMOD = 0x20; //配置TMOD
TH1 = 0xfd; //设置波特率为9600
}
void main()
{
unsigned long int i;
uint16 vol = 0;
Uart_Init(); //串口初始化
Adc_Init(); //ADC初始化
while (!(ADC_CONTR & ADC_FLAG));
vol = GetADCResult(1); //得到结果
SBUF = vol; //将结果赋给缓冲寄存器
ADC_RES = 0; // ADC结果高位清零
for(i = 0;i < 10;i++);
}
unsigned short int GetADCResult(unsigned char ch)
{
int u;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL |ADC_START| ch;
typedef signed char int8; //有符号8位整型变量
typedef unsigned int uint16; //无符号16位整型变量
typedef signed int int16; //有符号16位整型变量
typedef unsigned long uint32; //无符号32位整型变量
while (!TI); //等待数据发送
for (i = 0;i < 5000;i ++); //延时
TI = 0; //标志位清零
}
for(u = 0;u < 10;u++);
while (!(ADC_CONTR & ADC_FLAG)); //等待转换完成
ADC_CONTR = ADC_CONTR & (~ADC_FLAG); //标志位复位0
return (ADC_RES * 4 + ADC_RESL); //10位分辨率,返回值
相关文档
最新文档