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

📄 uart.c

📁 C51源码.其内文件包含spi
💻 C
字号:
		  /*
void Uart0SendData()
{
	byte i,Dat;
	i=5;
	while(i--)
	{
		if(!Uart0SendTask)break;
		//DelayMs(1);
	} 
	           					

	Uart0SendBuff[0]	=	0x55;
	Uart0SendBuff[1]	=	0xaa;
	
	Uart0SendBuff[2]	=	0;;

	//*
	Uart0SendBuff[3]	=	0; 
	Uart0SendBuff[4]	=	1;
	
	Uart0SendBuff[5]	=	18;
	Uart0SendBuff[6]	=	4;

	Uart0SendBuff[7]	=	8;
	Uart0SendBuff[8]	=	0;

	Uart0SendBuff[9]	=	8;
	Uart0SendBuff[10]	=	3;

	Uart0SendBuff[11]	=	8;
	Uart0SendBuff[12]	=	2;

	Uart0SendBuff[13]	=	8;
	Uart0SendBuff[14]	=	6;

	
	Uart0SendBuff[15]	=	0;
	Uart0SendBuff[16]	=	0;

	Uart0SendBuff[17]	=	0;
	Uart0SendBuff[18]	=	0;
	
	Uart0SendBuff[19]	=	0;
	Uart0SendBuff[20]	=	0;
	
	for(Dat=0,i=2;i<21;i++)
		Dat += Uart0SendBuff[i];

	Uart0SendBuff[21]	=   Dat;
	Uart0SendBuff[22]	=	0xbb;
	Uart0SendBuff[23]	=	0xcc;

	Uart0SendAll		=	24;     //要发送数量
	Uart0SendTask		=	1;      //发送标志为1
	Uart0SendNum		=	0;      //已发字节个数
	TI0					=	1;
}
*/
//多串口设置及处理

void Init8123()
{
	byte i=0;
	RST8123   =  1;
	while(i--);
	RST8123   =  0;
	
	SetTChannelsNo(1);
	SetRChannelsNo(1);
	SetWorkModel(1);
	//i = ;
	
	//SCON1 = 0xf0;
	


	//while(i--);
	//SCON1=SCON1&0xFD;

	//
	//SetTChannelsNo(1);
	//SetRChannelsNo(1);
	//SetWorkModel(M_CHANNELS);
}

void SetWorkModel(bit model)   //model==0:多通道模式;   ==1:单通道模式。
{
	MS8123 = model;
}
void SetTChannelsNo(byte no)
{
	switch(no)
	{
	case 1:
		STADDR0 = 1;
		STADDR1	= 0;	
		break;
	case 2:
		STADDR0 = 0;
		STADDR1	= 1;	
		break;
	case 3:
		STADDR0 = 1;
		STADDR1	= 1;	
		break;
	case 0:
		STADDR0 = 0;
		STADDR1	= 0;	
		break;
	}
}
void SetRChannelsNo(byte no)
{
	switch(no)
	{
	case 1:
		SRADDR0 = 1;
		SRADDR1	= 0;	
		break;
	case 2:
		SRADDR0 = 0;
		SRADDR1	= 1;	
		break;
	case 3:
		SRADDR0 = 1;
		SRADDR1	= 1;	
		break;
	case 0:
		SRADDR0 = 0;
		SRADDR1	= 0;	
		break;
	}
}
/*
BYTE Read8123Cmd()
{
	return 0;
}

void Write8123Cmd(byte cmd)
{
}
*/
/*
void Uart1RecPro()
{	
	if(Uart1RecTask)	//接收数据完毕            
	{
		Uart1RecTask = 0;
	}
}
*/
void Uart1Send()
{	
	byte   Dat,i; 
	
//	i=5;
//	while(i--)
//	{
//		if(!Uart1SendTask)
//			break;
//	}
	
	Uart1SendBuff[0]	=	0x55;
	Uart1SendBuff[1]	=	0xaa; 
	  									
	Uart1SendBuff[2]	=	0; 
	Uart1SendBuff[3]	=	0;
	
	Uart1SendBuff[4]	=	0;
	Uart1SendBuff[5]	=	0;

	Uart1SendBuff[6]	=	0;
	Uart1SendBuff[7]	=	0;

	Uart1SendBuff[8]	=	0;
	Uart1SendBuff[9]	=	0;

	Uart1SendBuff[10]	=	0;
	Uart1SendBuff[11]	=	0;

	Uart1SendBuff[12]	=	0;
	Uart1SendBuff[13]	=	0;

	Uart1SendBuff[14]	=	0;
	Uart1SendBuff[15]	=	0;
	
	Uart1SendBuff[16]	=	0;
	Uart1SendBuff[17]	=	0;
	Uart1SendBuff[18]	=	0;
	Uart1SendBuff[19]	=	0;
	
	for(Dat=0,i=2;i<20;i++)
		Dat += Uart1SendBuff[i];

	Uart1SendBuff[20]	=   Dat;
	Uart1SendBuff[21]	=	0xbb;
	Uart1SendBuff[22]	=	0xcc;

	Uart1SendAll	=	2;     		//要发送数量
	Uart1SendTask	=	1;				//发送标志为1
	Uart1SendNum	=	0;   	   		//已发字节个数
	SCON1			=	SCON1|0X02;
}

void UART0_INT() interrupt 4   						//串行口0中断,使用
{
	byte   Dat,i;
	
	if(TI0==1)                  					//查询发送串行口0
	{
		TI0=0;
		if(Uart0SendTask==1)        				//先执行了发送函数
		{
			SBUF0	=	Uart0SendBuff[Uart0SendNum];
			Uart0SendNum++;

			if(Uart0SendNum>=Uart0SendAll)
				Uart0SendTask=0;  					//已发个数=发送数量,则发送标志清0
		}
		
	}

	if(RI0==1)
	{
		RI0    = 0;	

		Dat = SBUF0;
		
		if((Dat==0xaa)&&(preDat==0x55))
		{
			Uart0RecBuff[0] = 0x55;
			Uart0RecBuff[1] = 0xaa;
			Uart0RecNum = 2;
		}
		else if((Dat==0xcc)&&(preDat==0xbb))
		{
			for(i=0;i<Uart0RecNum;i++)
				Uart0RecBuf[i] = Uart0RecBuff[i];
			Uart0RecBuf[Uart0RecNum] = 0xcc;
			Uart0RecLen = Uart0RecNum+1;			
			Uart0RecTask=1;
		}
		else
		{
			Uart0RecBuff[Uart0RecNum] = Dat;
			
			if(Uart0RecNum<30)
				Uart0RecNum++;
		}
		preDat = Dat;
		
	}
}
void UART1_INT() interrupt 20   				//串行口中断1,使用
{
	byte Dat,i;

	if((SCON1&0x02)!=0)          				//查询发送串行口1,TI1
	{
		SCON1=SCON1&0xFD;
		if(Uart1SendTask==1)         			//先执行了发送函数
		{
			SBUF1=Uart1SendBuff[Uart1SendNum];
			Uart1SendNum++;
			if(Uart1SendNum>=Uart1SendAll)	
				Uart1SendTask=0;				//实发个数=发送总和,则发送标志清0
		}
	}


	if((SCON1&0X01)!=0)  
	{
		SCON1=SCON1&0XFE;	  

		Dat = SBUF1;
		
		if((Dat==0xaa)&&(preDat1==0x55))
		{
			Uart1RecBuff[0] = 0x55;
			Uart1RecBuff[1] = 0xaa;
			Uart1RecNum = 2;
		}
		else if((Dat==0xcc)&&(preDat1==0xbb))
		{
			for(i=0;i<Uart1RecNum;i++)
				Uart1RecBuf[i] = Uart1RecBuff[i];
			Uart1RecBuf[Uart1RecNum] = 0xcc;
			Uart1RecLen = Uart1RecNum+1;
			Uart1RecTask=1;
		}
		else
		{
			Uart1RecBuff[Uart1RecNum] = Dat;			

			if(Uart1RecNum<30)
				Uart1RecNum++;
		}
		preDat1 = Dat;
	}
}

⌨️ 快捷键说明

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