📄 scom.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 + -