📄 sio.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 + -