📄 comc.c
字号:
//comC.c
#include "head.h"
extern uint baud;
extern uchar COM_BUFFER[1024];
extern uchar Command;
extern uchar Function;
extern uchar Key_Flag;
extern uchar Key_Value;
extern uchar Vol_Flag;
extern uchar Vol_Value;
extern uchar Data_Flag;
extern uint Data_Len;
extern uchar CheckSum_ComC(uchar *p_data,uchar len);
void comC_send_string(uchar *p_data,uint len)
{
uint i,j;
uint n,k;
uchar status_lsr;
CSC = 0;
if(len>16)
{
n=len/16;
k=len%16;
for(i=0;i<n;i++)
{
for(j=0;j<16;j++)
{
TL16C554_C_THR=*(p_data+16*i+j);
}
while((((status_lsr=TL16C554_C_LSR)&0x20)==0)&&
(((status_lsr=TL16C554_C_LSR)&0x10)==0));
}
for(i=0;i<k;i++)
{
TL16C554_C_THR=*(p_data+16*n+i);
}
}
else
{
for(i=0;i<len;i++)
{
TL16C554_C_THR=*(p_data+i);
}
}
CSC = 1;
}
interrupt [EXT_INT6] void ext_int6_isr(void)
{
uchar data;
uchar status_c_iir;
uchar status_c_lsr;
uchar status_c_msr;
uint i;
uint len;
uint comC_t1=0;
uint comC_t2=0;
static uint ComC_Cnt=0;
static uchar ComC_Buf[64];
CSC=0;
status_c_iir = TL16C554_C_IIR;
status_c_msr = TL16C554_C_MSR;
status_c_lsr = TL16C554_C_LSR;
data = TL16C554_C_RBR;
if((ComC_Cnt == 0)&&(data == 0xA5))
{
ComC_Cnt = 1;
ComC_Buf[0] = 0xA5;
}
else if(ComC_Cnt > 0)
{
ComC_Cnt++;
ComC_Buf[ComC_Cnt-1] = data;
if((ComC_Buf[0]==0xA5)&&(ComC_Cnt==6)&&((ComC_Buf[1]==0xB1)||
(ComC_Buf[1]==0xB3)||(ComC_Buf[1]==0xB5)||(ComC_Buf[1]==0xBC)||
(ComC_Buf[1]==0xBD)||(ComC_Buf[1]==0xBE)||(ComC_Buf[1]==0xC3)))
{
if(CheckSum_ComC(ComC_Buf,5)==ComC_Buf[5])
{
Key_Flag = 1;
Command = ComC_Buf[1];
Key_Value = ComC_Buf[4];
}
ComC_Cnt = 0;
}
else if((ComC_Buf[0]==0xA5)&&(ComC_Cnt==7)&&(ComC_Buf[1]==0xB8))
{
if(CheckSum_ComC(ComC_Buf,6)==ComC_Buf[6])
{
Vol_Flag = 1;
Vol_Sel = ComC_Buf[4];
Vol_Value = ComC_Buf[5];
}
ComC_Cnt = 0;
}
else if((ComC_Buf[0]==0xA5)&&(ComC_Cnt==10)&&
((ComC_Buf[1]==0xB9)||(ComC_Buf[1]==0xBA)))
{
if(CheckSum_ComC(ComC_Buf,9)==ComC_Buf[9])
{
Data_Flag = 1;
Data_Len = 4;
Command = ComC_Buf[1];
for(i=0;i<4;i++)
COM_BUFFER[i]=ComC_Buf[i+5];
}
ComC_Cnt = 0;
}
else if((ComC_Buf[0]==0xA5)&&(ComC_Cnt==(ComC_Buf[2]*256+ComC_Buf[3]+5))&&
((ComC_Buf[1]==0xB2)||(ComC_Buf[1]==0xB7)||(ComC_Buf[1]==0xC2)||
(ComC_Buf[1]==0xC4)))
{
len = ComC_Buf[2]*256+ComC_Buf[3];
if(CheckSum_ComC(ComC_Buf,len+4)==ComC_Buf[ComC_Cnt-1])
{
Data_Flag = 1;
Data_Len = len;
Command = ComC_Buf[1];
for(i=0;i<len;i++)
COM_BUFFER[i]=ComC_Buf[i+4];
}
ComC_Cnt = 0;
}
else if((ComC_Buf[0]==0xA5)&&(ComC_Cnt==(ComC_Buf[2]*256+ComC_Buf[3]+6))&&
((ComC_Buf[1]==0xB4)||(ComC_Buf[1]==0xB6)))
{
len = ComC_Buf[2]*256+ComC_Buf[3];
if(CheckSum_ComC(ComC_Buf,len+5)==ComC_Buf[ComC_Cnt-1])
{
Data_Flag = 1;
Data_Len = len;
Command = ComC_Buf[1];
Function = ComC_Buf[4];
for(i=0;i<len;i++)
COM_BUFFER[i]=ComC_Buf[i+5];
}
ComC_Cnt = 0;
}
else
{
for (comC_t1=1;comC_t1<ComC_Cnt;comC_t1++)
{
if(ComC_Buf[comC_t1]==0xA5)
{
ComC_Cnt=ComC_Cnt-comC_t1;
for(comC_t2=0;comC_t2<ComC_Cnt;comC_t2++)
{
ComC_Buf[comC_t2]=ComC_Buf[comC_t1+comC_t2];
}
break;
}
}
if(ComC_Cnt==64)
ComC_Cnt=0;
}
}
CSC=1;
EIFR |= 0x40;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -