📄 ad_da.c
字号:
#include<reg52.h>
#include <intrins.h>
#include "Define.h"
#include "Set.h"
////////////2006.11.08添加///////////////////
#define Wait1us _nop_();
#define Wait2us {_nop_();_nop_();}
#define Wait4us {Wait2us;Wait2us;}
#define Wait8us {Wait4us;Wait4us;}
#define Wait10us {Wait8us;Wait2us;}
#define Wait30us {Wait10us;Wait8us;Wait4us;Wait2us;}/
///////////////////////////////
/************定义接口总线**************/
sbit ADClock = P1 ^ 5; //时钟口线
sbit ADDataOut = P1 ^ 4; //数据输出口线
sbit ADChipSelect = P2 ^ 7; //片选口线
/************接口总线定义结束**********/
///////////////////////////////////////
sbit SPI_CLK = P3^5;
sbit SPI_DATA = P3^3;
sbit CS_DA = P3^4;
sbit CS_AD = P2^7;
sbit SPI_IOCLK = P1^5;
sbit SPI_DAOUT = P1^4;
//unsigned char code TAB[24]={0};
void Delay(UINTDATA time)
{
while(time--);
}
/************************DA****************************/
void DATrans(UINTDATA da)//TLC5615DA转换
{
UCHARDATA i = 0;
UINTIDATA tempa = 0;
UINTIDATA tempb = 0;
tempa = da<<2;
//da<<=6;
CS_DA = 0;
SPI_CLK=0;
for (i = 0;i < 16;i++)
{
tempb = tempa;
SPI_DATA=(bit)(tempa&0x8000);
SPI_CLK=1;
tempa = tempa<<1;
_nop_();
SPI_CLK=0;
}
SPI_CLK = 1;
CS_DA=1;
//SPI_CLK=0;
for (i=20;i>0;i--)
{
;
}
}
/******************************************************/
/************************AD****************************/
UCHAR ADTrans(void)//TLC549
{
UCHAR i;
UCHAR u;
CS_AD = 0;
Delay(5);
for(i=0;i<8;i++) //read data
{
SPI_IOCLK=0;
u=(u<<=1)|SPI_DAOUT;
SPI_IOCLK=1;
_nop_();
}
CS_AD=1;
Delay(20);
//u = SBUF;
return(u); //return ad data
}
/******************************************************/
/*********函数名称:ADCSelChannel********
*
*功能:转换指定通道的模拟量为数字量
*
*说明:
*
*位置:
*
****************************************/
unsigned char ADCSelChannel(void)
{
UCHARIDATA ConvertValue = 0;
UCHARIDATA i;
ADChipSelect = 1; //芯片复位
ADChipSelect = 0;
ADChipSelect = 1;
ADClock = 0;
Wait4us;
ADChipSelect = 0; //芯片起始
Wait4us; //等待延时
for (i = 0; i < 8; i ++) //输入采样转换时钟
{
ADClock = 1;
ADClock = 0;
}
ADChipSelect = 1; //开始转换
Wait10us; //等待转换结束
ADChipSelect = 0; //读取转换结果
Wait4us;
for (i = 0; i < 8; i ++) //
{
ADClock = 1;
//ConvertValue <<= 1;
////////
ACC = ConvertValue;
//////////
ADDataOut = 1;
Wait10us;
if (ADDataOut)
{
ConvertValue = ConvertValue|0x01;
}
else
{
ConvertValue = ConvertValue&0xfe;
}
ADClock = 0;
///
ConvertValue = ConvertValue<<1;
}
ADChipSelect = 1;
return (ConvertValue); //返回转换结果
}
/************ADCSelChannel函数结束**********/
///////////////////main////////////////////////////
/*
void main()
{
UCHARIDATA terminal = 0;
UINTDATA temp=0;
//while(1)
{
//terminal = ADTrans(); ADCSelChannel(void)
//terminal = ADCSelChannel();
P1 = 4;
//P2 = 1;
P2 = ADCSelChannel();
terminal = ADCSelChannel();
//P2 = P2|terminal;
//P2=ADTrans();
temp=temp|terminal;
DATrans(temp);
//Wait10us
//_nop_();
while(1)
{
P2 = ADCSelChannel();
/////////
terminal = ADCSelChannel();
temp=temp|terminal;
DATrans(0xffff);
Wait10us
_nop_();
}
//P2=ADTrans();
}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -