打印

模数转换(adc0832)C驱动

[复制链接]
1708|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
嗜杀成性|  楼主 | 2010-5-7 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面为完整的调试程序,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:

相关帖子

沙发
阿尔帕西诺| | 2010-11-25 15:20 | 只看该作者
楼主复制功力炉火纯青!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

21

帖子

0

粉丝