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

📄 serial.lst

📁 LCD及键盘、RS232通信控制源代码、采用keil c51环境编译
💻 LST
📖 第 1 页 / 共 3 页
字号:
 252   6      						UIDataArea.Exam_Buffer.ExamDirtyFlag	= 1;
 253   6      						UISemaphore.ucExamAreaSem = 0xff;			//release semaphore
 254   6      						break;
 255   6      					}
 256   5      					UISemaphore.ucExamAreaSem = 0xff;				//release semaphore
 257   5      					DelayCycle(16);
 258   5      				}
 259   4      				UISemaphore.ucExamAreaSem = 0xff;					//release semaphore
 260   4      				ConnectFlag	= FALSE;
 261   4      				UARTTransFrame	= UARTTransHead;
 262   4      				ucNoAckCount	= 0;
 263   4      				if( UARTTransHead != UARTTransTail )
 264   4      				{
 265   5      					StopTran = FALSE;
 266   5      					TI = 1;
 267   5      				}
 268   4      				else
 269   4      				{
 270   5      					StopTran		= TRUE;
 271   5      				}
 272   4      			}
 273   3      		}
 274   2      	}
 275   1      	else if( ( EnableTran==TRUE ) && (StopTran == TRUE) )
 276   1      	{
 277   2      #ifdef NDS_UI_DEBUG
 278   2      		P3_5 = ~P3_5;
 279   2      #endif
 280   2      		if (UARTTransHead != UARTTransTail)
 281   2      		{
 282   3      			StopTran = FALSE;
 283   3      			TI = 1;
 284   3      		}
 285   2      	}
 286   1      	TF2 = 0;
 287   1      }
 288          
 289          
 290          /******************************************************************************
 291          *                                                                             *
 292          *	处理串口数据                                                              *
 293          *                                                                             *
 294          ******************************************************************************/
 295          void ProcSerial(void)
 296          {
 297   1      unsigned char idata *ip_Tmp;
 298   1      unsigned char data ucTmp;
 299   1      
 300   1      #ifdef NDS_UI_DEBUG
 301   1      	P3_2 = ~P3_2;
 302   1      #endif
 303   1      	if( UARTRcvHead != UARTRcvTail)
C51 COMPILER V6.14  SERIAL                                                                 07/15/2005 09:38:51 PAGE 6   

 304   1      	{//Receive buffer not empty
 305   2      #ifdef NDS_UI_DEBUG
 306   2      		P3_3 = ~P3_3;
 307   2      #endif
 308   2      		ucTmp = *UARTRcvHead;
 309   2      		if(++UARTRcvHead == UART_RcvBuffer+UARTBUFFERLEN_RX)
 310   2      		{
 311   3      			UARTRcvHead = UART_RcvBuffer;
 312   3      		}
 313   2      		if( ucTmp == STX)
 314   2      		{//帧起始标志
 315   3      			UARTRcvFrame	= UARTRcvHead;	//UARTRcvFrame指向STX的下一个字节,即FRAME_TYPE
 316   3      			ucRcvCheckSum	= ucTmp;
 317   3      			ucRcvLen		= 1;
 318   3      		}
 319   2      		else
 320   2      		{
 321   3      			ucRcvLen++;
 322   3      			ucRcvCheckSum ^= ucTmp;
 323   3      			if( ucTmp == ETX)
 324   3      			{//帧结束标志
 325   4      #ifdef NDS_UI_DEBUG
 326   4      				P3_4 = ~P3_4;
 327   4      #endif
 328   4      				switch(*UARTRcvFrame)
 329   4      				{
 330   5      				case MSG_FRAME:
 331   5      					if(++UARTRcvFrame == UART_RcvBuffer+UARTBUFFERLEN_RX)
 332   5      					{
 333   6      						UARTRcvFrame = UART_RcvBuffer;
 334   6      					}
 335   5      					switch(*UARTRcvFrame)
 336   5      					{
 337   6      					case EXAM_COMM:
 338   6      #ifdef NDS_UI_DEBUG
 339   6      						P3_4 = ~P3_4;
 340   6      #endif
 341   6      						if(ucRcvLen != EXAM_COMM_LEN)
 342   6      						{//长度不正确
 343   7      #ifdef NDS_UI_DEBUG
 344   7      #ifdef NDS_UI_DEBUG_ENABLEDIS
 345   7      							SetCursorPos(20);
 346   7      							DisplayChar( ((ucRcvLen)>>4)+0x30 );
 347   7      							DisplayChar( ((ucRcvLen)&0x0f)+0x30 );
 348   7      #endif
 349   7      #endif
 350   7      							break;
 351   7      						}
 352   6      						ip_Tmp = UARTRcvHead - 3;
 353   6      						if( ip_Tmp < UART_RcvBuffer) ip_Tmp += UARTBUFFERLEN_RX;	//指向CHECKSUM
 354   6      						ucTmp = *ip_Tmp;
 355   6      						if( ++ip_Tmp == UART_RcvBuffer+UARTBUFFERLEN_RX)
 356   6      						{
 357   7      							ip_Tmp = UART_RcvBuffer;
 358   7      						}
 359   6      						ucRcvCheckSum ^= ETX^ucTmp^*ip_Tmp;
 360   6      						if(ucTmp>'a')
 361   6      						{
 362   7      							ucTmp -= 'a' +10;
 363   7      						}
 364   6      						else if( ucTmp>'A')
 365   6      						{
C51 COMPILER V6.14  SERIAL                                                                 07/15/2005 09:38:51 PAGE 7   

 366   7      							ucTmp -= 'A' +10;
 367   7      						}
 368   6      						else
 369   6      						{
 370   7      							ucTmp -= '0';
 371   7      						}
 372   6      						ucTmp <<= 4;
 373   6      						if( *ip_Tmp >= 'a' )
 374   6      						{
 375   7      							ucTmp += *ip_Tmp - 'a' +10;
 376   7      						}
 377   6      						else if( *ip_Tmp >= 'A' )
 378   6      						{
 379   7      							ucTmp += *ip_Tmp - 'A' +10;
 380   7      						}
 381   6      						else
 382   6      						{
 383   7      							ucTmp += *ip_Tmp - '0';
 384   7      						}
 385   6      						if( ucTmp != ucRcvCheckSum)
 386   6      						{//校验错误
 387   7      #ifdef NDS_UI_DEBUG
 388   7      #ifdef NDS_UI_DEBUG_ENABLEDIS
 389   7      							SetCursorPos(22);
 390   7      							DisplayChar( ((ucTmp)>>4)+0x30 );
 391   7      							DisplayChar( ((ucTmp)&0x0f)+0x30 );
 392   7      							DisplayChar( ((ucRcvCheckSum)>>4)+0x30 );
 393   7      							DisplayChar( ((ucRcvCheckSum)&0x0f)+0x30 );
 394   7      #endif
 395   7      #endif
 396   7      							break;
 397   7      						}
 398   6      /*						while( 1 )
 399   6      						//deleted by XuYiBo,2002-Oct-18(没必要把所有的检测参数都送到LinkLayer)
 400   6      						{
 401   6      */
 402   6      							UISemaphore.ucExamAreaSem = 0x00;				//request semaphore
 403   6      							if( UISemaphore.ucExamAreaSem == 0x00)
 404   6      							{
 405   7      								if(++UARTRcvFrame == UART_RcvBuffer+UARTBUFFERLEN_RX)
 406   7      								{
 407   8      									UARTRcvFrame = UART_RcvBuffer;
 408   8      								}
 409   7      								if(ConnectFlag == TRUE)
 410   7      								{
 411   8      									UIDataArea.Exam_Buffer.ConnectFlag		= TRUE;
 412   8      								}
 413   7      								else
 414   7      								{
 415   8      									UIDataArea.Exam_Buffer.ConnectFlag		= FALSE;
 416   8      								}
 417   7      								UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
 418   7      								UIDataArea.Exam_Buffer.Current[0]		= ucTmp;
 419   7      								UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
 420   7      								UIDataArea.Exam_Buffer.Current[1]		= ucTmp;
 421   7      								UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
 422   7      								UIDataArea.Exam_Buffer.ExciterLevel[0]	= ucTmp;
 423   7      								UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
 424   7      								UIDataArea.Exam_Buffer.ExciterLevel[1]	= ucTmp;
 425   7      								UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
 426   7      								UIDataArea.Exam_Buffer.TravelPow		= ucTmp;
 427   7      								UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
C51 COMPILER V6.14  SERIAL                                                                 07/15/2005 09:38:51 PAGE 8   

 428   7      								UIDataArea.Exam_Buffer.ReflectPow		= ucTmp;
 429   7      								UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
 430   7      								UIDataArea.Exam_Buffer.AmpTemp			= ucTmp;
 431   7      								UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
 432   7      								UIDataArea.Exam_Buffer.RxTemp			= ucTmp;
 433   7      								UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
 434   7      								UIDataArea.Exam_Buffer.TxTemp			= ucTmp;
 435   7      
 436   7      								UIDataArea.Exam_Buffer.RXIF_LOCK		= (*UARTRcvFrame)&0xf;
 437   7      								if(++UARTRcvFrame == UART_RcvBuffer+UARTBUFFERLEN_RX)
 438   7      								{
 439   8      									UARTRcvFrame = UART_RcvBuffer;
 440   8      								}
 441   7      								UIDataArea.Exam_Buffer.RXRF_LOCK		= (*UARTRcvFrame)&0xf;
 442   7      								if(++UARTRcvFrame == UART_RcvBuffer+UARTBUFFERLEN_RX)
 443   7      								{
 444   8      									UARTRcvFrame = UART_RcvBuffer;
 445   8      								}
 446   7      								UIDataArea.Exam_Buffer.TXIF_LOCK		= (*UARTRcvFrame)&0xf;
 447   7      								if(++UARTRcvFrame == UART_RcvBuffer+UARTBUFFERLEN_RX)
 448   7      								{
 449   8      									UARTRcvFrame = UART_RcvBuffer;
 450   8      								}
 451   7      								UIDataArea.Exam_Buffer.TXRF_LOCK		= (*UARTRcvFrame)&0xf;
 452   7      
 453   7      								UIDataArea.Exam_Buffer.ExamDirtyFlag	= 1;
 454   7      
 455   7      								UISemaphore.ucExamAreaSem = 0xff;			//release semaphore
 456   7      //								break;	//deleted by XuYiBo,2002-Oct-18(没必要把所有的检测参数都送到LinkLayer)
 457   7      							}
 458   6      /*			deleted by XuYiBo,2002-Oct-18(没必要把所有的检测参数都送到LinkLayer)
 459   6      							UISemaphore.ucExamAreaSem = 0xff;				//release semaphore
 460   6      							DelayCycle(16);
 461   6      						}
 462   6      */
 463   6      						break;
 464   6      					default:
 465   6      #ifdef NDS_UI_DEBUG
 466   6      #ifdef NDS_UI_DEBUG_ENABLEDIS
 467   6      						SetCursorPos(2);
 468   6      						DisplayChar( ((*UARTRcvFrame)>>4)+0x30 );
 469   6      						DisplayChar( ((*UARTRcvFrame)&0x0f)+0x30 );
 470   6      #endif
 471   6      #endif
 472   6      						break;
 473   6      					}
 474   5      					break;
 475   5      
 476   5      				case ACK_FRAME:
 477   5      					if(ucRcvLen == ACK_FRAME_LEN)
 478   5      					{//Length OK
 479   6      						ET2 = 0;			//disable timer2
 480   6      						ucAckTimeout= 0;
 481   6      						EnableTran	= TRUE;
 482   6      						ConnectFlag	= TRUE;
 483   6      						ucNoAckCount= 0;
 484   6      						ET2 = 1;			//enable timer2
 485   6      					}
 486   5      					break;
 487   5      				case NAK_FRAME:
 488   5      					if(ucRcvLen == NAK_FRAME_LEN)
 489   5      					{//Length OK
C51 COMPILER V6.14  SERIAL                                                                 07/15/2005 09:38:51 PAGE 9   

 490   6      						ET2 = 0;			//disable timer2
 491   6      						ucAckTimeout = 0;
 492   6      						EnableTran = TRUE;
 493   6      						if( ++ucNoAckCount < MAX_REP)
 494   6      						{
 495   7      							UARTTransHead = UARTTransFrame;
 496   7      							StopTran	= FALSE;
 497   7      							TI = 1;
 498   7      						}
 499   6      						else
 500   6      						{//重发次数超过“最大允许重发次数”
 501   7      							ucTmp = 255;
 502   7      							while( --ucTmp )
 503   7      							{
 504   8      								UISemaphore.ucExamAreaSem = 0x00;				//request semaphore
 505   8      								if( UISemaphore.ucExamAreaSem == 0x00)
 506   8      								{
 507   9      									UIDataArea.Exam_Buffer.ConnectFlag		= FALSE;
 508   9      									UIDataArea.Exam_Buffer.ExamDirtyFlag	= 1;
 509   9      									UISemaphore.ucExamAreaSem = 0xff;			//release semaphore
 510   9      									break;
 511   9      								}

⌨️ 快捷键说明

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