这个不是太清楚,1829吗,刚好我写过
/*********************************************************************************
* UART1初始化函数
*
* 说明: 完成UART1初始化;8bits发送,8bits接收。
*
* 参数: 无;
*
* 返回: 无;
*
* 注意: 有特殊情况在这说明,比如被中断函数调用。
*********************************************************************************/
void UART1Init(void)
{
APFCON0bits.RXDTSEL=0;
APFCON0bits.TXCKSEL=0;
ANSELBbits.ANSB7=0;//0数字输入
TRISBbits.TRISB7=0; //TX
ANSELBbits.ANSB5=0;//0数字输入
TRISBbits.TRISB5=1;//RX
TXSTA = 0B00100100;// |CSRC|TX9|TXEN|SYNC|SENDB|BRGH|TRMT|TX9D|
RCSTA = 0B10010000;// |SPEN|RX9|SREN|CREN|ADDEN|FERR|OERR|RX9D|
/*************************************************************/
//16位/异步模式波特率
// Desired Baud Rate = FOSC /(4 ([SPBRGHx:SPBRGx] + 1))
// [SPBRGHx:SPBRGx] = ((FOSC /Desired Baud Rate)/4) - 1
/*************************************************************/
BAUDCON = 0B00001000;// |ABDOVF|RCIDL|RXDTP|TXCKP|BRG16|?|WUE|ABDEN|
SPBRGH=0;
SPBRGL=8;//查表得取34时,波特率为114290,误差为-0.79%
PIR1bits.TXIF=0;//清除标志位
PIR1bits.RCIF=0;
PIE1bits.RCIE=1; //使能串口1中断
// IPR1bits.RC1IP=1; //中断优先级,1=高优先级
//开中断
// RCONbits.IPEN = 1; //开中断优先级
// INTCONbits.GIEH = 1;
// INTCONbits.GIEL = 1;
}
/*********************************************************************************
* UART1发送字节函数
*
* 说明: UART1发送字节;
*
* 参数: DATA 需发送字节;
*
* 返回: 无;
*
* 注意: 有特殊情况在这说明,比如被中断函数调用。
*********************************************************************************/
void UART1Send_Byte(unsigned char DATA)
{
TXREG = DATA;
while(PIR1bits.TXIF==0);//等待发送完成
PIR1bits.TXIF=0;//清除标志位
NOP();
}
/*********************************************************************************
* UART1发送字函数
*
* 说明: UART1发送字;
*
* 参数: Data 需发送字;
*
* 返回: 无;
*
* 注意: 有特殊情况在这说明,比如被中断函数调用。
*********************************************************************************/
void UART1Send_Word(unsigned int DATA)
{
unsigned char tempD;
tempD=0x00ff&(DATA>>8);
UART1Send_Byte(tempD);
// Delay_ms(1);
tempD=DATA & 0x00ff;
UART1Send_Byte(tempD);
}
/*********************************************************************************
* UART1发送多字节函数
*
* 说明: UART1发送多字节;
*
* 参数: *pData 数组首地址,n 字节个数;
*
* 返回: 无;
*
* 注意: 有特殊情况在这说明,比如被中断函数调用。
*********************************************************************************/
void UART1Send_nByte(unsigned char *pData,unsigned int n)
{
while(n--)
{
TXREG = *pData++;
while(PIR1bits.TXIF==0);//等待发送完成
PIR1bits.TXIF=0;//清除标志位
// Delay_ms(1);
}
}
/*********************************************************************************
* UART1发送字符串函数
*
* 说明: UART1发送字符串;
*
* 参数: *pData 字符串地址;
*
* 返回: 无;
*
* 注意: 有特殊情况在这说明,比如被中断函数调用。
*********************************************************************************/
void UART1Send_String(char *pData)
{
while(*pData!='\0')
{
TXREG = *pData++;
while(PIR1bits.TXIF==0);//等待发送完成
PIR1bits.TXIF=0;//清除标志位
}
}
|