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

📄 sio.c

📁 飞利浦10碟VCD控制程序
💻 C
字号:
#include <REG52.H>
#include <extern.h>
#include <constant.h>
#include <function.h>


void SendStr(unsigned char *sdata)
{
	ES=0;
	while(*sdata!='\0')
	{
		SBUF=*sdata;
		while(!TI);
		TI=0;
		sdata++;
	}
	ES=1;
}



void SendBuffer(unsigned char *sdata,unsigned char num)
{
	ES=0;
	while(num)
	{
		SBUF=*sdata++;
		while(!TI);
		TI=0;
		num--;
	}
	ES=1;
}


//功能:先设置帧首和帧尾,然后计算校验和,再把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_Status(unsigned char HiOrMid)
{
	if(!ReadTV_Status(buf_sio[11],buf_eeprom))
	{
	    buf_sio[12]=HiOrMid;
	    buf_sio[10]=buf_eeprom[0];
	}
	else
	    SetSuccessFlag(CMDFAILURE);
	SioTransmit();
}



void ModulateTV(void)
{	unsigned char i;

	for(i=0;i<buf_sio[10];i++)
		buf_eeprom[i]=buf_sio[9-i];

	if(!SetTV_Module(buf_sio[11],buf_eeprom,buf_sio[10]))
		SetSuccessFlag(CMDSUCCESS);
	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_MidFreq:
			UploadTV_Status(RETURNTV_MidFreq);
			break;
		case READTV_HighFreq:
			UploadTV_Status(RETURNTV_HighFreq);
			break;
		case SETTV_HighFreq:
			ModulateTV();
			break;
		case SETTV_MidFreq:		//0x0A
			ModulateTV();
			break;
                case TESTCDCFORWARD:        //CDC快进
                     WriteByteToCDC(CDCNext);
                     ms_delay=54;
                     while(ms_delay);
                     CDCRewrite();
                     for(i=0;i<buf_sio[11];i++)
                     {
                         ms_delay=95;
                         while(ms_delay);
                         CDCRewrite();
                     }
                             
                        break;
		default:
			break;
	}
}

⌨️ 快捷键说明

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