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

📄 uart.c

📁 51单片机加rt8019硬件平台,上web方案及详细代码
💻 C
字号:
//---------------------uart.c---------------------
#include "includes.h"
extern uchar volatile cmd;

#define CF_HEADWH			0xa5			// 通讯帧前导高字节
#define CF_HEADWL			0x6d			// 通讯帧前导低字节

typedef enum tagGSSTATEWORD
{
	GS_STANDBY = 0x10,				// 等待

	GS_GET_HEADH = 0x20,			// 接收帧前导高字节
	GS_GET_HEADL,					// 接收帧前导低字节
	GS_GET_LOFH,					// 接收帧长度高字节
	GS_GET_LOFL,					// 接收帧长度低字节
	GS_GET_TAGADRH,				// 接收来源地址高字节
	GS_GET_TAGADRL,				// 接收来源地址低字节
	GS_GET_FRAME					// 接收帧内容 
	
} GSSTATEWORD;

uchar rs = GS_STANDBY;
//------------------------------------------------------- 
void init_uart(uchar cBaudRate)
{
// 初始化T1作波特率发生器
	ES 	= FALSE;
	TR1 	= FALSE;
	TMOD 	= TMOD & 0x0f | 0x20; //定时器1工作于方式2(8位自动重载)
	TH1 	= cBaudRate;
	PCON 	= 0x80;	  			  // 若SMOD=1, 波特率倍增
	TR1 	= TRUE;
	SCON 	= 0x50;				  // 方式1 波特率可变的10位异步方式,包括1个起始位8个数据位1个停止位 
//	SCON 	= 0xd0;				  // 方式2 固定波特率的11位UART方式,比方式1增加了第9位,来自TB8
	IP 	= 0x10;
	ES 	= TRUE; 			  //开中断
}

//------------------------------------------------------- 
void uart_send(uchar *buf, uint len)
{
	while(len)
	{
		len--;
	 	SBUF=*buf++;
		while(~TI){}
		TI=0;
	} 
}
//-------------------------------------------------------
const uchar code HexAsc[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//-------------------------------------------------------

void print(uchar *label,uchar * value,uchar  len,uchar type)
{
	uchar s[4];
	uchar data i=0,j=0;	

	while(*label)
	{ 	 	
		SBUF = *label++;	
		while(~TI){}
		TI=0;
	}
	
	if(type)
	{
		for(i=0;i<len;i++)
		{
		 	SBUF = *value++;	
			while(~TI){}
			TI=0;
		}	
	}
	else
	{
		for(i=0;i < (len*3);i=i+3 )
		{
	 		s[0]=	HexAsc[*value >>4];
			s[1]= HexAsc[*value &0x0f];
			s[2]=' ';
			for(j=0;j<3;j++)
			{
				SBUF = s[j];	
				while(~TI){}
				TI=0;
			}
			value++; 
		} 		
	}
	SBUF = '\n';	
	while(~TI){}
	TI=0;
}
//-------------------------------------------------------
void uart_receive(void) interrupt 4 using 1	//串口接收命令进入ISP
{
/*
   static uint temp;
   
   if (RI  && !FrameOK)
	{
	   switch (rs)
		{         
	      case GS_STANDBY:
            p = urxbuf;
			   if (SBUF == CF_HEADWH)
				   { rs = GS_GET_HEADL;	*p = CF_HEADWH;}		
			   break;

	      case GS_GET_HEADL:
			   if (SBUF == CF_HEADWL)				
				   rs = GS_GET_LOFH; 			
			   break;

	      case GS_GET_LOFH:
			   len += SBUF;
            len = len << 8;
			   rs = GS_GET_LOFL;
			   break;

		   case GS_GET_LOFL:
			   len += SBUF;
			   len -= 4;
			   temp = len;
			   p = DataBuf;
			
			   rs = GS_GET_FRAME;
			   break;
	      case GS_GET_FRAME:
			   *p++ = SBUF;			
			   if (--temp == 0)
				  { rs = GS_STANDBY; FrameOK=TRUE;}
			   break;
	      default:
	         rs = GS_STANDBY;
            p = urxbuf;
	         break;
		}
      RI=0;	
	}
 
*/ 
 if(RI==1)
 	{	  	 	
		ACC=SBUF;
		if(ACC==0x12)
		 {
			delay_us(DY200MS);
			delay_us(DY200MS);
			delay_us(DY200MS);
			delay_us(DY200MS);
			delay_us(DY200MS);
			ISP_CONTR=0x60;
		 } 
		cmd=ACC;		
		RI=0;					
	}   
} 

//-------------------------------------------------------

⌨️ 快捷键说明

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