📄 int_uart.c
字号:
#include "int_uart.h"
#include "Atmel/at89c5131.h"
#include "lcd.h"
BYTE TLength = 0;
BYTE RLength = 0;
static xdata BYTE UART_RFIFO[MaxLength];
static xdata BYTE UART_TFIFO[MaxLength];
static pdata BYTE R_Tail;
static pdata BYTE R_Head;
static pdata BYTE T_Tail;
static pdata BYTE T_Head;
static bit uart;
//--------------------------------------------------------------------
void InterruptUART(void) interrupt 4 using 2
{
// int i;
register BYTE temp;
if (TI)
{
TI = 0;
if (TLength != 0 )
{ SBUF = UART_TFIFO[T_Tail];
if (++T_Tail == MaxLength)
{ T_Tail = 0; }
TLength--;
}
else
{
uart = 0;
}
}
else
{
RI = 0;
temp = SBUF;
if (!(RLength == MaxLength))
{ UART_RFIFO[R_Head] = temp;
if (++R_Head == MaxLength)
{ R_Head = 0; }
RLength++;
}
}
}
//--------------------------------------------------------------------
bit uart_putchar(const BYTE Value)
{
/* Disable Interrupt */
EA = 0;
if (TLength == MaxLength) /* Is UART0 Tx FIFO full */
{
EA = 1; /* Enable Interrupt */
return 0; } /* Return FALSE */
UART_TFIFO[T_Head] = Value; /* Put a byte to UART0 Tx FIFO */
TLength++;
if (++T_Head == MaxLength) /* Is T_Head0 point to UART0 Tx FIFO tail */
{ T_Head = 0; } /* Set T_Head0 point to UART0 Tx FIFO head */
EA = 1; /* Enable Interrupt */
return 1;
}
//--------------------------------------------------------------------
bit uart_getchar(BYTE *Value)
{
EA = 0; /* Disable Interrupt */
if (RLength == 0 ) /* Is UART0 Rx FIFO empty */
{
EA = 1; /* Enable Interrupt */
return 0;
} /* Return FALSE */
*Value = UART_RFIFO[R_Tail]; /* Get a Byte from UART0 Rx FIFO */
if (++R_Tail == MaxLength) /* Is R_Tail0 point to UART0 Rx FIFO tail */
{ R_Tail = 0; } /* Set R_Tail0 point to UART0 Rx FIFO head */
RLength--; /* */
EA = 1; /* Enable Interrupt */
return 1;
}
//--------------------------------------------------------------------
void InitUART(void)
{
R_Head = 0;
R_Tail = 0;
T_Head = 0;
T_Tail = 0;
RLength = 0;
TLength = 0;
ES = 1; /* Enable UART 0 Interrupt */
}
//--------------------------------------------------------------------
void ResetUART(void)
{
ES = 0;
R_Head = 0;
R_Tail = 0;
T_Head = 0;
T_Tail = 0;
RLength = 0;
TLength = 0;
ES = 1; /* Enable UART 0 Interrupt */
}
//--------------------------------------------------------------------
void DriveUART(void)
{
ES = 1;
EA = 1;
uart = 1;
TI = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -