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

📄 uart.c

📁 keil c51开发的8279和51单片机通用键盘控制和Led显示及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 + -