源码先贴上来:
串口部分:
#include
#include"uart.h"
sbit LED1=P1^4;
unsigned char a;
unsigned char flag;
void configure_uart0(void)
{
P3_2=0; //485接收模式
S0CON|=0x50; //设置为串口0模式1,使能串口接收
PCON|=0x80;
// PFCON&=0xcf;
AUX|=0x80;
S0RELH =0x03;
S0RELL =0xDC;
IEN0|=0x90; //开总中断和串口中断
// TI = 0; //发送标志初始化
RI = 0;
LED1=1;
}
void uart0_TX(void)
{
P3_2=1; //485发送模式
if(flag==1)
{
flag=0;
S0BUF=a;
while(!TI);
TI=0;
LED1=1;
}
P3_2=0; //485接收模式
}
void uart0_Rec(void) interrupt d_UART0_Vector
{
IEN0&=0xef; //关闭串口0中断
if(RI&&(S0BUF!=0))
{
a=S0BUF;
LED1=0;
flag=1;
RI=0;
}
else
{
TI=0;
}
IEN0|=0x10; //打开串口0中断
}
主函数部分:
#include
#include"uart.h"
void main()
{
configure_uart0();
while(1)
{
uart0_TX();
}
}
问题是这样的:在仿真时候,如果全速运行,在configure_uart0()完成后,串口0的中断标志位RI就自动置1了,RI不应该是单片机接收到数据才置1的吗?请教大神