📄 v24int.c
字号:
/****************************************************************************
【文 件 名 称】V24INT.C
【功 能 描 述】串口中断服务程序
【程 序 版 本】1.0
****************************************************************************/
//***************************************************************************
#include "INC\REG516.H"
#include "INC\DECLARE.H"
//***************************************************************************
bit Serial_Flag;
unsigned char idata V24_Rx_Buf[V24_RX_BUF_SIZE];
unsigned char data V24_Inp_Ptr,V24_Out_Ptr;
unsigned char idata Data_Len;
unsigned char idata V24_Data_Status;
unsigned char idata Data_Rec_Temp[DATA_LEN_SIZE];
/****************************************************************************
名称: V24_Init
参数:
返回值: 无
描述: 串口初始化子程序
创建日期:
修改日期:
****************************************************************************/
void V24_Init( )
{
TMOD = (TMOD & 0x0f) | 0x20;
TL1 = 0xfd;
TH1 = 0xfd;
TR1 = 1;
PCON = PCON & 0x7F;
SM0 =0;
SM1 =1; /* mode 1 8 bit variable baud */
SM2 =1;
REN =1; /* enable serial reception */
TI =0; /* clear interrupt flags */
RI =0;
ET1 =0; /* disable timer 1 interrupt */
ES = 1;
Serial_Flag = 0;
V24_Data_Status = 0;
V24_Inp_Ptr = 0;
V24_Out_Ptr = 0;
Data_Len = 0;
}
/****************************************************************************
名称: Serial_Interrupt
参数: 无
返回值: 无
描述: 串口中断服务子程序
创建日期:2004-2-18
修改日期:
****************************************************************************/
void Serial_Interrupt(void) interrupt 4 using 2
{
if (RI)
{
RI = 0;
V24_Rx_Buf[V24_Inp_Ptr++] = SBUF;
if (V24_Inp_Ptr == V24_RX_BUF_SIZE) V24_Inp_Ptr = 0;
}
if (TI)
{
TI = 0;
Serial_Flag = 0;
}
}
/****************************************************************************
名称: Send_Byte(BYTE c)
参数: c: 发往串口的字符
返回值: 无
描述: 往串口输出一个字符
创建日期:2004-2-18
修改日期:
****************************************************************************/
void Send_Byte(unsigned char c)
{
while (Serial_Flag);
SBUF = c;
Serial_Flag = 1;
}
/****************************************************************************
名称: Send_Str(BYTE *Str)
参数: Str: 发往串口的字符串
返回值: 无
描述: 往串口输出字符串
创建日期:2004-2-18
修改日期:
****************************************************************************/
void Send_Str(unsigned char *str)
{
for (;*str;Send_Byte(*str++));
}
/****************************************************************************
名称: BufferIsNotEmpty
参数:
返回值: 0或1
描述: 判断Modem缓冲区是否为空,不空返回真
创建日期:2004-2-18
修改日期:
****************************************************************************/
/*unsigned char BufferIsNotEmpty(void)
{
return !(V24_Inp_Ptr == V24_Out_Ptr);
} */
/****************************************************************************
名称: Get_Char
参数: buf_id: 串口号
返回值: c: BYTE
描述: 从缓冲区中最后存储的字符,若缓冲区空则返回0
创建日期:2004-2-18
修改日期:
****************************************************************************/
/*unsigned char Get_Char()
{
unsigned char c = 0;
if (V24_Inp_Ptr != V24_Out_Ptr)
{
c = V24_Rx_Buf[V24_Out_Ptr++];
if (V24_Out_Ptr > V24_RX_BUF_SIZE - 1) V24_Out_Ptr = 0;
}
return c;
} */
/****************************************************************************
名称: Read_V24
参数:
返回值: One_Line_Status: 1-收到行数据 0-没有收到完整的行数据
描述: 从缓冲区中接收一行数据到Line_Data[30]
创建日期:2004-2-18
修改日期:
****************************************************************************/
unsigned char Read_V24()
{
unsigned char c ;
if (V24_Inp_Ptr != V24_Out_Ptr)
{
c = V24_Rx_Buf[V24_Out_Ptr++];
if(V24_Out_Ptr == V24_RX_BUF_SIZE)
{
V24_Out_Ptr = 0;
}
if (V24_Data_Status == 0)
{
if ((c!= 0x0d)&&(c!=0x0a))
{
V24_Data_Status = 1;
Data_Len = 0;
Data_Rec_Temp[Data_Len++] = c;
}
return 0;
}
if (V24_Data_Status == 1)
{
if ((c == 0x0d)||(c == 0x0a))
{
if (Data_Len>0)
{
V24_Data_Status = 0;
return 1;
}
}
else
{
Data_Rec_Temp[Data_Len++] = c;
if(Data_Len == DATA_LEN_SIZE)
{
Data_Len --;
}
}
}
}
return 0;
}
/****************************************************************************
名称: Cur_V24_Rx_Clear
参数: 无
返回值: 无
描述:
创建日期:2004-2-18
修改日期:
****************************************************************************/
void Cur_V24_Rx_Clear()
{
V24_Out_Ptr =0;
V24_Inp_Ptr =0;
V24_Data_Status =0;
Data_Len =0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -