|
ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换 芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎, 其目前已经有很高的普及率。学习并使用ADC0832 可是使我们了解A/D转换器 的原理,有助于我们单片机技术水平的提高。
adc0832 C程序
//============================================ //2005-03-28...2005-03-29 //ADC0834模块的C51程序源文件 //File Name=ADC083X.c //#include #include "DELAY_S.h" #include "ADC083X.h"
//外部全局变量的预定义
//******************************************************* //序号: // HD_ADC083X_S01 //功能: // 端口初始化 //输入: // 无 //输出: // 无 //******************************************************** void adc083x_init(void) { SET_ADC083X_CS; SET_ADC083X_DO; CLR_ADC083X_CLK;
#if TYPE_VAL >=ADC0832 SET_ADC083X_DI; #endif
#if TYPE_VAL >=ADC0834 SET_ADC083X_SARS; #endif
}
//******************************************************* //序号: // HD_ADC083X_S02 //功能: // 读出AD数据字节 //输入: // chanel 通道号以及单、双端设置选择,它的值被类型值限制! // 即有效值是select分别取最低4、3、2位或不使用 // 具体的值参见pdf文档! //输出: // AD转换的结果字节 //******************************************************** uchar adc083x_do_one_change(uchar chanel) { uchar data ad_val; uchar data i;
//转换前的初始化 SET_ADC083X_CS; CLR_ADC083X_CLK; SET_ADC083X_DO;
CLR_ADC083X_CS;
//SARS引脚非必要时可以不使用,以节省引脚资源! #if (TYPE_VAL==ADC0838) //chanel_.3 .2 .1 .0 =0000 通道0+_通道1-, =001 通道2+_通道3-,(双端方式) // SGL/DIF ODD/SIGN SELECT SELECT =0010 通道4+_通道5-, =011 通道6+_通道7-,(双端方式) // =0100 通道0-_通道1+, =0101 通道2-_通道3+,(双端方式) // =0110 通道4-_通道5+, =0111 通道6-_通道7+,(双端方式) // =1000 通道0+, =1001 通道2+,(单端方式) // =1010 通道4+, =1011 通道6+,(单端方式) // =1100 通道1+, =1101 通道3+,(单端方式) // =1110 通道5+, =1111 通道7+,(单端方式) //引脚/SE可以接地,不使用其控制反响字节的输出延时功能!
chanel |=0x10; //附加起始位 for(i=0; i<5; i++) { if( (chanel &0x10)!=0) { SET_ADC083X_DI; } else { CLR_ADC083X_DI; } SET_ADC083X_CLK; CLR_ADC083X_CLK; chanel <<=1; }
#elif (TYPE_VAL==ADC0834) //chanel_.2 .1 .0 =000 通道0+_通道1-, =001 通道2+_通 道3-, (双端方式) // SGL/DIF ODD/SIGN SELECT =010 通道0-_通道1+, =011 通道2-_通 道3+, (双端方式) // =100 通道0+, =101 通道2+, (单端方式) // =110 通道1+, =111 通道3+, (单端方式)
chanel |=0x08; //附加起始位 for(i=0; i<4; i++) { if( (chanel &0x08)!=0) { SET_ADC083X_DI; } else { CLR_ADC083X_DI; } SET_ADC083X_CLK; CLR_ADC083X_CLK; chanel <<=1; }
#elif (TYPE_VAL==ADC0832) //chanel_.1 .0 =00 通道0+_通道1-, =01 通道0-_通道 1+, (双端方式) // SGL/DIF ODD/SIGN =10 通道0+, =11 通道1+, (单端方式)
chanel |=0x04; //附加起始位 for(i=0; i<3; i++) { if( (chanel &0x04)!=0) { SET_ADC083X_DI; } else { CLR_ADC083X_DI; } SET_ADC083X_CLK; CLR_ADC083X_CLK; chanel <<=1; }
#else //缺省时为ADC0831
SET_ADC083X_CLK; CLR_ADC083X_CLK;
#endif
SET_ADC083X_CLK; //数据接收前的转换位 CLR_ADC083X_CLK;
for(ad_val=0, i=0; i<8; i++) { ad_val <<=1; SET_ADC083X_CLK; ad_val +=(JUDGE_ADC083X_DO ==1? 1:0); CLR_ADC083X_CLK; } //对非ADC0831的型号而言,后续波形没有使用!
SET_ADC083X_CS; return(ad_val); }
//=================================== //End Of File
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应 一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟 电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据 校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使 多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现 通道功能的选择。
|