|
/*-----------------------------------------------------* *文件描述:本文件包含了A/D转换的3个子函数,分别为: * *(1)advalue:获取1路A/D转换结果 * * unsigned char advalue(unsigned char channel) * *(2)admid:获取中值滤波后的A/D转换结果 * * unsigned char admid(unsigned char channel) * *(3)adave:获取均值滤波后的A/D转换结果 * * unsigned char adave(unsigned char n, * * unsigned char channel) * *-------------《嵌入式应用技术基础教程》--------------*/ //[以下为子程序源代码] //[包含头文件] #i nclude "GP32C.H" #define COCOBit 7 //转换完成标志位 /*advalue:1路A/D转换函数-------------------------------* *功能:获取通道channel的A/D转换结果 * *参数:channel=通道号 * *返回:该通道的A/D转换结果 * *-----------------------------------------------------*/ unsigned char advalue(unsigned char channel) { //选取通道号ADCH4-ADCH0=00000-00111 unsigned char tmp; channel&=0b00011111; tmp=ADSCR&0b11100000; tmp=tmp|channel; ADSCR=tmp; //取A/D转换结果 while(1) if((ADSCR&(1<<COCOBit))!=0) {tmp=ADR; break;} return tmp; } /*admid:1路A/D转换函数(中值滤波)-----------------------* *功能:获取通道channel中值滤波后的A/D转换结果 * *参数:channel=通道号 * *返回:该通道中值滤波后的A/D转换结果 * *-----------------------------------------------------*/ unsigned char admid(unsigned char channel) { unsigned char i,j,k,tmp; //取三次A/D转换结果 i=advalue(channel); j=advalue(channel); k=advalue(channel); //从三次A/D转换结果中取中值 if (i>j) { tmp=i; i=j; j=tmp; } if (k>=j) tmp=j; else if (k>=i) tmp=k; else tmp=i; return tmp; } /*adave:1路A/D转换函数(均值滤波)-----------------------* *功能:对通道channel的A/D转换结果求n次平均值 * *参数:n=平均次数,channel=通道号 * *返回:该通道均值滤波后的A/D转换结果 * *-----------------------------------------------------*/ unsigned char adave(unsigned char n,unsigned char channel) { //求n次A/D转换的平均值 unsigned char i; unsigned int j; j=0; for (i=0;i<n;i++) j+=admid(channel); j=j/n; return (unsigned char)j; } |