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

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

?? serial.c

?? 適合初學(xué)者學(xué)習(xí)的UPSD的點(diǎn)陣LCD漢字顯示
?? C
字號(hào):
/*
名稱:main.c
日期:2005.01.12
作者:廖志凱
功能:
說(shuō)明:程序使用RTX51實(shí)時(shí)多任務(wù)系統(tǒng),
*/
#pragma large
#include	"serial.h"
/*------------------------------------------------------------------------------*/
//定義串口緩沖區(qū)
uchar xdata	cRecvBuff[RECV_GRUOP][RECV_LENGTH];	//接收緩沖區(qū)
uchar xdata	cRecvBuffNum;							//已接收數(shù)據(jù)的字節(jié)數(shù)
uchar xdata	cRecvBuffPtr;							//接收緩沖區(qū)有效數(shù)據(jù)起始指針
uchar xdata	cRecvBuffCnt;							//接收緩沖區(qū)有效數(shù)據(jù)總數(shù)

uchar xdata	cTranBuff[TRAN_GRUOP][TRAN_LENGTH];		//發(fā)送緩沖區(qū)
uchar xdata	cTranBuffNum;							//已發(fā)送數(shù)據(jù)的字節(jié)數(shù)
uchar xdata	cTranBuffPtr;							//發(fā)送緩沖區(qū)有效數(shù)據(jù)起始指針
uchar xdata	cTranBuffCnt;							//發(fā)送緩沖區(qū)有效數(shù)據(jù)總數(shù)
/*------------------------------------------------------------------------------*/
uchar xdata	cRecvBuff2[RECV_LENGTH2];				//接收緩沖區(qū)
uchar xdata	cRecvBuffNum2;							//已接收數(shù)據(jù)的字節(jié)數(shù)
uchar xdata	cTranBuff2[TRAN_GRUOP2][TRAN_LENGTH2];	//發(fā)送緩沖區(qū)
uchar xdata	cTranBuffNum2;							//已發(fā)送數(shù)據(jù)的字節(jié)數(shù)
uchar xdata	cTranBuffPtr2;							//發(fā)送緩沖區(qū)有效數(shù)據(jù)起始指針
uchar xdata	cTranBuffCnt2;							//發(fā)送緩沖區(qū)有效數(shù)據(jù)總數(shù)
/*===============================================================
功能:串口初始化
參數(shù):
返回:
說(shuō)明:
===============================================================*/
void Init_Serial(void)
{
	//初始化串口寄存器
	SCON = 0x50;			//模式1,8位通訊,允許接收
	SCON2 = 0x50;			//模式1,8位通訊,允許接收
	PCON = 0x00;			//SMOD,SMOD1=0;						
	TMOD |= 0x20;			//模式2,8位自載
	TH1 = 0xFA;
	TL1 = 0xFA;				//波特率9600
	TR1 = 1;				//啟動(dòng)Timer1
	ET1 = 0;				//禁止Timer1中斷
	os_enable_isr(SIO_VECTOR);
	os_enable_isr(SI1_VECTOR);
	//os_disable_isr(SI1_VECTOR);
	//初始化緩沖區(qū)
	memset(cRecvBuff,0x00,RECV_GRUOP*RECV_LENGTH);
	cRecvBuffNum	= 0x00;
	cRecvBuffPtr		= 0x00;
	cRecvBuffCnt		= 0x00;
	memset(cTranBuff,0x00,TRAN_GRUOP*TRAN_LENGTH);
	cTranBuffNum	= 0x00;
	cTranBuffPtr		= 0x00;
	cTranBuffCnt		= 0x00;
	memset(cRecvBuff2, 0x00, RECV_LENGTH2);
	cRecvBuffNum2 = 0x00;
	memset(cTranBuff2, 0x00, TRAN_GRUOP2*TRAN_LENGTH2);
	cTranBuffNum2 = 0x00;
	cTranBuffPtr2 = 0x00;
	cTranBuffCnt2 = 0x00;
}
/*===============================================================
功能:
參數(shù):
返回:
說(shuō)明:
===============================================================*/
void Write_serial_buff(uchar *buff, uchar len)
{
	uchar _index;
	if(cTranBuffCnt < TRAN_GRUOP)
	{
		_index = (cTranBuffPtr + cTranBuffCnt) % TRAN_GRUOP;
		memcpy(cTranBuff[_index], buff, len);
		cTranBuffCnt++;
		//os_send_message(MBX_SERAIL_TRAN, 0x00, T10MS);
	}
}

/*===============================================================
功能:串口0  中斷程序
參數(shù):無(wú)
返回:無(wú)
說(shuō)明:只給相應(yīng)任務(wù)發(fā)送信號(hào)
===============================================================*/
void Int_Serial0(void) interrupt  SIO_VECTOR
{
	uchar xdata _index;
	uchar xdata _data;
	
	if(RI)
	{//接收中斷
		RI = 0;
		_data = SBUF;
		//isr_send_message(MBX_SERAIL_RECV, SBUF);
		if(cRecvBuffCnt < RECV_GRUOP)
		{//接收緩沖區(qū)未滿
			_index = (cRecvBuffPtr+cRecvBuffCnt) % RECV_GRUOP;	//緩沖區(qū)的偏移地址
			if(_data == 0xFF)
			{//如果收到起始符
				cRecvBuff[_index][0] = 0xFF;	
				cRecvBuffNum = 0x01;
			}
			else if( (cRecvBuffNum > 0x00)  && (cRecvBuffNum < RECV_LENGTH) )
			{//其他數(shù)據(jù)
				cRecvBuff[_index][cRecvBuffNum] = _data;
				cRecvBuffNum++;
				if(cRecvBuffNum == (cRecvBuff[_index][1] + 3) )
				{//接收完畢
					cRecvBuffCnt++;
					cRecvBuffNum = 0x00;
				}
			}
			else if(cRecvBuffNum >= RECV_LENGTH)
			{//接收的數(shù)據(jù)超過緩沖區(qū)容量清除當(dāng)前接收的數(shù)據(jù)
			cRecvBuffNum = 0x00;
			memset(&cRecvBuff[_index][0],0x00,RECV_LENGTH);
			}
		}
	}
	if(TI)
	{//發(fā)送中斷
		TI = 0;
		isr_send_signal(STRAN_TASK_ID);
	}
}
/*===============================================================
功能:串口1  中斷程序
參數(shù):無(wú)
返回:無(wú)
說(shuō)明:只給相應(yīng)任務(wù)發(fā)送信號(hào)
===============================================================*/
void Int_Serial1(void) interrupt  SI1_VECTOR
{
	if(SCON2&0x01)
	{//接收中斷
		SCON2 &= 0xFE;
		cRecvBuff2[cRecvBuffNum2] = SBUF2;
		if( ((cRecvBuff2[cRecvBuffNum2] == 'D') || (cRecvBuff2[cRecvBuffNum2] == 'W'))
			&& (cRecvBuff2[cRecvBuffNum2-1] == 'D') )
		{//接收到數(shù)據(jù)頭
			cRecvBuff2[0] = 'D';
			cRecvBuff2[1] = cRecvBuff2[cRecvBuffNum2];
			cRecvBuffNum2 = 1;
		}
		else if( (cRecvBuff2[cRecvBuffNum2] == 0x0A) && (cRecvBuff2[cRecvBuffNum2-1] == 0x0D) )
		{//接收完畢
			isr_send_signal(CONFIG_TASK_ID);
		}
		cRecvBuffNum2++;
	}
	if(SCON2&0x02)
	{//發(fā)送中斷
		SCON2 &= 0xFD;
		isr_send_signal(DEBUG_TASK_ID);
	}
}
/*===============================================================
功能:串口接收任務(wù)
參數(shù):無(wú)
返回:無(wú)
說(shuō)明:緩沖區(qū)采用先進(jìn)先出的原則,當(dāng)緩沖區(qū)已滿則停止接收
		郵件的參數(shù)是接收數(shù)據(jù)的長(zhǎng)度。只有接收到數(shù)據(jù)頭才開始接收數(shù)據(jù)
===============================================================*/
void Serial_RECV_Task(void)	_task_ SRECV_TASK_ID
{
	static uchar xdata _index;
	static uint xdata _data;
	while(1)
	{
		//os_wait(K_SIG,0x00,0x00);					//等待串口接收數(shù)據(jù)
		os_wait(K_MBX+MBX_SERAIL_RECV, 0x00, &_data);
		if(cRecvBuffCnt < RECV_GRUOP)
		{//接收緩沖區(qū)未滿
			_index = (cRecvBuffPtr+cRecvBuffCnt) % RECV_GRUOP;	//緩沖區(qū)的偏移地址
			if((uchar)_data == 0xFF)
			{//如果收到起始符
				cRecvBuff[_index][0] = 0xFF;	
				cRecvBuffNum = 0x01;
			}
			else if( (cRecvBuffNum > 0x00)  && (cRecvBuffNum < RECV_LENGTH) )
			{//其他數(shù)據(jù)
				cRecvBuff[_index][cRecvBuffNum] = (uchar)_data;
				cRecvBuffNum++;
				if(cRecvBuffNum == (cRecvBuff[_index][1] + 3) )
				{//接收完畢
					cRecvBuffCnt++;
					cRecvBuffNum = 0x00;
				}
			}
			else if(cRecvBuffNum > RECV_LENGTH)
			{//接收的數(shù)據(jù)超過緩沖區(qū)容量清除當(dāng)前接收的數(shù)據(jù)
			cRecvBuffNum = 0x00;
			memset(&cRecvBuff[_index][0],0x00,RECV_LENGTH);
			}
		}
	}
}

/*===============================================================
功能:串口發(fā)送任務(wù)
參數(shù):無(wú)
返回:無(wú)
說(shuō)明:發(fā)送
		郵件的參數(shù)是要發(fā)送數(shù)據(jù)的長(zhǎng)度
===============================================================*/
void Serial_Tran_Task(void) _task_ STRAN_TASK_ID
{
	static uchar xdata _sendNum;
	while(1)
	{
		if( (cTranBuffCnt != 0x00) && (cTranBuffPtr < TRAN_GRUOP) )
		{//有數(shù)據(jù)要發(fā)送
			_sendNum = 0x00;
			while(_sendNum < cTranBuff[cTranBuffPtr][1]+3)
			{//數(shù)據(jù)是否發(fā)送完畢
				SBUF = cTranBuff[cTranBuffPtr][_sendNum];
				os_wait(K_SIG,0x00,0x00);					//等待數(shù)據(jù)發(fā)送完畢
				_sendNum++;
			}
			//清除發(fā)送完畢的數(shù)據(jù)
			memset(&cTranBuff[cTranBuffPtr][0], 0x00, TRAN_LENGTH);
			cTranBuffPtr = (cTranBuffPtr+1) % TRAN_GRUOP;
			cTranBuffCnt --;			
		}
		os_wait(K_TMO, T10MS, 0x00);
	}
}
/*===============================================================
功能:調(diào)試任務(wù)
參數(shù):無(wú)
返回:無(wú)
說(shuō)明:發(fā)送調(diào)試信息,第一個(gè)字節(jié)為發(fā)送長(zhǎng)度,后面為協(xié)議
===============================================================*/
void Debug_Task(void) _task_ DEBUG_TASK_ID
{
	while(1)
	{
		if( (cTranBuffPtr2<TRAN_GRUOP2) && (cTranBuffCnt2 != 0x00) )
		{
			cTranBuffNum2 = 0x01;
			while(cTranBuffNum2 < cTranBuff2[cTranBuffPtr2][0])
			{
				SBUF2 = cTranBuff2[cTranBuffPtr2][cTranBuffNum2];
				cTranBuffNum2++;
				os_wait(K_SIG, 0x00, 0x00);
			}
			//清除發(fā)送完畢的數(shù)據(jù)
			memset(&cTranBuff2[cTranBuffPtr2][0], 0x00, TRAN_LENGTH2);
			cTranBuffPtr2 = (cTranBuffPtr2+1) % TRAN_GRUOP2;
			cTranBuffCnt2 --;
		}
		else 
			os_wait(K_TMO, T10MS, 0x00);
	}
}

/*===============================================================
功能:寫入調(diào)試信息
參數(shù):type-類型;buff-數(shù)據(jù);
返回:無(wú)
說(shuō)明:
===============================================================*/
void	Write_Debug_Info(uchar* buff, uchar len)
{
	uchar _tmp;
	if( (cTranBuffCnt2 < TRAN_GRUOP2) && ((len+3) <TRAN_LENGTH2) )
	{//緩沖區(qū)還有空間
		_tmp = (cTranBuffPtr2+cTranBuffCnt2)%TRAN_GRUOP2;		//計(jì)算偏移地址
		memset(cTranBuff2[_tmp], 0x00, TRAN_LENGTH2);
		cTranBuff2[_tmp][0] = len+3;
		memcpy(&cTranBuff2[_tmp][1], buff, len);
		cTranBuff2[_tmp][len+1] = 0x0D;
		cTranBuff2[_tmp][len+2] = 0x0A;
		cTranBuffCnt2++;
	}
}
/*===============================================================
功能:設(shè)置任務(wù),完成組號(hào)的設(shè)定和讀取
參數(shù):
返回:
說(shuō)明:組號(hào)從地址0x8000開始放置,每個(gè)組號(hào)共五個(gè)漢字
		總共16組
===============================================================*/
void Config_Task(void) _task_ CONFIG_TASK_ID
{
	static uchar xdata _tmp;
	static uchar xdata _buff[160];
	while(1)
	{
		os_wait(K_SIG, 0x00, 0x00);
		//去除回車符
		cRecvBuff2[cRecvBuffNum2-1] = 0x00;
		cRecvBuff2[cRecvBuffNum2-2] = 0x00;
		
		_tmp = (cRecvBuff2[2]-'0')*10 +cRecvBuff2[3] - '0';
		
	}
}

/*===============================================================
功能:
參數(shù):
返回:
說(shuō)明:
===============================================================*/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区在线不卡| 亚洲成人免费观看| 91精品国产高清一区二区三区蜜臀| 国产乱子伦视频一区二区三区| 亚洲免费成人av| 欧美精品一区二| 欧美日本一区二区| 色婷婷久久久综合中文字幕| 国产乱一区二区| 日韩成人午夜电影| 国产在线一区观看| 亚洲一区二区三区四区在线观看| 国产天堂亚洲国产碰碰| 欧美成人女星排名| 69堂成人精品免费视频| 色哦色哦哦色天天综合| 高清av一区二区| 激情六月婷婷久久| 男人的天堂亚洲一区| 亚洲6080在线| 伊人开心综合网| 国产精品三级久久久久三级| 久久婷婷久久一区二区三区| 日韩一区二区在线观看| 欧美日韩精品二区第二页| 欧洲一区二区三区在线| 91免费在线播放| 成人av影视在线观看| 福利一区福利二区| 成人综合婷婷国产精品久久| 国产麻豆精品久久一二三| 国产综合久久久久久鬼色| 久久99精品视频| 久久99精品国产.久久久久| 日本视频免费一区| 青青草一区二区三区| 日本中文字幕一区二区视频| 日韩成人精品在线| 久久成人免费日本黄色| 激情综合亚洲精品| 国产一区二区在线免费观看| 国产一区二区三区综合| 国产麻豆视频精品| 成人综合婷婷国产精品久久| www.色综合.com| 色综合中文字幕国产 | 亚洲图片一区二区| 亚洲小说春色综合另类电影| 亚洲国产精品久久久男人的天堂| 成人黄页毛片网站| 成人18精品视频| 91网上在线视频| 欧美性猛片aaaaaaa做受| 欧美年轻男男videosbes| 欧美猛男gaygay网站| 欧美一区二区黄| 精品日韩在线一区| 国产精品欧美极品| 亚洲激情成人在线| 热久久国产精品| 国产一区二区三区免费看| 国产a级毛片一区| 91欧美一区二区| 精品视频在线视频| 欧美白人最猛性xxxxx69交| 国产日产精品1区| 亚洲视频免费在线| 青娱乐精品视频在线| 国产高清视频一区| 色老汉一区二区三区| 在线观看91精品国产麻豆| 精品少妇一区二区三区日产乱码| 国产欧美综合在线观看第十页| 亚洲天堂免费看| 三级在线观看一区二区| 国产91精品一区二区麻豆网站| 色又黄又爽网站www久久| 日韩免费一区二区三区在线播放| 日本一区二区免费在线观看视频| 亚洲激情中文1区| 丝袜国产日韩另类美女| 国产成人a级片| 欧美日韩亚洲高清一区二区| 久久久综合网站| 亚洲男女毛片无遮挡| 久久国产精品一区二区| 91尤物视频在线观看| 精品久久一区二区| 一区二区在线观看免费视频播放| 色老综合老女人久久久| 欧美大片免费久久精品三p| 中文字幕视频一区| 美女在线视频一区| 在线观看视频一区二区| 欧美国产一区在线| 免费精品视频最新在线| 色天使色偷偷av一区二区 | 亚洲黄网站在线观看| 国产精品自拍网站| 欧美一区二区三区视频在线观看 | 欧美日韩另类国产亚洲欧美一级| 久久精品在这里| 日韩成人精品在线| 欧美性猛片xxxx免费看久爱| 国产精品久久久久永久免费观看| 美日韩一区二区三区| 欧美日免费三级在线| 亚洲欧洲精品一区二区精品久久久| 久久精品国产久精国产爱| 欧美日韩日日夜夜| 亚洲精品国产无天堂网2021 | 777亚洲妇女| 亚洲激情一二三区| 99国产精品99久久久久久| 精品国产一区二区三区不卡| 五月激情综合网| 91国偷自产一区二区三区成为亚洲经典| wwwwww.欧美系列| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美日韩精品一区二区三区 | 精品日韩一区二区三区免费视频| 亚洲综合久久av| 91丨porny丨蝌蚪视频| 三级欧美在线一区| 在线这里只有精品| 亚洲天堂精品视频| 9i看片成人免费高清| 国产精品久久久久久久裸模 | 成人免费视频免费观看| 久久女同性恋中文字幕| 国产美女一区二区三区| 久久久久久久久97黄色工厂| 狠狠色2019综合网| 国产校园另类小说区| 国产福利一区二区三区视频 | 韩国v欧美v亚洲v日本v| 精品国产一区二区三区av性色| 麻豆国产欧美一区二区三区| 欧美一级理论片| 美国三级日本三级久久99| 精品久久久久久亚洲综合网| 久久 天天综合| 久久精品人人做人人爽人人| 国产成人综合精品三级| 国产精品久久久久aaaa樱花| 色综合欧美在线| 亚洲一级片在线观看| 欧美一级精品大片| 国产精品99久久久| 国产精品妹子av| 色天使色偷偷av一区二区| 偷拍与自拍一区| 欧美大片在线观看一区| 国产精品一区二区三区四区| 亚洲国产精品v| 色老头久久综合| 蜜桃视频在线一区| 欧美激情一区二区三区全黄| 91久久精品一区二区| 亚洲国产精品久久久久秋霞影院 | 亚洲欧美激情一区二区| 欧美精品丝袜中出| 国产一区久久久| 亚洲免费高清视频在线| 日韩一级在线观看| 成人高清免费观看| 亚洲第一福利一区| 久久久久久一二三区| 色婷婷精品久久二区二区蜜臀av| 五月激情丁香一区二区三区| 2021中文字幕一区亚洲| 日本高清不卡视频| 麻豆成人久久精品二区三区小说| 国产欧美一区二区精品性| 欧美亚洲高清一区二区三区不卡| 天堂va蜜桃一区二区三区 | 欧美无乱码久久久免费午夜一区| 免费不卡在线视频| 最新国产精品久久精品| 在线播放91灌醉迷j高跟美女| 国产精品99久久久久| 午夜精品久久久久久久久| 国产亚洲精品中文字幕| 欧美三级日韩三级国产三级| 国产二区国产一区在线观看| 亚洲不卡在线观看| 中文字幕亚洲欧美在线不卡| 日韩一级片网站| 色琪琪一区二区三区亚洲区| 国产精品伊人色| 午夜精品123| 亚洲免费av观看| 久久久久久久免费视频了| 欧美色国产精品| 99综合影院在线| 国精品**一区二区三区在线蜜桃| 午夜免费欧美电影| 亚洲视频资源在线| 国产丝袜美腿一区二区三区| 日韩欧美精品三级|