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

📄 gk_serial_uart0.c

📁 工程模板 使用非常方便适用初学者 敬请下载
💻 C
字号:

#pragma CODE					// include assembler listing in .lst file


#include ".\include\gk_serial_uart0.h"

#include ".\include\reg52.h"
#include ".\include\gk_extern_var.h"

#define BOAT_RATE_4800	 0xF4
#define BOAT_RATE_9600	 0xFA
#define BOAT_RATE_19200	 0xFD

#define FRAME_START_VALUE	 0x14
#define FRAME_SYNC_VALUE	 0xCD

static void serial1_isr (void) interrupt 4 using 0
{
	COMM_INT_FALG_1=1;		//通讯中断
	SERIAL_TIME_FACTOR_1=0;		//计时器清零

	if(RI)
	{
		RI=0;		
		
		IMAGE_SBUF_1=SBUF;

		if(LENG_FLAG_1)
		{	
			*SERIAL_RX_DP_1=IMAGE_SBUF_1;
			SERIAL_RX_DP_1++;		
			SERIAL_LENGTH_1--;				
			if(SERIAL_LENGTH_1==0)
			{		
				START_FLAG_1=0;
				FUNC_FLAG_1=0;
				SYNC_FLAG_1=0;
				LENG_FLAG_1=0;
				COMM_INT_FALG_1=0;
				SERIAL_R_COMPLETE_1=1;	
				
//				system_param.tx_error_timer=0;
			}
			return;				
		}
		
		if(FUNC_FLAG_1)
		{	
			SERIAL_LENGTH_1=IMAGE_SBUF_1+2;	
			SERIAL_RX_DP_1=&RECEIVE_BUFFER_1+3;			
			*SERIAL_RX_DP_1=IMAGE_SBUF_1;	
			SERIAL_RX_DP_1++;
			LENG_FLAG_1=1;						

			return;
		}

		if(SYNC_FLAG_1)
		{	
			RECEIVE_BUFFER_1[2]=IMAGE_SBUF_1;		
			FUNC_FLAG_1=1;
															
			return;
		}

		if(START_FLAG_1)
		{	
			if(IMAGE_SBUF_1==FRAME_SYNC_VALUE)
			{
				RECEIVE_BUFFER_1[1]=IMAGE_SBUF_1;
				SYNC_FLAG_1=1;
				
				return;
			}
			START_FLAG_1=0;							
		}

		if(IMAGE_SBUF_1==FRAME_START_VALUE)
		{
			RECEIVE_BUFFER_1[0]=IMAGE_SBUF_1;
			START_FLAG_1=1;
			
			return;
		}
		else
		{
			START_FLAG_1=0;
		}
	}
	
	
	if(TI)
	{
		TI=0;
		SERIAL_LENGTH_1--;
		if(SERIAL_LENGTH_1!=0)
		{
			SBUF=*SERIAL_TX_DP_1;	SERIAL_TX_DP_1++;
			return;
		}
//		SERIAL_T_COMPLETE_1=1;	
	}
}

/*------------------------------------------------------------------------------
void serial1_initialize (void);

This function enables SERIAL 1.  SERIAL 1 will generate a synchronous interrupt
once every 100Hz (10mS).
------------------------------------------------------------------------------*/
void serial1_initialize (void)		// Enable TMR0 for 10mS interrupts
{
//串口1初始化

		SCON=0x50;		//01010000B			;#50H        	


//波特率

//		TL1=0xD9;		//36M 2400 0D9H
//		TH1=0xD9;

		TL1=BOAT_RATE_9600;		//22.1184M 9600 0FAH
		TH1=BOAT_RATE_9600;		//22.1184M 19200 0FDH
				
//定时器0初始化

		TCON|=0x40;		//01000000B		;TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
		TMOD|=0x20;		//00100001B
		PCON=0x00;		//00000000B
		IE|=0x10;

		PS=1;			//最高优先级

		START_FLAG_1=0;
		FUNC_FLAG_1=0;
		SYNC_FLAG_1=0;
		LENG_FLAG_1=0;
		COMM_INT_FALG_1=0;
		SERIAL_R_COMPLETE_1=0;		
}


//0 false
//1 true
unsigned char serial_1_check_sum(void)
{
	return 0;
}

⌨️ 快捷键说明

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