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

📄 main.c

📁 pic33fj256gp710 uart
💻 C
字号:

# define _dsPIC33fj256gp710_

# include<uart.h>
# include<p33fj256gp710.h>
# include<Delay.h>
//_FOSC(FCKSM_CSECMD & POSCMD_XT);
//_FWDT(FWDTEN_OFF);
//_FBORPOR(FBOR_OFF & MCLR_EN);
//_FGS(GSS_OFF);
//	_FOSCSEL(FNOSC_PRIPLL)			// PLL enabled
//	_FOSC(OSCIOFNC_OFF & POSCMD_XT)	// XT Osc
//	_FWDT(FWDTEN_OFF)				// Disable Watchdog timer
_FOSCSEL(FNOSC_FRCPLL );							// FRC Oscillator with PLL
_FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF  & POSCMD_XT); 
													// Clock Switching and Fail Safe Clock Monitor is disabled
													// OSC2 Pin Function: OSC2 is Clock Output
													// Primary Oscillator Mode: XT oscillator


_FWDT(FWDTEN_OFF); 						            // Watchdog Timer Enabled/disabled by user software
													// (LPRC can be disabled by clearing SWDTEN bit in RCON register
//_FPOR(PWRTEN_OFF);  					 			// Turn off the power-up timers.
_FGS(GCP_OFF); 



# define BAUDRATE 9600
# define FCY      4000000   
# define LF       0X0A
# define CR       0X0D
# define NULL     0X00

//# define BZ1   !PORTGBITS.RG1
char Txdata[] = "UART SUNNY";
unsigned char  TxIndex;
unsigned char RxValue;
/*void InitUART1(void)
{
unsigned int baudvalue;
unsigned int U1MODEvalue;	
unsigned int U1STAvalue;
CloseUART1();

ConfigIntUART1(UART_RX_INT_EN & UART_RX_INT_PR6 & UART_TX_INT_DIS & UART_TX_INT_PR2);
U1MODEvalue = UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_EN_LOOPBACK & 
              UART_EN_ABAUD &UART_NO_PAR_8BIT & UART_1STOPBIT;
U1STAvalue = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE &
             UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
baudvalue = ((FCY/16)/BAUDRATE)-1;
OpenUART1(U1MODEvalue,U1STAvalue,baudvalue);
}
*/
//void InitUART1(void);
/*
 void InitUart(void) 
{   
        // 
        U1MODE = 0x8800 ; 
            Nop();
            Nop();
        U1STA = 0x0400 ; 
            Nop();
            Nop();
        U1BRG =0X019;                                // Baud-Rate = 9600 when Fcy = 4M , BRGH = 0 

       // Ctrl_U1RX = INPUT ; 
       // Ctrl_U1TX = OUTPUT ; 

        IFS0bits.U1RXIF = 0;   
        IFS0bits.U1TXIF = 0; 
        IPC2bits.U1RXIP = 2;                //RXIP 
        IPC3bits.U1TXIP = 3;                 //TXIP 
        IEC0bits.U1RXIE = 1;                //enable Rx interrupt 
        IEC0bits.U1TXIE = 1;                // =0 disable TX interrupt 


}  */
// UART1 Configuration
void cfgUart1(void)
{
    /*UART -1 Mode settings*/
    U1MODE = 0;	
    U1MODEbits.STSEL = 0;           // 1-stop bit
    U1MODEbits.PDSEL = 0;           // No Parity, 8-data bits
    U1MODEbits.BRGH  = 0;           // BRG generates 16 clocks per bit period (16x baud clock, Standard mode)
    U1MODEbits.ABAUD = 0;           // Autobaud Disabled
    U1MODEbits.LPBACK  = 0;         // Loop-Back Enabled
    U1MODEbits.WAKE    = 0;         // No wake up
    U1MODEbits.UEN	= 0;   
         
    U1MODEbits.RTSMD	= 1; 
 	//BAUD Rate Setting of UART1 for 9600
	U1BRG = 0x81;  

    /*UART -1 Status & Control Settings*/
    U1STA = 0;
    U1STAbits.UTXBRK = 0;
    U1STAbits.UTXISEL0 =0;          // Interrupt when a character is transferred to the Transmit Shift Register
    U1STAbits.UTXISEL1 =0;
    U1STAbits.URXISEL =0;           // Interrupt is set when data is transferred from the shift register to RX register

    /*Interrupt Controller Settings*/
    IFS0bits.U1TXIF =0;
    IEC0bits.U1TXIE =0;
    IFS0bits.U1RXIF =0;
    IEC0bits.U1RXIE =0;

        IPC2bits.U1RXIP = 2;                //RXIP 
        IPC3bits.U1TXIP = 3;                 //TXIP 
    //tglPinInit();

}

void __attribute__((__interrupt__))_U1TXInterrupt(void)
{

  //  U1TXREG = Txdata[TxIndex++];
	IFS0bits.U1TXIF = 0;
            Nop();
}

void __attribute__((__interrupt__))_U1RXInterrupt(void)
{
	IFS0bits.U1RXIF = 0;
    RxValue = (char)U1RXREG;
}

int main(void)

{
//unsigned char _XBSS(16) TxIndex;
//static char Txdata[] = {'U','A','R','T','','S','U','N','N','Y',CR,LF,NULL};
//char _XBSS(16) Txdata[] ="UART SUNNY";
// Configure Oscillator to operate the device at 40Mhz
// Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
// Fosc= 4M*40(2*2)=80Mhz for 4M input clock
	PLLFBD=38;					// M=40
	CLKDIVbits.PLLPOST=0;		// N1=2
	CLKDIVbits.PLLPRE=0;		// N2=2
	OSCTUN=0;					// Tune FRC oscillator, if FRC is used

//TRISGBITS.TRISG1 = 0; //SET OUTPUT
//BZ1=1;
LATG=0xffff;
TRISG=0xfffd;

LATF=0xffff;
TRISF=0xfff7;

cfgUart1();
//InitUart();
//InitUART1();

// Enable UART
	U1MODEbits.UARTEN   =1;

// Enable UART Transmission
	U1STAbits.UTXEN = 1;
	U1STAbits.URXISEL0 =0;
	U1STAbits.URXISEL1 =0;
while(1)
	{
 //   BZ1=^BZ1;
    LATGbits.LATG1 =1;
    TxIndex = 0;
    LATGbits.LATG1 = 0;  //buzz
    DelayMs(100);
    LATGbits.LATG1 =1;
//	TxIndex=0;
//	TxIndex=1;
//	TxIndex=2;
//    LATGbits.LATG1 = 0;  //buzz
    DelayMs(100);
    while(Txdata[TxIndex])
    	{
            Nop();
            Nop();
     //     U1TXREG = Txdata[TxIndex++];
			WriteUART1((int)Txdata[TxIndex++]);
            Nop();
            Nop();
    DelayMs(100);
			while(BusyUART1());
       //     LATGbits.LATG1 = 0;  //buzz
		}
	}

}

⌨️ 快捷键说明

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