📄 serial.c
字号:
#include "config.h"
unsigned char serial_read(void);
unsigned char serial_in_buf_space(void);
unsigned char ReadSerial(unsigned char data *cp);
unsigned char serial_read_1(void);
unsigned char serial_read_2(void);
unsigned char idata serial_in_buf[SERIAL_IN_BUF_LONG];
unsigned char data serial_in_hard;
unsigned char data serial_in_end;
void InitSerial(void)
{
SCON=0x50;
PCON=0x80;
TMOD=TMOD&0x0f;
TMOD=TMOD|0x20;
TH1=0xf3; //com is 4800 b/s
TL1=0xf3;
TR1=1;
ES=1;
EA=1;
}
unsigned char Buf[NBYTE-2];
void main(void)
{
InitSerial();
while(1)
{
if(ReadSerial(Buf)==1)
{
SBUF='O';
while(TI==0);
TI=0;
SBUF='K';
while(TI==0);
TI=0;
SBUF='!';
while(TI==0);
TI=0;
}
}
}
unsigned char ReadSerial(unsigned char data *cp)
{
unsigned char i;
unsigned char temp,Sum;
temp=serial_in_buf_space();
if(temp<(NBYTE)) return 0;
temp=serial_read();
if(temp!=STARTBYTE1) return 0;
temp=serial_read_1();
if(temp!=STARTBYTE2) return 0;
temp=serial_read();
Sum=STARTBYTE1+STARTBYTE2;
for(i=0;i<NBYTE-3;i++)
{
temp=serial_read_1();
if(temp==STARTBYTE1)
{
temp=serial_read_2();
if(temp==STARTBYTE2) return 0;
}
temp=serial_read();
*cp++=temp;
Sum+=temp;
}
temp=serial_read_1();
Sum+=temp;
if(Sum!=0) return 0;
temp=serial_read();
return 1;
}
void comm(void) interrupt 4 using 1
//"串行口中断"
{
if(RI==1)
{
RI=0;
serial_in_buf[serial_in_end]=SBUF;
if(((serial_in_end+1)%SERIAL_IN_BUF_LONG)==serial_in_hard) return;
serial_in_end++;
serial_in_end=serial_in_end%SERIAL_IN_BUF_LONG;
return;
}
}
unsigned char serial_read(void)
{
unsigned char cc;
cc=serial_in_buf[serial_in_hard];
serial_in_hard=(serial_in_hard+1)%SERIAL_IN_BUF_LONG;
return cc;
}
unsigned char serial_in_buf_space(void)
{
unsigned char inend_temp;
inend_temp=serial_in_end-serial_in_hard;
if(inend_temp>SERIAL_IN_BUF_LONG) inend_temp=SERIAL_IN_BUF_LONG+inend_temp;
return inend_temp;
}
unsigned char serial_read_1(void)
{
return serial_in_buf[serial_in_hard];
}
unsigned char serial_read_2(void)
{
unsigned char cc;
cc=(serial_in_hard+1)%SERIAL_IN_BUF_LONG;
return serial_in_buf[cc];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -