📄 serial.c
字号:
//初值 = 256-(2SMOD * fosc) / (fx*32*12)
// 初值 = (2097152*波特率-Fosc)/(波特率*32)
// 11.0592 22.1184
// 1200 FEE0 fdc0
// 9600 FFDC ffb8
// 19200 ffee ffdc
#define T2BAUDH 0xff
#define T2BAUDL 0xdc
#define SerialSMaxlen 20
#define SerialRMaxlen 30
uchar idata SerialRBuf[SerialRMaxlen] ;
uchar *inSerialRBuf,*outSerialRBuf ; //
uchar idata SerialSBuf[SerialSMaxlen] ;
uchar *inSerialSBuf,*outSerialSBuf ; //
bit TIflag ; //Note:It must be 1
void Serial_Init()
{
EA = 0 ;
T2CON = 0x30 ;
RCAP2H = T2BAUDH ;
RCAP2L = T2BAUDL ;
TH2 = T2BAUDH ;
TL2 = T2BAUDL ;
SCON = 0x50 ;
TR2 = 1 ;
ET2 = 0 ;
ES = 1 ;
PS = 1 ;
TIflag = 1 ;
inSerialRBuf = SerialRBuf ;
outSerialRBuf = SerialRBuf ;
inSerialSBuf = SerialSBuf ;
outSerialSBuf = SerialSBuf ;
EA = 1 ;
}
void Serial_RP_Interrupt() interrupt 4 using 3
{
uchar temp ;
uchar *t ;
if(TI ==1)
{
TI = 0 ;
if(inSerialSBuf == outSerialSBuf) //SerialSBuf Empty
{
TIflag = 1 ;
return ;
}
SBUF = *outSerialSBuf ;
outSerialSBuf++ ;
if(outSerialSBuf==SerialSBuf+SerialSMaxlen)
outSerialSBuf = SerialSBuf ;
}
if(RI ==1)
{
RI = 0 ;
temp = SBUF ;
t = inSerialRBuf ;
t++ ;
if(t==SerialRBuf+SerialRMaxlen) t = SerialRBuf ;
*inSerialRBuf = temp ;
if(t==outSerialRBuf) return ; //SerialRBuf Full
inSerialRBuf = t ;
}
}
void Serial_Send_Byte(uchar ch)
{
uchar *t ;
t = inSerialSBuf ;
t++ ;
if(t == SerialSBuf+SerialSMaxlen)
t = SerialSBuf ;
if(t == outSerialSBuf)
return ; //SerialSBuf Full
*inSerialSBuf = ch ;
inSerialSBuf = t ;
if(TIflag)
{
TIflag = 0 ;
TI = 1 ;
}
}
void Serial_SendCommand(uchar len,uchar *in)
{
uchar i ;
// if(len == 0) return ;
EA = 0 ;
for(i=0;i<len;i++)
Serial_Send_Byte(*(in+i)) ;
EA = 1 ;
}
uchar GetSerialData(uchar *in)
{
if(inSerialRBuf == outSerialRBuf) return 0 ; //SerialRBuf Empty
*in = *outSerialRBuf ; outSerialRBuf ++ ;
if(outSerialRBuf == (SerialRBuf+SerialRMaxlen)) outSerialRBuf = SerialRBuf ;
return 1 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -