📄 main.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 + -