📄 uart.c
字号:
#include "config.h"
extern uint8 rcv_buf[39];
extern uint8 Singel_A_CheckTime;
extern uint8 Singel_A_Frequency;
extern uint8 Singel_A_NoFireDelay;
extern uint8 Single_A_Q;
extern uint8 Double_A_CheckTime;
extern uint8 Double_A_Frequency;
extern uint8 Double_A_NoFireDelay;
extern uint8 Double_A_Q;
extern uint8 Double_B_CheckTime;
extern uint8 Double_B_Frequency;
extern uint8 Double_B_NoFireDelay;
extern uint8 Double_B_Q;
extern uint8 Flag_Single_Double;
extern uint8 Flag_A_B;
extern uint8 Flag_Enable_Bypass;
extern uint16 A_pps;
extern uint16 B_pps;
/****************************************************************************
* 名称:SendByte()
* 功能:向串口UART0发送字节数据。
* 入口参数:data 要发送的数据
* 出口参数:无
****************************************************************************/
void SendByte(uint8 data)
{ U0THR = data; // 发送数据
while( (U0LSR&0x40)==0 ); // 等待数据发送完毕
}
/****************************************************************************
* 名称:ISendBuf()
* 功能:将缓冲区的数据发送回主机(使用FIFO),并等待发送完毕。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void ISendBuf(void)
{
/*
uint8 i;
for(i=0; i<1; i++) SendByte(rcv_buf[i]);
while( (U0LSR&0x20)==0 ); // 等待数据发送
*/
}
/****************************************************************************
* 名称:UART1_SendByte()
* 功能:向串口UART1发送字节数据。
* 入口参数:data 要发送的数据
* 出口参数:无
****************************************************************************/
void UART1_SendByte(uint8 data)
{ U1THR = data; // 发送数据
while( (U1LSR&0x40)==0 ); // 等待数据发送完毕
}
// 协议发送部分
// 共6个函数
void ISendBuf1(void)
{
uint8 i;
uint8 SEND_STRING[3];
SEND_STRING[0]=0X02;
SEND_STRING[1]=0X01;
SEND_STRING[2]=0X01;
for(i=0; i<3; i++) SendByte(SEND_STRING[i]);
// print uart1
for(i=0;i<3;i++) UART1_SendByte(0x55);
for(i=0;i<3;i++) UART1_SendByte(SEND_STRING[i]);
while( (U0LSR&0x20)==0 ); // 等待数据发送
}
/*
void ISendBuf2(void)
{
uint8 i;
uint8 SEND_STRING[39];
SEND_STRING[0]=0X26;
SEND_STRING[1]=0X02;
SEND_STRING[2]=CH1_DKUP_A/256;
SEND_STRING[3]=CH1_DKUP_A%256;
SEND_STRING[4]=CH1_DROP_A/256;
SEND_STRING[5]=CH1_DROP_A%256;
SEND_STRING[6]=CH1_MIN_A/256;
SEND_STRING[7]=CH1_MIN_A%256;
SEND_STRING[8]=CH1_MAX_A/256;
SEND_STRING[9]=CH1_MAX_A%256;
SEND_STRING[10]=CH1_GAIN_A;
SEND_STRING[11]=CH1_DKUP_B/256;
SEND_STRING[12]=CH1_DKUP_B%256;
SEND_STRING[13]=CH1_DROP_B/256;
SEND_STRING[14]=CH1_DROP_B%256;
SEND_STRING[15]=CH1_MIN_B/256;
SEND_STRING[16]=CH1_MIN_B%256;
SEND_STRING[17]=CH1_MAX_B/256;
SEND_STRING[18]=CH1_MAX_B%256;
SEND_STRING[19]=CH1_GAIN_B;
SEND_STRING[20]=CH2_DKUP_A/256;
SEND_STRING[21]=CH2_DKUP_A%256;
SEND_STRING[22]=CH2_DROP_A/256;
SEND_STRING[23]=CH2_DROP_A%256;
SEND_STRING[24]=CH2_MIN_A/256;
SEND_STRING[25]=CH2_MIN_A%256;
SEND_STRING[26]=CH2_MAX_A/256;
SEND_STRING[27]=CH2_MAX_A%256;
SEND_STRING[28]=CH2_GAIN_A;
SEND_STRING[29]=CH2_DKUP_B/256;
SEND_STRING[30]=CH2_DKUP_B%256;
SEND_STRING[31]=CH2_DROP_B/256;
SEND_STRING[32]=CH2_DROP_B%256;
SEND_STRING[33]=CH2_MIN_B/256;
SEND_STRING[34]=CH2_MIN_B%256;
SEND_STRING[35]=CH2_MAX_B/256;
SEND_STRING[36]=CH2_MAX_B%256;
SEND_STRING[37]=CH2_GAIN_B;
// 校验字节
check32=0;
for(i=1;i<38;i++) check32+=SEND_STRING[i];
SEND_STRING[38]=check32%256;
for(i=0; i<39; i++) SendByte(SEND_STRING[i]);
// print uart1
for(i=0;i<3;i++) UART1_SendByte(0x55);
for(i=0;i<39;i++) UART1_SendByte(SEND_STRING[i]);
while( (U0LSR&0x20)==0 ); // 等待数据发送
}
void ISendBuf3(void)
{
uint8 i;
uint8 SEND_STRING[8];
SEND_STRING[0]=0X07;
SEND_STRING[1]=0X03;
SEND_STRING[2]=CH1_UV_IDD;
SEND_STRING[3]=CH1_A_B;
SEND_STRING[4]=CH2_UV_IDD;
SEND_STRING[5]=CH2_A_B;
SEND_STRING[6]=OTD_time;
// 校验字节
check32=0;
for(i=1;i<7;i++) check32+=SEND_STRING[i];
SEND_STRING[7]=check32%256;
for(i=0; i<8; i++) SendByte(SEND_STRING[i]);
// print uart1
for(i=0;i<3;i++) UART1_SendByte(0x55);
for(i=0;i<8;i++) UART1_SendByte(SEND_STRING[i]);
while( (U0LSR&0x20)==0 ); // 等待数据发送
}
*/
uint8 Check()
{
return 1;
}
void DataRet()
{
uint8 rcv_length,rcv_type;
uint8 rcv_start;
uint8 i;
if(0==Check())
{
UART1_SendByte(0xcc);
return;
}
rcv_length=rcv_buf[0]+1;
rcv_type=rcv_buf[1];
UART1_SendByte(0xaa);
UART1_SendByte(0xaa);
UART1_SendByte(0xaa);
for(i=0;i<rcv_length;i++) UART1_SendByte(rcv_buf[i]);
switch(rcv_type)
{
case 0x01:
ISendBuf1();
rcv_start=2;
break;
case 0x02:
// 开始握手时对02协议回 02 01 01
if(rcv_start>0)
{
ISendBuf1();
rcv_start--;
}
//else ISendBuf2();
break;
case 0x03:
// 开始握手时对02协议回 02 01 01
if(rcv_start>0)
{
ISendBuf1();
rcv_start--;
}
//else ISendBuf3();
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -