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

📄 uart_int.c

📁 EasyStudy51-II单片机开发系统的库函数源代码.包含了EasyStudy51-II硬件的全部驱动.
💻 C
字号:


#include "AT89X52.h"
#include "ES51_II.h"
#include "ES51_II_LIB.h"

//	指针
//		在串行中断中使用
static char *pBuff;

//	字符串发送完毕标志
//		在调用PutStr()函数前查询前一字符串是否发送完毕
bit	bTxDone = TRUE;
//	字符串接收完毕标志位
//		在调用GetStr()函数后查询此变量,可判断字符串接收是否完成
bit bRxDone = FALSE;
//	
static unsigned char RxLength;	
//
static unsigned char TxLength;


//	发送字符串标志
static bit bTxStr = TRUE;
//	接收字符串标志
static bit bRxStr = TRUE;


//	中断方式发送字符串
//		以字符串结尾标志'\0'停止发送
void PutStr_( char *pstr )
{
	bTxStr = TRUE;						//	发送字符串
	bTxDone = FALSE;					//	发送完成标志位,初始为假	
	ES = 1;								//	允许串行中断
	pBuff = pstr;
	SBUF = *pBuff;						//	发送第一字节数据,发送完毕将引起中断
	pBuff++;								//	
}

//	中断方式发送一组数据
void PutData_(unsigned char length,char *pbuff)
{
	bTxStr = FALSE;						//	发送数据
	bTxDone = FALSE;					//	发送完成标志位,初始为假	
	ES = 1;								//	允许串行中断
	TxLength = length;
	pBuff = pbuff;
	SBUF = *pBuff;						//	发送第一字节数据,发送完毕将引起中断
	pBuff++;							
	TxLength--;
}

//	中断方式接收字符串
//		以回车符['\r']结束接收;
void GetStr_(char *pbuff )
{
	bRxStr = TRUE;						//	接收字符串	
	bRxDone = FALSE;					//	接收完成标志位 初始为假
	ES = 1;								//	允许串行中断

	pBuff = pbuff;					
}

//	中断方式接收数据
void GetData_(unsigned char length,char *pbuff)
{
	bRxStr = FALSE;						//	接收数据
	bRxDone = FALSE;					//	接收完成标志位 初始为假
	ES = 1;								//	允许串行中断

	pBuff = pbuff;						
	RxLength = length;					
}

//	串行中断函数
void UART_INT(void)	interrupt SIO_VECTOR //using 0
{
	unsigned char tmp;

	if( TI )							//	传输完毕中断处理
		{
		TI = 0;
		if( bTxStr == TRUE)				//	处理发送字符串
			{
			if( *pBuff != 0  )			//	判断是否到达字符串末尾
				SBUF = *pBuff;			//	
			else{				
				bTxDone = TRUE;			//	完成字符串发送
				ES = 0;					//	传输完毕,禁止串行中断
				}
			}
		else{							//	处理发送数据		
			if( TxLength-- > 0)			
				SBUF = *pBuff;			//	数据发送未完成
			else{
				bTxDone = TRUE;			//	数据发送完成	
				ES = 0;
				}	
			}						
		}
	else if( RI )							//	接收数据中断处理
		{								//	把接收到的数据放到缓冲区中
		RI = 0;
		tmp = SBUF;
		if( bRxStr == TRUE )
			{
			if( tmp != '\r' )
				*pBuff = SBUF;
			else{
				*pBuff = SBUF;	
				bRxDone = TRUE;			//	字符串接收完毕
				ES = 0;				
				}
			}
		else{
			if( RxLength > 0 )
				*pBuff = tmp;
			if( --RxLength == 0 )
				{ 
				bRxDone = TRUE;			//	字符串接收完毕
				ES = 0;
				}	
			}
		}
	pBuff++;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -