Massic 2016-12-09 06:44 采纳率: 0%
浏览 3617
已结题

串口中断接收标志位在初始化后就置1

源码先贴上来:

串口部分:
#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的吗?请教大神

  • 写回答

1条回答 默认 最新

  • shen_wei 2016-12-09 09:20
    关注
     IEN0|=0x90; //开总中断和串口中断  ,中断开启要么是接受模式,要么是发送模式。。
    

    你可以去看你芯片的手册,看看RI的定义。。。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog