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

📄 uart.c

📁 dsPIC30F4011 + 4*4 metrix Keypad(flexible pin I/O) + Timer0 service >> MPLAB Project files &
💻 C
字号:
#include  <p30f4011.h>  

//**************************************************************************//

#define  XTFREQ          8000000         		//On-board Crystal frequency
#define  PLLMODE         16               		//On-chip PLL setting
#define  Fcy             XTFREQ*PLLMODE/4        //Fcy =  32MHz   
#define  BAUDRATE        19200       
#define  BRGVAL          ((Fcy/BAUDRATE)/16)-1 

#define  RECV_FIFO_SIZE 	96

volatile unsigned  char 	recv_fifo[RECV_FIFO_SIZE]; 
volatile unsigned  char 	*recv_fifo_head;
volatile unsigned  char 	*recv_fifo_tail;
volatile unsigned  char 	recv_fifo_byte_count; 

volatile int sFTXREG,sFRXREG;

//**************************************************************************//

void __attribute__ ((interrupt, no_auto_psv)) _U2RXInterrupt(void) {
unsigned char temp;

    if(recv_fifo_byte_count < RECV_FIFO_SIZE)
    {
		temp = U2RXREG;
  		*recv_fifo_head = temp;
  		recv_fifo_head++; 

  		if(recv_fifo_head == (recv_fifo + RECV_FIFO_SIZE))
    		recv_fifo_head = recv_fifo; 

  		recv_fifo_byte_count++; 
        IFS1bits.U2RXIF = 0;
	}
    else{
        IEC1bits.U2RXIE = 0;
        IFS1bits.U2RXIF = 0;
    }
}

//**************************************************************************//

unsigned char uart2_getc(void)
{
	unsigned char value;
	value = 0;
	if(recv_fifo_byte_count > 0) 
  	{
   		value = *recv_fifo_tail++; 
		if(recv_fifo_tail == (recv_fifo + RECV_FIFO_SIZE))
			recv_fifo_tail = recv_fifo;
 		recv_fifo_byte_count--;
        IEC1bits.U2RXIE = 1;
  	}
	return(value);
}

//**************************************************************************//

void __attribute__ ((interrupt, no_auto_psv)) _U2TXInterrupt(void) {
    sFTXREG=0;
	IFS1bits.U2TXIF = 0;
    while(U2STAbits.UTXBF)
            ;
}

//**************************************************************************//

void InitUART2(){
	TRISF = 0xC;
	/*** configure U2MODE ***/
	//U2MODEbits.UARTEN = 1;	        // Bit15  TX, RX DISABLED, ENABLE at end of func
	//U2MODEbits.notimplemented;	// Bit14  Unimplemented: Read as 

⌨️ 快捷键说明

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