⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 v24int.c

📁 对遥控器PT2262编码芯片进行解码的源程序。已经在多个产品中使用。
💻 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 + -