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

📄 sio.c

📁 金星车载TV PAL制频头UV7305BDI控制源代码
💻 C
字号:
#include <REG52.H>
#include <extern.h>
#include <constant.h>
#include <function.h>

//功能:先设置帧首和帧尾,然后计算校验和,再把buf_sio缓冲区中的数据发送出去
//
//
void SioTransmit()
{
	unsigned char i;
	buf_sio[13]=SIO_CMD_HEAD;
	buf_sio[1] =buf_sio[12];
	buf_sio[1] +=buf_sio[11];
	buf_sio[1] +=buf_sio[10];
	buf_sio[1] +=buf_sio[9];
	buf_sio[1] +=buf_sio[8];
	buf_sio[1] +=buf_sio[7];
	buf_sio[1] +=buf_sio[6];
	buf_sio[1] +=buf_sio[5];
	buf_sio[1] +=buf_sio[4];
	buf_sio[1] +=buf_sio[3];
	buf_sio[1] +=buf_sio[2];
	buf_sio[1] =~buf_sio[1];
	buf_sio[1] +=1;
	buf_sio[0] =SIO_CMD_END;

	i=SIO_BUF_LEN-1;
	ES=0;
	do
	{
		SBUF=buf_sio[i];
		while(!TI);
		TI=0;
	}while(i--);
	ES=1;
}


//功能:清除缓冲区的数据,使其全0
//buf:缓冲区地址
//num:缓冲区大小
void ClearBuffer(unsigned char *buf,unsigned char num)
{
 while(num)
 {
 	*buf=0x00;
	buf++;
	num--;
 }
}



//功能:设置发送缓冲区
//cFlagSuccess:串口数据帧中的命令字
//
void SetSuccessFlag(unsigned char cFlagSuccess)
{
	buf_sio[12]	=cFlagSuccess;
	buf_sio[11]	=0x00;
	buf_sio[10]	=0x00;
	buf_sio[9]	=0x00;
	buf_sio[8]	=0x00;
	buf_sio[7]	=0x00;
	buf_sio[6]	=0x00;
	buf_sio[5]	=0x00;
	buf_sio[4]	=0x00;
	buf_sio[3]	=0x00;
	buf_sio[2]	=0x00;
}


//功能:发送指定的EEPROM数据
//addr:eeprom首地址
//num:读取的eeprom数据数量
void UploadEeprom(unsigned char addr,unsigned char num)
{
//	buf_sio[11]=addr;
//	buf_sio[10]=num;
	ClearBuffer(buf_eeprom,8);
	ReadEEPROM(addr,buf_eeprom,num);
	buf_sio[9]=buf_eeprom[0];
	buf_sio[8]=buf_eeprom[1];
	buf_sio[7]=buf_eeprom[2];
	buf_sio[6]=buf_eeprom[3];
	buf_sio[5]=buf_eeprom[4];
	buf_sio[4]=buf_eeprom[5];
	buf_sio[3]=buf_eeprom[6];
	buf_sio[2]=buf_eeprom[7];
	SioTransmit();
}



//功能:通过串口写EEPROM
//
//
void DownloadEeprom(void)
{
	buf_eeprom[0]=buf_sio[9];
	buf_eeprom[1]=buf_sio[8];
	buf_eeprom[2]=buf_sio[7];
	buf_eeprom[3]=buf_sio[6];
	buf_eeprom[4]=buf_sio[5];
	buf_eeprom[5]=buf_sio[4];
	buf_eeprom[6]=buf_sio[3];
	buf_eeprom[7]=buf_sio[2];
	if(WriteEEPROM(buf_sio[11],buf_eeprom,buf_sio[10]))
		SetSuccessFlag(CMDFAILURE);
	else
		SetSuccessFlag(CMDSUCCESS);
	SioTransmit();
}

/*
void UploadTV_M200TSatus(void)
{
	if(!ReadTV_M200T(buf_eeprom))
	{
		buf_sio[11]=buf_eeprom[0];
		SioTransmit();
	}
	else
	{
		SetSuccessFlag(CMDFAILURE);
		SioTransmit();
	}
}
*/
//-----------SIO Data Deal------------------

//功能:串口接收数据的处理
//
//
void DealSioData(void)
{
	unsigned char chksum,i;

	chksum=0;
	for(i=SIO_BUF_LEN-2;i>0;i--)
	{
		chksum+=buf_sio[i];
	}
	if(chksum)
	{
		SetSuccessFlag(SUMERROR);
		SioTransmit();
		return;
	}
	switch(buf_sio[12])
	{
		case CMDTEST:
			SioTransmit();
			break;
		case CMDVENDOR:
			break;
		case UPLOADEEPROM:
			UploadEeprom(buf_sio[11],buf_sio[10]);
			break;
		case DOWNLOADEEPROM:
			DownloadEeprom();
			break;
		case READTV_M200T:
			//UploadTV_M200TSatus();
			break;

		case SETTV_M200T:
			break;
		case SETTVPAL:
		/*	for(i=0;i<buf_sio[11];i++)
			{
				buf_eeprom[i]=buf_sio[9-i];
			}
			if(!SetTVPal(buf_sio[10],buf_sio[11],buf_eeprom))
			{
				SetSuccessFlag(CMDSUCCESS);
				SioTransmit();
			}
			else
			{
				SetSuccessFlag(CMDFAILURE);
				SioTransmit();
			} */
			break;
		case READTVPAL:
			/*if(!ReadTVPal(buf_eeprom,3))
			{
				buf_sio[11]=buf_eeprom[0];
				buf_sio[10]=buf_eeprom[1];
				buf_sio[9]=buf_eeprom[2];
				SioTransmit();
			}
			else
			{
				SetSuccessFlag(CMDFAILURE);
				SioTransmit();
			}  */
			break;
		default:
			break;
	}
}

⌨️ 快捷键说明

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