mcp3202应用程序
- 格式:docx
- 大小:15.86 KB
- 文档页数:2
////////////////////////////////////////////////////////////////////////////////////////////////////// //////////MCP3202与单片机连接管脚/////////////////////////////////////////////////
sbit ADCL=P1^2; sclk (CLK) 串行时钟(CLK)
sbit ADCS=P1^4; cs非片选(关断)
sbit ADDI=P1^0; mosi 串行数据输入
sbit ADDO=P1^1; miso 串行数据输出
////////////////////////////////////////////////////////////////////////////////////////////////////// //函数体void adchange()
//data1为全局变量供给标度变换函数使用
void adchange()
{
unsigned char j;
ADCS = 1;
ADCS = 0;
ADCL=0;
ADDI=1; //start
ADCL=1; //提升时钟,写操作在时钟上升沿触发;
ADCL=0; //结束该位传送,为下次写作准备;
ADDI=1;//mode
ADCL=1;
ADCL=0;
ADDI=0; // channel
ADCL=1;
ADCL=0;
ADDI=1; // output mode
ADCL=1;
ADCL=0;
ADDI=1; // 跳过无效位
ADCL=1;
ADCL=0;
for(j=0;j<12;j++)
{
ADCL=1;
data1=(data1<<1)|ADDO;
ADCL=0;
}
ADCL=1;
ADCS=1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////// //////////AD转换完进行标度变换/////////////////////////////////
//////////标度变换函数
//////////对AD转换的后的数值进行处理转换成物理量,送显示模块。
//////////
void DataProcess()
{
int i;
uint n;
float f;
data1=data1&0x0fff; //避免累积
data2=(5.000/4096.000)*(float)data1;
f = data2 * 1000;
n = (uint)f;
if(nValueLen < 10)
{
nValue[ nValueLen ] = n;
nValueLen ++;
}
else
{
for(i = 0;i < 9 ; i++)
nValue[ i ] = nValue[ i + 1];
nValue[ 9 ] = n;
}
n = 0;
for(i = 0 ;i < nValueLen ; i++)
n += nValue[ i ];
nADValue = n / nValueLen;
return nADValue;
}。