打印

adc0832 program

[复制链接]
1011|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
李不走寻常路|  楼主 | 2014-11-20 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*ADC0832模数转换子程序已通过实验*/
/*author 李猛*/
/*单片机at89s52 晶振1100592M*/
/*单位 辽宁工程技术大学研究生学院 QQ:744180121*/
#include<at89x52.h>
#include<intrins.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
//位定义
sbit CS_=P2^0;
sbit CLK=P2^1;
sbit DO =P2^2;
sbit DI =P2^3;

uint8 ad0832_converter(bit channel);


void main(void)
{
        while(1)
        {
                P0=ad0832_converter(0);
        }               
}
/*adc0832模数转换函数,返回值为转换的数字量,形参为输入通道的选择,0为CH0通道,1为CH1通道。*/
uint8 ad0832_converter(bit channel)
{
        uint8 dat0=0,dat1=0,i;
        //启动转换
        CS_=0;
        _nop_();
    CLK=0;
        DI =1;
        CLK=1;  //时钟信号来一个上升沿
        //通道选择
        if(0==channel) //选择通道0
        {       
                CLK=0;     //选择单端模式
                DI =1;
                CLK=1;
                _nop_();
                CLK=0;           //选择通道CH0
                DI =0;
                CLK=1;               
        }
        else
        {
                CLK=0;           //选择单端模式
                DI =1;
                CLK=1;
                _nop_();
                CLK=0;           //选择通道CH1
                DI =1;
                CLK=1;       
        }
        CLK=0;
        //读取数据
        for(i=0;i<8;i++)
        {
                dat0<<=1;  //数据右移一位
                CLK=1;
                _nop_();
                CLK=0;   //时钟信号一个下降沿
                if(DO==1)
                {
                        dat0|=0x01;
                }               
        }
        for(i=0;i<8;i++)
        {
                dat1>>=1;
                if(DO==1)
                {
                        dat1|=0x80;
                }       
                CLK=1;
                _nop_();
                CLK=0;   //时钟信号一个下降沿
               
        }
        CS_=1;
        return (dat0==dat1)?dat0:0x01;       
}

相关帖子

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

本版积分规则

4

主题

92

帖子

3

粉丝