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

📄 commcfg.c

📁 通讯设置程序
💻 C
字号:
#include "config.h"
#include "reg924.h"

#define P89LPCxx

unsigned char delay;


// buffer define
//串口接收循环缓冲
u8_t idata recvbuf[SBUFSIZE];
u8_t recvtail;
u8_t recvstart;

//串口发送循环缓冲
u8_t idata sendbuf[SBUFSIZE];
u8_t sendtail;
u8_t sendstart;

// 串口状态
bit bSending;

//=================================================
//串口初始化函数
//=================================================
void SerialInit()
{
	u8_t i;

#ifdef P89LPCxx
	u16_t tmp;
	BRGCON = 0;						// disable band generate
	PCON = PCON & 0xdf;				// SMOD0 = 0; enable SM0 SM1
	SCON = 0x00;					// clear SCON
	SCON = (SCON & 0x3F) | 0x40;	// at mode1
	tmp = (OSC_FREQ / COM_BAND) - 16;
	BRGR0 = tmp;
	BRGR1 = tmp >> 8;
	//BRGR0 = 0xf0; BRGR1 = 0x02;	// 9600
	BRGCON = 0x03;					// use BRG for comm bank generation
	SSTAT = 0x00;					// FE/BR/OE enable, DBUF

	REN = 1;
#else //51xx
	u8_t i;

	TMOD = 0x21 ;			//the timer/counter mode
	IEN0 = 0x92 ;			// enable to interrupt
	TL1 = TH1 = 0xfd ;		// 9600bPS;
	TR1 = 1 ;

	SCON = 0x70 ;
#endif //P89LPCxx

	ES = 1 ;

	for(i = 0; i < SBUFSIZE; i ++)
	{
		recvbuf[i] = 0;
		sendbuf[i] = 0;
	}
	recvstart = recvtail = 0;
	sendstart = sendtail = 0;
        
	// initial RS485 at receive MODE
#ifdef COM_MODE_RS485
	RS485_SW = ~RS485_RL;
#endif //COM_MODE_RS485
}


//=================================================
//串口中断处理函数
//=================================================
void serial ( ) interrupt 4 using 1 
{
	if ( RI )
	{	
		RS485_SW = RS485_RL;
		RI = 0 ;
		if((recvtail != (1+recvstart)) && (recvtail != (recvstart+1-SBUFSIZE)))
		{

			recvbuf[recvstart] = SBUF ;
			recvstart ++;
			if(recvstart == SBUFSIZE) recvstart = 0;
		}
	}
	else
	{
		if ( TI )
		{
#ifdef	COM_MODE_RS485
			RS485_SW = ~RS485_RL;
#endif
			TI = 0;
			if(sendtail != sendstart)
			{   
				SBUF = sendbuf[sendtail];
				sendtail ++;
				if(sendtail == SBUFSIZE)
				{
					sendtail = 0;
				}
				
			}
#ifdef	COM_MODE_RS485
			else // send over
			{
				RS485_SW = RS485_RL;
				bSending = 0;
			}
#endif
		}
	}
} 

//=================================================
//串口中断处理函数
//=================================================
void SerialStart()
{
	if(~bSending)
	{
		bSending = 1;
		TI = 1;
	}
}

⌨️ 快捷键说明

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