打印
[资料分享]

ADS7818驱动程序--C51

[复制链接]
444|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyz549040622|  楼主 | 2020-1-27 14:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
时间:    2008-7
子程序名:ADS7818
程序功能:控制模拟/数字转换器ADS7818的工作
程序入口:引脚P1.0(输入信号) ;采样/保持转换控制信号CONV      
     引脚P1.1(输入信号) ;串行数据输出DATA
     引脚P1.2(输入信号) ;串行时钟信号CLK

******************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit Conv=P1^0;    //采样/保持转换控制信号
sbit Data =P1^1;    //串行数据输出
sbit Clk =P1^2;     //串行时钟信号

uint result;            //保存十二位值(结果)
uint temp;

// 数码管驱动相关接口
/*sbit SDATA_595 = P2^0 ;       //串行数据输入
/sbit SCLK_595 = P2^1;       //移位时钟脉冲
/sbit RCK_595   = P2^2;      //输出锁存器控制脉冲
/code uchar TAB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
uchar sz[3];
uint get;
*/
/***********延时子函数***********************/
void delay(uint z)
{
   uint x,y;
for(x=z;x>0;x--)
    for(y=113;y>0;y--);
}

/******************ADS转换读取************************/
uint ADS_7818()
{
char i;              //用于12位数字的计数
result=0;
Conv=1;
Conv=0;              //产生Conv信号的下跳沿,触发采样到保持的转换
Clk=0;           //CLK信号清零
Clk=1;               //产生第一个时钟信号

for(i=11;i>=0;i--)    //12位数的取样循环
{      
   Clk=0;        //循环中产生十二个时钟信号(加之前的),全过程至少要十三个时钟信号
   Clk=1;
// if(Data==1)
   result|=Data;
   Clk=0;
   result<<=1;        
}
Clk=0;
Clk=1;
Clk=0;
Clk=1;                //等待系统稳定(也可以不要)
Clk=0;
Conv=1;               //CONV拉高,即CONV信号复位
    return(result);        //返回值   
}
/*
static void WR_595(unsigned char data num2 )
{
   uchar data count1;
   
   for(count1=0;count1<=7;count1++)
   {
     if((num2&0x80)==0x80) //最高位为1,则向SDATA_595发送1
    SDATA_595=1;        //发出数据的最高位
else
    SDATA_595=0;

   num2<<=1;         //右移位
   SCLK_595=0;    //产生上生沿
         SCLK_595=1;
   
}

}
   */
/********************打开锁存,更新74595输出子程序************/                     

//static void Out_595(void)
//{
// RCK_595=0;
// _nop_();
// _nop_();
// RCK_595=1; /*上升沿锁存数据*/

//}
/****************************算法************************/
//void calculate(void)   //算法
// {
//   sz[0]=(get/1000);
// sz[1]=get/100%10;
// sz[2]=get/10%10;
// sz[3]=get%10;

// }         

/******************ADS转换读取*******************************/
/*
void disp(void)
{
   uchar j,m;
temp=ADS_7818();
get=temp;
P0=get;
    get=temp*5.0*1000/0xfff;
calculate();
    if(sz[0]==0)
{
   j=TAB[m]&0x7F;   
}
else
   j=TAB[m];
WR_595(TAB[sz[0]]);
WR_595(0xfd);
Out_595();
WR_595(TAB[sz[1]]);
WR_595(0xfe);
Out_595();
WR_595(TAB[sz[2]]);
WR_595(0xfb);
Out_595();
WR_595(TAB[sz[3]]);
WR_595(0xf7);
Out_595();
WR_595(0x00);
WR_595(0xff);
Out_595();
}
*/
void wa(void)
{
    uint get;
    temp=ADS_7818();
get=temp;
P2=get;
}
/****************主程序********************************/
void main()
{

while(1)
{
   wa();   
}
}


使用特权

评论回复

相关帖子

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

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2810

主题

19297

帖子

104

粉丝