STC系列单片机内部AD的应用
下面一个例程演示STC89LE516AD/X2系列单片机的A/D转换功能。时钟11.0592MHz,转换结果以16进制形式输出到串行口,可以用串行口调试程序观察输出结果。(本代码摘自宏晶科技芯片手册,经作者调试可正常运行)。
#include
#include
//定义与ADC有关的特殊功能寄存器
sfr P1_ADC_EN = 0x97; //A/D转换功能允许寄存器
sfr ADC_CONTR = 0xC5; //A/D转换控制寄存器
sfr ADC_DA
typedef unsigned char INT8U;
typedef unsigned int INT16U;
void delay(INT8U delay_time) //延时函数
{
INT8U n;
INT16U m;
for (n=0;n { for(m=0;m<10000;m++); } } INT8U get_AD_result(INT8U channel) { INT8U AD_finished = 0; //存储A/D转换标志 ADC_DA ADC_CONTR = channel; //选择A/D当前通道 delay(1);//使输入电压达到稳定 ADC_CONTR |= 0x08; //0000,1000令ADC_START = 1,启动A/D转换 AD_finished = 0; while ( AD_finished == 0 ) //等待A/D转换结束 { AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1测试A/D转换结束否 } ADC_CONTR &= 0xF7; //1111,0111令ADC_START = 0,关闭A/D转换, return (ADC_DA } void main() { P1 = P1 | 0x63; // 0110,0011,要设置为A/D转换的P1.x口,先设为高 P1_ADC_EN = 0x63; //0110,0011, P1的P1.0,P1.1,P1.5,P1.6设置为A/D转换输入脚 //断开P1.0,P1.1内部上拉电阻 get_AD_result(0); //P1.0为A/D当前通道 get_AD_result(1); //P1.1为A/D当前通道
STC系列单片机内部A 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)