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

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

?? uartintc.c

?? reading gps data from serial
?? C
字號:
/*********************************************************************
 *
 *   This file implements the functionality of UART with user defined 
 *	 circular buffer. It has the implementation of functions namely 
 *	 UARTIntPutChar, UARTIntGetChar and UARTIntISR . These functions 
 *	 are the core part of UART MPAM module. Additional functions will
 *   be added in future as more desired functionality is identified.
 *   
 *********************************************************************
 * FileName:        UARTIntC.C
 * Dependencies:    UARTIntC.h
 * Processor:       PIC18XXX
 * Compiler:		MCC18
 * Assembler:       MPASMWIN 03.20.07
 * Linker:          MPLINK 3.20
 * Company:         Microchip Technology, Inc.
 *
 * Software License Agreement
 *
 * The software supplied herewith by Microchip Technology Incorporated
 * (the "Company") is intended and supplied to you, the Company抯
 * customer, for use solely and exclusively with products manufactured
 * by the Company. 
 *
 * The software is owned by the Company and/or its supplier, and is 
 * protected under applicable copyright laws. All rights are reserved. 
 * Any use in violation of the foregoing restrictions may subject the 
 * user to criminal sanctions under applicable laws, as well as to 
 * civil liability for the breach of the terms and conditions of this 
 * license.
 
 * THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, 
 * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED 
 * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
 * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, 
 * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR 
 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
 *
 *
 *
 *
 * Author               Date        Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Reddy TE			Sept. 19,2003		Original Release
 * 
 * Reddy TE			Sept. 24,2003		Changed return values of func-
 *										tions to unsigned char
 ********************************************************************/
 
#include "UARTIntC.h"

// target specific file will go here
#include <p18f452.h>

// status flags of receive and transmit buffers
struct status vUARTIntStatus;
		
// variable definitions
#if TXON
unsigned char vUARTIntTxBuffer[TX_BUFFER_SIZE];
unsigned char vUARTIntTxBufDataCnt;
unsigned char vUARTIntTxBufWrPtr;
unsigned char vUARTIntTxBufRdPtr;
#endif

#if	RXON
unsigned char vUARTIntRxBuffer[RX_BUFFER_SIZE];
unsigned char vUARTIntRxBufDataCnt;
unsigned char vUARTIntRxBufWrPtr;
unsigned char vUARTIntRxBufRdPtr;
#endif

/*********************************************************************
 * Function:        	void UARTIntInit(void)
 * PreCondition:    	None
 * Input:           	None
 * Output:          	None
 * Side Effects:    	None
 * Stack Requirements:	1 level deep
 * Overview:        	This function initialises UART peripheral.This
 *						function need to be called before using 
 *						UARTIntPutChar and UARTIntGetChar functions to 
 *                      send and receive the characters.
 ********************************************************************/
void UARTIntInit(void)
{
	// Intialising the status variables and circular buffer 
	// variables .
	#if TXON
		vUARTIntStatus.UARTIntTxBufferFull = 0;
		vUARTIntStatus.UARTIntTxBufferEmpty = 1;	
		vUARTIntTxBufDataCnt = 0;
		vUARTIntTxBufWrPtr = 0;
		vUARTIntTxBufRdPtr = 0;
	#endif
	#if	RXON
		vUARTIntStatus.UARTIntRxBufferFull = 0;
		vUARTIntStatus.UARTIntRxBufferEmpty = 1;
		vUARTIntStatus.UARTIntRxError = 0;
		vUARTIntStatus.UARTIntRxOverFlow = 0;
		vUARTIntRxBufDataCnt = 0;
		vUARTIntRxBufWrPtr = 0;
		vUARTIntRxBufRdPtr = 0;	
	#endif	
	    
    /* Initialising BaudRate value */
		SPBRG = SPBRG_VAL;
		//TXSTAbits.BRGH = BRGH_VAL;
	TXSTAbits.BRGH =0;

	/* Initialising TX/RX port pins */
	#if	TXON
		TRISCbits.TRISC6 = 0;		
	#endif	
	#if RXON
		TRISCbits.TRISC7 = 1;
	#endif

	/* Setting priority */
	#if	TX_PRIORITY_ON
		RCONbits.IPEN = 1;
		IPR1bits.TXIP = 1;
	#else
		IPR1bits.TXIP = 0;
	#endif					
	#if	RX_PRIORITY_ON
		RCONbits.IPEN = 1;
		IPR1bits.RCIP = 1;
	#else
		IPR1bits.RCIP = 0;
	#endif 		

	/* Enabling Transmitter or Receiver */
	#if	TXON
		TXSTAbits.TXEN = 1;
	#endif	
	#if	RXON
		RCSTAbits.CREN = 1;
	#endif
	
	/* Enabling Serial Port	*/
	RCSTAbits.SPEN = 1;
	
	/* Enable the TX and RX. Interrupt */
	#if	TXON
		PIE1bits.TXIE = 1;
	#endif	
	#if	RXON
		PIE1bits.RCIE = 1;
	#endif

	/* Setting Global interrupt pins */	
	#if ((TX_PRIORITY_ON)|(RX_PRIORITY_ON))
	INTCONbits.GIEH = 1;
	INTCONbits.GIEL = 1;
	#else
	INTCONbits.GIE = 1;
	INTCONbits.PEIE = 1;
	#endif
}

/*********************************************************************
 * Function:        	unsigned char UARTIntPutChar(unsigned char)
 * PreCondition:    	UARTIntInit()function should have been called.
 * Input:           	unsigned char
 * Output:          	unsigned char
 *							  0 - single character is successfully 
 *								  added to transmit buffer.
 *							  1 - transmit buffer is full and the 
 *								  character could not be added to 
 *								  transmit buffer.
 *								  
 * Side Effects:    	None
 * Stack Requirements: 	1 level deep
 * Overview:        	This function puts the data in to transmit 
 *						buffer. Internal implementation wise , 
 *						it places the argument data in transmit buffer
 *						and updates the data count and write pointer 
 *						variables. 
 *
 ********************************************************************/
#if	TXON
unsigned char UARTIntPutChar(unsigned char chCharData)
{
	/* check if its full , if not add one */
	/* if not busy send data */
	
	if(vUARTIntStatus.UARTIntTxBufferFull)
		return 0;
   
    //critical code	, disable interrupts
	PIE1bits.TXIE = 0;	
	vUARTIntTxBuffer[vUARTIntTxBufWrPtr] = chCharData;
	vUARTIntStatus.UARTIntTxBufferEmpty = 0;
	vUARTIntTxBufDataCnt ++;
	if(vUARTIntTxBufDataCnt == TX_BUFFER_SIZE)
	vUARTIntStatus.UARTIntTxBufferFull = 1;
	vUARTIntTxBufWrPtr++;	
	if(vUARTIntTxBufWrPtr == TX_BUFFER_SIZE)
		vUARTIntTxBufWrPtr = 0;								
	PIE1bits.TXIE = 1;	
	
	return 1;
}

/*********************************************************************
 * Function:          unsigned char UARTIntGetTxBufferEmptySpace(void)
 * PreCondition:    	UARTIntInit()function should have been called.
 * Input:           	None
 * Output:          	unsigned char
 *								 0  - There is no empty space in 
 *								       transmit buffer.                  
 *							  number - the number of bytes of empty
 *								       space in transmit buffer. 
 *								                  
 *								  
 * Side Effects:    	None
 * Stack Requirements: 	1 level deep
 * Overview:        	This function returns the number of bytes
 *						of free space left out in transmit buffer at
 *						the calling time of this function. It helps  
 *						the user to further write data in to transmit
 *						buffer at once, rather than checking transmit
 *                      buffer is full or not with every addition of
 *                      data in to the transmit buffer.
 ********************************************************************/
unsigned char UARTIntGetTxBufferEmptySpace(void)
{
	if(vUARTIntTxBufDataCnt < TX_BUFFER_SIZE)
	  	return(TX_BUFFER_SIZE-vUARTIntTxBufDataCnt);
  	else
  		return 0;
}

#endif

/*********************************************************************
 * Function:        	unsigned char UARTIntGetChar(unsigned char*)
 * PreCondition:    	UARTIntInit()function should have been called.
 * Input:           	unsigned char*
 * Output:          	unsigned char
 *							  0 - receive buffer is empty and the 
 *								  character could not be read from
 *								  the receive buffer.
 *							  1 - single character is successfully 
 *							      read from receive buffer.
 * Side Effects:    	None
 * Stack Requirements: 	1 level deep
 * Overview:        	This function reads the data from the receive
 *						buffer. It places the data in to argument and
 *						updates the data count and read pointer 
 *						variables of receive buffer.
 *
 ********************************************************************/
#if	RXON
unsigned char UARTIntGetChar(unsigned char *chTemp)
{
	
	if( vUARTIntStatus.UARTIntRxBufferEmpty)
		return 0;

	//critical code, disabling interrupts here keeps the
	//access pointer values proper.
	PIE1bits.RCIE = 0;  
	vUARTIntStatus.UARTIntRxBufferFull = 0;
	*chTemp = vUARTIntRxBuffer[vUARTIntRxBufRdPtr];
	vUARTIntRxBufDataCnt--;
	if(vUARTIntRxBufDataCnt == 0 )
		vUARTIntStatus.UARTIntRxBufferEmpty = 1;
	vUARTIntRxBufRdPtr++;
	if(vUARTIntRxBufRdPtr == RX_BUFFER_SIZE)
		vUARTIntRxBufRdPtr = 0;
	PIE1bits.RCIE = 1;
	return 1;
}

/*********************************************************************
 * Function:        	unsigned char UARTIntGetRxBufferDataSize(void)
 * PreCondition:    	UARTIntInit()function should have been called.
 * Input:           	None
 * Output:          	unsigned char 
 *								        number - the number of bytes
 *								             of data in receive buffer. 
 * Side Effects:    	None
 * Stack Requirements: 	1 level deep
 * Overview:        	This function returns the number of bytes
 *						of data available in receive buffer at
 *						the calling time of this function. It helps  
 *						the user to read data from receive buffer
 *						at once, rather than checking receive buffer
 *                      is empty or not with every read of data from
 *                      receive buffer.
 ********************************************************************/
unsigned char UARTIntGetRxBufferDataSize(void)
{
	return vUARTIntRxBufDataCnt;				
}

#endif

/*********************************************************************
 * Function:        	void UARTIntISR(void)
 * PreCondition:    	UARTIntInit() function should have been called.
 * Input:           	None
 * Output:          	None 
 * Side Effects:    	None
 * Stack Requirements: 	2 level deep
 * Overview:        	This is the Interrupt service routine which is
 *						called in the user application's ISR portion.
 *						This function actually sends the data from
 *						transmit buffer to USART and updates the data
 *						count and read pointer variables of transmit 
 *						buffer. For the receive portion, it reads the
 *						data from USART and places the data in to 
 *						receive buffer (if no errors occured) and
 *						updates data count and write pointer variables
 *						of receive buffer. If the receive buffer is 
 *						full and it receives more data error flag is 
 *						set.If frame errors(FERR) occur	it sets the
 *						error flag. If over flow errors(OERR) occurs,
 *						it clears and sets the CREN bit, so that
 *						USART can receive further data.
 ********************************************************************/
void UARTIntISR(void)
{
	#if	RXON
		unsigned char chTemp;
	#endif
	#if TXON 
		if(PIR1bits.TXIF & PIE1bits.TXIE)
		{		
			if(!vUARTIntStatus.UARTIntTxBufferEmpty)
			{			
				TXREG = vUARTIntTxBuffer[vUARTIntTxBufRdPtr];									
				if(vUARTIntStatus.UARTIntTxBufferFull)
					vUARTIntStatus.UARTIntTxBufferFull = 0;				
				vUARTIntTxBufDataCnt--;
				if(vUARTIntTxBufDataCnt == 0)
				vUARTIntStatus.UARTIntTxBufferEmpty = 1;				
				vUARTIntTxBufRdPtr++;
				if(vUARTIntTxBufRdPtr == TX_BUFFER_SIZE)
					vUARTIntTxBufRdPtr = 0;				
			}
			else
			{   
				PIE1bits.TXIE = 0;				
			}
		}
	#endif	
	#if	TXON_AND_RXON
		else if( PIR1bits.RCIF & PIE1bits.RCIE)		
	#elif TXOFF_AND_RXON
		if( PIR1bits.RCIF & PIE1bits.RCIE)
	#endif
	    #if	RXON
			{	
				if(RCSTAbits.FERR)   /* FERR error condition */
				{ 
					chTemp = RCREG;
					vUARTIntStatus.UARTIntRxError = 1;				
				}
				else if (RCSTAbits.OERR) /* OERR error condition */
				{					
					RCSTAbits.CREN = 0;
					RCSTAbits.CREN = 1;
					chTemp = RCREG;							
					vUARTIntStatus.UARTIntRxError = 1;								
				}
				else if ( vUARTIntStatus.UARTIntRxBufferFull) 
				{ 
					chTemp = RCREG;
					vUARTIntStatus.UARTIntRxOverFlow = 1;
				}		 
				else if(!vUARTIntStatus.UARTIntRxBufferFull)
				{	
					vUARTIntStatus.UARTIntRxOverFlow = 0;								
					vUARTIntStatus.UARTIntRxBufferEmpty = 0;
					vUARTIntRxBuffer[vUARTIntRxBufWrPtr] = RCREG;
					vUARTIntRxBufDataCnt ++;
					if(vUARTIntRxBufDataCnt == RX_BUFFER_SIZE)
					 	vUARTIntStatus.UARTIntRxBufferFull = 1;
					vUARTIntRxBufWrPtr++;
					if(vUARTIntRxBufWrPtr == RX_BUFFER_SIZE)
						vUARTIntRxBufWrPtr = 0; 						
				}	
				
			}
  		#endif		
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲va欧美va国产va天堂影院| 精品日产卡一卡二卡麻豆| 欧美日本在线观看| 日韩亚洲欧美成人一区| 国产亚洲一二三区| 亚洲女与黑人做爰| 免费观看在线综合色| 国产成人av福利| 欧洲一区二区三区在线| 日韩精品一区二区三区视频在线观看| 国产精品女同一区二区三区| 亚洲一本大道在线| 国产黄色精品视频| 欧美日本免费一区二区三区| 国产午夜精品一区二区三区嫩草 | 国产成人免费视频一区| 在线影视一区二区三区| 精品国产一区二区三区av性色 | 日本精品裸体写真集在线观看 | 国产一区二区免费视频| 在线精品亚洲一区二区不卡| 久久久噜噜噜久久人人看| 亚洲一区在线观看网站| 国产高清精品久久久久| 欧美日韩高清一区二区| 国产精品热久久久久夜色精品三区 | 老司机精品视频线观看86| 不卡的电影网站| 欧美不卡视频一区| 亚洲一区二区在线观看视频| 国产一区视频网站| 制服丝袜中文字幕一区| 一区二区三区在线不卡| 国产91丝袜在线播放| 日韩欧美一级二级三级久久久| 玉米视频成人免费看| 国产**成人网毛片九色| 日韩午夜在线播放| 亚州成人在线电影| 色偷偷成人一区二区三区91 | 欧美最猛黑人xxxxx猛交| 国产女同性恋一区二区| 久久精品久久精品| 5858s免费视频成人| 亚洲免费在线看| eeuss鲁片一区二区三区在线观看| 欧美成人精精品一区二区频| 亚洲成人动漫在线免费观看| 色哟哟一区二区| 日韩伦理电影网| 成人性生交大片免费看视频在线 | 国产乱码精品一区二区三| 这里只有精品视频在线观看| 一区二区三区欧美| 粉嫩av一区二区三区粉嫩| 久久精品在这里| 精品一区二区国语对白| 91精品国产综合久久久久久久久久 | 国产成人免费视频精品含羞草妖精 | 亚洲自拍偷拍欧美| 色94色欧美sute亚洲线路一久| 国产精品久久久99| 粉嫩av一区二区三区在线播放| 久久久久久久久岛国免费| 久久se这里有精品| 精品精品国产高清a毛片牛牛 | 欧美一二三在线| 日韩av电影一区| 日韩欧美一区二区久久婷婷| 蜜乳av一区二区| 日韩三级免费观看| 久久av中文字幕片| 久久综合中文字幕| 国产乱码精品一品二品| 久久精品水蜜桃av综合天堂| 国产不卡在线播放| 中文字幕视频一区二区三区久| 97久久精品人人澡人人爽| 中文字幕日本乱码精品影院| 99精品久久只有精品| 亚洲欧美成人一区二区三区| 在线视频中文字幕一区二区| 一区二区不卡在线播放| 欧美日韩视频一区二区| 免费高清在线视频一区·| 日韩美女一区二区三区四区| 久草中文综合在线| 国产香蕉久久精品综合网| 丰满岳乱妇一区二区三区| 亚洲人成伊人成综合网小说| 在线免费观看日韩欧美| 日韩一区精品字幕| 2022国产精品视频| 成人av在线电影| 成人动漫一区二区在线| 中文字幕色av一区二区三区| 欧美在线看片a免费观看| 奇米影视在线99精品| 国产三级精品三级在线专区| 91麻豆免费看| 日韩 欧美一区二区三区| 精品99999| av亚洲产国偷v产偷v自拍| 亚洲成av人片观看| 久久婷婷成人综合色| 91在线观看地址| 日韩电影在线一区二区| 欧美激情综合网| 欧美在线视频你懂得| 久久精品国产77777蜜臀| 国产精品麻豆久久久| 欧美影视一区二区三区| 韩国欧美国产1区| 一区二区三区自拍| 精品国产青草久久久久福利| 99久久综合国产精品| 婷婷成人综合网| 国产精品萝li| 日韩欧美国产一二三区| 91一区二区三区在线播放| 免费美女久久99| 亚洲天堂av一区| 精品国产露脸精彩对白 | 午夜久久久久久| 久久亚洲综合av| 欧美性一二三区| 成人性视频免费网站| 免费看日韩精品| 一区二区三区欧美| 久久久久亚洲蜜桃| 911精品国产一区二区在线| 国产成人综合亚洲网站| 亚洲chinese男男1069| 欧美激情一区二区三区| 欧美高清视频一二三区 | 一区二区三区四区在线播放| 精品国产乱码91久久久久久网站| 91麻豆.com| 国产精品一品二品| 午夜精品久久久久久久久久| 国产精品理论在线观看| 日韩限制级电影在线观看| 色老头久久综合| 国产成人精品午夜视频免费| 日本色综合中文字幕| 亚洲激情在线播放| 国产精品每日更新在线播放网址| 精品久久人人做人人爽| 欧美午夜一区二区三区免费大片| 成人h动漫精品一区二区| 黑人精品欧美一区二区蜜桃| 视频一区欧美精品| 亚洲精品免费在线观看| 国产精品家庭影院| 久久久精品黄色| 日韩视频免费直播| 91.xcao| 欧美人与z0zoxxxx视频| 在线观看一区日韩| 91在线观看视频| 91亚洲国产成人精品一区二三| 国产成人日日夜夜| 国产乱码字幕精品高清av| 老色鬼精品视频在线观看播放| 亚洲bdsm女犯bdsm网站| 亚洲第一搞黄网站| 亚洲国产另类av| 国产91精品免费| 精品一区二区三区在线观看国产 | 91麻豆精品国产91久久久资源速度| 色综合av在线| 一本到一区二区三区| 91在线无精精品入口| caoporn国产一区二区| 国产一区啦啦啦在线观看| 极品美女销魂一区二区三区| 蜜臀久久久久久久| 蜜臀久久99精品久久久久宅男| 日本成人超碰在线观看| 欧美bbbbb| 久久激五月天综合精品| 久久成人久久爱| 国产在线不卡一卡二卡三卡四卡| 精品亚洲成av人在线观看| 国产精品一级片| 豆国产96在线|亚洲| av中文字幕一区| 在线观看免费成人| 欧美乱熟臀69xxxxxx| 日韩一二三区视频| 26uuu国产在线精品一区二区| 亚洲精品在线一区二区| 欧美国产日韩精品免费观看| 国产精品初高中害羞小美女文 | 在线视频欧美精品| 88在线观看91蜜桃国自产| 欧美va亚洲va香蕉在线| 国产亚洲午夜高清国产拍精品| 中文幕一区二区三区久久蜜桃| 亚洲人午夜精品天堂一二香蕉|