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

📄 tlc0883.c

📁 TLC0838和tlc5620产生的正弦信号
💻 C
字号:
                 ///////////////////////////////////////////////////////////////////////////////////////////////
//                                               

//           TLC0838驱动程序TLC0838_II.c           
//           uchar adc_tlc0838(uchar channel);
//           函数说明:channel为通道的选择:0……CH0   1……CH1  2……CH2  3……CH3 
//                         当error=0时,返回的值为有效值,当error=1时,返回值无效                               
///////////////////////////////////////////////////////////////////////////////////////////////

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit CS=P2^7;
sbit DI=P2^6;   
sbit CLK=P2^5;     //TLC0838---PIN16
sbit DO=P2^4;                     //TLC0838---PIN17
      //TLC0838---PIN14
    //TLC0838---PIN18
                   //SE接成低电平
sbit sdata=P2^2;
sbit sclk=P2^1;
sbit load=P2^0;

uint adc_tlc0838(uchar channel)
{
    uchar t,i;
    uint Temp1=0,Temp2=0;
    if (channel==0)     t=0;
    else if(channel==1) t=1;
    else if(channel==2) t=4;
    else if(channel==3) t=5;
    else if(channel==4) t=2;
    else if(channel==5) t=3;
    else if(channel==6) t=6;
    else if(channel==7) t=7;
   
    CS=1;
   _nop_();_nop_();_nop_();_nop_();

   
    CLK=0;
    CS=0;            //使AD通道打开
    DI=1;          //Start bit=1
    CLK = 1;
    _nop_();
    _nop_();

    CLK=0;
    CS=0;          
    DI = 0;          
    CLK = 1;
    _nop_();
    _nop_();


    for(i=0;i<3;i++)
    {
      CLK = 0;
      _nop_();
      _nop_();
      if(t&1)DI=1;
      else DI=0;
      t=t>>1;       
      CLK = 1;
      _nop_();
      _nop_();
    }


    CLK=0;
    _nop_();
    _nop_();
    CLK=1;
    _nop_();
    _nop_();


     for(i=0;i<=6;i++)
     {
         CLK = 0;                  //时钟为低电平
         if(DO)
         {                         //如果采集到的位为1
           Temp1=Temp1+1;          //给临时存储Temp1加1
           Temp1=Temp1<<1;
         }         //临时存储器左移一位
         else
           Temp1=Temp1<<1;          //如果采集到的数位为0,临时存储器左移一位
         _nop_();
         _nop_();
         _nop_();
         _nop_();
         CLK = 1;    
      }                             //时钟为高电平,完成一个时钟周期数据采集
       CLK = 0;
       if(DO)  Temp1=Temp1+1;
       if(DO)  Temp2=0x80;

       CLK = 1; 
                                      //采集数据校验          
       
       for(i=0;i<=6;i++)
         {
           CLK=0;
           if(DO){
             Temp2=Temp2>>1;
             Temp2=Temp2+0x80;  }
           else
             Temp2=Temp2>>1;
           CLK = 1; 
         }
    CS = 1;
    
    return Temp1;
    
    
      
}



dac_tlc5620(uchar send_char)
{
        uchar i;
        load=1;
        sclk=1;sdata=0;sclk=0;
        sclk=1;sdata=0;sclk=0;
        sclk=1;sdata=1;sclk=0;

        for(i=0;i<8;i++)
    	{
                sclk=1;
                if(send_char&0x80) sdata=1;
                else sdata=0;
            	sclk=0;
                send_char=send_char<<1;
    	}
        load=0;
        _nop_();
        load=1;

}
//////////////////////////////////////////
delay(int d)
{
        while(--d);
}

main()
{   uchar  idata s[218];
  
    uchar i;
	
   while(1)

   {
     
            
			i=adc_tlc0838(0);
			dac_tlc5620(i);
            
          

	  	}
     
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -