📄 uart.c
字号:
#include <at89x51.h>
//=========串口0=======================================
#define LenBuf 0x10
data unsigned char time_u;
data unsigned char TIflag;
data unsigned char *head_pt; //接受头指针
data unsigned char *tail_pt; //接受尾指针
data unsigned char uart_buff[LenBuf]; //接受缓冲区
#define START_PT &uart_buff[0]
#define END_PT &uart_buff[LenBuf]
idata unsigned char TxBuf[LenBuf]; //发缓冲区实体
idata unsigned char *inTxBuf,*outTxBuf;//发送缓冲区读写指针
void Uart_Init(void)
{
TMOD = 0X20;
TL1 = 0XFD;
TH1 = 0XFD; //9600
SCON = 0X50;
PCON = 0X80;
TR1 = 1;
REN = 1;
TIflag = 0;
inTxBuf = TxBuf,outTxBuf=TxBuf;
head_pt = START_PT;
tail_pt = START_PT;
}
void Uart0_ISR(void) interrupt 4 using 2
{
if(RI==1)
{
RI=0;
*head_pt=SBUF;
head_pt++;
if(head_pt==END_PT) head_pt=START_PT;
}//if(RI==1)
if(TI)
{
TI=0;
if(inTxBuf==outTxBuf) {TIflag=0;}//TxBuf Empty
else
{
SBUF=*outTxBuf; outTxBuf++;
if(outTxBuf==TxBuf+LenBuf) outTxBuf=TxBuf;
}
}
}
void ComOutChar( unsigned char ch) //串口0发送字符
{
unsigned char *t;
//ES=0;
t=inTxBuf;t++;
if(t==TxBuf+LenBuf) t=TxBuf; // 30 TxBuf[30]缓冲长度
if(t==outTxBuf) {/*ES=1;*/return;} //TxBuf Full
*inTxBuf=ch;
inTxBuf=t;
if(TIflag==0){TIflag=1; TI=1; }
//ES=1;
}
//--------------------------------------
unsigned char ComGetChar() //串口0接收字符
{
unsigned char i;
//if(tail_pt!=head_pt)
i=*tail_pt;
tail_pt++;
if(tail_pt==END_PT)
tail_pt=START_PT;
return i;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -