uchar ADC0832(bit mode,bit channel) //AD转换,返回结果 { uchar i,dat,ndat; ADCS = 0;//拉低CS端 _nop_(); _nop_(); ADDI = 1; //第1个下降沿为高电平 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADDI = mode; //低电平为差分模式,高电平为单通道模式。 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADDI = channel; //低电平为CH0,高电平为CH1 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿3 ADDI = 1;//控制命令结束(经试验必需) dat = 0; //下面开始读取转换后的数据,从最高位开始依次输出(D7~D0) for(i = 0;i < 8;i++) { dat <<= 1; ADCLK=1;//拉高时钟端 _nop_(); _nop_(); ADCLK=0;//拉低时钟端形成一次时钟脉冲 _nop_(); _nop_(); dat |= ADDO; } ndat = 0; //记录D0 if(ADDO == 1) ndat |= 0x80; //下面开始继续读取反序的数据(从D1到D7) for(i = 0;i < 7;i++) { ndat >>= 1; ADCLK = 1;//拉高时钟端 _nop_(); _nop_(); ADCLK=0;//拉低时钟端形成一次时钟脉冲 _nop_(); _nop_(); if(ADDO==1) ndat |= 0x80; } ADCS=1;//拉高CS端,结束转换 ADCLK=0;//拉低CLK端 ADDI=1;//拉高数据端,回到初始状态 if(dat==ndat) return(dat); else return 0; }参照上述代码设计4个adc0832的程序代码
时间: 2024-02-05 09:04:21 浏览: 130
用ATC0832设计的两路电压表
以下是设计4个ADC0832的程序代码,其中使用了单通道模式和CH0通道:
```
uchar ADC0832_CH0(bit mode)
{
uchar i, dat, ndat;
ADCS = 0; //拉低CS端
_nop_();
_nop_();
ADDI = 1; //第1个下降沿为高电平
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADDI = mode; //低电平为差分模式,高电平为单通道模式。
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADDI = 0; //低电平为CH0
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿3
ADDI = 1; //控制命令结束(经试验必需)
dat = 0;
//下面开始读取转换后的数据,从最高位开始依次输出(D7~D0)
for (i = 0; i < 8; i++)
{
dat <<= 1;
ADCLK = 1; //拉高时钟端
_nop_();
_nop_();
ADCLK = 0; //拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
dat |= ADDO;
}
ndat = 0;
//记录D0
if (ADDO == 1)
ndat |= 0x80;
//下面开始继续读取反序的数据(从D1到D7)
for (i = 0; i < 7; i++)
{
ndat >>= 1;
ADCLK = 1; //拉高时钟端
_nop_();
_nop_();
ADCLK = 0; //拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
if (ADDO == 1)
ndat |= 0x80;
}
ADCS = 1; //拉高CS端,结束转换
ADCLK = 0; //拉低CLK端
ADDI = 1; //拉高数据端,回到初始状态
if (dat == ndat)
return (dat);
else
return 0;
}
//设计4个ADC0832的程序代码
uchar ADC0832_CH1(bit mode)
{
uchar i, dat, ndat;
ADCS = 0; //拉低CS端
_nop_();
_nop_();
ADDI = 1; //第1个下降沿为高电平
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADDI = mode; //低电平为差分模式,高电平为单通道模式。
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADDI = 1; //高电平为CH1
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿3
ADDI = 1; //控制命令结束(经试验必需)
dat = 0;
//下面开始读取转换后的数据,从最高位开始依次输出(D7~D0)
for (i = 0; i < 8; i++)
{
dat <<= 1;
ADCLK = 1; //拉高时钟端
_nop_();
_nop_();
ADCLK = 0; //拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
dat |= ADDO;
}
ndat = 0;
//记录D0
if (ADDO == 1)
ndat |= 0x80;
//下面开始继续读取反序的数据(从D1到D7)
for (i = 0; i < 7; i++)
{
ndat >>= 1;
ADCLK = 1; //拉高时钟端
_nop_();
_nop_();
ADCLK = 0; //拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
if (ADDO == 1)
ndat |= 0x80;
}
ADCS = 1; //拉高CS端,结束转换
ADCLK = 0; //拉低CLK端
ADDI = 1; //拉高数据端,回到初始状态
if (dat == ndat)
return (dat);
else
return 0;
}
uchar ADC0832_CH2(bit mode)
{
uchar i, dat, ndat;
ADCS = 0; //拉低CS端
_nop_();
_nop_();
ADDI = 1; //第1个下降沿为高电平
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADDI = mode; //低电平为差分模式,高电平为单通道模式。
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADDI = 0; //低电平为CH0
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿3
ADDI = 1; //控制命令结束(经试验必需)
dat = 0;
//下面开始读取转换后的数据,从最高位开始依次输出(D7~D0)
for (i = 0; i < 8; i++)
{
dat <<= 1;
ADCLK = 1; //拉高时钟端
_nop_();
_nop_();
ADCLK = 0; //拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
dat |= ADDO;
}
ndat = 0;
//记录D0
if (ADDO == 1)
ndat |= 0x80;
//下面开始继续读取反序的数据(从D1到D7)
for (i = 0; i < 7; i++)
{
ndat >>= 1;
ADCLK = 1; //拉高时钟端
_nop_();
_nop_();
ADCLK = 0; //拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
if (ADDO == 1)
ndat |= 0x80;
}
ADCS = 1; //拉高CS端,结束转换
ADCLK = 0; //拉低CLK端
ADDI = 1; //拉高数据端,回到初始状态
if (dat == ndat)
return (dat);
else
return 0;
}
uchar ADC0832_CH3(bit mode)
{
uchar i, dat, ndat;
ADCS = 0; //拉低CS端
_nop_();
_nop_();
ADDI = 1; //第1个下降沿为高电平
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADDI = mode; //低电平为差分模式,高电平为单通道模式。
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADDI = 1; //高电平为CH1
ADCLK = 1; //拉高CLK端
_nop_();
_nop_();
ADCLK = 0; //拉低CLK端,形成下降沿3
ADDI = 1; //控制命令结束(经试验必需)
dat = 0;
//下面开始读取转换后的数据,从最高位开始依次输出(D7~D0)
for (i = 0; i < 8; i++)
{
dat <<= 1;
ADCLK = 1; //拉高时钟端
_nop_();
_nop_();
ADCLK = 0; //拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
dat |= ADDO;
}
ndat = 0;
//记录D0
if (ADDO == 1)
ndat |= 0x80;
//下面开始继续读取反序的数据(从D1到D7)
for (i = 0; i < 7; i++)
{
ndat >>= 1;
ADCLK = 1; //拉高时钟端
_nop_();
_nop_();
ADCLK = 0; //拉低时钟端形成一次时钟脉冲
_nop_();
_nop_();
if (ADDO == 1)
ndat |= 0x80;
}
ADCS = 1; //拉高CS端,结束转换
ADCLK = 0; //拉低CLK端
ADDI = 1; //拉高数据端,回到初始状态
if (dat == ndat)
return (dat);
else
return 0;
}
```
阅读全文