unsigned int adc0832(unsigned char channel) //A-D转换,返回结果 { uchar i=0; //控制接收第一字节数据 uchar j; //控制接收第二字节数据 uint dat=0; //存放16位数据 uchar ndat=0; //存放第二字节B位数据 if(channel==0)channel=2; //0通道输入10 if(channel==1)channel=3; //1通道输入11 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++) //循环接收ADCO832转换的8位数据 { 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左移8位 dat|=ndat;//dat或运算ndat,形成16位数据 return(dat); //返回结果 }
时间: 2024-04-07 19:31:47 浏览: 142
PIC单片机的内部A/D转换
这是一段单片机的C语言程序,用于实现ADC0832模数转换器的A/D转换,并返回转换结果。具体说明如下:
1. 函数名为 `adc0832`,输入参数为 `unsigned char channel` 表示需要转换的通道,返回结果为 `unsigned int` 类型。
2. 首先进行通道选择,将 `channel` 转换为 `ADDI` 引脚需要的值,通过 `ADDI` 控制通道选择,其中 `ADDI` 引脚是ADC0832的输入引脚,用于选择转换的通道,而 `ADCS` 和 `ADCLK` 引脚用于控制转换的时序。
3. 然后通过循环接收ADC0832转换的8位数据,将数据移位并存储到 `dat` 变量中,最终将 `dat` 和 `ndat` 合并成一个16位的数据,并将结果返回。
需要注意的是,该程序中包含了单片机的底层控制代码,需要根据具体的单片机型号和硬件连接进行相应的修改和调试。
阅读全文