时间: 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();
}
}
|