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

📄 scom.c

📁 使用单片机C语言编的单片机实验板与上位机的串口通信(可接收上位机命令和根据命令给上位机上传上位机需要的数据)程序
💻 C
字号:
/************************************************************/
//function of serial communication
//initialize serial port
void InitSCom( void )
{
	IndexC = 0;
	IE = 0x90;
	TMOD = 0x20;//T1 mode 2
	TH1 = 0xE8;//preset 
	TL1 = 0xE8;
	PCON = 0x00;//no SMOD
	SCON = 0x50;//serial port mode 1
	TR1 = 1;//start the serial com1
	return;
}

void SCom( void ) interrupt 4
{
	BYTE Command[13]; //array  for store command from conputer
	
	if ( RI == 1 )
	{
		RI = 0;
	    Command[IndexC] = SBUF;
	    IndexC++;
	    if ( IndexC == 13 )
	    {
		    IndexC = 0;
		    //convert ASCII code from computer into decimal
		    Command[1] = ( ( Command[2] - 48 ) << 4 ) | ( Command[3] - 48 ); //begin hour
		    Command[2] = ( ( Command[5] - 48 ) << 4 ) | ( Command[6] - 48 ); //begin minute
		    Command[3] = ( ( Command[8] - 48 ) << 4 ) | ( Command[9] - 48 ); //end hour
		    Command[4] = ( ( Command[11] - 48 ) << 4 ) | ( Command[12] - 48 ); //end minute
		    
		    if ( Command[0] != 'S' )
		        return;
		    else
	        {	        	
	        	Display( 0x09,16,0xBC,0x40,0 ); //clear screen
	        	Display( 0x09,16,0xBC,0x50,0 ); 
	        	Display( 0x09,16,0xBC,0x60,0 ); 
	        	Display( 0x09,16,0xBC,0x70,0 ); 
	        	Display( 0x09,16,0xBE,0x40,0 );
	        	 
	        	Display( 0x21,16,0xBC,0x40,0 ); //正
                Display( 0x22,16,0xBC,0x50,0 ); //在
                Display( 0x27,16,0xBC,0x60,0 ); //搜
                Display( 0x28,16,0xBC,0x70,0 ); //索
                
	    	    //search for matched data
	    	    for ( ADDR_SCOM = 0; ADDR_SCOM <= 32760; ADDR_SCOM  = ADDR_SCOM + 6 )
	    	    {
	    	    	 DisplayCurrTime();
	    		     //DAQstr.Hour = XBYTE[ Index*6+3 ];
	    		     if ( ( XBYTE[ ADDR_SCOM+3 ] >= Command[1] ) & ( XBYTE[ ADDR_SCOM+3 ] <= Command[3] ) ) //hour matched
	    		     {
	    			     //DAQstr.Minute = XBYTE[ Index*6+4 ];
 	    			     if ( XBYTE[ ADDR_SCOM+4 ] >= Command[2] ) //minute matched
 	    			     {
          	                 TI = 1; //call send function		
	    			         break;
    			         }
    			         else if ( ADDR_SCOM == 32760 )
    			             break;
    			     }
	    		    	
    	       	}
	       	}
        }
	    return;
	}
	else if ( TI == 1 )
	{
		TI = 0;
		
		DisplayCurrTime();
		
		Display( 0x09,16,0xBC,0x40,0 ); //clear screen
	    Display( 0x09,16,0xBC,0x50,0 ); 
       	Display( 0x09,16,0xBC,0x60,0 ); 
       	Display( 0x09,16,0xBC,0x70,0 ); 
       	Display( 0x09,16,0xBE,0x40,0 );
	        	 
       	Display( 0x21,16,0xBC,0x40,0 ); //正
        Display( 0x22,16,0xBC,0x50,0 ); //在
        Display( 0x25,16,0xBC,0x60,0 ); //上
        Display( 0x26,16,0xBC,0x70,0 ); //传
        
	    if ( Command[1] == Command[3] )
	    {   //In the same hour
	    	if ( XBYTE[ ADDR_SCOM+3 ] == Command[1] )
	    	{
	    		if ( XBYTE[ ADDR_SCOM+4 ] <= Command[4] )
		        {
	    		    SBUF = XBYTE[ ADDR_SCOM ]; 
			        if ( ADDR_SCOM == 32760 )
			            ADDR_SCOM = 0;//send data for over stored
			        else
			            ADDR_SCOM = ADDR_SCOM + 6;
		        }
		        else
		            return;
	        }
	        else
	            return;
	    }
	    else if ( Command[1] < Command[3] )
	    {   //Between hours
 		    if ( XBYTE[ ADDR_SCOM+3 ] < Command[3] )
		    {
	    		SBUF = XBYTE[ ADDR_SCOM ]; //send high byte first
			    if ( ADDR_SCOM == 32760 )
			        ADDR_SCOM = 0;//send data for over stored
			    else
			        ADDR_SCOM = ADDR_SCOM + 6;
		    }
	    	//In last hour
	    	else if ( XBYTE[ ADDR_SCOM+3 ] == Command[3] )
	    	{
 	    	   	if (  XBYTE[ ADDR_SCOM+4 ] <= Command[4] )
	    		{
	    			SBUF = XBYTE[ ADDR_SCOM ]; //send high byte first
	    		    if ( ADDR_SCOM == 32760 )
	    		        ADDR_SCOM = 0;//send data for over stored
		    	    else
	    		        ADDR_SCOM = ADDR_SCOM + 6;
	    		} 
    		}
    	}
   	}
   	return;
}

/************************************************************/

⌨️ 快捷键说明

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