⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad_da.c

📁 51开发板调试程序
💻 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 + -