亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? serial.c

?? LCD及鍵盤、RS232通信控制源代碼、采用keil c51環(huán)境編譯
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/*********************************************************************************
*                                                                                *
*	FileName:	Serial.c                                                         *
*	Function:	serial port functions                                            *
*	SystemName:	NDS18000-BSC                                                     *
*	CPU:		ATMEL AT89C52                                                    *
*	Startup:	14/Oct/2002                                                      *
*	Author:		XuYiBo                                                           *
*                                                                                *
*********************************************************************************/
#include <AT89X52.H>
#include <intrins.h>

#include "NDSBSCUI.H"
#include "Serial.h"
#include "General.h"

#include "display.h"
unsigned char idata UART_TransBuffer[UARTBUFFERLEN_TX];				//串口發(fā)送緩沖區(qū)(存放要求收發(fā)信機(jī)應(yīng)答的數(shù)據(jù)幀)
unsigned char idata UART_RcvBuffer[UARTBUFFERLEN_RX];

unsigned char idata *UARTTransHead;
unsigned char idata *UARTTransTail;
unsigned char idata *UARTTransFrame;
unsigned char idata *UARTRcvHead;
unsigned char idata *UARTRcvTail;
unsigned char idata *UARTRcvFrame;

unsigned char data ucAckTimeout;	//應(yīng)答計(jì)時(shí)器
unsigned char data ucRcvLen;		//幀長度,不包括STX和ETX
unsigned char data ucRcvCheckSum;	//用于計(jì)算接收到的數(shù)據(jù)幀的校驗(yàn)和

unsigned char data ucNoAckCount;	//重發(fā)次數(shù)

unsigned char bdata SerialFlag;
sbit STXRcvFlag = SerialFlag^0;		//TRUE->已經(jīng)接收到STX,允許降數(shù)據(jù)放入接收緩沖區(qū)
sbit EnableTran = SerialFlag^1;		//TRUE->允許發(fā)送數(shù)據(jù)
sbit StopTran	= SerialFlag^2;		//TRUE->已經(jīng)停止發(fā)送數(shù)據(jù)
sbit ConnectFlag= SerialFlag^3;		//TRUE->和收發(fā)信機(jī)連接成功,FALSE->和收發(fā)信機(jī)連接失敗;

extern UISema	xdata UISemaphore;	//define in NDSBSCUI.C
extern UIMemory	xdata UIDataArea;	//define in NDSBSCUI.C

unsigned char code ucACK[]=		{STX,ACK_FRAME,ETX,0};
unsigned char code ucNAK[]=		{STX,NAK_FRAME,ETX,0};
unsigned char code ucREQ[]=		{STX,REQ_FRAME,ETX,0};
unsigned char code ucUpfreq[]=	{STX,COMM_FRAME,UPFREQ_COMM,0};
unsigned char code ucDwnfreq[]=	{STX,COMM_FRAME,DWNFREQ_COMM,0};
/******************************************************************************
*                                                                             *
*	Initialize serial receive&transfer function                               *
*                                                                             *
******************************************************************************/
void InitSerial(void)
{
	UARTTransHead	= UART_TransBuffer;
	UARTTransTail	= UART_TransBuffer;
	UARTTransFrame	= UART_TransBuffer;
	UARTRcvHead		= UART_RcvBuffer;
	UARTRcvTail		= UART_RcvBuffer;
	UARTRcvFrame	= UART_RcvBuffer;

	ucAckTimeout	= 0;
	ucRcvLen		= 0;
	ucRcvCheckSum	= 0;
	ucNoAckCount	= 0;

	STXRcvFlag		= FALSE;
	EnableTran		= TRUE;
	StopTran		= TRUE;
	ConnectFlag		= FALSE;
}

/******************************************************************************
*                                                                             *
*	serial port interrupt handle                                              *
*                                                                             *
******************************************************************************/
void UART(void) interrupt UARTINT using 1
{
unsigned char ucByte;
unsigned char idata *TmpPtr;

	if(RI)
	{
		ucByte = SBUF;
		RI = 0;
		if( ucByte == STX)
		{
			STXRcvFlag	= TRUE;
			UARTRcvFrame = UARTRcvTail;
			*(UARTRcvTail++) = ucByte;
			if(UARTRcvTail == UART_RcvBuffer+UARTBUFFERLEN_RX)
			{
				UARTRcvTail = UART_RcvBuffer;
			}
		}
		else if( STXRcvFlag == TRUE)
		{//已經(jīng)收到STX
			*(UARTRcvTail++) = ucByte;
			if(UARTRcvTail == UART_RcvBuffer+UARTBUFFERLEN_RX)
			{
				UARTRcvTail = UART_RcvBuffer;
			}
			if(ucByte==ETX)
			{//收完一個(gè)幀
				STXRcvFlag	= FALSE;		//重新搜索STX
			}
		}
	}
	if(TI)
	{
		TI = 0;
		if(EnableTran==TRUE)
		{
			if(UARTTransHead != UARTTransTail)
			{
				SBUF = *UARTTransHead;
				if( *UARTTransHead == STX)
				{
					UARTTransFrame = UARTTransHead;
				}
				else if( *UARTTransHead == ETX)
				{
					TmpPtr = UARTTransFrame;
					if(++TmpPtr == UART_TransBuffer+UARTBUFFERLEN_TX)
					{
						TmpPtr = UART_TransBuffer;
					}
					if( (*TmpPtr == COMM_FRAME) || (*TmpPtr == REQ_FRAME) )
					{//等待收發(fā)信機(jī)應(yīng)答.除命令幀(COMM_FRAME)和REQ幀要求收發(fā)信機(jī)應(yīng)答外,其它幀不要求收發(fā)信機(jī)應(yīng)答
						EnableTran	= FALSE;
						StopTran	= TRUE;
						ucAckTimeout= 30;
					}
				}
				if(++UARTTransHead == UART_TransBuffer+UARTBUFFERLEN_TX)
				{
					UARTTransHead = UART_TransBuffer;
				}
			}
			else
			{//transfer buffer empty
				StopTran = TRUE;
			}
		}
	}
}

/******************************************************************************
*                                                                             *
*	write data to transfer buffer                                             *
*                                                                             *
******************************************************************************/

void WriteSerial(unsigned char code *pstr_Sour,unsigned char uclen)
{
unsigned char ucCanWrite;
unsigned char idata *TransPtr;

	if(uclen==0) return;

	TransPtr = UARTTransTail;
	if( UARTTransFrame > TransPtr)
	{
		ucCanWrite = UARTTransFrame - TransPtr;
	}
	else
	{
		ucCanWrite = UARTBUFFERLEN_TX - (TransPtr - UARTTransFrame);
	}

	if( ucCanWrite != 0)
	{
		if(ucCanWrite > uclen)
		{
			ucCanWrite = uclen;
		}
		if(TransPtr + ucCanWrite > UART_TransBuffer + UARTBUFFERLEN_TX)
		{
			while( TransPtr != UART_TransBuffer + UARTBUFFERLEN_TX)
			{
				*(TransPtr++) = *(pstr_Sour++);
				ucCanWrite--;
			}
			TransPtr = UART_TransBuffer;
			for(;ucCanWrite!=0;ucCanWrite--)
			{
				*(TransPtr++) = *(pstr_Sour++);
			}
		}
		else
		{
			for(;ucCanWrite!=0;ucCanWrite--)
			{
				*(TransPtr++) = *(pstr_Sour++);
			}
		}
		if(TransPtr == UART_TransBuffer+UARTBUFFERLEN_TX)
		{
			TransPtr = UART_TransBuffer;
		}
		UARTTransTail = TransPtr;
	}
}

/******************************************************************************
*                                                                             *
*	write a byte to transfer buffer                                           *
*                                                                             *
******************************************************************************/

void WriteSerialByte(unsigned char ucByte)
{
unsigned char idata *TransPtr;
	TransPtr = UARTTransTail;
	*TransPtr = ucByte;
	if(++TransPtr == UART_TransBuffer+UARTBUFFERLEN_TX)
	{
		TransPtr = UART_TransBuffer;
	}
	UARTTransTail = TransPtr;
}
/******************************************************************************
*                                                                             *
*	timer2 interrupt handle                                                   *
*                                                                             *
******************************************************************************/
void Timer2(void) interrupt TIMER2INT using 1
{
unsigned char data ucTmp;
	if( ucAckTimeout != 0)
	{
		if( --ucAckTimeout ==0 )
		{//timeout
			EnableTran	= TRUE;
			if( ++ucNoAckCount < MAX_REP)
			{
				UARTTransHead	= UARTTransFrame;
				StopTran		= FALSE;
				TI = 1;
			}
			else
			{//重發(fā)次數(shù)超過“最大允許重發(fā)次數(shù)”
				ucTmp = 255;
				while( --ucTmp )
				{
					UISemaphore.ucExamAreaSem = 0x00;				//request semaphore
					if( UISemaphore.ucExamAreaSem == 0x00)
					{
						UIDataArea.Exam_Buffer.ConnectFlag		= FALSE;
						UIDataArea.Exam_Buffer.ExamDirtyFlag	= 1;
						UISemaphore.ucExamAreaSem = 0xff;			//release semaphore
						break;
					}
					UISemaphore.ucExamAreaSem = 0xff;				//release semaphore
					DelayCycle(16);
				}
				UISemaphore.ucExamAreaSem = 0xff;					//release semaphore
				ConnectFlag	= FALSE;
				UARTTransFrame	= UARTTransHead;
				ucNoAckCount	= 0;
				if( UARTTransHead != UARTTransTail )
				{
					StopTran = FALSE;
					TI = 1;
				}
				else
				{
					StopTran		= TRUE;
				}
			}
		}
	}
	else if( ( EnableTran==TRUE ) && (StopTran == TRUE) )
	{
#ifdef NDS_UI_DEBUG
		P3_5 = ~P3_5;
#endif
		if (UARTTransHead != UARTTransTail)
		{
			StopTran = FALSE;
			TI = 1;
		}
	}
	TF2 = 0;
}


/******************************************************************************
*                                                                             *
*	處理串口數(shù)據(jù)                                                              *
*                                                                             *
******************************************************************************/
void ProcSerial(void)
{
unsigned char idata *ip_Tmp;
unsigned char data ucTmp;

#ifdef NDS_UI_DEBUG
	P3_2 = ~P3_2;
#endif
	if( UARTRcvHead != UARTRcvTail)
	{//Receive buffer not empty
#ifdef NDS_UI_DEBUG
		P3_3 = ~P3_3;
#endif
		ucTmp = *UARTRcvHead;
		if(++UARTRcvHead == UART_RcvBuffer+UARTBUFFERLEN_RX)
		{
			UARTRcvHead = UART_RcvBuffer;
		}
		if( ucTmp == STX)
		{//幀起始標(biāo)志
			UARTRcvFrame	= UARTRcvHead;	//UARTRcvFrame指向STX的下一個(gè)字節(jié),即FRAME_TYPE
			ucRcvCheckSum	= ucTmp;
			ucRcvLen		= 1;
		}
		else
		{
			ucRcvLen++;
			ucRcvCheckSum ^= ucTmp;
			if( ucTmp == ETX)
			{//幀結(jié)束標(biāo)志
#ifdef NDS_UI_DEBUG
				P3_4 = ~P3_4;
#endif
				switch(*UARTRcvFrame)
				{
				case MSG_FRAME:
					if(++UARTRcvFrame == UART_RcvBuffer+UARTBUFFERLEN_RX)
					{
						UARTRcvFrame = UART_RcvBuffer;
					}
					switch(*UARTRcvFrame)
					{
					case EXAM_COMM:
#ifdef NDS_UI_DEBUG
						P3_4 = ~P3_4;
#endif
						if(ucRcvLen != EXAM_COMM_LEN)
						{//長度不正確
#ifdef NDS_UI_DEBUG
#ifdef NDS_UI_DEBUG_ENABLEDIS
							SetCursorPos(20);
							DisplayChar( ((ucRcvLen)>>4)+0x30 );
							DisplayChar( ((ucRcvLen)&0x0f)+0x30 );
#endif
#endif
							break;
						}
						ip_Tmp = UARTRcvHead - 3;
						if( ip_Tmp < UART_RcvBuffer) ip_Tmp += UARTBUFFERLEN_RX;	//指向CHECKSUM
						ucTmp = *ip_Tmp;
						if( ++ip_Tmp == UART_RcvBuffer+UARTBUFFERLEN_RX)
						{
							ip_Tmp = UART_RcvBuffer;
						}
						ucRcvCheckSum ^= ETX^ucTmp^*ip_Tmp;
						if(ucTmp>'a')
						{
							ucTmp -= 'a' +10;
						}
						else if( ucTmp>'A')
						{
							ucTmp -= 'A' +10;
						}
						else
						{
							ucTmp -= '0';
						}
						ucTmp <<= 4;
						if( *ip_Tmp >= 'a' )
						{
							ucTmp += *ip_Tmp - 'a' +10;
						}
						else if( *ip_Tmp >= 'A' )

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线一区二区三区| 国产成人精品免费看| zzijzzij亚洲日本少妇熟睡| 欧美一区二区三区色| 日本亚洲三级在线| 欧美日本在线看| 首页国产丝袜综合| 欧美巨大另类极品videosbest | 国产最新精品免费| 亚洲人妖av一区二区| 国产欧美日韩三级| 国产无人区一区二区三区| 日韩欧美一级精品久久| 欧美一级电影网站| 欧美一区二区视频网站| 欧美电视剧在线看免费| 精品国产亚洲在线| 麻豆成人综合网| ww久久中文字幕| 国产精品影音先锋| 高清不卡在线观看| av一区二区久久| 欧美天堂亚洲电影院在线播放| 亚洲三级理论片| 欧美三级电影一区| 亚洲一区在线播放| 欧美一区二区网站| 国产成人久久精品77777最新版本| 国产精品青草久久| 欧美丝袜丝交足nylons| 亚洲综合精品自拍| 精品日本一线二线三线不卡| 国产高清精品久久久久| 亚洲一区二区在线播放相泽| 日韩午夜电影av| 成人动漫视频在线| 日日摸夜夜添夜夜添亚洲女人| 欧美成人vps| 成人精品在线视频观看| 亚洲国产三级在线| 日韩欧美在线影院| 丰满白嫩尤物一区二区| 一区二区三区91| 精品福利在线导航| 日本道免费精品一区二区三区| 国产在线观看一区二区| 亚洲综合久久av| 久久精品亚洲一区二区三区浴池| 91麻豆swag| 国产一区二区三区黄视频| 亚洲最色的网站| 国产精品不卡在线观看| 欧美一区二区三区免费在线看| 国产91色综合久久免费分享| 蜜臀精品一区二区三区在线观看| 《视频一区视频二区| 精品久久久久一区二区国产| 欧美在线短视频| 福利一区在线观看| 欧美一级电影网站| 国产精品综合久久| 久久久久久97三级| 成人18视频日本| 中文字幕欧美一区| 日本高清视频一区二区| 亚洲一区二区三区爽爽爽爽爽 | 欧美丰满一区二区免费视频 | 成人欧美一区二区三区小说| 国产在线一区二区| 琪琪一区二区三区| 一区二区三区四区在线| 精品sm在线观看| 精品粉嫩超白一线天av| 欧美精品少妇一区二区三区| 97se亚洲国产综合自在线| av中文一区二区三区| 国产精品一区二区x88av| 日韩二区在线观看| 奇米精品一区二区三区在线观看一| 亚洲尤物在线视频观看| 中文字幕在线视频一区| 亚洲精选免费视频| 国产精品久线观看视频| 国产精品免费看片| 久久精品人人做人人爽人人| 精品国精品自拍自在线| 精品国一区二区三区| 91蜜桃免费观看视频| fc2成人免费人成在线观看播放| 轻轻草成人在线| 日本不卡一二三| 毛片av一区二区三区| 日韩精品亚洲专区| 激情国产一区二区 | 亚洲一区二区三区视频在线播放| 亚洲综合图片区| 亚洲一区欧美一区| 亚洲一区二区三区四区的| 日本伊人色综合网| 免费观看日韩av| 精品一区二区三区影院在线午夜| 国产高清久久久| 99精品1区2区| 在线观看视频一区二区| 欧美成人女星排名| 久久亚洲综合色| 中文文精品字幕一区二区| 一区二区三区四区高清精品免费观看 | 久久精品理论片| 国产精品主播直播| www.av精品| 国产午夜亚洲精品午夜鲁丝片| 国产麻豆成人传媒免费观看| 看电影不卡的网站| 狠狠色狠狠色综合系列| av午夜一区麻豆| 99久久精品国产导航| 一本色道亚洲精品aⅴ| 国产主播一区二区| 国产乱码精品一品二品| 成人av在线一区二区三区| 偷窥国产亚洲免费视频| 青青草国产精品亚洲专区无| 丁香六月综合激情| 欧美艳星brazzers| 日韩免费看网站| 一区二区三区欧美| 日韩成人dvd| 成人av电影在线网| 日韩一区二区在线观看视频播放| 国产午夜精品一区二区三区视频| 亚洲另类一区二区| 韩国v欧美v亚洲v日本v| 成人精品在线视频观看| 欧美亚洲一区二区在线| 久久精品亚洲一区二区三区浴池| 一区二区三区四区不卡在线| 九九九久久久精品| 国产精品伊人色| 成人开心网精品视频| 91精品国产综合久久精品麻豆| 国产日韩亚洲欧美综合| 一区二区国产盗摄色噜噜| 紧缚奴在线一区二区三区| 在线观看免费一区| 久久久久久久久久久久久女国产乱 | 国产色一区二区| 免费观看在线综合| 91老师国产黑色丝袜在线| 日韩精品在线一区二区| 日韩高清不卡一区二区三区| 日本精品一级二级| 国产清纯白嫩初高生在线观看91 | 国产成人精品亚洲日本在线桃色 | 成人午夜av影视| 国产亚洲精品精华液| 中文字幕在线不卡一区| 精一区二区三区| 欧美日韩卡一卡二| 亚洲天堂成人在线观看| 成人av午夜影院| 国产午夜亚洲精品理论片色戒 | 国产农村妇女毛片精品久久麻豆| 高清shemale亚洲人妖| 在线播放日韩导航| 成人国产在线观看| 蜜臀av一区二区在线免费观看 | 91精品国产色综合久久不卡蜜臀| 国产一区二区三区久久悠悠色av | 美女视频一区在线观看| 不卡区在线中文字幕| 久久久久97国产精华液好用吗| 日韩av二区在线播放| 欧美丰满少妇xxxbbb| 肉肉av福利一精品导航| 久久99久国产精品黄毛片色诱| 精品精品国产高清a毛片牛牛| 91视视频在线直接观看在线看网页在线看| 中文字幕一区二区三| 日韩欧美www| 99精品在线免费| 日韩成人午夜电影| 亚洲欧洲成人精品av97| 欧美日韩国产高清一区二区三区| 国产成人免费在线| 美女脱光内衣内裤视频久久影院| 精品久久久久香蕉网| 制服视频三区第一页精品| 国产一区二区影院| 另类欧美日韩国产在线| 日韩成人精品在线| 亚洲一区二区欧美| 一区二区免费视频| 亚洲国产欧美在线人成| 亚洲最大的成人av| 亚洲电影一级黄| 一区二区三区在线观看视频| 亚洲伦理在线精品| 亚洲一区二区三区中文字幕在线| 最好看的中文字幕久久|