📄 uart._c
字号:
//UART0接口
unsigned char put_done=0;
unsigned char recv_done=0;
unsigned char recvBuff[128];
unsigned char newMSG=0;
unsigned char i;
unsigned char *serial_recv_MSG;
unsigned char change_flag=0;
unsigned char serial_recv_flag=0;
#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
recv_done=1;
serial_get();
}
#pragma interrupt_handler uart0_tx_isr:21
void uart0_tx_isr(void)
{
put_done=1;
}
//**********Put a single byte to the serial port.
void put(unsigned char data)
{
while(!put_done)
;
UDR0=data;
put_done=0;
}
//***********Receive a single byte from the serial port.
unsigned char get()
{
unsigned char data;
while(!recv_done)
;
data=UDR0;
recv_done=0;
return data;
}
//**********Put a serial Frame to the serial port.
void serial_put(unsigned char *serial_MSG)
{
unsigned char m;
unsigned char length;
unsigned char data;
put(0x7E);
serial_MSG++;
length=*serial_MSG;
for(m=0;m<length;m++)
{
data=*serial_MSG;
if(data==0x7E)
{
put(0x7D);
put(0x5E);
}
else if(data==0x7D)
{
put(0x7D);
put(0x5D);
}
else
{
put(data);
}
}
put(0x7E);
}
//**********Receive a serial Frame from the serial port.
unsigned char *serial_get()
{
unsigned char data;
data=get();
if(data==0x7E&&newMSG==0) //symbol for new msg
{
i=0;
newMSG=1;
recvBuff[i]=data;
serial_recv_MSG=&recvBuff[i];
i++;
}
else if(data==0x7E&&newMSG==1)
{
newMSG=0;
recvBuff[i]=data;
i=0;
serial_recv_flag=1; //一条消息发送完毕,在处理完本条消息后需要被置零
}
else
{
if(data==0x7D)
{
change_flag=1;
}
else if(change_flag==1)
{
switch(data)
{
case 0x5E: recvBuff[i]=0x7E;
change_flag=0;
i++;
break;
case 0x5D: recvBuff[i]=0x7D;
change_flag=0;
i++;
break;
default: break;
}
}
else
{
recvBuff[i]=data;
i++;
}
}
return serial_recv_MSG;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -