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

📄 tlc2543.c

📁 tlc2543A/D C51单片机接口程序
💻 C
字号:
#include "type.h"
#include "Tlc2543.h"
#include "intrins.h"
#include "stdio.h"

    
	 /*********InitTlc2543()*****************
      CS由低变高开始第一次I/O周期
	  EOC为高、输入数据寄存器全零、输出寄存器随机
	  第一次转化结果忽略 

	 ****************************************/
     void InitTlc2543(void){
	     CS_2543=FLASE;
	     ibase1=0x0000;
		 ibase2=0x0000;
		 CLK_2543=FLASE;
		 D_2543=TRUE;
	     CS_2543=TRUE;
	     _nop_();
		 CS_2543=FLASE;
		 
     	 
}
/**************GetBit()********************
   说明:按照tag标示获得当前value变量
	     的最高位或最低位
         

 **************************************/
BOOL  GetBit(uint value,BOOL tag){
		   ibase1=value;
           
		   if(tag==1){
		       return MSB;  
			   
		   }
		   else{
               return LSB;  
		   
		   }
           
}
 /***************ShiftBit()*******************
    说明:按照tag标示设置全局变量ibase2的MSB位或LSB位
          设置位后向左或向右一一位。

 **************************************/
void  ShiftBit(BOOL value,BOOL tag) {
           	  
		   if(tag){
		     tempLSB=value;
             ibase2<<=1; 
		   }
		   else{
		     tempMSB=value;
             ibase2>>=1; 
		   }
}

	 /*********tlc2543()*********************
     说明:mode中的D3、D2位决定位长。
	     00或10时为12位;11时为16位,01时为8位
		 D1位是前导控制位、D0是极性位,强制为0
         返回的数据是上一次时钟周期的采样值、转换
		 由CS_2543控制。       
         OEC忽略,功能用延时代替。
    *******************************************/
     uint   Tlc2543RW(uchar addr,uchar mode)
           {
             uchar clock_count; // 时钟计数器			
			 uint PutOut=0x0000;   //读取数据缓冲区   
             uint PutIn;
                  
             cbase=mode;

			{
			uchar temp;
            temp=mode;
            temp>>=2;
            clock_count=(temp==0)?12:((temp+1)*4);//计算时钟个数
            }

            PutIn=(uint)addr;
            PutIn<<=8;            //移到第二个字节
            mode<<=4;             //本身字段互换
            PutIn+=mode;
            PutIn<<=4;            //合成后移到最高位

			//I/o周期时序
            CS_2543=true;
            
            while(clock_count--)
            {
                
			  A_2543=GetBit(PutIn,port1);    //数据加入输入信号线  			  
			  
			  CLK_2543=TRUE;  
              CLK_2543=FLASE;                //启动一个时钟周期     
              ShiftBit(D_2543,port1);        //获得输出信号线上数据                         
              if(port1){
			  	 PutIn<<=1;                 //MSB前导
			  }
			  else{
			     PutIn>>=1;                 //LSB前导
			  }
              
            }
			CS_2543=flase;

            return PutOut;    
     }
 

 /*      void  tlc2543()
              {
               unsigned int putout=0x0000;//数据缓冲
               char clock_count,address_index=1;//时钟计数器和通道地址计数器
               EA=0;
               CS_2543=flase;
               CLK_2543=0;
               A_2543=1;
               D_2543=1;
               for(address_index=1;address_index<MAX_C;address_index=address_index++)
                   //每个模拟通道读数据
                  {
                     B=address_index;
                     clock_count=12;
                     putout=0x0000;
                     cs=true;
                     B=B<<4;        //4位地址周期,MSB导前

                     while(clock_count)  //12个时钟周期
                          {
                           putout=putout<<1;
                           A_2543=ACC_7;//地址最高位送入数据输入端口
                           B=B<<1;
                           AC=D_2543;   //前一个转换周期后的数值最高位移到缓冲位AC
                           if (AC)
                              putout=putout | 0x0001;
                           else
                              putout=putout & 0xfffe;
                           clock_count--;
                           clock=1;

                           clock=0;
                          }
                     cs=flase;
                     if (address_index==1)
                         ad[3]=putout;
                     else
                         ad[address_index-2]=putout;

                    }
              EA=1;
              }
*/   
/*
void    main(void)

{
      uchar i,j;
      uint out;

      SCON = 0x5a;        //按1200 波特率初始化串行口,晶振频率为6MHZ) 
      TMOD = 0x20;  
      TCON = 0x69;  
      TH1 =  0xfd;       
      EA = 1;  
      InitTlc2543();
     
      while(1)
      {
          printf("请输入两个值\n");
		  scanf("%C,%C",&i,&j);
		  out=Tlc2543RW(i-0x30,j-0x30);
		  printf("\n返回值为:   %d\n\n",out);
	   }
}*/

⌨️ 快捷键说明

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