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

📄 2543.c

📁 tlc2543芯片的驱动程序
💻 C
字号:
#include"reg52.h"
#include"string.h"
#include"stdio.h"
#include"intrins.h"
#define uchar unsigned char
#define uint  unsigned int
/*********握手信号宏定义********/
#define suc	 	0x2a
#define err		0xf0
#define ready	0x0a
#define over  	0xaf
#define addr  	0x02
#define kaishi  0x7f
#define MAX     250
sbit cs=P2^7;
sbit dataout=P2^6;
sbit datain=P2^5;
sbit ioclock=P2^4;
sbit eoc=P2^0;
sbit WDI=P1^0;

//控制信号
sbit 	TS= P1^1 ;
sbit 	SS=P1^2;
//sbit	OS=P3^2	;   
sbit flag=P1^3;
uint len; 
uchar t1h,t1l,t2h=0,t2l=0,t1;
uint xdata dat[MAX] _at_  0x01ff;	 //测试数据

uint bdata adsample=0;//12位采样数据
sbit adsample0=adsample^0;
sbit adsample1=adsample^1;
sbit adsample2=adsample^2;
sbit adsample3=adsample^3;
sbit adsample4=adsample^4;
sbit adsample5=adsample^5;
sbit adsample6=adsample^6;
sbit adsample7=adsample^7;
sbit adsample8=adsample^8;
sbit adsample9=adsample^9;
sbit adsample10=adsample^10;
sbit adsample11=adsample^11;

uchar com=0x40;

/*******************************/

 void  delayms(uchar t)
{
uchar i;
	while(t--)
	{
	for(i=0;i<30;i++) ;
	}  
}
void delayus(uchar t)
{
	while(t--);
}	
void init_serial(void)
{
	TMOD=0x20;
	TH1=0xea;
	TL1=0xea;
	TR1=1;
	SCON=0xd0; //1001 0000工作方式3, 波特率为固定
	PCON=0X80; //SMOD=1;
	SM2=1;//多机通信
	EA=0;//关闭所有中断
}
 /***********发送数据通信及校验信息*******************/
void senddata(uchar xdata *buf)	 // 
{
	uint i;
	uchar lenh,lenl,ecc,temp;
//	len=2*MAX;
	t1=0;t1h=0;t1l=0;t2h=0;t2l=0;
	//len=strlen(buf);
/*****发送字节数*******/ 
  
	 lenh=(uchar)(len/256);
	 lenl=(uchar)(len&0xff);
	 ecc=lenl;
//发送高位
	 	TI=0;
		TB8=0;
		SBUF=lenh;
		while(!TI);
		TI=0; 		
//发送低位	
		TI=0; 
		TB8=0;
		SBUF=lenl;
		while(!TI);
		TI=0;	

//发送t1
		TI=0; 
		TB8=0;
		SBUF=t1;
		while(!TI);
		TI=0; 
//发送t1h		
		TI=0; 
		TB8=0;
		SBUF=t1h;
		while(!TI);
		TI=0;
//发送t1l
		TI=0; 
		TB8=0;
		SBUF=t1l;
		while(!TI);
		TI=0;
//发送t2h
	    TI=0; 
		TB8=0;
		SBUF=t2h;
		while(!TI);
		TI=0;
//发送t2l
		TI=0; 
		TB8=0;
		SBUF=t2l;
		while(!TI);
		TI=0;  	
/*发送数据*/
//	delayms(1000);
	for(i=0;i<MAX;i++)
	{               
                                temp=(*buf)/256;
                             	ecc=ecc^temp;
		TB8=0;
		SBUF=temp;
		while(!TI);
		TI=0;

                                temp=(uchar)(*buf);
                                ecc=ecc^temp;
		TB8=0;
		SBUF=temp;
		
		while(!TI);
		TI=0;
                                buf++;
	}

/*发送校验字节*/
	TB8=0;
	SBUF=ecc;
	while(!TI);
	TI=0;
}	
/******************数据采集与处理***********************/
uint read2543(void)
{
	uchar i;
	uint adsample=0;//12位采样数据
//	com<<=4;
	//delayms(1);
	//eoc=1;
                while(!eoc);
	  	
	ioclock=1;
                cs=0;
		for(i=1;i<=12;i++)
		{
                                 ioclock=0;
                                 adsample=adsample<<1;
		 if(dataout)
		adsample|=0x01;
		datain=(bit)(com);
		
		//delayus(5);
                                
                                ioclock=1;
		_nop_();
		//delayus(5);
                                
		com<<=1;
	//	adsample=adsample<<1;
		} 
                                ioclock=0;
		cs=1; 
		
				
	return(adsample); 
}	

⌨️ 快捷键说明

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