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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hwdevice.c

?? SZ328串行通訊驅動及應用開發包,為2個CPU間協議通訊應用實例.
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include  <string.h>
#include  <stdio.h>
#include  "ez328_c.h"
#include  <device.h>
#include  <car_set.h>
#include "public51.h"
#include "file51.h"

#define		RXPIN					(*(volatile unsigned char *)PEDATA &  0x10)
#define		TXPIN_HIGH				(*(volatile unsigned char *)PEDATA |= 0x20)
#define		TXPIN_LOW				(*(volatile unsigned char *)PEDATA &= ~0x20)

#define		TIMER_COUNTER_OVERFLOW	(*(volatile unsigned short *)TSTAT &  0x0001)
#define		CLEAR_TIMER_OVERFLOW_FLAG	(*(volatile unsigned short *)TSTAT &=~0x0001)
#define		ENABLE_TIMER				(*(volatile unsigned short *)TCTL |= 0x0001)
#define		DISABLE_TIMER				(*(volatile unsigned short *)TCTL &=~0x0001)

#define		ENABLE_TIMER_INT			\
	(*(volatile unsigned short *)TCTL |= 0x0010);	\
	(*(volatile unsigned long *)IMR   &= ~0x0002)

#define		DISABLE_TIMER_INT			\
	(*(volatile unsigned short *)TCTL &=~0x0010);	\
	(*(volatile unsigned long *)IMR	  |= 0x0002)	

#define		UART_LOCKED_TIMEOUT				3000


#if	_DEBUG_
#define  DEBUG_BUF_SIZE   25000
char com_buf[DEBUG_BUF_SIZE];
char *com_ptr;
#endif

unsigned short int sgLockFlag;


//檢查序列號
unsigned short CheckSerialNumber()
{
    #if _DEBUG_
    	return 1;
    #else	
    unsigned char sn_char1[] = {
								SN_CHAR1 - ENCRYPT_CODE,
								SN_CHAR2 - (ENCRYPT_CODE+1),
								SN_CHAR3 - (ENCRYPT_CODE+2),
								SN_CHAR4 - (ENCRYPT_CODE+3),
								SN_CHAR5 - (ENCRYPT_CODE+4),
								SN_CHAR6 - (ENCRYPT_CODE+5),
								SN_CHAR7 - (ENCRYPT_CODE+6),
								SN_CHAR8 - (ENCRYPT_CODE+7),
								};
	unsigned char sn_char2[] =	{ 
									SN_CHAR1 + SN_CHAR8 + 2,
									SN_CHAR2 + SN_CHAR7 + 4,	
									SN_CHAR3 + SN_CHAR6 + 6,	
									SN_CHAR4 + SN_CHAR5 + 8,	
								};
	unsigned char * sn_ptr;
	unsigned long addr,offset;
	short i;
	unsigned char tmp;

	#if	__TURBOC__
		unsigned char serial[8] = {SN_CHAR1,SN_CHAR2,SN_CHAR3,SN_CHAR4,
									SN_CHAR5,SN_CHAR6,SN_CHAR7,SN_CHAR8};
				addr = serial;	offset = 0;
	#else
		addr = (0X1F0000+10);	offset = (0xE000-10);
	#endif
		sn_ptr = (unsigned char *) addr;
		sn_ptr += offset;

	for(i=0;i<8;i++)
	{
		tmp = (unsigned char)(sn_char1[i]+(ENCRYPT_CODE+i));
		if( *(sn_ptr+i) != tmp)
			return 0;
	}
	for(i=0;i<4;i++)
	{
		tmp = (unsigned char)(*(sn_ptr+i) + *(sn_ptr+7-i) + (i<<1) + 2);
		if( tmp != sn_char2[i])
			return 0;
	}
	return 1;
    #endif
}



/*****************************************************************************************
功    能:設定定時器的定時時間,即多少時間后產生中斷。
輸入參數:定時時間,以毫秒為單位,最大值65535ms,定時精度為99%,實際定時時間長比目標值略長
注    意:本函數只設定新的定時時間,并不對原計數器的數值清零。
*****************************************************************************************/

void SetTimeoutValueOfTimer(unsigned short int millisecond)
{
	*(volatile unsigned short *)TCTL  |= 0x0008;
		 //timer clk source = 32.768K
	*(volatile unsigned short *)TPRER = 32;   
		//prescaler: divider = 33
	*(volatile unsigned short *)TCMP  = millisecond;
}

/*****************************************************************************************
功    能:復位定時器的計數寄存器,即讓計數器從零開始重新計數。
輸入參數:無
*****************************************************************************************/
void ResetTimerCounter()
{
	DISABLE_TIMER;	//stop the timer
	ENABLE_TIMER;	//start timer and reset the timer counter
}

/*****************************************************************************************
功    能:激活定時器,并允許定時器產生中斷
輸入參數:無
*****************************************************************************************/
void EnableTimerInt()
{
	ENABLE_TIMER_INT;
	ENABLE_TIMER;
}

unsigned short int TimerIntOccured()
{
	if(*(volatile unsigned long *)ISR & 0x00000002)
		return 1;
	else
		return 0;
}

void ClearTimerIntFlag()
{
	*(volatile unsigned short *)TSTAT &= ~0x0001; // clear(by writting 0) the compare flag
	*((volatile unsigned char *)ISR+3) &= ~0x02; // clear TIMER interrupt status
}



/****************************************************************************************
功    能:關閉定時器,并禁止定時器產生中斷
輸入參數:無
*****************************************************************************************/
void DisableTimerInt()
{
	DISABLE_TIMER;
	DISABLE_TIMER_INT;
}


/*****************************************************************************************
功能:按指定毫秒延時,最大值: 65535ms
*****************************************************************************************/
void DelayMilliSecond(unsigned short ms_value)
{
 //最大可設置的延時時間為65535ms,
 //延時誤差在1%以內,實際延時比目標時間短。
#if __TURBOC__
	delay(ms_value);
	return;
#else 
	volatile unsigned short int *clkPtr;
	unsigned long count;
	unsigned short clkLevel, tmp, clkMask = 0x8000;

	count = (ms_value >> 1) * 131 + (ms_value & 0x01) * 66;
	// bit 15 of PLLFSR indicates the level of 32.768K crystal,so bit 15 will toggle 
	// 65.536 times each millisecond.

	clkPtr = (volatile unsigned short int *)PLLFSR;
	clkLevel = *clkPtr & clkMask;
	while(count)
	{
		while(clkLevel == (tmp = *clkPtr & clkMask) );
		clkLevel = tmp;
		count--;
	}
 	return;
#endif
}


void EnableUartReceiveInt()
{
	*((volatile unsigned char *)IMR+3) &= ~0x04; // clear UART MASK bit
	*((volatile unsigned char *)USTCNT+1) |= 0x08; // enable RX READY interrupt
}

void DisableUartReceiveInt()
{
	*((volatile unsigned char *)USTCNT+1) &= ~0x08; // disable RX READY interrupt
}

unsigned short int UartReceiveIntOccured()
{
	if( (*(volatile unsigned long *)ISR & 0x00000004) &&  (*(volatile unsigned char *)URX & 0x20) )
		return 1;
	else
		return 0;
}

unsigned char GetUartRxByte()
{
	unsigned char byte;
	byte = *((volatile unsigned char*)(URX)+1);
		#if	_DEBUG_
			if(com_ptr+4<com_buf+DEBUG_BUF_SIZE && com_ptr>=com_buf)
			{
				sprintf(com_ptr,"r%02x ",byte);
				com_ptr+=4;
			}
		#endif
	return byte;
}

unsigned char PutTxByteToUart(unsigned char tx_byte)
{
	
	while( !(*(volatile unsigned short int *)UTX & 0x8000) );
		//wait until the FIFO is empty
	*((volatile unsigned char*)UTX +1) = tx_byte;
		#if	_DEBUG_
			if(com_ptr+4<com_buf+DEBUG_BUF_SIZE && com_ptr>=com_buf)
			{
				sprintf(com_ptr,"t%02x ",tx_byte);
				com_ptr+=4;
			}
		#endif
	while( *(volatile unsigned short int *)UTX & 0x0400); //wait until all bit is out
	*(volatile unsigned short int *)STPWCH = 3;		//to prevent system from sleeping

	DelayMilliSecond(1);
	if( *(volatile unsigned char *)URX & 0x20)
	{
		tx_byte =  *( (volatile unsigned char *)URX+1); //discard the byte which is sent itself
		return 1;
	}
	DelayMilliSecond(1);
	if( *(volatile unsigned char *)URX & 0x20)
	{
		tx_byte =  *( (volatile unsigned char *)URX+1); //discard the byte which is sent itself
		return 1;
	}
	DelayMilliSecond(1);
	if( *(volatile unsigned char *)URX & 0x20)
	{
		tx_byte =  *( (volatile unsigned char *)URX+1); //discard the byte which is sent itself
		return 1;
	}
	return 1;
}


void ClearUartIntFlag()
{
	*((volatile unsigned char *)ISR+3) &= ~0x04; // clear UART interrupt status
}

void LockUart(void)
{
	sgLockFlag = 1;
}

void UnlockUart(void)
{
	sgLockFlag = 0;
}

unsigned short int IsUartLocked(void)
{
	return sgLockFlag;
}

/******************************************************************************************
名  稱:unsigned char ReceiveInTime(unsigned char *bytePtr, unsigned short int time_limit)
功  能:在規定的是時間內等待接收一個字節,如收到,存入bytePtr中后立即返回1,否則超時返回0。
參  數:bytePtr: 存放接收字節的指針
		time_limit: 超時時限
返回值:成功接收返回1,否則返回0
*******************************************************************************************/
unsigned char ReceiveInTime(unsigned char *bytePtr, unsigned short int time_limit)
{// receive one byte within time_limit, unit of time_limit: millisecond
 // return 1 if received one byte normally, otherwise return 0;

	volatile unsigned char *ptr1,*ptr2;
	unsigned short timeout;

#if __TURBOC__
	unsigned char test[]={0x01,0x05,0x11,
						  0x6C,0x0,0xF1,0x0,0x60,0x0,0x60,0x0,0x59,0x0,0xf0,0xff,
						  0x6C,0x0,0x60,0x0,0xF1,0x0,0x3C,0x0,0x08,0x0,0x0B,0x0,0xf0,0xff,
						  0x6C,0x0,0xF1,0x0,0x60,0x0,0x7C,0x0,0x08,0x0,0x00,0x0,0x8f,0x0,0x1f,0x0,0x1e,0x0,0x2a,0x0,0xf0,0xff,
						  0x6C,0x0,0xF1,0x0,0x60,0x0,0x7C,0x0,0x15,0x0,0x35,0x0,0x32,0x0,0x57,0x0,0x34,0x0,0x59,0x0,0x53,0x0,0x0b,0x0,0xf0,0xff,
						  0x6C,0x0,0xF1,0x0,0x60,0x0,0x3C,0x0,0x84,0x0,0xB2,0x0,0xf0,0xff
						};
	static int i=0;
	*bytePtr = test[i++];
	if(i>=sizeof(test)) 
	{
		i = 0;
		return 0;
	}
	else
		return 1;
#endif
	if(!IsUartLocked())      //如果未進入空閑幀交換狀態,則計數器清零
		ResetTimerCounter();
	timeout = UART_LOCKED_TIMEOUT;
	
	while(IsUartLocked())   
	{
		DelayMilliSecond(1);
		timeout--;
		if(!timeout)	return 0;
	}

	ptr1 = (volatile unsigned char *)URX;
	ptr2 = ptr1 + 1;
	do
	{
		ResetTimerCounter();
		if( *ptr1 &  0x20)
		{
			*bytePtr = *ptr2;
		#if	_DEBUG_
			if(com_ptr+4<com_buf+DEBUG_BUF_SIZE && com_ptr>=com_buf)
			{
				sprintf(com_ptr,"R%02X ",*bytePtr);
				com_ptr+=4;
			}
		#endif
			return 1;
		}
		DelayMilliSecond(1);
		if(time_limit)	time_limit--;
	}
	while(time_limit);

	return 0;
}


/******************************************************************************************
名  稱:unsigned short SendOneFullByte(unsigned char uartbyte)
功  能:將指定的字節放入UART的發送寄存器,并等待該字節完全從TXD腳上發送完畢,然后檢查接收寄
        存器是否收到自身發出的字節,如收到則丟棄,沒收到則超過3毫秒亦返回。
參  數:待發送的字節
返回值:成功返回1,否則返回0
*******************************************************************************************/
unsigned short SendOneFullByte(unsigned char uartbyte)
{	//Send a byte and wait until the transmitting completes,
	//如在2ms內收到字節,則認為是自己發出的字節,收到后丟棄。
	volatile unsigned char tmp;
	unsigned short timeout;

#if __TURBOC__
	return;
#endif

	if(!IsUartLocked())      //如果未進入空閑幀交換狀態,則計數器清零
		ResetTimerCounter();
	timeout = UART_LOCKED_TIMEOUT;
	
	while(IsUartLocked())   
	{
		DelayMilliSecond(1);
		timeout--;
		if(!timeout)	return 0;
	}

	*(volatile unsigned char *)PESEL &= ~0x20;  //PE5(TXD) as TXD

	while( !(*(volatile unsigned short int *)UTX & 0x8000) );
		//wait until the FIFO is empty

	*((volatile unsigned char*)UTX +1) = uartbyte;
	DelayMilliSecond(1);
	while( *(volatile unsigned short int *)UTX & 0x0400);
	//wait untill Uart transmitter is not busy


	*(volatile unsigned short int *)STPWCH = 3;		//to prevent system from sleeping

	#if	_DEBUG_
		if(com_ptr+4<com_buf+DEBUG_BUF_SIZE && com_ptr>=com_buf)
		{
			sprintf(com_ptr,"T%02X ",uartbyte);
			com_ptr+=4;
		}
	#endif

	DelayMilliSecond(1);
	ResetTimerCounter();

	timeout = 3;
	while(timeout)
	{
		if( *(volatile unsigned char *)URX & 0x20)
		{
			tmp =  *( (volatile unsigned char *)URX+1); //discard the byte which is sent itself
		/*#if	_DEBUG_
			if(com_ptr+4<com_buf+DEBUG_BUF_SIZE && com_ptr>=com_buf)
			{
				sprintf(com_ptr,"D%02X ",tmp);
				com_ptr+=4;
			}
		#endif*/
			return 1;
		}
		DelayMilliSecond(1);
		timeout--;
	}
	return 1;
}

void SendOneByteWithoutReceive(unsigned char uartbyte)
{	//Send a byte and wait until the transmitting completes,
	//如在2ms內收到字節,則認為是自己發出的字節,收到后丟棄。

	*(volatile unsigned char *)PESEL &= ~0x20;  //PE5(TXD) as TXD

	while( !(*(volatile unsigned short int *)UTX & 0x8000) );
		//wait until the FIFO is empty

	*((volatile unsigned char*)UTX +1) = uartbyte;
	DelayMilliSecond(1);
	while( *(volatile unsigned short int *)UTX & 0x0400);
	//wait untill Uart transmitter is not busy
	return;
}

/*****************************************************************************************
名  稱:unsigned char SetUartBaudRate(float  divider)
功  能:按指定的分頻因子設定UART的波特率
參  數:指定的分頻因子
返回值:設置成功返回1,否則返回0
******************************************************************************************/
unsigned char SetUartBaudRate(float  divider)
{//return value: 0 == fail, 1 == success
#if __TURBOC__
	return 1;
#endif

	*(volatile unsigned short *)UBAUD &= ~0x0800;  //set baud clk source: system clk 

	if(divider <= 255.5f) 
	{   // use non integral prescaler
		unsigned char stepvalue;

		*(volatile unsigned short *)UBAUD &= ~0x0700;//yth 2004.07.05
		*(volatile unsigned short *)NIPR |= 0x8000;
		if(divider >= 128.0f)
		{   //step: 1/2;  tap selection(bit 10,9,8): 110
			*(volatile unsigned short *)NIPR |=  0x0600;
			*(volatile unsigned short *)NIPR &= ~0x0100;
			divider -= 128.0f;
			divider *= 2.0f;
			divider += 0.5f;
			stepvalue = (unsigned char)divider;
			*(volatile unsigned char *)((unsigned char *)NIPR + 1) = stepvalue;
			return 1;
		}
		else if(divider >= 64.0f)
		{   //step: 1/4;  tap selection(bit 10,9,8): 101
			*(volatile unsigned short *)NIPR |=  0x0500;
			*(volatile unsigned short *)NIPR &= ~0x0200;
			divider -= 64.0f;
			divider *= 4.0f;
			divider += 0.5f;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级精品在线| 亚洲精品免费在线播放| 国产精品美女久久久久久久| 午夜久久久久久久久久一区二区| 国产精品综合一区二区| 欧美视频一区在线| 欧美激情综合网| 日韩精品久久久久久| 色综合视频一区二区三区高清| 精品电影一区二区三区| 亚洲大片免费看| eeuss鲁片一区二区三区在线观看| 欧美理论片在线| 一区二区三区欧美日韩| 成人精品一区二区三区四区| 欧美一区二区三区免费在线看| 亚洲欧美另类在线| 丁香五精品蜜臀久久久久99网站| 91精品国产色综合久久| 午夜视黄欧洲亚洲| 色www精品视频在线观看| 国产精品嫩草影院av蜜臀| 精品一区二区日韩| 欧美大片日本大片免费观看| 亚洲成人精品一区二区| 欧美影院一区二区三区| 亚洲激情中文1区| 99国产精品国产精品久久| 中文字幕在线不卡一区| 国产精品影视在线| 久久这里只有精品首页| 国产伦精品一区二区三区视频青涩| 欧美一级精品在线| 久久aⅴ国产欧美74aaa| 日韩午夜电影av| 国模一区二区三区白浆| 精品国产凹凸成av人导航| 黄页视频在线91| 亚洲精品在线电影| 国产成人精品一区二区三区四区| 欧美成人aa大片| 韩国v欧美v亚洲v日本v| 久久精品在线观看| eeuss鲁一区二区三区| 亚洲色图视频网站| 色婷婷综合视频在线观看| 一区二区三区在线视频播放| 在线观看不卡一区| 日韩av中文字幕一区二区三区 | 欧美刺激午夜性久久久久久久 | 久久精品国产精品青草| 337p粉嫩大胆噜噜噜噜噜91av| 激情偷乱视频一区二区三区| 国产精品私人影院| 欧美性淫爽ww久久久久无| 亚洲超碰精品一区二区| 精品国产91九色蝌蚪| 粉嫩av一区二区三区| 亚洲理论在线观看| 欧美一区二区三区白人| 国产激情精品久久久第一区二区| 国产精品水嫩水嫩| 欧美老女人第四色| 国产精品乡下勾搭老头1| 亚洲男人电影天堂| 日韩一区二区电影网| www.日韩av| 青青草97国产精品免费观看无弹窗版| 国产亚洲综合色| 欧美日韩中文字幕一区| 国产主播一区二区| 亚洲成a人片在线观看中文| 久久久久久综合| 欧美日韩在线综合| 国产成人a级片| 午夜精品福利一区二区三区蜜桃| 精品乱人伦一区二区三区| 91丨porny丨最新| 久久99精品国产.久久久久| 亚洲少妇中出一区| 久久免费美女视频| 欧美精品在线视频| 97久久精品人人澡人人爽| 久久精品国产精品亚洲综合| 一区二区三区欧美| 中文字幕欧美激情一区| 欧美一区二区精品在线| 色先锋aa成人| 播五月开心婷婷综合| 麻豆精品一区二区综合av| 一区二区三区精品视频| 中文在线一区二区| 久久久久88色偷偷免费| 日韩精品中午字幕| 欧美日韩成人综合在线一区二区 | 韩国三级在线一区| 午夜激情一区二区三区| |精品福利一区二区三区| 精品成人佐山爱一区二区| 91麻豆精品国产91久久久久| 欧美在线观看视频一区二区| 成人av中文字幕| 国产成人免费在线视频| 免费观看在线综合| 日本 国产 欧美色综合| 午夜在线电影亚洲一区| 亚洲愉拍自拍另类高清精品| 亚洲欧美日韩系列| 国产精品国产自产拍高清av| 国产无一区二区| 久久嫩草精品久久久久| 久久久影院官网| 337p日本欧洲亚洲大胆精品| 精品少妇一区二区三区在线播放| 91精品国产综合久久精品app| 欧美亚洲自拍偷拍| 欧美日韩中文另类| 91精品国产色综合久久| 日韩免费高清av| 久久色在线视频| 国产欧美一区二区三区沐欲| 国产亚洲综合在线| 中文字幕亚洲区| 亚洲精品一二三| 亚洲福利一区二区三区| 日本欧美大码aⅴ在线播放| 久久99精品久久只有精品| 精品一区二区三区影院在线午夜 | 日本不卡一区二区三区高清视频| 石原莉奈在线亚洲三区| 奇米888四色在线精品| 另类小说一区二区三区| 国产91综合一区在线观看| av影院午夜一区| 欧美综合一区二区三区| 欧美喷水一区二区| 久久―日本道色综合久久 | 欧美成人一区二区三区在线观看| 日韩欧美一级二级三级| 精品国产露脸精彩对白| 中文文精品字幕一区二区| 亚洲天堂成人网| 轻轻草成人在线| 国产精品123| 欧洲国产伦久久久久久久| 欧美一级黄色片| 国产精品久久久久久户外露出| 亚洲自拍另类综合| 蜜桃视频第一区免费观看| 国产福利电影一区二区三区| 99re热视频精品| 日韩亚洲欧美在线| 国产精品久久精品日日| 亚洲国产人成综合网站| 黑人精品欧美一区二区蜜桃| 91丨porny丨最新| 欧美成va人片在线观看| 国产精品超碰97尤物18| 日韩影院精彩在线| av男人天堂一区| 日韩一区二区三区在线视频| 国产精品灌醉下药二区| 男男gaygay亚洲| 99v久久综合狠狠综合久久| 日韩精品中文字幕在线不卡尤物 | 一本久久精品一区二区| 精品国一区二区三区| 一区二区三区免费网站| 国产成人午夜片在线观看高清观看| 在线免费观看日韩欧美| 国产色产综合产在线视频| 亚洲福利一二三区| 97久久久精品综合88久久| 久久婷婷成人综合色| 亚洲综合激情小说| aaa欧美日韩| 精品欧美一区二区三区精品久久| 亚洲精品一二三| 成人黄色小视频在线观看| 日韩免费看的电影| 午夜精品福利一区二区蜜股av | 自拍偷拍国产精品| 国产在线精品一区二区夜色 | 91精品福利视频| 国产日产欧美一区| 蜜臀久久99精品久久久久久9 | 久久午夜羞羞影院免费观看| 日韩高清一区二区| 在线观看欧美黄色| 亚洲色图另类专区| 不卡av在线免费观看| 国产日韩欧美一区二区三区乱码 | 日韩av成人高清| 欧美军同video69gay| 一区二区三区在线不卡| 99久久er热在这里只有精品15| 精品一区二区成人精品| 2021国产精品久久精品| 午夜久久久影院| 在线视频一区二区三|