📄 uart_int.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 + -