| 
 
| 下面为完整的调试程序,proteus仿真通过: 
 #include <intrins.h>
 #include <REG51.H>
 
 #define ulong unsigned long
 #define uint unsigned int
 #define uchar unsigned char
 
 sbit ADCS =P1^3; //ADC0832 chip seclect
 sbit ADDI =P1^1; //ADC0832 data in
 sbit ADDO =P1^1; //ADC0832 data out
 sbit ADCLK =P1^0; //ADC0832 clock signal
 
 unsigned int Adc0832(unsigned char channel);
 
 /************
 读ADC0832函数
 ************/
 
 //采集并返回
 unsigned int Adc0832(unsigned char channel)
 {
 uchar i=0;
 uchar j;
 uint dat=0;
 uchar ndat=0;
 
 if(channel==0)channel=2;
 if(channel==1)channel=3;
 ADDI=1;
 _nop_();
 _nop_();
 ADCS=0;//拉低CS端
 _nop_();
 _nop_();
 ADCLK=1;//拉高CLK端
 _nop_();
 _nop_();
 ADCLK=0;//拉低CLK端,形成下降沿1
 _nop_();
 _nop_();
 ADCLK=1;//拉高CLK端
 ADDI=channel&0x1;
 _nop_();
 _nop_();
 ADCLK=0;//拉低CLK端,形成下降沿2
 _nop_();
 _nop_();
 ADCLK=1;//拉高CLK端
 ADDI=(channel>>1)&0x1;
 _nop_();
 _nop_();
 ADCLK=0;//拉低CLK端,形成下降沿3
 ADDI=1;//控制命令结束
 _nop_();
 _nop_();
 dat=0;
 for(i=0;i<8;i++)
 {
 dat|=ADDO;//收数据
 ADCLK=1;
 _nop_();
 _nop_();
 ADCLK=0;//形成一次时钟脉冲
 _nop_();
 _nop_();
 dat<<=1;
 if(i==7)dat|=ADDO;
 }
 for(i=0;i<8;i++)
 {
 j=0;
 j=j|ADDO;//收数据
 ADCLK=1;
 _nop_();
 _nop_();
 ADCLK=0;//形成一次时钟脉冲
 _nop_();
 _nop_();
 j=j<<7;
 ndat=ndat|j;
 if(i<7)ndat>>=1;
 }
 ADCS=1;//拉低CS端
 ADCLK=0;//拉低CLK端
 ADDO=1;//拉高数据端,回到初始状态
 dat<<=8;
 dat|=ndat;
 return(dat);            //return ad data
 }int main(void)
 {
 while(1)
 P3=Adc0832(0);
 }
 :victory:
 | 
 |