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

📄 scom.c

📁 51MCU控制nRF401实现无线通信,调试通过,可用
💻 C
字号:

#include <common.h>
#include <scom.h>

#ifdef T1AsBaudGN	
void InitUART_T1(void) 
{
	TB8 = 0;	//8-bit UART, Model1
	SM2 = 0;	//MCU set RI, no matter RB8=0 or RB8=1		
	PCON |= 0x80;  	//SMOD==PCON.7, double UART0 BaudRate
	SCON |= 0x50;	//8-bit UART, Model1(SM0=0,SM1=1,SM2=0),enable UART receive
	TMOD |= 0x20;  	//T/C1 Mode 2:8-bit with auto-reload from TH1
	TH1 = T1BAUD;	//UART's BaudRate is 9600bps
	TR1 = 1;		//start Timer1
	RI = 0;
	TI = 0;
	ES = 1;			//eable UART interrupt
}
#endif


#ifdef T2AsBaudGN	
void InitUART_T2(void) 
{
	uint temp;
	RCLK = 1;	//RCLK==T2CON.5, designate T2 as UART Receive baudrate generator
	TCLK = 1;	//RCLK==T2CON.4, designate T2 as UART Transmit baudrate generator
	TB8 = 0;	//8-bit UART, Model1
	SM2 = 0;	//MCU set RI, no matter RB8=0 or RB8=1
	//SM2 = 1;	//9-bit UART, exist RB8/TB8,1bit StartBit and 1bit EndBit, RB8==0 or RB8==1	
	PCON |= 0x80; 	//SMOD==PCON.7, double UART BaudRate
	SCON |= 0x50; 	//8-bit UART0, Model1(SM0=0,SM1=1,SM2=0), enable UART receive
	temp = T2BAUD;	//UART's BaudRate is 9600bps, T2BAUD = - XTAL /(32L * BAUDRATE2)
	RCAP2H = temp/256;
	RCAP2L = temp%256;
	TR2 = 1;
	RI = 0;
	TI = 0;
	ES = 1;		//eable UART interrupt		
}
#endif


//---------------------------------------------------------
//功能:从上位机接收"选择通道"命令并传递给相应的变量
//形参:无
//---------------------------------------------------------
void INT_UART_REC(void) interrupt 4 using 3
{
	//uchar RecBuf[3];	//Frame: Head(0xaa) ISPChannel_num checksum
	uchar CheckSum=0;
	uchar i = 0; 
	uint  j = 0;

	ES = 0;
	if( _testbit_(TI) )	{goto GOBACK;}	//意外情况引起的"发送中断",清TI,退出
	//{ ES = 1; return; }
	if( _testbit_(RI) )  
	{ 
		RecBuf[0] = SBUF;
	}
	if(RecBuf[0]==0xaa)
	{
		while( i<2 && j<500 ) //to receive expected bytes within 5ms
		{			 	
			if( _testbit_(RI) )
			{  
				RecBuf[i+1] = SBUF; 
				i++;
			}
			j++;
		}
		if(i == 2) //have received expected bytes within 5ms
		{
			CheckSum += RecBuf[0];
			CheckSum += RecBuf[1];
			CheckSum += RecBuf[2];
			if(CheckSum == 0) //check correct
			{
				COMFlag=SUCCESS;
				if(RecBuf[1]==1)
				{
					LED = 0;
				}
				if(RecBuf[1]==2)
				{
					LED = 1;
				}	
			}
		}
	}
	GOBACK:
	ES = 1;
}


//---------------------------------------------------------
//功能:通过UART0发送一个字节数据
//形参:DataSend待发送数据
//----------------------------------------------------------
//#pragma rb(2)
void SendUART(uchar DataToSend)
{
	ES = 0;
	TI = 0;
	SBUF = DataToSend;
	while( TI==0 ) ;
	TI = 0;
	ES = 1;
}


⌨️ 快捷键说明

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