环境:MAPLAB X_IDE V4.00,编译器:xc16,下载器:pickit3,单片机:dspic30f4011问题:这是一个例程程序,第一次使用4011的UART,但是程序下进去后oled屏就显示Welcome在没别的显示了。哪位看看程序是什么问题,是不是我没有写数据进去
1,主程序如下:
#include "p30f4011.h"
#include "oled.h"
//配置位
_FOSC(0Xc307);//FCKSM = 00;时钟切换使能 FOS = 0111主振荡器XT晶振模式外部4MHz
_FWDT(0X0000);//关狗
_FBORPOR(0X83A2);//MCLREN使能 欠压2.7V 上电延时16MS
_FGS(0X03);
unsigned char Data;
void Delay_1ms(unsigned int t)//t = 1000大概1s
{
unsigned int i,j;
for(i = 0;i < t;i ++)
for(j = 0;j < 2000;j ++);
}
void System_Init(void)
{
PWMCON1 = 0x0000;//通用IO
TRISE = 0x0000;//设置输出
PORTE = 0x0000;//
}
void UART2_Init(void)
{
U2MODE = 0x0000;//8位数据 无奇偶校验 1停止位
U2MODEbits.UARTEN = 1;//使能UART
U2STA = 0x0000;//状态和控制寄存器
U2BRG = ((64000000/4/16)/9600)-1;//64MHz波特率9600(按照计算公式)
IEC1bits.U2TXIE = 1;//发送中断允许
IPC6bits.U2TXIP = 7;//发送中断优先级7
U2STAbits.UTXEN = 1;// 使能发送
IEC1bits.U2RXIE = 1;//接收中断允许
IPC6bits.U2RXIP = 6;//接收中断优先级6
}
void UART2_TX(unsigned char TXData)//发送数据
{
while (U2STAbits.UTXBF);//U1STAbits.UTXBF
U2TXREG = TXData;
}
unsigned char UART2_RX(void)//接收数据
{
unsigned char RXData;
while (!U2STAbits.URXDA);
RXData = U2RXREG;
return RXData;
}
int main()
{
System_Init();
OLED_Init(); //初始化OLED
OLED_Clear();
UART2_Init();
disn(4,0,55);disn(5,0,69);disn(6,0,76);disn(7,0,67);disn(8,0,79);disn(9,0,77);disn(10,0,69);//Welcome
while(1)
{
UART2_TX(UART2_RX());
Data = UART2_RX();
disn(4,1,Data/10000);disn(5,1,Data%10000/1000);disn(6,1,Data%1000/100);disn(7,1,Data%100/10);disn(8,1,Data%10);
}
}
void __attribute__((__interrupt__, auto_psv)) _U2TXInterrupt(void)//发送中断
{
IFS1bits.U2TXIF = 0; //清中断标志
}
void __attribute__((__interrupt__, auto_psv)) _U2RXInterrupt(void)//接收中断
{
IFS1bits.U2RXIF = 0; //清中断标志
}
|